Type classes related to Ord
#
This file provides several typeclasses encode properties of an Ord
instance. For each typeclass,
there is also a variant that does not depend on an Ord
instance and takes an explicit comparison
function cmp : α → α → Ordering
instead.
A typeclass for comparison functions cmp
for which cmp a a = .eq
for all a
.
Comparison is reflexive.
A typeclasses for ordered types for which compare a a = .eq
for all a
.
Equations
A typeclass for functions α → α → Ordering
which are oriented: flipping the arguments amounts
to applying Ordering.swap
to the return value.
Swapping the arguments to
cmp
swaps the outcome.
Instances
- Array.instOrientedCmpCompareLex
- Array.instOrientedOrd
- Fin.instOrientedOrd
- List.instOrientedCmpCompareLex
- List.instOrientedOrd
- Option.instOrientedOrd
- Std.OrientedCmp.opposite
- Std.OrientedOrd.opposite
- Std.Time.Internal.Bounded.instOrientedOrd
- Std.Time.Internal.instOrientedOrdUnitVal
- Std.Time.instOrientedOrdHourMarker
- Std.Time.instOrientedOrdValidDate
- Std.instOrientedCmpCompareLex
- Std.instOrientedCmpCompareOnOfOrientedOrd
- Std.instOrientedOrdProd
- Vector.instOrientedCmpCompareLex
- Vector.instOrientedOrd
A typeclass for types with an oriented comparison function: flipping the arguments amounts to
applying Ordering.swap
to the return value.
Equations
A typeclass for functions α → α → Ordering
which are transitive.
Transitivity of
cmp
, expressed viaOrdering.isLE
.
Instances
- Array.instTransCmpCompareLex
- Array.instTransOrd
- BitVec.instTransOrd
- Bool.instTransOrd
- Char.instTransOrd
- Fin.instTransOrd
- ISize.instTransOrd
- Int.instTransOrd
- Int16.instTransOrd
- Int32.instTransOrd
- Int64.instTransOrd
- Int8.instTransOrd
- List.instTransCmpCompareLex
- List.instTransOrd
- Nat.instTransOrd
- Option.instTransOrd
- Std.Time.Day.Ordinal.instTransOrdOfYear
- Std.Time.Day.instTransOrdOffset
- Std.Time.Day.instTransOrdOrdinal
- Std.Time.Hour.instTransOrdOffset
- Std.Time.Hour.instTransOrdOrdinal
- Std.Time.Internal.Bounded.instTransOrd
- Std.Time.Internal.instTransOrdUnitVal
- Std.Time.Millisecond.instTransOrdOffset
- Std.Time.Millisecond.instTransOrdOrdinal
- Std.Time.Minute.instTransOrdOffset
- Std.Time.Minute.instTransOrdOrdinal
- Std.Time.Month.instTransOrdOffset
- Std.Time.Month.instTransOrdOrdinal
- Std.Time.Month.instTransOrdQuarter
- Std.Time.Nanosecond.Ordinal.instTransOrdOfDay
- Std.Time.Nanosecond.instTransOrdOffset
- Std.Time.Nanosecond.instTransOrdOrdinal
- Std.Time.Nanosecond.instTransOrdSpan
- Std.Time.Second.instTransOrdOffset
- Std.Time.Second.instTransOrdOrdinal
- Std.Time.TimeZone.instTransOrdOffset
- Std.Time.Week.Ordinal.instTransOrdOfMonth
- Std.Time.Week.instTransOrdOffset
- Std.Time.Week.instTransOrdOrdinal
- Std.Time.Weekday.instTransOrd
- Std.Time.Weekday.instTransOrdOrdinal
- Std.Time.Year.instTransOrdOffset
- Std.Time.instTransOrdDateTime
- Std.Time.instTransOrdDuration
- Std.Time.instTransOrdHourMarker
- Std.Time.instTransOrdPlainDate
- Std.Time.instTransOrdPlainDateTime
- Std.Time.instTransOrdPlainTime
- Std.Time.instTransOrdTimestamp
- Std.Time.instTransOrdValidDate
- Std.TransCmp.opposite
- Std.TransOrd.opposite
- Std.instTransCmpCompareLex
- Std.instTransCmpCompareOnOfTransOrd
- Std.instTransOrdProd
- String.instTransOrd
- UInt16.instTransOrd
- UInt32.instTransOrd
- UInt64.instTransOrd
- UInt8.instTransOrd
- USize.instTransOrd
- Vector.instTransCmpCompareLex
- Vector.instTransOrd
A typeclass for types with a transitive ordering function.
Equations
A typeclass for comparison functions satisfying cmp a b = .eq
if and only if the logical equality
a = b
holds.
This typeclass distinguishes itself from LawfulBEqCmp
by using logical equality (=
) instead of
boolean equality (==
).
- eq_of_compare {a b : α} : cmp a b = Ordering.eq → a = b
If two values compare equal, then they are logically equal.
Instances
- Array.instLawfulEqCmpCompareLex
- Array.instLawfulEqOrd
- BitVec.instLawfulEqOrd
- Bool.instLawfulEqOrd
- Char.instLawfulEqOrd
- Fin.instLawfulEqOrd
- ISize.instLawfulEqOrd
- Int.instLawfulEqOrd
- Int16.instLawfulEqOrd
- Int32.instLawfulEqOrd
- Int64.instLawfulEqOrd
- Int8.instLawfulEqOrd
- List.instLawfulEqCmpCompareLex
- List.instLawfulEqOrd
- Nat.instLawfulEqOrd
- Option.instLawfulEqOrd
- Std.LawfulBEqCmp.lawfulBEqCmp
- Std.LawfulEqCmp.opposite
- Std.LawfulEqOrd.opposite
- Std.Time.Day.Ordinal.instLawfulEqOrdOfYear
- Std.Time.Day.instLawfulEqOrdOffset
- Std.Time.Day.instLawfulEqOrdOrdinal
- Std.Time.Hour.instLawfulEqOrdOffset
- Std.Time.Hour.instLawfulEqOrdOrdinal
- Std.Time.Internal.Bounded.instLawfulEqOrd
- Std.Time.Internal.instLawfulEqOrdUnitVal
- Std.Time.Millisecond.instLawfulEqOrdOffset
- Std.Time.Millisecond.instLawfulEqOrdOrdinal
- Std.Time.Minute.instLawfulEqOrdOffset
- Std.Time.Minute.instLawfulEqOrdOrdinal
- Std.Time.Month.instLawfulEqOrdOffset
- Std.Time.Month.instLawfulEqOrdOrdinal
- Std.Time.Month.instLawfulEqOrdQuarter
- Std.Time.Nanosecond.Ordinal.instLawfulEqOrdOfDay
- Std.Time.Nanosecond.instLawfulEqOrdOffset
- Std.Time.Nanosecond.instLawfulEqOrdOrdinal
- Std.Time.Nanosecond.instLawfulEqOrdSpan
- Std.Time.Second.instLawfulEqOrdOffset
- Std.Time.Second.instLawfulEqOrdOrdinal
- Std.Time.TimeZone.instLawfulEqOrdOffset
- Std.Time.Week.Ordinal.instLawfulEqOrdOfMonth
- Std.Time.Week.instLawfulEqOrdOffset
- Std.Time.Week.instLawfulEqOrdOrdinal
- Std.Time.Weekday.instLawfulEqOrd
- Std.Time.Weekday.instLawfulEqOrdOrdinal
- Std.Time.Year.instLawfulEqOrdOffset
- Std.Time.instLawfulEqOrdDuration
- Std.Time.instLawfulEqOrdHourMarker
- Std.Time.instLawfulEqOrdPlainDate
- Std.Time.instLawfulEqOrdPlainDateTime
- Std.Time.instLawfulEqOrdPlainTime
- Std.Time.instLawfulEqOrdTimestamp
- Std.Time.instLawfulEqOrdValidDate
- Std.instLawfulEqOrdProd
- String.instLawfulEqOrd
- UInt16.instLawfulEqOrd
- UInt32.instLawfulEqOrd
- UInt64.instLawfulEqOrd
- UInt8.instLawfulEqOrd
- USize.instLawfulEqOrd
- Vector.instLawfulEqCmpCompareLex
- Vector.instLawfulEqOrd
A typeclass for types with a comparison function that satisfies compare a b = .eq
if and only if
the logical equality a = b
holds.
This typeclass distinguishes itself from LawfulBEqOrd
by using logical equality (=
) instead of
boolean equality (==
).
Equations
The corresponding lemma for LawfulEqCmp
is LawfulEqCmp.compare_eq_iff_eq
The corresponding lemma for LawfulEqCmp
is LawfulEqCmp.compare_beq_iff_eq
A typeclass for comparison functions satisfying cmp a b = .eq
if and only if the boolean equality
a == b
holds.
This typeclass distinguishes itself from LawfulEqCmp
by using boolean equality (==
) instead of
logical equality (=
).
If two values compare equal, then they are boolean equal.
Instances
- Array.instLawfulBEqCmpCompareLex
- Array.instLawfulBEqOrd
- List.instLawfulBEqCmpCompareLex
- List.instLawfulBEqOrd
- Option.instLawfulBEqOrd
- Std.LawfulBEqCmp.opposite
- Std.LawfulBEqOrd.opposite
- Std.Time.instLawfulBEqOrdDateTime
- Std.instLawfulBEqCmpOfLawfulEqCmpOfLawfulBEq
- Std.instLawfulBEqOrd
- Vector.instLawfulBEqCmpCompareLex
- Vector.instLawfulBEqOrd
A typeclass for types with a comparison function that satisfies compare a b = .eq
if and only if
the boolean equality a == b
holds.
This typeclass distinguishes itself from LawfulEqOrd
by using boolean equality (==
) instead of
logical equality (=
).