mathlib3 documentation

data.finsupp.lex

Lexicographic order on finitely supported functions #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

This file defines the lexicographic order on finsupp.

@[protected]
def finsupp.lex {α : Type u_1} {N : Type u_2} [has_zero N] (r : α → α → Prop) (s : N → N → Prop) (x y : α →₀ N) :
Prop

finsupp.lex r s is the lexicographic relation on α →₀ N, where α is ordered by r, and N is ordered by s.

The type synonym lex (α →₀ N) has an order given by finsupp.lex (<) (<).

Equations
theorem pi.lex_eq_finsupp_lex {α : Type u_1} {N : Type u_2} [has_zero N] {r : α → α → Prop} {s : N → N → Prop} (a b : α →₀ N) :
pi.lex r (λ (_x : α), s) ⇑a ⇑b = finsupp.lex r s a b
theorem finsupp.lex_def {α : Type u_1} {N : Type u_2} [has_zero N] {r : α → α → Prop} {s : N → N → Prop} {a b : α →₀ N} :
finsupp.lex r s a b ↔ ∃ (j : α), (∀ (d : α), r d j → ⇑a d = ⇑b d) ∧ s (⇑a j) (⇑b j)
theorem finsupp.lex_eq_inv_image_dfinsupp_lex {α : Type u_1} {N : Type u_2} [has_zero N] (r : α → α → Prop) (s : N → N → Prop) :
@[protected, instance]
def finsupp.lex.has_lt {α : Type u_1} {N : Type u_2} [has_zero N] [has_lt α] [has_lt N] :
has_lt (lex (α →₀ N))
Equations
theorem finsupp.lex_lt_of_lt_of_preorder {α : Type u_1} {N : Type u_2} [has_zero N] [preorder N] (r : α → α → Prop) [is_strict_order α r] {x y : α →₀ N} (hlt : x < y) :
∃ (i : α), (∀ (j : α), r j i → ⇑x j ≤ ⇑y j ∧ ⇑y j ≤ ⇑x j) ∧ ⇑x i < ⇑y i
theorem finsupp.lex_lt_of_lt {α : Type u_1} {N : Type u_2} [has_zero N] [partial_order N] (r : α → α → Prop) [is_strict_order α r] {x y : α →₀ N} (hlt : x < y) :
pi.lex r (λ (i : α), has_lt.lt) ⇑x ⇑y
@[protected, instance]
@[protected, instance]
def finsupp.lex.partial_order {α : Type u_1} {N : Type u_2} [has_zero N] [linear_order α] [partial_order N] :

The partial order on finsupps obtained by the lexicographic ordering. See finsupp.lex.linear_order for a proof that this partial order is in fact linear.

Equations
theorem finsupp.lt_of_forall_lt_of_lt {α : Type u_1} {N : Type u_2} [has_zero N] [linear_order α] [partial_order N] (a b : lex (α →₀ N)) (i : α) :
(∀ (j : α), j < i → ⇑(⇑of_lex a) j = ⇑(⇑of_lex b) j) → ⇑(⇑of_lex a) i < ⇑(⇑of_lex b) i → a < b

We are about to sneak in a hypothesis that might appear to be too strong. We assume covariant_class with strict inequality < also when proving the one with the weak inequality ≤. This is actually necessary: addition on lex (α →₀ N) may fail to be monotone, when it is "just" monotone on N.

See counterexamples.zero_divisors_in_add_monoid_algebras for a counterexample.