Documentation

Mathlib.Data.Sigma.Lex

Lexicographic order on a sigma type #

This defines the lexicographical order of two arbitrary relations on a sigma type and proves some lemmas about PSigma.Lex, which is defined in core Lean.

Given a relation in the index type and a relation on each summand, the lexicographical order on the sigma type relates a and b if their summands are related or they are in the same summand and related by the summand's relation.

See also #

Related files are:

inductive Sigma.Lex {ι : Type u_1} {α : ι → Type u_2} (r : ι → ι → Prop) (s : (i : ι) → α i → α i → Prop) :
(i : ι) × α i → (i : ι) × α i → Prop

The lexicographical order on a sigma type. It takes in a relation on the index type and a relation for each summand. a is related to b iff their summands are related or they are in the same summand and are related through the summand's relation.

  • left {ι : Type u_1} {α : ι → Type u_2} {r : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} {i j : ι} (a : α i) (b : α j) : r i j → Lex r s ⟨i, a⟩ ⟨j, b⟩
  • right {ι : Type u_1} {α : ι → Type u_2} {r : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} {i : ι} (a b : α i) : s i a b → Lex r s ⟨i, a⟩ ⟨i, b⟩
Instances For
    theorem Sigma.lex_iff {ι : Type u_1} {α : ι → Type u_2} {r : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} {a b : (i : ι) × α i} :
    Lex r s a b ↔ r a.fst b.fst ∨ ∃ (h : a.fst = b.fst), s b.fst (h ▸ a.snd) b.snd
    @[instance_reducible]
    instance Sigma.Lex.decidable {ι : Type u_1} {α : ι → Type u_2} (r : ι → ι → Prop) (s : (i : ι) → α i → α i → Prop) [DecidableEq ι] [DecidableRel r] [(i : ι) → DecidableRel (s i)] :
    Equations
    theorem Sigma.Lex.mono {ι : Type u_1} {α : ι → Type u_2} {r₁ r₂ : ι → ι → Prop} {s₁ s₂ : (i : ι) → α i → α i → Prop} (hr : ∀ (a b : ι), r₁ a b → r₂ a b) (hs : ∀ (i : ι) (a b : α i), s₁ i a b → s₂ i a b) {a b : (i : ι) × α i} (h : Lex r₁ s₁ a b) :
    Lex r₂ s₂ a b
    theorem Sigma.Lex.mono_left {ι : Type u_1} {α : ι → Type u_2} {r₁ r₂ : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} (hr : ∀ (a b : ι), r₁ a b → r₂ a b) {a b : (i : ι) × α i} (h : Lex r₁ s a b) :
    Lex r₂ s a b
    theorem Sigma.Lex.mono_right {ι : Type u_1} {α : ι → Type u_2} {r : ι → ι → Prop} {s₁ s₂ : (i : ι) → α i → α i → Prop} (hs : ∀ (i : ι) (a b : α i), s₁ i a b → s₂ i a b) {a b : (i : ι) × α i} (h : Lex r s₁ a b) :
    Lex r s₂ a b
    theorem Sigma.lex_swap {ι : Type u_1} {α : ι → Type u_2} {r : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} {a b : (i : ι) × α i} :
    Lex (Function.swap r) s a b ↔ Lex r (fun (i : ι) => Function.swap (s i)) b a
    instance Sigma.instReflLex {ι : Type u_1} {α : ι → Type u_2} {r : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} [∀ (i : ι), Std.Refl (s i)] :
    instance Sigma.instIrreflLex {ι : Type u_1} {α : ι → Type u_2} {r : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} [Std.Irrefl r] [∀ (i : ι), Std.Irrefl (s i)] :
    instance Sigma.instIsTransLex {ι : Type u_1} {α : ι → Type u_2} {r : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} [IsTrans ι r] [∀ (i : ι), IsTrans (α i) (s i)] :
    IsTrans ((i : ι) × α i) (Lex r s)
    instance Sigma.instSymmLex {ι : Type u_1} {α : ι → Type u_2} {r : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} [Std.Symm r] [∀ (i : ι), Std.Symm (s i)] :
    instance Sigma.instAntisymmLexOfAsymm {ι : Type u_1} {α : ι → Type u_2} {r : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} [Std.Asymm r] [∀ (i : ι), Std.Antisymm (s i)] :
    instance Sigma.instTotalLexOfTrichotomous {ι : Type u_1} {α : ι → Type u_2} {r : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} [Std.Trichotomous r] [∀ (i : ι), Std.Total (s i)] :
    instance Sigma.instTrichotomousLex {ι : Type u_1} {α : ι → Type u_2} {r : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} [Std.Trichotomous r] [∀ (i : ι), Std.Trichotomous (s i)] :

    PSigma #

    theorem PSigma.lex_iff {ι : Sort u_1} {α : ι → Sort u_2} {r : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} {a b : (i : ι) ×' α i} :
    Lex r s a b ↔ r a.fst b.fst ∨ ∃ (h : a.fst = b.fst), s b.fst (h ▸ a.snd) b.snd
    @[instance_reducible]
    instance PSigma.Lex.decidable {ι : Sort u_1} {α : ι → Sort u_2} (r : ι → ι → Prop) (s : (i : ι) → α i → α i → Prop) [DecidableEq ι] [DecidableRel r] [(i : ι) → DecidableRel (s i)] :
    Equations
    theorem PSigma.Lex.mono {ι : Sort u_1} {α : ι → Sort u_2} {r₁ r₂ : ι → ι → Prop} {s₁ s₂ : (i : ι) → α i → α i → Prop} (hr : ∀ (a b : ι), r₁ a b → r₂ a b) (hs : ∀ (i : ι) (a b : α i), s₁ i a b → s₂ i a b) {a b : (i : ι) ×' α i} (h : Lex r₁ s₁ a b) :
    Lex r₂ s₂ a b
    theorem PSigma.Lex.mono_left {ι : Sort u_1} {α : ι → Sort u_2} {r₁ r₂ : ι → ι → Prop} {s : (i : ι) → α i → α i → Prop} (hr : ∀ (a b : ι), r₁ a b → r₂ a b) {a b : (i : ι) ×' α i} (h : Lex r₁ s a b) :
    Lex r₂ s a b
    theorem PSigma.Lex.mono_right {ι : Sort u_1} {α : ι → Sort u_2} {r : ι → ι → Prop} {s₁ s₂ : (i : ι) → α i → α i → Prop} (hs : ∀ (i : ι) (a b : α i), s₁ i a b → s₂ i a b) {a b : (i : ι) ×' α i} (h : Lex r s₁ a b) :
    Lex r s₂ a b