Lexicographic ordering #
theorem Vector.lt_irrefl {α : Type u_1} {n : Nat} [LT α] [Std.Irrefl fun (x1 x2 : α) => x1 < x2] (xs : Vector α n) :
instance Vector.ltIrrefl {α : Type u_1} {n : Nat} [LT α] [Std.Irrefl fun (x1 x2 : α) => x1 < x2] :
Std.Irrefl fun (x1 x2 : Vector α n) => x1 < x2
theorem Vector.le_refl {α : Type u_1} {n : Nat} [LT α] [i₀ : Std.Irrefl fun (x1 x2 : α) => x1 < x2] (xs : Vector α n) :
instance Vector.instReflLeOfIrreflLt {α : Type u_1} {n : Nat} [LT α] [Std.Irrefl fun (x1 x2 : α) => x1 < x2] :
theorem Vector.lt_of_le_of_lt {α : Type u_1} {n : Nat} [LT α] [LE α] [Std.LawfulOrderLT α] [Std.IsLinearOrder α] {xs ys zs : Vector α n} (h₁ : xs ≤ ys) (h₂ : ys < zs) :
theorem Vector.le_trans {α : Type u_1} {n : Nat} [LT α] [LE α] [Std.LawfulOrderLT α] [Std.IsLinearOrder α] {xs ys zs : Vector α n} (h₁ : xs ≤ ys) (h₂ : ys ≤ zs) :
@[instance_reducible]
instance Vector.instTransLeOfLawfulOrderLTOfIsLinearOrder {α : Type u_1} {n : Nat} [LT α] [LE α] [Std.LawfulOrderLT α] [Std.IsLinearOrder α] :
Equations
- Vector.instTransLeOfLawfulOrderLTOfIsLinearOrder = { trans := ⋯ }
theorem Vector.le_antisymm {α : Type u_1} {n : Nat} [LT α] [LE α] [Std.IsLinearOrder α] [Std.LawfulOrderLT α] {xs ys : Vector α n} (h₁ : xs ≤ ys) (h₂ : ys ≤ xs) :
instance Vector.instIsLinearOrderOfLawfulOrderLT {α : Type u_1} {n : Nat} [LT α] [LE α] [Std.IsLinearOrder α] [Std.LawfulOrderLT α] :
Std.IsLinearOrder (Vector α n)
instance Vector.instLawfulOrderLTOfAsymmLt {α : Type u_1} {n : Nat} [LT α] [Std.Asymm fun (x1 x2 : α) => x1 < x2] :
Std.LawfulOrderLT (Vector α n)
@[instance_reducible]
instance Vector.instDecidableLTOfDecidableEq {α : Type u_1} {n : Nat} [DecidableEq α] [LT α] [DecidableLT α] :
DecidableLT (Vector α n)
Equations
- xs.instDecidableLTOfDecidableEq ys = decidable_of_iff ((xs.lex ys fun (x1 x2 : α) => decide (x1 < x2)) = true) ⋯
@[instance_reducible]
instance Vector.instDecidableLEOfDecidableEqOfDecidableLT {α : Type u_1} {n : Nat} [DecidableEq α] [LT α] [DecidableLT α] :
DecidableLE (Vector α n)
Equations
- xs.instDecidableLEOfDecidableEqOfDecidableLT ys = decidable_of_iff ((ys.lex xs fun (x1 x2 : α) => decide (x1 < x2)) = false) ⋯
theorem Vector.lex_eq_false_iff_exists {α : Type u_1} {n : Nat} [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) {xs ys : Vector α n} :
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₂or- 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. ifx == ythenlt x y = falseltis 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 Vector.map_le {α : Type u_1} {β : Type u_2} {n : Nat} [LT α] [LT β] [Std.Asymm fun (x1 x2 : α) => x1 < x2] [Std.Trichotomous fun (x1 x2 : α) => x1 < x2] [Std.Asymm fun (x1 x2 : β) => x1 < x2] [Std.Trichotomous fun (x1 x2 : β) => x1 < x2] {xs ys : Vector α n} {f : α → β} (w : ∀ (x y : α), x < y → f x < f y) (h : xs ≤ ys) :
theorem Vector.map_lt_map_iff_of_injective {α : Type u_1} {β : Type u_2} {n : Nat} [LT α] [LT β] (f : α → β) (hf : ∀ (a b : α), f a < f b ↔ a < b) (hfinj : Function.Injective f) {xs ys : Vector α n} :
See map_lt_map_iff for a variant with fewer proof obligations for f but with some mild
assumptions on the order on α and β.
theorem Vector.map_lt_map_iff {α : Type u_1} {β : Type u_2} {n : Nat} [LT α] [Std.Trichotomous fun (x1 x2 : α) => x1 < x2] [LT β] [Std.Asymm fun (x1 x2 : β) => x1 < x2] (f : α → β) (hf : ∀ (a b : α), a < b → f a < f b) {xs ys : Vector α n} :
See map_lt_map_iff_of_injective for a variant which does not assume anything about the order
on α and β, but with more assumptions on f.