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.cons_le_cons_iff
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[i₀ : Std.Irrefl fun (x1 x2 : α) => x1 < x2]
[i₁ : Std.Asymm fun (x1 x2 : α) => x1 < x2]
[i₂ : Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
{a b : α}
{l₁ l₂ : List α}
:
theorem
List.not_lt_of_cons_le_cons
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[i₀ : Std.Irrefl fun (x1 x2 : α) => x1 < x2]
[i₁ : Std.Asymm fun (x1 x2 : α) => x1 < x2]
[i₂ : Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
{a b : α}
{l₁ l₂ : List α}
(h : a :: l₁ ≤ b :: l₂)
:
theorem
List.le_of_cons_le_cons
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[i₀ : Std.Irrefl fun (x1 x2 : α) => x1 < x2]
[i₁ : Std.Asymm fun (x1 x2 : α) => x1 < x2]
[i₂ : Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
{a : α}
{l₁ l₂ : List α}
(h : a :: l₁ ≤ a :: l₂)
:
l₁ ≤ l₂
theorem
List.le_refl
{α : Type u_1}
[LT α]
[i₀ : Std.Irrefl fun (x1 x2 : α) => x1 < x2]
(l : List α)
:
l ≤ l
@[reducible, inline, deprecated List.le_antisymm (since := "2024-12-13")]
abbrev
List.lt_antisymm
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[i : Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
{as bs : List α}
(h₁ : as ≤ bs)
(h₂ : bs ≤ as)
:
as = bs
Equations
Instances For
theorem
List.lt_of_le_of_lt
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[i₀ : Std.Irrefl fun (x1 x2 : α) => x1 < x2]
[i₁ : Std.Asymm fun (x1 x2 : α) => x1 < x2]
[i₂ : Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
[i₃ : Trans (fun (x1 x2 : α) => ¬x1 < x2) (fun (x1 x2 : α) => ¬x1 < x2) fun (x1 x2 : α) => ¬x1 < x2]
{l₁ l₂ l₃ : List α}
(h₁ : l₁ ≤ l₂)
(h₂ : l₂ < l₃)
:
l₁ < l₃
theorem
List.le_trans
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[Std.Irrefl fun (x1 x2 : α) => x1 < x2]
[Std.Asymm fun (x1 x2 : α) => x1 < x2]
[Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
[Trans (fun (x1 x2 : α) => ¬x1 < x2) (fun (x1 x2 : α) => ¬x1 < x2) fun (x1 x2 : α) => ¬x1 < x2]
{l₁ l₂ l₃ : List α}
(h₁ : l₁ ≤ l₂)
(h₂ : l₂ ≤ l₃)
:
l₁ ≤ l₃
instance
List.instTransLeOfDecidableEqOfDecidableLTOfIrreflOfAsymmOfAntisymmOfNotLt
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[Std.Irrefl fun (x1 x2 : α) => x1 < x2]
[Std.Asymm fun (x1 x2 : α) => x1 < x2]
[Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
[Trans (fun (x1 x2 : α) => ¬x1 < x2) (fun (x1 x2 : α) => ¬x1 < x2) fun (x1 x2 : α) => ¬x1 < x2]
:
Equations
theorem
List.not_lex_total
{α : Type u_1}
[DecidableEq α]
{r : α → α → Prop}
[DecidableRel r]
(h : ∀ (x y : α), ¬r x y ∨ ¬r y x)
(l₁ l₂ : List α)
:
theorem
List.le_total
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[i : Std.Total fun (x1 x2 : α) => ¬x1 < x2]
(l₁ l₂ : List α)
:
instance
List.instTotalLeOfDecidableEqOfDecidableLTOfNotLt
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[Std.Total fun (x1 x2 : α) => ¬x1 < x2]
:
@[simp]
theorem
List.le_of_lt
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[i : Std.Total fun (x1 x2 : α) => ¬x1 < x2]
{l₁ l₂ : List α}
(h : l₁ < l₂)
:
l₁ ≤ l₂
theorem
List.le_iff_lt_or_eq
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[Std.Irrefl fun (x1 x2 : α) => x1 < x2]
[Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
[Std.Total fun (x1 x2 : α) => ¬x1 < x2]
{l₁ l₂ : List α}
:
@[simp]
theorem
List.lex_eq_true_iff_lt
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
{l₁ l₂ : List α}
:
@[simp]
theorem
List.lex_eq_false_iff_ge
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
{l₁ l₂ : List α}
:
l₁
is lexicographically less than l₂
if either
l₁
is pairwise equivalent under· == ·
tol₂.take l₁.length
, andl₁
is shorter thanl₂
or- there exists an index
i
such 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· == ·
tol₂.take l₁.length
or- there exists an index
i
such 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)lt
is irreflexive with respect to==
(i.e. ifx == y
thenlt x y = false
lt
is asymmmetric (i.e.lt x y = true → lt y x = false
)lt
is antisymmetric with respect to==
(i.e.lt x y = false → lt y x = false → x == y
)
theorem
List.le_iff_exists
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[Std.Irrefl fun (x1 x2 : α) => x1 < x2]
[Std.Asymm fun (x1 x2 : α) => x1 < x2]
[Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
{l₁ l₂ : List α}
:
theorem
List.append_left_le
{α : Type u_1}
[DecidableEq α]
[LT α]
[DecidableLT α]
[Std.Irrefl fun (x1 x2 : α) => x1 < x2]
[Std.Asymm fun (x1 x2 : α) => x1 < x2]
[Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
{l₁ l₂ l₃ : List α}
(h : l₂ ≤ l₃)
:
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₂)
:
l₁ ≤ l₂
theorem
List.map_le
{α : Type u_1}
{β : Type u_2}
[DecidableEq α]
[LT α]
[DecidableLT α]
[DecidableEq β]
[LT β]
[DecidableLT β]
[Std.Irrefl fun (x1 x2 : α) => x1 < x2]
[Std.Asymm fun (x1 x2 : α) => x1 < x2]
[Std.Antisymm fun (x1 x2 : α) => ¬x1 < x2]
[Std.Irrefl 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₂)
: