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
- List.instOrientedCmpCompareLex
- List.instOrientedOrd
- Std.Fin.instOrientedOrdFin
- Std.Option.instOrientedOrdOption
- 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
- List.instTransCmpCompareLex
- List.instTransOrd
- Std.BitVec.instTransOrdBitVec
- Std.Bool.instTransOrdBool
- Std.Char.instTransOrdChar
- Std.Fin.instTransOrdFin
- Std.ISize.instTransOrdISize
- Std.Int.instTransOrdInt
- Std.Int16.instTransOrdInt16
- Std.Int32.instTransOrdInt32
- Std.Int64.instTransOrdInt64
- Std.Int8.instTransOrdInt8
- Std.Nat.instTransOrdNat
- Std.Option.instTransOrdOption
- Std.String.instTransOrdString
- 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.UInt16.instTransOrdUInt16
- Std.UInt32.instTransOrdUInt32
- Std.UInt64.instTransOrdUInt64
- Std.UInt8.instTransOrdUInt8
- Std.USize.instTransOrdUSize
- Std.instTransCmpCompareLex
- Std.instTransCmpCompareOnOfTransOrd
- Std.instTransOrdProd
- 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
- List.instLawfulEqCmpCompareLex
- List.instLawfulEqOrd
- Std.BitVec.instLawfulEqOrdBitVec
- Std.Bool.instLawfulEqOrdBool
- Std.Char.instLawfulEqOrdChar
- Std.Fin.instLawfulEqOrdFin
- Std.ISize.instLawfulEqOrdISize
- Std.Int.instLawfulEqOrdInt
- Std.Int16.instLawfulEqOrdInt16
- Std.Int32.instLawfulEqOrdInt32
- Std.Int64.instLawfulEqOrdInt64
- Std.Int8.instLawfulEqOrdInt8
- Std.LawfulBEqCmp.lawfulBEqCmp
- Std.LawfulEqCmp.opposite
- Std.LawfulEqOrd.opposite
- Std.Nat.instLawfulEqOrdNat
- Std.Option.instLawfulEqOrdOption
- Std.String.instLawfulEqOrdString
- 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.UInt16.instLawfulEqOrdUInt16
- Std.UInt32.instLawfulEqOrdUInt32
- Std.UInt64.instLawfulEqOrdUInt64
- Std.UInt8.instLawfulEqOrdUInt8
- Std.USize.instLawfulEqOrdUSize
- Std.instLawfulEqOrdProd
- 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
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 logically equal.
Instances
- Array.instLawfulBEqCmpCompareLex
- Array.instLawfulBEqOrd
- List.instLawfulBEqCmpCompareLex
- List.instLawfulBEqOrd
- Std.Internal.instLawfulBEqOrd
- Std.LawfulBEqCmp.opposite
- Std.LawfulBEqOrd.opposite
- Std.Option.instLawfulBEqOrdOption
- Std.Time.instLawfulBEqOrdDateTime
- Std.instLawfulBEqCmpOfLawfulEqCmpOfLawfulBEq
- 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 (=
).
Equations
Internal funcion to derive a BEq
instance from an Ord
instance in order to connect the
verification machinery for tree maps to the verification machinery for hash maps.
Equations
- Std.Internal.beqOfOrd = { beq := fun (a b : α) => decide (compare a b = Ordering.eq) }