Documentation

Mathlib.Order.GaloisConnection

Galois connections, insertions and coinsertions #

Galois connections are order theoretic adjoints, i.e. a pair of functions u and l, such that ∀ a b, l a ≤ b ↔ a ≤ u b∀ a b, l a ≤ b ↔ a ≤ u b≤ b ↔ a ≤ u b↔ a ≤ u b≤ u b.

Main definitions #

Implementation details #

Galois insertions can be used to lift order structures from one type to another. For example if α is a complete lattice, and l : α → β→ β, and u : β → α→ α form a Galois insertion, then β is also a complete lattice. l is the lower adjoint and u is the upper adjoint.

An example of a Galois insertion is in group theory. If G is a group, then there is a Galois insertion between the set of subsets of G, Set G, and the set of subgroups of G, Subgroup G. The lower adjoint is Subgroup.closure, taking the Subgroup generated by a Set, and the upper adjoint is the coercion from Subgroup G to Set G, taking the underlying set of a subgroup.

Naively lifting a lattice structure along this Galois insertion would mean that the definition of inf on subgroups would be Subgroup.closure (↑S ∩ ↑T)↑S ∩ ↑T)∩ ↑T)↑T). This is an undesirable definition because the intersection of subgroups is already a subgroup, so there is no need to take the closure. For this reason a choice function is added as a field to the GaloisInsertion structure. It has type Π S : Set G, ↑(closure S) ≤ S → Subgroup G↑(closure S) ≤ S → Subgroup G≤ S → Subgroup G→ Subgroup G. When ↑(closure S) ≤ S↑(closure S) ≤ S≤ S, then S is already a subgroup, so this function can be defined using Subgroup.mk and not closure. This means the infimum of subgroups will be defined to be the intersection of sets, paired with a proof that intersection of subgroups is a subgroup, rather than the closure of the intersection.

def GaloisConnection {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] (l : αβ) (u : βα) :

A Galois connection is a pair of functions l and u satisfying l a ≤ b ↔ a ≤ u b≤ b ↔ a ≤ u b↔ a ≤ u b≤ u b. They are special cases of adjoint functors in category theory, but do not depend on the category theory library in mathlib.

Equations
theorem OrderIso.to_galoisConnection {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] (oi : α ≃o β) :

Makes a Galois connection from an order-preserving bijection.

