I always forget what strict weak ordering means, but it's quite simple, actually.

My explanation is based on the Programming Conversation of last week and I hope this will help me remember the next time I hear about this.

Let's start with ordering. A relation is an ordering if it is transitive.

```
ordering --> for all a, b, c: r(a, b) and r(b, c) => r(a, c)
```

And now `strict`

.

```
strict --> for all a: !r(a, a)
```

This means that for a strict relation comparing a with itself will never be
true. An example of `r`

that is strict is `<`

. A value will never be less than
itself.

The complement of `strict`

is `reflexive`

.

```
reflexive --> for all a: r(a, a)
```

This means that for a strict relation comparing a with itself will always be true. An example of relation that is reflexive is equality.

```
total --> for all a, b: r(a, b) or r(b, a) or a = b
weak --> for all a, b: r(a, b) or r(b, a) or (!r(a, b) and !(r(b, a))
```

Total ordering means that two objects relate to each other in one of three
ways: `a < b`

or `b < a`

or `a = b`

.

Weak ordering means the two objects relatie to each other in one of three
ways: `a < b`

or `b < a`

or `( !(a < b) && !(b < a) )`

.