lean4-htt/tests/lean/run/Ord.lean
Joachim Breitner 38b4062edb
feat: linear-size Ord instance (#10270)
This PR adds an alternative implementation of `Deriving Ord` based on
comparing `.ctorIdx` and using a dedicated matcher for comparing same
constructors (added in #10152). The new option
`deriving.ord.linear_construction_threshold` sets the constructor count
threshold (10 by default) for using the new construction.

It also (unconditionally) changes the implementation for enumeration
types to simply compare the `ctorIdx`.
2025-09-19 14:13:57 +00:00

49 lines
1 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

inductive SimpleInd
| A
| B
deriving Ord
mutual
inductive Foo
| A : Int → (3 = 3) → String → Foo
| B : Bar → Foo
deriving Ord
inductive Bar
| C
| D : Foo → Bar
deriving Ord
end
inductive ManyConstructors | A | B | C | D | E | F | G | H | I | J | K | L
| M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
deriving Ord
structure Person where
firstName : String
lastName : String
age : Nat
deriving Ord
example : compare { firstName := "A", lastName := "B", age := 10 : Person } ⟨"B", "A", 9⟩ = Ordering.lt := rfl
structure Company where
name : String
ceo : Person
numberOfEmployees : Nat
deriving Ord
structure Fixed (α : Type u) where
val : Int
deriving Ord
inductive Fixed' : Type → Type 1 where
| mk : Int → Fixed' α
deriving Ord
-- Before fixing the definition of `Ordering.then`, this would panic,
-- because short-circuiting was not working.
def foo (a : List Nat) := Ordering.then (compare a.length 1) (compare a[0]! 1)
/-- info: Ordering.lt -/
#guard_msgs in
#eval foo []