theorem GaloisConnection.monotone_intro {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (hu : Monotone u) (hl : Monotone l) (hul : ∀ (a : α), a u (l a)) (hlu : ∀ (a : β), l (u a) a) :
theorem GaloisConnection.dual {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :
GaloisConnection (OrderDual.toDual u OrderDual.ofDual) (OrderDual.toDual l OrderDual.ofDual)
theorem GaloisConnection.le_iff_le {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {a : α} {b : β} :
l a b a u b
theorem GaloisConnection.l_le {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {a : α} {b : β} :
a u bl a b
theorem GaloisConnection.le_u {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {a : α} {b : β} :
l a ba u b
theorem GaloisConnection.le_u_l {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) (a : α) :
a u (l a)
theorem GaloisConnection.l_u_le {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) (a : β) :
l (u a) a
theorem GaloisConnection.monotone_u {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :
theorem GaloisConnection.monotone_l {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :
theorem GaloisConnection.upperBounds_l_image {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) (s : Set α) :
theorem GaloisConnection.lowerBounds_u_image {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) (s : Set β) :
theorem GaloisConnection.bddAbove_l_image {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {s : Set α} :
theorem GaloisConnection.bddBelow_u_image {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {s : Set β} :
theorem GaloisConnection.isLUB_l_image {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {s : Set α} {a : α} (h : IsLUB s a) :
IsLUB (l '' s) (l a)
theorem GaloisConnection.isGLB_u_image {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {s : Set β} {b : β} (h : IsGLB s b) :
IsGLB (u '' s) (u b)
theorem GaloisConnection.isLeast_l {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {a : α} :
IsLeast { b | a u b } (l a)
theorem GaloisConnection.isGreatest_u {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {b : β} :
IsGreatest { a | l a b } (u b)
theorem GaloisConnection.isGLB_l {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {a : α} :
IsGLB { b | a u b } (l a)
theorem GaloisConnection.isLUB_u {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {b : β} :
IsLUB { a | l a b } (u b)
theorem GaloisConnection.le_u_l_trans {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {x : α} {y : α} {z : α} (hxy : x u (l y)) (hyz : y u (l z)) :
x u (l z)

If (l, u) is a Galois connection, then the relation x ≤ u (l y)≤ u (l y) is a transitive relation. If l is a closure operator (Submodule.span, Subgroup.closure, ...) and u is the coercion to Set, this reads as "if U is in the closure of V and V is in the closure of W then U is in the closure of W".

theorem GaloisConnection.l_u_le_trans {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {x : β} {y : β} {z : β} (hxy : l (u x) y) (hyz : l (u y) z) :
l (u x) z
theorem GaloisConnection.u_l_u_eq_u {α : Type u} {β : Type v} [inst : PartialOrder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) (b : β) :
u (l (u b)) = u b
theorem GaloisConnection.u_l_u_eq_u' {α : Type u} {β : Type v} [inst : PartialOrder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :
u l u = u
theorem GaloisConnection.u_unique {α : Type u} {β : Type v} [inst : PartialOrder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {l' : αβ} {u' : βα} (gc' : GaloisConnection l' u') (hl : ∀ (a : α), l a = l' a) {b : β} :
u b = u' b
theorem GaloisConnection.exists_eq_u {α : Type u} {β : Type v} [inst : PartialOrder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) (a : α) :
(b, a = u b) a = u (l a)

If there exists a b such that a = u a, then b = l a is one such element.

theorem GaloisConnection.u_eq {α : Type u} {β : Type v} [inst : PartialOrder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {z : α} {y : β} :
u y = z ∀ (x : α), x z l x y
theorem GaloisConnection.l_u_l_eq_l {α : Type u} {β : Type v} [inst : Preorder α] [inst : PartialOrder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) (a : α) :
l (u (l a)) = l a
theorem GaloisConnection.l_u_l_eq_l' {α : Type u} {β : Type v} [inst : Preorder α] [inst : PartialOrder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :
l u l = l
theorem GaloisConnection.l_unique {α : Type u} {β : Type v} [inst : Preorder α] [inst : PartialOrder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {l' : αβ} {u' : βα} (gc' : GaloisConnection l' u') (hu : ∀ (b : β), u b = u' b) {a : α} :
l a = l' a
theorem GaloisConnection.exists_eq_l {α : Type u} {β : Type v} [inst : Preorder α] [inst : PartialOrder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) (b : β) :
(a, b = l a) b = l (u b)

If there exists an a such that b = l a, then a = u b is one such element.

theorem GaloisConnection.l_eq {α : Type u} {β : Type v} [inst : Preorder α] [inst : PartialOrder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {x : α} {z : β} :
l x = z ∀ (y : β), z y x u y
theorem GaloisConnection.u_eq_top {α : Type u} {β : Type v} [inst : PartialOrder α] [inst : Preorder β] [inst : OrderTop α] {l : αβ} {u : βα} (gc : GaloisConnection l u) {x : β} :
u x = l x
theorem GaloisConnection.u_top {α : Type u} {β : Type v} [inst : PartialOrder α] [inst : Preorder β] [inst : OrderTop α] [inst : OrderTop β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :
theorem GaloisConnection.l_eq_bot {α : Type u} {β : Type v} [inst : Preorder α] [inst : PartialOrder β] [inst : OrderBot β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {x : α} :
l x = x u
theorem GaloisConnection.l_bot {α : Type u} {β : Type v} [inst : Preorder α] [inst : PartialOrder β] [inst : OrderBot β] [inst : OrderBot α] {l : αβ} {u : βα} (gc : GaloisConnection l u) :
theorem GaloisConnection.l_sup {α : Type u} {β : Type v} {a₁ : α} {a₂ : α} [inst : SemilatticeSup α] [inst : SemilatticeSup β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :
l (a₁ a₂) = l a₁ l a₂
theorem GaloisConnection.u_inf {α : Type u} {β : Type v} {b₁ : β} {b₂ : β} [inst : SemilatticeInf α] [inst : SemilatticeInf β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :
u (b₁ b₂) = u b₁ u b₂
theorem GaloisConnection.l_supᵢ {α : Type u} {β : Type v} {ι : Sort x} [inst : CompleteLattice α] [inst : CompleteLattice β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {f : ια} :
l (supᵢ f) = i, l (f i)
theorem GaloisConnection.l_supᵢ₂ {α : Type u} {β : Type v} {ι : Sort x} {κ : ιSort u_1} [inst : CompleteLattice α] [inst : CompleteLattice β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {f : (i : ι) → κ iα} :
l (i, j, f i j) = i, j, l (f i j)
theorem GaloisConnection.u_infᵢ {α : Type u} {β : Type v} {ι : Sort x} [inst : CompleteLattice α] [inst : CompleteLattice β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {f : ιβ} :
u (infᵢ f) = i, u (f i)
theorem GaloisConnection.u_infᵢ₂ {α : Type u} {β : Type v} {ι : Sort x} {κ : ιSort u_1} [inst : CompleteLattice α] [inst : CompleteLattice β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {f : (i : ι) → κ iβ} :
u (i, j, f i j) = i, j, u (f i j)
theorem GaloisConnection.l_supₛ {α : Type u} {β : Type v} [inst : CompleteLattice α] [inst : CompleteLattice β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {s : Set α} :
l (supₛ s) = a, h, l a
theorem GaloisConnection.u_infₛ {α : Type u} {β : Type v} [inst : CompleteLattice α] [inst : CompleteLattice β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {s : Set β} :
u (infₛ s) = a, h, u a
theorem GaloisConnection.lt_iff_lt {α : Type u} {β : Type v} [inst : LinearOrder α] [inst : LinearOrder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {a : α} {b : β} :
b < l a u b < a
theorem GaloisConnection.id {α : Type u} [pα : Preorder α] :
theorem GaloisConnection.compose {α : Type u} {β : Type v} {γ : Type w} [inst : Preorder α] [inst : Preorder β] [inst : Preorder γ] {l1 : αβ} {u1 : βα} {l2 : βγ} {u2 : γβ} (gc1 : GaloisConnection l1 u1) (gc2 : GaloisConnection l2 u2) :
GaloisConnection (l2 l1) (u1 u2)
theorem GaloisConnection.dfun {ι : Type u} {α : ιType v} {β : ιType w} [inst : (i : ι) → Preorder (α i)] [inst : (i : ι) → Preorder (β i)] (l : (i : ι) → α iβ i) (u : (i : ι) → β iα i) (gc : ∀ (i : ι), GaloisConnection (l i) (u i)) :
GaloisConnection (fun a i => l i (a i)) fun b i => u i (b i)
theorem GaloisConnection.l_comm_of_u_comm {X : Type u_1} [inst : Preorder X] {Y : Type u_2} [inst : Preorder Y] {Z : Type u_3} [inst : Preorder Z] {W : Type u_4} [inst : PartialOrder W] {lYX : XY} {uXY : YX} (hXY : GaloisConnection lYX uXY) {lWZ : ZW} {uZW : WZ} (hZW : GaloisConnection lWZ uZW) {lWY : YW} {uYW : WY} (hWY : GaloisConnection lWY uYW) {lZX : XZ} {uXZ : ZX} (hXZ : GaloisConnection lZX uXZ) (h : ∀ (w : W), uXZ (uZW w) = uXY (uYW w)) {x : X} :
lWZ (lZX x) = lWY (lYX x)
theorem GaloisConnection.u_comm_of_l_comm {X : Type u_1} [inst : PartialOrder X] {Y : Type u_2} [inst : Preorder Y] {Z : Type u_3} [inst : Preorder Z] {W : Type u_4} [inst : Preorder W] {lYX : XY} {uXY : YX} (hXY : GaloisConnection lYX uXY) {lWZ : ZW} {uZW : WZ} (hZW : GaloisConnection lWZ uZW) {lWY : YW} {uYW : WY} (hWY : GaloisConnection lWY uYW) {lZX : XZ} {uXZ : ZX} (hXZ : GaloisConnection lZX uXZ) (h : ∀ (x : X), lWZ (lZX x) = lWY (lYX x)) {w : W} :
uXZ (uZW w) = uXY (uYW w)
theorem GaloisConnection.l_comm_iff_u_comm {X : Type u_1} [inst : PartialOrder X] {Y : Type u_2} [inst : Preorder Y] {Z : Type u_3} [inst : Preorder Z] {W : Type u_4} [inst : PartialOrder W] {lYX : XY} {uXY : YX} (hXY : GaloisConnection lYX uXY) {lWZ : ZW} {uZW : WZ} (hZW : GaloisConnection lWZ uZW) {lWY : YW} {uYW : WY} (hWY : GaloisConnection lWY uYW) {lZX : XZ} {uXZ : ZX} (hXZ : GaloisConnection lZX uXZ) :
(∀ (w : W), uXZ (uZW w) = uXY (uYW w)) ∀ (x : X), lWZ (lZX x) = lWY (lYX x)
theorem supₛ_image2_eq_supₛ_supₛ {α : Type u} {β : Type v} {γ : Type w} [inst : CompleteLattice α] [inst : CompleteLattice β] [inst : CompleteLattice γ] {s : Set α} {t : Set β} {l : αβγ} {u₁ : βγα} {u₂ : αγβ} (h₁ : ∀ (b : β), GaloisConnection (Function.swap l b) (u₁ b)) (h₂ : ∀ (a : α), GaloisConnection (l a) (u₂ a)) :
supₛ (Set.image2 l s t) = l (supₛ s) (supₛ t)
theorem supₛ_image2_eq_supₛ_infₛ {α : Type u} {β : Type v} {γ : Type w} [inst : CompleteLattice α] [inst : CompleteLattice β] [inst : CompleteLattice γ] {s : Set α} {t : Set β} {l : αβγ} {u₁ : βγα} {u₂ : αγβ} (h₁ : ∀ (b : β), GaloisConnection (Function.swap l b) (u₁ b)) (h₂ : ∀ (a : α), GaloisConnection (l a OrderDual.ofDual) (OrderDual.toDual u₂ a)) :
supₛ (Set.image2 l s t) = l (supₛ s) (infₛ t)
theorem supₛ_image2_eq_infₛ_supₛ {α : Type u} {β : Type v} {γ : Type w} [inst : CompleteLattice α] [inst : CompleteLattice β] [inst : CompleteLattice γ] {s : Set α} {t : Set β} {l : αβγ} {u₁ : βγα} {u₂ : αγβ} (h₁ : ∀ (b : β), GaloisConnection (Function.swap l b OrderDual.ofDual) (OrderDual.toDual u₁ b)) (h₂ : ∀ (a : α), GaloisConnection (l a) (u₂ a)) :
supₛ (Set.image2 l s t) = l (infₛ s) (supₛ t)
theorem supₛ_image2_eq_infₛ_infₛ {α : Type u} {β : Type v} {γ : Type w} [inst : CompleteLattice α] [inst : CompleteLattice β] [inst : CompleteLattice γ] {s : Set α} {t : Set β} {l : αβγ} {u₁ : βγα} {u₂ : αγβ} (h₁ : ∀ (b : β), GaloisConnection (Function.swap l b OrderDual.ofDual) (OrderDual.toDual u₁ b)) (h₂ : ∀ (a : α), GaloisConnection (l a OrderDual.ofDual) (OrderDual.toDual u₂ a)) :
supₛ (Set.image2 l s t) = l (infₛ s) (infₛ t)
theorem infₛ_image2_eq_infₛ_infₛ {α : Type u} {β : Type v} {γ : Type w} [inst : CompleteLattice α] [inst : CompleteLattice β] [inst : CompleteLattice γ] {s : Set α} {t : Set β} {u : αβγ} {l₁ : βγα} {l₂ : αγβ} (h₁ : ∀ (b : β), GaloisConnection (l₁ b) (Function.swap u b)) (h₂ : ∀ (a : α), GaloisConnection (l₂ a) (u a)) :
infₛ (Set.image2 u s t) = u (infₛ s) (infₛ t)
theorem infₛ_image2_eq_infₛ_supₛ {α : Type u} {β : Type v} {γ : Type w} [inst : CompleteLattice α] [inst : CompleteLattice β] [inst : CompleteLattice γ] {s : Set α} {t : Set β} {u : αβγ} {l₁ : βγα} {l₂ : αγβ} (h₁ : ∀ (b : β), GaloisConnection (l₁ b) (Function.swap u b)) (h₂ : ∀ (a : α), GaloisConnection (OrderDual.toDual l₂ a) (u a OrderDual.ofDual)) :
infₛ (Set.image2 u s t) = u (infₛ s) (supₛ t)
theorem infₛ_image2_eq_supₛ_infₛ {α : Type u} {β : Type v} {γ : Type w} [inst : CompleteLattice α] [inst : CompleteLattice β] [inst : CompleteLattice γ] {s : Set α} {t : Set β} {u : αβγ} {l₁ : βγα} {l₂ : αγβ} (h₁ : ∀ (b : β), GaloisConnection (OrderDual.toDual l₁ b) (Function.swap u b OrderDual.ofDual)) (h₂ : ∀ (a : α), GaloisConnection (l₂ a) (u a)) :
infₛ (Set.image2 u s t) = u (supₛ s) (infₛ t)
theorem infₛ_image2_eq_supₛ_supₛ {α : Type u} {β : Type v} {γ : Type w} [inst : CompleteLattice α] [inst : CompleteLattice β] [inst : CompleteLattice γ] {s : Set α} {t : Set β} {u : αβγ} {l₁ : βγα} {l₂ : αγβ} (h₁ : ∀ (b : β), GaloisConnection (OrderDual.toDual l₁ b) (Function.swap u b OrderDual.ofDual)) (h₂ : ∀ (a : α), GaloisConnection (OrderDual.toDual l₂ a) (u a OrderDual.ofDual)) :
infₛ (Set.image2 u s t) = u (supₛ s) (supₛ t)
@[simp]
theorem OrderIso.bddAbove_image {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] (e : α ≃o β) {s : Set α} :
BddAbove ((RelIso.toRelEmbedding e).toEmbedding '' s) BddAbove s
@[simp]
theorem OrderIso.bddBelow_image {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] (e : α ≃o β) {s : Set α} :
BddBelow ((RelIso.toRelEmbedding e).toEmbedding '' s) BddBelow s
@[simp]
theorem OrderIso.bddAbove_preimage {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] (e : α ≃o β) {s : Set β} :
@[simp]
theorem OrderIso.bddBelow_preimage {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] (e : α ≃o β) {s : Set β} :
theorem Nat.galoisConnection_mul_div {k : } (h : 0 < k) :
GaloisConnection (fun n => n * k) fun n => n / k
structure GaloisInsertion {α : Type u_1} {β : Type u_2} [inst : Preorder α] [inst : Preorder β] (l : αβ) (u : βα) :
Type (maxu_1u_2)
  • A contructive choice function for images of l.

    choice : (x : α) → u (l x) xβ
  • The Galois connection associated to a Galois insertion.

  • Main property of a Galois insertion.

    le_l_u : ∀ (x : β), x l (u x)
  • Property of the choice function.

    choice_eq : ∀ (a : α) (h : u (l a) a), choice a h = l a

A Galois insertion is a Galois connection where l ∘ u = id∘ u = id. It also contains a constructive choice function, to give better definitional equalities when lifting order structures. Dual to GaloisCoinsertion

Instances For
    def GaloisInsertion.monotoneIntro {α : Type u_1} {β : Type u_2} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (hu : Monotone u) (hl : Monotone l) (hul : ∀ (a : α), a u (l a)) (hlu : ∀ (b : β), l (u b) = b) :

    A constructor for a Galois insertion with the trivial choice function.

    Equations
    • One or more equations did not get rendered due to their size.
    def OrderIso.toGaloisInsertion {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] (oi : α ≃o β) :

    Makes a Galois insertion from an order-preserving bijection.

    Equations
    • One or more equations did not get rendered due to their size.
    def GaloisConnection.toGaloisInsertion {α : Type u_1} {β : Type u_2} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) (h : ∀ (b : β), b l (u b)) :

    Make a GaloisInsertion l u from a GaloisConnection l u such that ∀ b, b ≤ l (u b)∀ b, b ≤ l (u b)≤ l (u b)

    Equations
    • One or more equations did not get rendered due to their size.
    def GaloisConnection.liftOrderBot {α : Type u_1} {β : Type u_2} [inst : Preorder α] [inst : OrderBot α] [inst : PartialOrder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :

    Lift the bottom along a Galois connection

    Equations
    theorem GaloisInsertion.l_u_eq {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : Preorder α] [inst : PartialOrder β] (gi : GaloisInsertion l u) (b : β) :
    l (u b) = b
    theorem GaloisInsertion.leftInverse_l_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : Preorder α] [inst : PartialOrder β] (gi : GaloisInsertion l u) :
    theorem GaloisInsertion.l_surjective {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : Preorder α] [inst : PartialOrder β] (gi : GaloisInsertion l u) :
    theorem GaloisInsertion.u_injective {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : Preorder α] [inst : PartialOrder β] (gi : GaloisInsertion l u) :
    theorem GaloisInsertion.l_sup_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : SemilatticeSup α] [inst : SemilatticeSup β] (gi : GaloisInsertion l u) (a : β) (b : β) :
    l (u a u b) = a b
    theorem GaloisInsertion.l_supᵢ_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisInsertion l u) {ι : Sort x} (f : ιβ) :
    l (i, u (f i)) = i, f i
    theorem GaloisInsertion.l_bsupᵢ_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisInsertion l u) {ι : Sort x} {p : ιProp} (f : (i : ι) → p iβ) :
    l (i, hi, u (f i hi)) = i, hi, f i hi
    theorem GaloisInsertion.l_supₛ_u_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisInsertion l u) (s : Set β) :
    l (supₛ (u '' s)) = supₛ s
    theorem GaloisInsertion.l_inf_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : SemilatticeInf α] [inst : SemilatticeInf β] (gi : GaloisInsertion l u) (a : β) (b : β) :
    l (u a u b) = a b
    theorem GaloisInsertion.l_infᵢ_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisInsertion l u) {ι : Sort x} (f : ιβ) :
    l (i, u (f i)) = i, f i
    theorem GaloisInsertion.l_binfᵢ_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisInsertion l u) {ι : Sort x} {p : ιProp} (f : (i : ι) → p iβ) :
    l (i, hi, u (f i hi)) = i, hi, f i hi
    theorem GaloisInsertion.l_infₛ_u_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisInsertion l u) (s : Set β) :
    l (infₛ (u '' s)) = infₛ s
    theorem GaloisInsertion.l_infᵢ_of_ul_eq_self {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisInsertion l u) {ι : Sort x} (f : ια) (hf : ∀ (i : ι), u (l (f i)) = f i) :
    l (i, f i) = i, l (f i)
    theorem GaloisInsertion.l_binfᵢ_of_ul_eq_self {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisInsertion l u) {ι : Sort x} {p : ιProp} (f : (i : ι) → p iα) (hf : ∀ (i : ι) (hi : p i), u (l (f i hi)) = f i hi) :
    l (i, hi, f i hi) = i, hi, l (f i hi)
    theorem GaloisInsertion.u_le_u_iff {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : Preorder α] [inst : Preorder β] (gi : GaloisInsertion l u) {a : β} {b : β} :
    u a u b a b
    theorem GaloisInsertion.strictMono_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : Preorder α] [inst : Preorder β] (gi : GaloisInsertion l u) :
    theorem GaloisInsertion.isLUB_of_u_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : Preorder α] [inst : Preorder β] (gi : GaloisInsertion l u) {s : Set β} {a : α} (hs : IsLUB (u '' s) a) :
    IsLUB s (l a)
    theorem GaloisInsertion.isGLB_of_u_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : Preorder α] [inst : Preorder β] (gi : GaloisInsertion l u) {s : Set β} {a : α} (hs : IsGLB (u '' s) a) :
    IsGLB s (l a)
    def GaloisInsertion.liftSemilatticeSup {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder β] [inst : SemilatticeSup α] (gi : GaloisInsertion l u) :

    Lift the suprema along a Galois insertion

    Equations
    • One or more equations did not get rendered due to their size.
    def GaloisInsertion.liftSemilatticeInf {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder β] [inst : SemilatticeInf α] (gi : GaloisInsertion l u) :

    Lift the infima along a Galois insertion

    Equations
    def GaloisInsertion.liftLattice {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder β] [inst : Lattice α] (gi : GaloisInsertion l u) :

    Lift the suprema and infima along a Galois insertion

    Equations
    • One or more equations did not get rendered due to their size.
    def GaloisInsertion.liftOrderTop {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder β] [inst : Preorder α] [inst : OrderTop α] (gi : GaloisInsertion l u) :

    Lift the top along a Galois insertion

    Equations
    def GaloisInsertion.liftBoundedOrder {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder β] [inst : Preorder α] [inst : BoundedOrder α] (gi : GaloisInsertion l u) :

    Lift the top, bottom, suprema, and infima along a Galois insertion

    Equations
    def GaloisInsertion.liftCompleteLattice {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder β] [inst : CompleteLattice α] (gi : GaloisInsertion l u) :

    Lift all suprema and infima along a Galois insertion

    Equations
    • One or more equations did not get rendered due to their size.
    structure GaloisCoinsertion {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] (l : αβ) (u : βα) :
    Type (maxuv)
    • A contructive choice function for images of u.

      choice : (x : β) → x l (u x)α
    • The Galois connection associated to a Galois coinsertion.

    • Main property of a Galois coinsertion.

      u_l_le : ∀ (x : α), u (l x) x
    • Property of the choice function.

      choice_eq : ∀ (a : β) (h : a l (u a)), choice a h = u a

    A Galois coinsertion is a Galois connection where u ∘ l = id∘ l = id. It also contains a constructive choice function, to give better definitional equalities when lifting order structures. Dual to GaloisInsertion

    Instances For
      def GaloisCoinsertion.dual {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} :
      GaloisCoinsertion l uGaloisInsertion (OrderDual.toDual u OrderDual.ofDual) (OrderDual.toDual l OrderDual.ofDual)

      Make a GaloisInsertion between αᵒᵈ and βᵒᵈ from a GaloisCoinsertion between α and β.

      Equations
      • One or more equations did not get rendered due to their size.
      def GaloisInsertion.dual {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} :
      GaloisInsertion l uGaloisCoinsertion (OrderDual.toDual u OrderDual.ofDual) (OrderDual.toDual l OrderDual.ofDual)

      Make a GaloisCoinsertion between αᵒᵈ and βᵒᵈ from a GaloisInsertion between α and β.

      Equations
      • One or more equations did not get rendered due to their size.
      def GaloisCoinsertion.ofDual {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αᵒᵈβᵒᵈ} {u : βᵒᵈαᵒᵈ} :
      GaloisCoinsertion l uGaloisInsertion (OrderDual.ofDual u OrderDual.toDual) (OrderDual.ofDual l OrderDual.toDual)

      Make a GaloisInsertion between α and β from a GaloisCoinsertion between αᵒᵈ and βᵒᵈ.

      Equations
      • One or more equations did not get rendered due to their size.
      def GaloisInsertion.ofDual {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αᵒᵈβᵒᵈ} {u : βᵒᵈαᵒᵈ} :
      GaloisInsertion l uGaloisCoinsertion (OrderDual.ofDual u OrderDual.toDual) (OrderDual.ofDual l OrderDual.toDual)

      Make a GaloisCoinsertion between α and β from a GaloisInsertion between αᵒᵈ and βᵒᵈ.

      Equations
      • One or more equations did not get rendered due to their size.
      def OrderIso.toGaloisCoinsertion {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] (oi : α ≃o β) :

      Makes a Galois coinsertion from an order-preserving bijection.

      Equations
      • One or more equations did not get rendered due to their size.
      def GaloisCoinsertion.monotoneIntro {α : Type u} {β : Type v} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (hu : Monotone u) (hl : Monotone l) (hlu : ∀ (b : β), l (u b) b) (hul : ∀ (a : α), u (l a) = a) :

      A constructor for a Galois coinsertion with the trivial choice function.

      Equations
      • One or more equations did not get rendered due to their size.
      def GaloisConnection.toGaloisCoinsertion {α : Type u_1} {β : Type u_2} [inst : Preorder α] [inst : Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) (h : ∀ (a : α), u (l a) a) :

      Make a GaloisCoinsertion l u from a GaloisConnection l u such that ∀ b, b ≤ l (u b)∀ b, b ≤ l (u b)≤ l (u b)

      Equations
      • One or more equations did not get rendered due to their size.
      def GaloisConnection.liftOrderTop {α : Type u_1} {β : Type u_2} [inst : PartialOrder α] [inst : Preorder β] [inst : OrderTop β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :

      Lift the top along a Galois connection

      Equations
      theorem GaloisCoinsertion.u_l_eq {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder α] [inst : Preorder β] (gi : GaloisCoinsertion l u) (a : α) :
      u (l a) = a
      theorem GaloisCoinsertion.u_l_leftInverse {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder α] [inst : Preorder β] (gi : GaloisCoinsertion l u) :
      theorem GaloisCoinsertion.u_surjective {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder α] [inst : Preorder β] (gi : GaloisCoinsertion l u) :
      theorem GaloisCoinsertion.l_injective {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder α] [inst : Preorder β] (gi : GaloisCoinsertion l u) :
      theorem GaloisCoinsertion.u_inf_l {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : SemilatticeInf α] [inst : SemilatticeInf β] (gi : GaloisCoinsertion l u) (a : α) (b : α) :
      u (l a l b) = a b
      theorem GaloisCoinsertion.u_infᵢ_l {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisCoinsertion l u) {ι : Sort x} (f : ια) :
      u (i, l (f i)) = i, f i
      theorem GaloisCoinsertion.u_infₛ_l_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisCoinsertion l u) (s : Set α) :
      u (infₛ (l '' s)) = infₛ s
      theorem GaloisCoinsertion.u_sup_l {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : SemilatticeSup α] [inst : SemilatticeSup β] (gi : GaloisCoinsertion l u) (a : α) (b : α) :
      u (l a l b) = a b
      theorem GaloisCoinsertion.u_supᵢ_l {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisCoinsertion l u) {ι : Sort x} (f : ια) :
      u (i, l (f i)) = i, f i
      theorem GaloisCoinsertion.u_bsupᵢ_l {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisCoinsertion l u) {ι : Sort x} {p : ιProp} (f : (i : ι) → p iα) :
      u (i, hi, l (f i hi)) = i, hi, f i hi
      theorem GaloisCoinsertion.u_supₛ_l_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisCoinsertion l u) (s : Set α) :
      u (supₛ (l '' s)) = supₛ s
      theorem GaloisCoinsertion.u_supᵢ_of_lu_eq_self {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisCoinsertion l u) {ι : Sort x} (f : ιβ) (hf : ∀ (i : ι), l (u (f i)) = f i) :
      u (i, f i) = i, u (f i)
      theorem GaloisCoinsertion.u_bsupᵢ_of_lu_eq_self {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : CompleteLattice α] [inst : CompleteLattice β] (gi : GaloisCoinsertion l u) {ι : Sort x} {p : ιProp} (f : (i : ι) → p iβ) (hf : ∀ (i : ι) (hi : p i), l (u (f i hi)) = f i hi) :
      u (i, hi, f i hi) = i, hi, u (f i hi)
      theorem GaloisCoinsertion.l_le_l_iff {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : Preorder α] [inst : Preorder β] (gi : GaloisCoinsertion l u) {a : α} {b : α} :
      l a l b a b
      theorem GaloisCoinsertion.strictMono_l {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : Preorder α] [inst : Preorder β] (gi : GaloisCoinsertion l u) :
      theorem GaloisCoinsertion.isGLB_of_l_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : Preorder α] [inst : Preorder β] (gi : GaloisCoinsertion l u) {s : Set α} {a : β} (hs : IsGLB (l '' s) a) :
      IsGLB s (u a)
      theorem GaloisCoinsertion.isLUB_of_l_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : Preorder α] [inst : Preorder β] (gi : GaloisCoinsertion l u) {s : Set α} {a : β} (hs : IsLUB (l '' s) a) :
      IsLUB s (u a)
      def GaloisCoinsertion.liftSemilatticeInf {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder α] [inst : SemilatticeInf β] (gi : GaloisCoinsertion l u) :

      Lift the infima along a Galois coinsertion

      Equations
      def GaloisCoinsertion.liftSemilatticeSup {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder α] [inst : SemilatticeSup β] (gi : GaloisCoinsertion l u) :

      Lift the suprema along a Galois coinsertion

      Equations
      def GaloisCoinsertion.liftLattice {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder α] [inst : Lattice β] (gi : GaloisCoinsertion l u) :

      Lift the suprema and infima along a Galois coinsertion

      Equations
      • One or more equations did not get rendered due to their size.
      def GaloisCoinsertion.liftOrderBot {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder α] [inst : Preorder β] [inst : OrderBot β] (gi : GaloisCoinsertion l u) :

      Lift the bot along a Galois coinsertion

      Equations
      def GaloisCoinsertion.liftBoundedOrder {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder α] [inst : Preorder β] [inst : BoundedOrder β] (gi : GaloisCoinsertion l u) :

      Lift the top, bottom, suprema, and infima along a Galois coinsertion

      Equations
      def GaloisCoinsertion.liftCompleteLattice {α : Type u} {β : Type v} {l : αβ} {u : βα} [inst : PartialOrder α] [inst : CompleteLattice β] (gi : GaloisCoinsertion l u) :

      Lift all suprema and infima along a Galois coinsertion

      Equations
      • One or more equations did not get rendered due to their size.
      def WithBot.giUnbot'Bot {α : Type u} [inst : Preorder α] [inst : OrderBot α] :

      If α is a partial order with bottom element (e.g., , ℝ≥0≥0), then WithBot.unbot' ⊥⊥ and coercion form a Galois insertion.

      Equations
      • One or more equations did not get rendered due to their size.