Documentation

Mathlib.Order.GaloisConnection.Basic

Galois connections, insertions and coinsertions #

This file contains basic results on Galois connections, insertions and coinsertions in various order structures, and provides constructions that lift order structures from one type to another.

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). 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. When ↑(closure 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.

theorem GaloisConnection.upperBounds_l_image {α : Type u} {β : Type v} [Preorder α] [Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) (s : Set α) :
theorem GaloisConnection.lowerBounds_u_image {α : Type u} {β : Type v} [Preorder α] [Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) (s : Set β) :
theorem GaloisConnection.bddAbove_l_image {α : Type u} {β : Type v} [Preorder α] [Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {s : Set α} :
theorem GaloisConnection.bddBelow_u_image {α : Type u} {β : Type v} [Preorder α] [Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {s : Set β} :
theorem GaloisConnection.isLUB_l_image {α : Type u} {β : Type v} [Preorder α] [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} [Preorder α] [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} [Preorder α] [Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {a : α} :
IsLeast {b : β | a u b} (l a)
theorem GaloisConnection.isGreatest_u {α : Type u} {β : Type v} [Preorder α] [Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {b : β} :
IsGreatest {a : α | l a b} (u b)
theorem GaloisConnection.isGLB_l {α : Type u} {β : Type v} [Preorder α] [Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {a : α} :
IsGLB {b : β | a u b} (l a)
theorem GaloisConnection.isLUB_u {α : Type u} {β : Type v} [Preorder α] [Preorder β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {b : β} :
IsLUB {a : α | l a b} (u b)
theorem GaloisConnection.l_sup {α : Type u} {β : Type v} {a₁ a₂ : α} [SemilatticeSup α] [SemilatticeSup β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :
l (a₁ a₂) = l a₁ l a₂
theorem GaloisConnection.u_inf {α : Type u} {β : Type v} {b₁ b₂ : β} [SemilatticeInf α] [SemilatticeInf β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :
u (b₁ b₂) = u b₁ u b₂
theorem GaloisConnection.l_iSup {α : Type u} {β : Type v} {ι : Sort x} [CompleteLattice α] [CompleteLattice β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {f : ια} :
l (iSup f) = ⨆ (i : ι), l (f i)
theorem GaloisConnection.l_iSup₂ {α : Type u} {β : Type v} {ι : Sort x} {κ : ιSort u_1} [CompleteLattice α] [CompleteLattice β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {f : (i : ι) → κ iα} :
l (⨆ (i : ι), ⨆ (j : κ i), f i j) = ⨆ (i : ι), ⨆ (j : κ i), l (f i j)
theorem GaloisConnection.u_iInf {α : Type u} {β : Type v} {ι : Sort x} [CompleteLattice α] [CompleteLattice β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {f : ιβ} :
u (iInf f) = ⨅ (i : ι), u (f i)
theorem GaloisConnection.u_iInf₂ {α : Type u} {β : Type v} {ι : Sort x} {κ : ιSort u_1} [CompleteLattice α] [CompleteLattice β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {f : (i : ι) → κ iβ} :
u (⨅ (i : ι), ⨅ (j : κ i), f i j) = ⨅ (i : ι), ⨅ (j : κ i), u (f i j)
theorem GaloisConnection.l_sSup {α : Type u} {β : Type v} [CompleteLattice α] [CompleteLattice β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {s : Set α} :
l (sSup s) = as, l a
theorem GaloisConnection.u_sInf {α : Type u} {β : Type v} [CompleteLattice α] [CompleteLattice β] {l : αβ} {u : βα} (gc : GaloisConnection l u) {s : Set β} :
u (sInf s) = as, u a
theorem GaloisConnection.compl {α : Type u} {β : Type v} [BooleanAlgebra α] [BooleanAlgebra β] {l : αβ} {u : βα} (gc : GaloisConnection l u) :

sSup and Iic form a Galois connection.

toDual ∘ Ici and sInf ∘ ofDual form a Galois connection.

theorem sSup_image2_eq_sSup_sSup {α : Type u} {β : Type v} {γ : Type w} [CompleteLattice α] [CompleteLattice β] [CompleteLattice γ] {s : Set α} {t : Set β} {l : αβγ} {u₁ : βγα} {u₂ : αγβ} (h₁ : ∀ (b : β), GaloisConnection (Function.swap l b) (u₁ b)) (h₂ : ∀ (a : α), GaloisConnection (l a) (u₂ a)) :
sSup (Set.image2 l s t) = l (sSup s) (sSup t)
theorem sSup_image2_eq_sSup_sInf {α : Type u} {β : Type v} {γ : Type w} [CompleteLattice α] [CompleteLattice β] [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)) :
sSup (Set.image2 l s t) = l (sSup s) (sInf t)
theorem sSup_image2_eq_sInf_sSup {α : Type u} {β : Type v} {γ : Type w} [CompleteLattice α] [CompleteLattice β] [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)) :
sSup (Set.image2 l s t) = l (sInf s) (sSup t)
theorem sSup_image2_eq_sInf_sInf {α : Type u} {β : Type v} {γ : Type w} [CompleteLattice α] [CompleteLattice β] [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)) :
sSup (Set.image2 l s t) = l (sInf s) (sInf t)
theorem sInf_image2_eq_sInf_sInf {α : Type u} {β : Type v} {γ : Type w} [CompleteLattice α] [CompleteLattice β] [CompleteLattice γ] {s : Set α} {t : Set β} {u : αβγ} {l₁ : βγα} {l₂ : αγβ} (h₁ : ∀ (b : β), GaloisConnection (l₁ b) (Function.swap u b)) (h₂ : ∀ (a : α), GaloisConnection (l₂ a) (u a)) :
sInf (Set.image2 u s t) = u (sInf s) (sInf t)
theorem sInf_image2_eq_sInf_sSup {α : Type u} {β : Type v} {γ : Type w} [CompleteLattice α] [CompleteLattice β] [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)) :
sInf (Set.image2 u s t) = u (sInf s) (sSup t)
theorem sInf_image2_eq_sSup_sInf {α : Type u} {β : Type v} {γ : Type w} [CompleteLattice α] [CompleteLattice β] [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)) :
sInf (Set.image2 u s t) = u (sSup s) (sInf t)
theorem sInf_image2_eq_sSup_sSup {α : Type u} {β : Type v} {γ : Type w} [CompleteLattice α] [CompleteLattice β] [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)) :
sInf (Set.image2 u s t) = u (sSup s) (sSup t)
@[simp]
theorem OrderIso.bddAbove_image {α : Type u} {β : Type v} [Preorder α] [Preorder β] (e : α ≃o β) {s : Set α} :
BddAbove (e '' s) BddAbove s
@[simp]
theorem OrderIso.bddBelow_image {α : Type u} {β : Type v} [Preorder α] [Preorder β] (e : α ≃o β) {s : Set α} :
BddBelow (e '' s) BddBelow s
@[simp]
theorem OrderIso.bddAbove_preimage {α : Type u} {β : Type v} [Preorder α] [Preorder β] (e : α ≃o β) {s : Set β} :
@[simp]
theorem OrderIso.bddBelow_preimage {α : Type u} {β : Type v} [Preorder α] [Preorder β] (e : α ≃o β) {s : Set β} :
theorem Nat.galoisConnection_mul_div {k : } (h : 0 < k) :
GaloisConnection (fun (n : ) => n * k) fun (n : ) => n / k
theorem GaloisInsertion.l_sup_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [SemilatticeSup α] [SemilatticeSup β] (gi : GaloisInsertion l u) (a b : β) :
l (u a u b) = a b
theorem GaloisInsertion.l_iSup_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [CompleteLattice β] (gi : GaloisInsertion l u) {ι : Sort x} (f : ιβ) :
l (⨆ (i : ι), u (f i)) = ⨆ (i : ι), f i
theorem GaloisInsertion.l_biSup_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [CompleteLattice β] (gi : GaloisInsertion l u) {ι : Sort x} {p : ιProp} (f : (i : ι) → p iβ) :
l (⨆ (i : ι), ⨆ (hi : p i), u (f i hi)) = ⨆ (i : ι), ⨆ (hi : p i), f i hi
theorem GaloisInsertion.l_sSup_u_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [CompleteLattice β] (gi : GaloisInsertion l u) (s : Set β) :
l (sSup (u '' s)) = sSup s
theorem GaloisInsertion.l_inf_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [SemilatticeInf α] [SemilatticeInf β] (gi : GaloisInsertion l u) (a b : β) :
l (u a u b) = a b
theorem GaloisInsertion.l_iInf_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [CompleteLattice β] (gi : GaloisInsertion l u) {ι : Sort x} (f : ιβ) :
l (⨅ (i : ι), u (f i)) = ⨅ (i : ι), f i
theorem GaloisInsertion.l_biInf_u {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [CompleteLattice β] (gi : GaloisInsertion l u) {ι : Sort x} {p : ιProp} (f : (i : ι) → p iβ) :
l (⨅ (i : ι), ⨅ (hi : p i), u (f i hi)) = ⨅ (i : ι), ⨅ (hi : p i), f i hi
theorem GaloisInsertion.l_sInf_u_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [CompleteLattice β] (gi : GaloisInsertion l u) (s : Set β) :
l (sInf (u '' s)) = sInf s
theorem GaloisInsertion.l_iInf_of_ul_eq_self {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [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_biInf_of_ul_eq_self {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [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 : p i), f i hi) = ⨅ (i : ι), ⨅ (hi : p i), l (f i hi)
theorem GaloisInsertion.isLUB_of_u_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [Preorder α] [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 : βα} [Preorder α] [Preorder β] (gi : GaloisInsertion l u) {s : Set β} {a : α} (hs : IsGLB (u '' s) a) :
IsGLB s (l a)
@[reducible, inline]
abbrev GaloisInsertion.liftSemilatticeSup {α : Type u} {β : Type v} {l : αβ} {u : βα} [PartialOrder β] [SemilatticeSup α] (gi : GaloisInsertion l u) :

Lift the suprema along a Galois insertion

Equations
Instances For
    @[reducible, inline]
    abbrev GaloisInsertion.liftSemilatticeInf {α : Type u} {β : Type v} {l : αβ} {u : βα} [PartialOrder β] [SemilatticeInf α] (gi : GaloisInsertion l u) :

    Lift the infima along a Galois insertion

    Equations
    Instances For
      @[reducible, inline]
      abbrev GaloisInsertion.liftLattice {α : Type u} {β : Type v} {l : αβ} {u : βα} [PartialOrder β] [Lattice α] (gi : GaloisInsertion l u) :

      Lift the suprema and infima along a Galois insertion

      Equations
      Instances For
        @[reducible, inline]
        abbrev GaloisInsertion.liftOrderTop {α : Type u} {β : Type v} {l : αβ} {u : βα} [PartialOrder β] [Preorder α] [OrderTop α] (gi : GaloisInsertion l u) :

        Lift the top along a Galois insertion

        Equations
        Instances For
          @[reducible, inline]
          abbrev GaloisInsertion.liftBoundedOrder {α : Type u} {β : Type v} {l : αβ} {u : βα} [PartialOrder β] [Preorder α] [BoundedOrder α] (gi : GaloisInsertion l u) :

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

          Equations
          Instances For
            @[reducible, inline]
            abbrev GaloisInsertion.liftCompleteLattice {α : Type u} {β : Type v} {l : αβ} {u : βα} [PartialOrder β] [CompleteLattice α] (gi : GaloisInsertion l u) :

            Lift all suprema and infima along a Galois insertion

            Equations
            Instances For
              theorem GaloisCoinsertion.u_inf_l {α : Type u} {β : Type v} {l : αβ} {u : βα} [SemilatticeInf α] [SemilatticeInf β] (gi : GaloisCoinsertion l u) (a b : α) :
              u (l a l b) = a b
              theorem GaloisCoinsertion.u_iInf_l {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [CompleteLattice β] (gi : GaloisCoinsertion l u) {ι : Sort x} (f : ια) :
              u (⨅ (i : ι), l (f i)) = ⨅ (i : ι), f i
              theorem GaloisCoinsertion.u_sInf_l_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [CompleteLattice β] (gi : GaloisCoinsertion l u) (s : Set α) :
              u (sInf (l '' s)) = sInf s
              theorem GaloisCoinsertion.u_sup_l {α : Type u} {β : Type v} {l : αβ} {u : βα} [SemilatticeSup α] [SemilatticeSup β] (gi : GaloisCoinsertion l u) (a b : α) :
              u (l a l b) = a b
              theorem GaloisCoinsertion.u_iSup_l {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [CompleteLattice β] (gi : GaloisCoinsertion l u) {ι : Sort x} (f : ια) :
              u (⨆ (i : ι), l (f i)) = ⨆ (i : ι), f i
              theorem GaloisCoinsertion.u_biSup_l {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [CompleteLattice β] (gi : GaloisCoinsertion l u) {ι : Sort x} {p : ιProp} (f : (i : ι) → p iα) :
              u (⨆ (i : ι), ⨆ (hi : p i), l (f i hi)) = ⨆ (i : ι), ⨆ (hi : p i), f i hi
              theorem GaloisCoinsertion.u_sSup_l_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [CompleteLattice β] (gi : GaloisCoinsertion l u) (s : Set α) :
              u (sSup (l '' s)) = sSup s
              theorem GaloisCoinsertion.u_iSup_of_lu_eq_self {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [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_biSup_of_lu_eq_self {α : Type u} {β : Type v} {l : αβ} {u : βα} [CompleteLattice α] [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 : p i), f i hi) = ⨆ (i : ι), ⨆ (hi : p i), u (f i hi)
              theorem GaloisCoinsertion.isGLB_of_l_image {α : Type u} {β : Type v} {l : αβ} {u : βα} [Preorder α] [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 : βα} [Preorder α] [Preorder β] (gi : GaloisCoinsertion l u) {s : Set α} {a : β} (hs : IsLUB (l '' s) a) :
              IsLUB s (u a)
              @[reducible, inline]
              abbrev GaloisCoinsertion.liftSemilatticeInf {α : Type u} {β : Type v} {l : αβ} {u : βα} [PartialOrder α] [SemilatticeInf β] (gi : GaloisCoinsertion l u) :

              Lift the infima along a Galois coinsertion

              Equations
              Instances For
                @[reducible, inline]
                abbrev GaloisCoinsertion.liftSemilatticeSup {α : Type u} {β : Type v} {l : αβ} {u : βα} [PartialOrder α] [SemilatticeSup β] (gi : GaloisCoinsertion l u) :

                Lift the suprema along a Galois coinsertion

                Equations
                Instances For
                  @[reducible, inline]
                  abbrev GaloisCoinsertion.liftLattice {α : Type u} {β : Type v} {l : αβ} {u : βα} [PartialOrder α] [Lattice β] (gi : GaloisCoinsertion l u) :

                  Lift the suprema and infima along a Galois coinsertion

                  Equations
                  Instances For
                    @[reducible, inline]
                    abbrev GaloisCoinsertion.liftOrderBot {α : Type u} {β : Type v} {l : αβ} {u : βα} [PartialOrder α] [Preorder β] [OrderBot β] (gi : GaloisCoinsertion l u) :

                    Lift the bot along a Galois coinsertion

                    Equations
                    Instances For
                      @[reducible, inline]
                      abbrev GaloisCoinsertion.liftBoundedOrder {α : Type u} {β : Type v} {l : αβ} {u : βα} [PartialOrder α] [Preorder β] [BoundedOrder β] (gi : GaloisCoinsertion l u) :

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

                      Equations
                      Instances For
                        @[reducible, inline]
                        abbrev GaloisCoinsertion.liftCompleteLattice {α : Type u} {β : Type v} {l : αβ} {u : βα} [PartialOrder α] [CompleteLattice β] (gi : GaloisCoinsertion l u) :

                        Lift all suprema and infima along a Galois coinsertion

                        Equations
                        Instances For

                          sSup and Iic form a Galois insertion.

                          Equations
                          Instances For

                            toDual ∘ Ici and sInf ∘ ofDual form a Galois coinsertion.

                            Equations
                            Instances For

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

                              Equations
                              Instances For