Lexicographic ordering #
instance
List.ltIrrefl
{α : Type u_1}
[LT α]
[Std.Irrefl fun (x1 x2 : α) => x1 < x2]
 :
Std.Irrefl fun (x1 x2 : List α) => x1 < x2
theorem
List.left_le_left_of_cons_le_cons
{α : Type u_1}
[LT α]
[LE α]
[Std.IsLinearOrder α]
[Std.LawfulOrderLT α]
{a b : α}
{l₁ l₂ : List α}
(h : a :: l₁ ≤ b :: l₂)
 :
theorem
List.le_refl
{α : Type u_1}
[LT α]
[i₀ : Std.Irrefl fun (x1 x2 : α) => x1 < x2]
(l : List α)
 :
theorem
List.lt_of_le_of_lt
{α : Type u_1}
[LT α]
[LE α]
[Std.IsLinearOrder α]
[Std.LawfulOrderLT α]
{l₁ l₂ l₃ : List α}
(h₁ : l₁ ≤ l₂)
(h₂ : l₂ < l₃)
 :
@[deprecated List.lt_of_le_of_lt (since := "2025-08-01")]
theorem
List.le_trans
{α : Type u_1}
[LT α]
[LE α]
[Std.IsLinearOrder α]
[Std.LawfulOrderLT α]
{l₁ l₂ l₃ : List α}
(h₁ : l₁ ≤ l₂)
(h₂ : l₂ ≤ l₃)
 :
@[deprecated List.le_trans (since := "2025-08-01")]
instance
List.instTransLeOfIsLinearOrderOfLawfulOrderLT
{α : Type u_1}
[LT α]
[LE α]
[Std.IsLinearOrder α]
[Std.LawfulOrderLT α]
 :
Equations
- List.instTransLeOfIsLinearOrderOfLawfulOrderLT = { trans := ⋯ }
instance
List.instIsLinearOrder
{α : Type u_1}
[LT α]
[LE α]
[Std.IsLinearOrder α]
[Std.LawfulOrderLT α]
 :
l₁ is lexicographically less than l₂ if either
- l₁is pairwise equivalent under- · == ·to- l₂.take l₁.length, and- l₁is shorter than- l₂or
- there exists an index isuch that- for all j < i,l₁[j] == l₂[j]and
- l₁[i] < l₂[i]
 
- for all 
theorem
List.lex_eq_false_iff_exists
{α : Type u_1}
{l₁ l₂ : List α}
[BEq α]
[PartialEquivBEq α]
(lt : α → α → Bool)
(lt_irrefl : ∀ (x y : α), (x == y) = true → lt x y = false)
(lt_asymm : ∀ (x y : α), lt x y = true → lt y x = false)
(lt_antisymm : ∀ (x y : α), lt x y = false → lt y x = false → (x == y) = true)
 :
l₁ is not lexicographically less than l₂
(which you might think of as "l₂ is lexicographically greater than or equal to l₁"") if either
- l₁is pairwise equivalent under- · == ·to- l₂.take l₁.lengthor
- there exists an index isuch that- for all j < i,l₁[j] == l₂[j]and
- l₂[i] < l₁[i]
 
- for all 
This formulation requires that == and lt are compatible in the following senses:
- ==is symmetric (we unnecessarily further assume it is transitive, to make use of the existing typeclasses)
- ltis irreflexive with respect to- ==(i.e. if- x == ythen- lt x y = false
- ltis asymmetric (i.e.- lt x y = true → lt y x = false)
- ltis antisymmetric with respect to- ==(i.e.- lt x y = false → lt y x = false → x == y)
theorem
List.le_iff_exists
{α : Type u_1}
[LT α]
[Std.Asymm fun (x1 x2 : α) => x1 < x2]
[Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
{l₁ l₂ : List α}
 :
theorem
List.le_append_left
{α : Type u_1}
[LT α]
[Std.Irrefl fun (x1 x2 : α) => x1 < x2]
{l₁ l₂ : List α}
 :
theorem
List.IsPrefix.le
{α : Type u_1}
[LT α]
[Std.Irrefl fun (x1 x2 : α) => x1 < x2]
{l₁ l₂ : List α}
(h : l₁ <+: l₂)
 :
theorem
List.map_le
{α : Type u_1}
{β : Type u_2}
[LT α]
[LT β]
[Std.Asymm fun (x1 x2 : α) => x1 < x2]
[Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
[Std.Asymm fun (x1 x2 : β) => x1 < x2]
[Std.Antisymm fun (x1 x2 : β) => ¬x1 < x2]
{l₁ l₂ : List α}
{f : α → β}
(w : ∀ (x y : α), x < y → f x < f y)
(h : l₁ ≤ l₂)
 :