File: Mathlib/Order/CompleteBooleanAlgebra.lean

full_name: Order.Frame.MinimalAxioms
code: /-- Structure containing the minimal axioms required to check that an order is a frame. Do NOT use,
except for implementing `Order.Frame` via `Order.Frame.ofMinimalAxioms`.

This structure omits the `himp`, `compl` fields, which can be recovered using
`Order.Frame.ofMinimalAxioms`. -/
class Order.Frame.MinimalAxioms (α : Type u) extends CompleteLattice α where
  inf_sSup_le_iSup_inf (a : α) (s : Set α) : a ⊓ sSup s ≤ ⨆ b ∈ s, a ⊓ b
goal: Type u

full_name: Order.Frame.MinimalAxioms.inf_sSup_le_iSup_inf
code: /-- Structure containing the minimal axioms required to check that an order is a frame. Do NOT use,
except for implementing `Order.Frame` via `Order.Frame.ofMinimalAxioms`.

This structure omits the `himp`, `compl` fields, which can be recovered using
`Order.Frame.ofMinimalAxioms`. -/
class Order.Frame.MinimalAxioms (α : Type u) extends CompleteLattice α where
  inf_sSup_le_iSup_inf (a : α) (s : Set α) : a ⊓ sSup s ≤ ⨆ b ∈ s, a ⊓ b
goal: a ⊓ sSup s ≤ ⨆ b ∈ s, a ⊓ b

full_name: Order.Coframe.MinimalAxioms
code: /-- Structure containing the minimal axioms required to check that an order is a coframe. Do NOT
use, except for implementing `Order.Coframe` via `Order.Coframe.ofMinimalAxioms`.

This structure omits the `sdiff`, `hnot` fields, which can be recovered using
`Order.Coframe.ofMinimalAxioms`. -/
class Order.Coframe.MinimalAxioms (α : Type u) extends CompleteLattice α where
  iInf_sup_le_sup_sInf (a : α) (s : Set α) : ⨅ b ∈ s, a ⊔ b ≤ a ⊔ sInf s
goal: Type u

full_name: Order.Coframe.MinimalAxioms.iInf_sup_le_sup_sInf
code: /-- Structure containing the minimal axioms required to check that an order is a coframe. Do NOT
use, except for implementing `Order.Coframe` via `Order.Coframe.ofMinimalAxioms`.

This structure omits the `sdiff`, `hnot` fields, which can be recovered using
`Order.Coframe.ofMinimalAxioms`. -/
class Order.Coframe.MinimalAxioms (α : Type u) extends CompleteLattice α where
  iInf_sup_le_sup_sInf (a : α) (s : Set α) : ⨅ b ∈ s, a ⊔ b ≤ a ⊔ sInf s
goal: ⨅ b ∈ s, a ⊔ b ≤ a ⊔ sInf s

full_name: Order.Frame.inf_sSup_le_iSup_inf
code: /-- A frame, aka complete Heyting algebra, is a complete lattice whose `⊓` distributes over `⨆`. -/
class Order.Frame (α : Type*) extends CompleteLattice α, HeytingAlgebra α where
  /-- `⊓` distributes over `⨆`. -/
  inf_sSup_le_iSup_inf (a : α) (s : Set α) : a ⊓ sSup s ≤ ⨆ b ∈ s, a ⊓ b
goal: a ⊓ sSup s ≤ ⨆ b ∈ s, a ⊓ b

full_name: Order.Frame
code: /-- A frame, aka complete Heyting algebra, is a complete lattice whose `⊓` distributes over `⨆`. -/
class Order.Frame (α : Type*) extends CompleteLattice α, HeytingAlgebra α where
  /-- `⊓` distributes over `⨆`. -/
  inf_sSup_le_iSup_inf (a : α) (s : Set α) : a ⊓ sSup s ≤ ⨆ b ∈ s, a ⊓ b
goal: Type u_1

full_name: Order.Coframe.iInf_sup_le_sup_sInf
code: /-- A coframe, aka complete Brouwer algebra or complete co-Heyting algebra, is a complete lattice
whose `⊔` distributes over `⨅`. -/
class Order.Coframe (α : Type*) extends CompleteLattice α, CoheytingAlgebra α where
  /-- `⊔` distributes over `⨅`. -/
  iInf_sup_le_sup_sInf (a : α) (s : Set α) : ⨅ b ∈ s, a ⊔ b ≤ a ⊔ sInf s
goal: ⨅ b ∈ s, a ⊔ b ≤ a ⊔ sInf s

full_name: Order.Coframe
code: /-- A coframe, aka complete Brouwer algebra or complete co-Heyting algebra, is a complete lattice
whose `⊔` distributes over `⨅`. -/
class Order.Coframe (α : Type*) extends CompleteLattice α, CoheytingAlgebra α where
  /-- `⊔` distributes over `⨅`. -/
  iInf_sup_le_sup_sInf (a : α) (s : Set α) : ⨅ b ∈ s, a ⊔ b ≤ a ⊔ sInf s
goal: Type u_1

full_name: CompleteDistribLattice.MinimalAxioms
code: /-- Structure containing the minimal axioms required to check that an order is a complete
distributive lattice. Do NOT use, except for implementing `CompleteDistribLattice` via
`CompleteDistribLattice.ofMinimalAxioms`.

This structure omits the `himp`, `compl`, `sdiff`, `hnot` fields, which can be recovered using
`CompleteDistribLattice.ofMinimalAxioms`. -/
structure CompleteDistribLattice.MinimalAxioms (α : Type u)
    extends CompleteLattice α, Frame.MinimalAxioms α, Coframe.MinimalAxioms α where
goal: Type u

full_name: CompleteDistribLattice
code: /-- A complete distributive lattice is a complete lattice whose `⊔` and `⊓` respectively
distribute over `⨅` and `⨆`. -/
class CompleteDistribLattice (α : Type*) extends Frame α, Coframe α, BiheytingAlgebra α
goal: Type u_1

full_name: CompletelyDistribLattice.MinimalAxioms.iInf_iSup_eq
code: /-- Structure containing the minimal axioms required to check that an order is a completely
distributive. Do NOT use, except for implementing `CompletelyDistribLattice` via
`CompletelyDistribLattice.ofMinimalAxioms`.

This structure omits the `himp`, `compl`, `sdiff`, `hnot` fields, which can be recovered using
`CompletelyDistribLattice.ofMinimalAxioms`. -/
structure CompletelyDistribLattice.MinimalAxioms (α : Type u) extends CompleteLattice α where
  protected iInf_iSup_eq {ι : Type u} {κ : ι → Type u} (f : ∀ a, κ a → α) :
    (⨅ a, ⨆ b, f a b) = ⨆ g : ∀ a, κ a, ⨅ a, f a (g a)
goal: ⨅ a, ⨆ b, f a b = ⨆ g, ⨅ a, f a (g a)

full_name: CompletelyDistribLattice.MinimalAxioms
code: /-- Structure containing the minimal axioms required to check that an order is a completely
distributive. Do NOT use, except for implementing `CompletelyDistribLattice` via
`CompletelyDistribLattice.ofMinimalAxioms`.

This structure omits the `himp`, `compl`, `sdiff`, `hnot` fields, which can be recovered using
`CompletelyDistribLattice.ofMinimalAxioms`. -/
structure CompletelyDistribLattice.MinimalAxioms (α : Type u) extends CompleteLattice α where
  protected iInf_iSup_eq {ι : Type u} {κ : ι → Type u} (f : ∀ a, κ a → α) :
    (⨅ a, ⨆ b, f a b) = ⨆ g : ∀ a, κ a, ⨅ a, f a (g a)
goal: Type u

full_name: CompletelyDistribLattice
code: /-- A completely distributive lattice is a complete lattice whose `⨅` and `⨆`
distribute over each other. -/
class CompletelyDistribLattice (α : Type u) extends CompleteLattice α, BiheytingAlgebra α where
  protected iInf_iSup_eq {ι : Type u} {κ : ι → Type u} (f : ∀ a, κ a → α) :
    (⨅ a, ⨆ b, f a b) = ⨆ g : ∀ a, κ a, ⨅ a, f a (g a)
goal: Type u

full_name: CompletelyDistribLattice.iInf_iSup_eq
code: /-- A completely distributive lattice is a complete lattice whose `⨅` and `⨆`
distribute over each other. -/
class CompletelyDistribLattice (α : Type u) extends CompleteLattice α, BiheytingAlgebra α where
  protected iInf_iSup_eq {ι : Type u} {κ : ι → Type u} (f : ∀ a, κ a → α) :
    (⨅ a, ⨆ b, f a b) = ⨆ g : ∀ a, κ a, ⨅ a, f a (g a)
goal: ⨅ a, ⨆ b, f a b = ⨆ g, ⨅ a, f a (g a)

full_name: le_iInf_iSup
code: theorem le_iInf_iSup [CompleteLattice α] {f : ∀ a, κ a → α} :
    (⨆ g : ∀ a, κ a, ⨅ a, f a (g a)) ≤ ⨅ a, ⨆ b, f a b 
goal: ⨆ g, ⨅ a, f a (g a) ≤ ⨅ a, ⨆ b, f a b

full_name: iSup_iInf_le
code: lemma iSup_iInf_le [CompleteLattice α] {f : ∀ a, κ a → α} :
    ⨆ a, ⨅ b, f a b ≤ ⨅ g : ∀ a, κ a, ⨆ a, f a (g a) 
goal: ⨆ a, ⨅ b, f a b ≤ ⨅ g, ⨆ a, f a (g a)

full_name: Order.Frame.MinimalAxioms.inf_sSup_eq
code: lemma inf_sSup_eq : a ⊓ sSup s = ⨆ b ∈ s, a ⊓ b 
goal: a ⊓ sSup s = ⨆ b ∈ s, a ⊓ b

full_name: Order.Frame.MinimalAxioms.sSup_inf_eq
code: lemma sSup_inf_eq : sSup s ⊓ b = ⨆ a ∈ s, a ⊓ b 
goal: sSup s ⊓ b = ⨆ a ∈ s, a ⊓ b

full_name: Order.Frame.MinimalAxioms.iSup_inf_eq
code: lemma iSup_inf_eq (f : ι → α) (a : α) : (⨆ i, f i) ⊓ a = ⨆ i, f i ⊓ a 
goal: (⨆ i, f i) ⊓ a = ⨆ i, f i ⊓ a

full_name: Order.Frame.MinimalAxioms.inf_iSup_eq
code: lemma inf_iSup_eq (a : α) (f : ι → α) : (a ⊓ ⨆ i, f i) = ⨆ i, a ⊓ f i 
goal: a ⊓ ⨆ i, f i = ⨆ i, a ⊓ f i

full_name: Order.Frame.MinimalAxioms.inf_iSup₂_eq
code: lemma inf_iSup₂_eq {f : ∀ i, κ i → α} (a : α) : (a ⊓ ⨆ i, ⨆ j, f i j) = ⨆ i, ⨆ j, a ⊓ f i j 
goal: a ⊓ ⨆ i, ⨆ j, f i j = ⨆ i, ⨆ j, a ⊓ f i j

full_name: Order.Frame.MinimalAxioms.of
code: /-- The `Order.Frame.MinimalAxioms` element corresponding to a frame. -/
def of [Frame α] : MinimalAxioms α 
goal: Order.Frame.MinimalAxioms α

full_name: Order.Frame.ofMinimalAxioms
code: /-- Construct a frame instance using the minimal amount of work needed.

This sets `a ⇨ b := sSup {c | c ⊓ a ≤ b}` and `aᶜ := a ⇨ ⊥`. -/
-- See note [reducible non instances]
abbrev ofMinimalAxioms (minAx : MinimalAxioms α) : Frame α 
goal: Order.Frame α

full_name: Order.Coframe.MinimalAxioms.sup_sInf_eq
code: lemma sup_sInf_eq : a ⊔ sInf s = ⨅ b ∈ s, a ⊔ b 
goal: a ⊔ sInf s = ⨅ b ∈ s, a ⊔ b

full_name: Order.Coframe.MinimalAxioms.sInf_sup_eq
code: lemma sInf_sup_eq : sInf s ⊔ b = ⨅ a ∈ s, a ⊔ b 
goal: sInf s ⊔ b = ⨅ a ∈ s, a ⊔ b

full_name: Order.Coframe.MinimalAxioms.iInf_sup_eq
code: lemma iInf_sup_eq (f : ι → α) (a : α) : (⨅ i, f i) ⊔ a = ⨅ i, f i ⊔ a 
goal: (⨅ i, f i) ⊔ a = ⨅ i, f i ⊔ a

full_name: Order.Coframe.MinimalAxioms.sup_iInf_eq
code: lemma sup_iInf_eq (a : α) (f : ι → α) : (a ⊔ ⨅ i, f i) = ⨅ i, a ⊔ f i 
goal: a ⊔ ⨅ i, f i = ⨅ i, a ⊔ f i

full_name: Order.Coframe.MinimalAxioms.sup_iInf₂_eq
code: lemma sup_iInf₂_eq {f : ∀ i, κ i → α} (a : α) : (a ⊔ ⨅ i, ⨅ j, f i j) = ⨅ i, ⨅ j, a ⊔ f i j 
goal: a ⊔ ⨅ i, ⨅ j, f i j = ⨅ i, ⨅ j, a ⊔ f i j

full_name: Order.Coframe.MinimalAxioms.of
code: /-- The `Order.Coframe.MinimalAxioms` element corresponding to a frame. -/
def of [Coframe α] : MinimalAxioms α 
goal: Order.Coframe.MinimalAxioms α

full_name: Order.Coframe.ofMinimalAxioms
code: /-- Construct a coframe instance using the minimal amount of work needed.

This sets `a \ b := sInf {c | a ≤ b ⊔ c}` and `￢a := ⊤ \ a`. -/
-- See note [reducible non instances]
abbrev ofMinimalAxioms (minAx : MinimalAxioms α) : Coframe α 
goal: Order.Coframe α

full_name: CompleteDistribLattice.MinimalAxioms.of
code: /-- The `CompleteDistribLattice.MinimalAxioms` element corresponding to a complete distrib lattice.
-/
def of [CompleteDistribLattice α] : MinimalAxioms α 
goal: CompleteDistribLattice.MinimalAxioms α

full_name: CompleteDistribLattice.MinimalAxioms.toFrame
code: /-- Turn minimal axioms for `CompleteDistribLattice` into minimal axioms for `Order.Frame`. -/
abbrev toFrame : Frame.MinimalAxioms α 
goal: Order.Frame.MinimalAxioms α

full_name: CompleteDistribLattice.MinimalAxioms.toCoframe
code: /-- Turn minimal axioms for `CompleteDistribLattice` into minimal axioms for `Order.Coframe`. -/
abbrev toCoframe : Coframe.MinimalAxioms α 
goal: Order.Coframe.MinimalAxioms α

full_name: CompleteDistribLattice.ofMinimalAxioms
code: /-- Construct a complete distrib lattice instance using the minimal amount of work needed.

This sets `a ⇨ b := sSup {c | c ⊓ a ≤ b}`, `aᶜ := a ⇨ ⊥`, `a \ b := sInf {c | a ≤ b ⊔ c}` and
`￢a := ⊤ \ a`. -/
-- See note [reducible non instances]
abbrev ofMinimalAxioms (minAx : MinimalAxioms α) : CompleteDistribLattice α 
goal: CompleteDistribLattice α

full_name: CompletelyDistribLattice.MinimalAxioms.iInf_iSup_eq'
code: lemma iInf_iSup_eq' (f : ∀ a, κ a → α) :
    let _ := minAx.toCompleteLattice
    ⨅ i, ⨆ j, f i j = ⨆ g : ∀ i, κ i, ⨅ i, f i (g i) 
goal: let x := minAx.toCompleteLattice;
⨅ i, ⨆ j, f i j = ⨆ g, ⨅ i, f i (g i)

full_name: CompletelyDistribLattice.MinimalAxioms.iSup_iInf_eq
code: lemma iSup_iInf_eq (f : ∀ i, κ i → α) :
    let _ := minAx.toCompleteLattice
    ⨆ i, ⨅ j, f i j = ⨅ g : ∀ i, κ i, ⨆ i, f i (g i) 
goal: let x := minAx.toCompleteLattice;
⨆ i, ⨅ j, f i j = ⨅ g, ⨆ i, f i (g i)

full_name: CompletelyDistribLattice.MinimalAxioms.toCompleteDistribLattice
code: /-- Turn minimal axioms for `CompletelyDistribLattice` into minimal axioms for
`CompleteDistribLattice`. -/
abbrev toCompleteDistribLattice : CompleteDistribLattice.MinimalAxioms α 
goal: CompleteDistribLattice.MinimalAxioms α

full_name: CompletelyDistribLattice.MinimalAxioms.of
code: /-- The `CompletelyDistribLattice.MinimalAxioms` element corresponding to a frame. -/
def of [CompletelyDistribLattice α] : MinimalAxioms α 
goal: CompletelyDistribLattice.MinimalAxioms α

full_name: CompletelyDistribLattice.ofMinimalAxioms
code: /-- Construct a completely distributive lattice instance using the minimal amount of work needed.

This sets `a ⇨ b := sSup {c | c ⊓ a ≤ b}`, `aᶜ := a ⇨ ⊥`, `a \ b := sInf {c | a ≤ b ⊔ c}` and
`￢a := ⊤ \ a`. -/
-- See note [reducible non instances]
abbrev ofMinimalAxioms (minAx : MinimalAxioms α) : CompletelyDistribLattice α 
goal: CompletelyDistribLattice α

full_name: iInf_iSup_eq
code: theorem iInf_iSup_eq [CompletelyDistribLattice α] {f : ∀ a, κ a → α} :
    (⨅ a, ⨆ b, f a b) = ⨆ g : ∀ a, κ a, ⨅ a, f a (g a) 
goal: ⨅ a, ⨆ b, f a b = ⨆ g, ⨅ a, f a (g a)

full_name: iSup_iInf_eq
code: theorem iSup_iInf_eq [CompletelyDistribLattice α] {f : ∀ a, κ a → α} :
    (⨆ a, ⨅ b, f a b) = ⨅ g : ∀ a, κ a, ⨆ a, f a (g a) 
goal: ⨆ a, ⨅ b, f a b = ⨅ g, ⨆ a, f a (g a)

full_name: CompletelyDistribLattice.toCompleteDistribLattice
code: instance (priority := 100) CompletelyDistribLattice.toCompleteDistribLattice
    [CompletelyDistribLattice α] : CompleteDistribLattice α 
goal: CompleteDistribLattice α

full_name: CompleteLinearOrder.toCompletelyDistribLattice
code: instance (priority := 100) CompleteLinearOrder.toCompletelyDistribLattice [CompleteLinearOrder α] :
    CompletelyDistribLattice α 
goal: CompletelyDistribLattice α

full_name: OrderDual.instCoframe
code: instance OrderDual.instCoframe : Coframe αᵒᵈ 
goal: Order.Coframe αᵒᵈ

full_name: inf_sSup_eq
code: theorem inf_sSup_eq : a ⊓ sSup s = ⨆ b ∈ s, a ⊓ b 
goal: a ⊓ sSup s = ⨆ b ∈ s, a ⊓ b

full_name: sSup_inf_eq
code: theorem sSup_inf_eq : sSup s ⊓ b = ⨆ a ∈ s, a ⊓ b 
goal: sSup s ⊓ b = ⨆ a ∈ s, a ⊓ b

full_name: iSup_inf_eq
code: theorem iSup_inf_eq (f : ι → α) (a : α) : (⨆ i, f i) ⊓ a = ⨆ i, f i ⊓ a 
goal: (⨆ i, f i) ⊓ a = ⨆ i, f i ⊓ a

full_name: inf_iSup_eq
code: theorem inf_iSup_eq (a : α) (f : ι → α) : (a ⊓ ⨆ i, f i) = ⨆ i, a ⊓ f i 
goal: a ⊓ ⨆ i, f i = ⨆ i, a ⊓ f i

full_name: iSup₂_inf_eq
code: theorem iSup₂_inf_eq {f : ∀ i, κ i → α} (a : α) :
    (⨆ (i) (j), f i j) ⊓ a = ⨆ (i) (j), f i j ⊓ a 
goal: (⨆ i, ⨆ j, f i j) ⊓ a = ⨆ i, ⨆ j, f i j ⊓ a

full_name: inf_iSup₂_eq
code: theorem inf_iSup₂_eq {f : ∀ i, κ i → α} (a : α) :
    (a ⊓ ⨆ (i) (j), f i j) = ⨆ (i) (j), a ⊓ f i j 
goal: a ⊓ ⨆ i, ⨆ j, f i j = ⨆ i, ⨆ j, a ⊓ f i j

full_name: iSup_inf_iSup
code: theorem iSup_inf_iSup {ι ι' : Type*} {f : ι → α} {g : ι' → α} :
    ((⨆ i, f i) ⊓ ⨆ j, g j) = ⨆ i : ι × ι', f i.1 ⊓ g i.2 
goal: (⨆ i, f i) ⊓ ⨆ j, g j = ⨆ i, f i.1 ⊓ g i.2

full_name: biSup_inf_biSup
code: theorem biSup_inf_biSup {ι ι' : Type*} {f : ι → α} {g : ι' → α} {s : Set ι} {t : Set ι'} :
    ((⨆ i ∈ s, f i) ⊓ ⨆ j ∈ t, g j) = ⨆ p ∈ s ×ˢ t, f (p : ι × ι').1 ⊓ g p.2 
goal: (⨆ i ∈ s, f i) ⊓ ⨆ j ∈ t, g j = ⨆ p ∈ s ×ˢ t, f p.1 ⊓ g p.2

full_name: sSup_inf_sSup
code: theorem sSup_inf_sSup : sSup s ⊓ sSup t = ⨆ p ∈ s ×ˢ t, (p : α × α).1 ⊓ p.2 
goal: sSup s ⊓ sSup t = ⨆ p ∈ s ×ˢ t, p.1 ⊓ p.2

full_name: iSup_disjoint_iff
code: theorem iSup_disjoint_iff {f : ι → α} : Disjoint (⨆ i, f i) a ↔ ∀ i, Disjoint (f i) a 
goal: Disjoint (⨆ i, f i) a ↔ ∀ (i : ι), Disjoint (f i) a

full_name: disjoint_iSup_iff
code: theorem disjoint_iSup_iff {f : ι → α} : Disjoint a (⨆ i, f i) ↔ ∀ i, Disjoint a (f i) 
goal: Disjoint a (⨆ i, f i) ↔ ∀ (i : ι), Disjoint a (f i)

full_name: iSup₂_disjoint_iff
code: theorem iSup₂_disjoint_iff {f : ∀ i, κ i → α} :
    Disjoint (⨆ (i) (j), f i j) a ↔ ∀ i j, Disjoint (f i j) a 
goal: Disjoint (⨆ i, ⨆ j, f i j) a ↔ ∀ (i : ι) (j : κ i), Disjoint (f i j) a

full_name: disjoint_iSup₂_iff
code: theorem disjoint_iSup₂_iff {f : ∀ i, κ i → α} :
    Disjoint a (⨆ (i) (j), f i j) ↔ ∀ i j, Disjoint a (f i j) 
goal: Disjoint a (⨆ i, ⨆ j, f i j) ↔ ∀ (i : ι) (j : κ i), Disjoint a (f i j)

full_name: sSup_disjoint_iff
code: theorem sSup_disjoint_iff {s : Set α} : Disjoint (sSup s) a ↔ ∀ b ∈ s, Disjoint b a 
goal: Disjoint (sSup s) a ↔ ∀ b ∈ s, Disjoint b a

full_name: disjoint_sSup_iff
code: theorem disjoint_sSup_iff {s : Set α} : Disjoint a (sSup s) ↔ ∀ b ∈ s, Disjoint a b 
goal: Disjoint a (sSup s) ↔ ∀ b ∈ s, Disjoint a b

full_name: iSup_inf_of_monotone
code: theorem iSup_inf_of_monotone {ι : Type*} [Preorder ι] [IsDirected ι (· ≤ ·)] {f g : ι → α}
    (hf : Monotone f) (hg : Monotone g) : ⨆ i, f i ⊓ g i = (⨆ i, f i) ⊓ ⨆ i, g i 
goal: ⨆ i, f i ⊓ g i = (⨆ i, f i) ⊓ ⨆ i, g i

full_name: iSup_inf_of_antitone
code: theorem iSup_inf_of_antitone {ι : Type*} [Preorder ι] [IsDirected ι (swap (· ≤ ·))] {f g : ι → α}
    (hf : Antitone f) (hg : Antitone g) : ⨆ i, f i ⊓ g i = (⨆ i, f i) ⊓ ⨆ i, g i 
goal: ⨆ i, f i ⊓ g i = (⨆ i, f i) ⊓ ⨆ i, g i

full_name: Frame.toDistribLattice
code: instance (priority := 100) Frame.toDistribLattice : DistribLattice α 
goal: DistribLattice α

full_name: Prod.instFrame
code: instance Prod.instFrame [Frame α] [Frame β] : Frame (α × β) 
goal: Order.Frame (α × β)

full_name: Pi.instFrame
code: instance Pi.instFrame {ι : Type*} {π : ι → Type*} [∀ i, Frame (π i)] : Frame (∀ i, π i) 
goal: Order.Frame ((i : ι) → π i)

full_name: OrderDual.instFrame
code: instance OrderDual.instFrame : Frame αᵒᵈ 
goal: Order.Frame αᵒᵈ

full_name: sup_sInf_eq
code: theorem sup_sInf_eq : a ⊔ sInf s = ⨅ b ∈ s, a ⊔ b 
goal: a ⊔ sInf s = ⨅ b ∈ s, a ⊔ b

full_name: sInf_sup_eq
code: theorem sInf_sup_eq : sInf s ⊔ b = ⨅ a ∈ s, a ⊔ b 
goal: sInf s ⊔ b = ⨅ a ∈ s, a ⊔ b

full_name: iInf_sup_eq
code: theorem iInf_sup_eq (f : ι → α) (a : α) : (⨅ i, f i) ⊔ a = ⨅ i, f i ⊔ a 
goal: (⨅ i, f i) ⊔ a = ⨅ i, f i ⊔ a

full_name: sup_iInf_eq
code: theorem sup_iInf_eq (a : α) (f : ι → α) : (a ⊔ ⨅ i, f i) = ⨅ i, a ⊔ f i 
goal: a ⊔ ⨅ i, f i = ⨅ i, a ⊔ f i

full_name: iInf₂_sup_eq
code: theorem iInf₂_sup_eq {f : ∀ i, κ i → α} (a : α) : (⨅ (i) (j), f i j) ⊔ a = ⨅ (i) (j), f i j ⊔ a 
goal: (⨅ i, ⨅ j, f i j) ⊔ a = ⨅ i, ⨅ j, f i j ⊔ a

full_name: sup_iInf₂_eq
code: theorem sup_iInf₂_eq {f : ∀ i, κ i → α} (a : α) : (a ⊔ ⨅ (i) (j), f i j) = ⨅ (i) (j), a ⊔ f i j 
goal: a ⊔ ⨅ i, ⨅ j, f i j = ⨅ i, ⨅ j, a ⊔ f i j

full_name: iInf_sup_iInf
code: theorem iInf_sup_iInf {ι ι' : Type*} {f : ι → α} {g : ι' → α} :
    ((⨅ i, f i) ⊔ ⨅ i, g i) = ⨅ i : ι × ι', f i.1 ⊔ g i.2 
goal: (⨅ i, f i) ⊔ ⨅ i, g i = ⨅ i, f i.1 ⊔ g i.2

full_name: biInf_sup_biInf
code: theorem biInf_sup_biInf {ι ι' : Type*} {f : ι → α} {g : ι' → α} {s : Set ι} {t : Set ι'} :
    ((⨅ i ∈ s, f i) ⊔ ⨅ j ∈ t, g j) = ⨅ p ∈ s ×ˢ t, f (p : ι × ι').1 ⊔ g p.2 
goal: (⨅ i ∈ s, f i) ⊔ ⨅ j ∈ t, g j = ⨅ p ∈ s ×ˢ t, f p.1 ⊔ g p.2

full_name: sInf_sup_sInf
code: theorem sInf_sup_sInf : sInf s ⊔ sInf t = ⨅ p ∈ s ×ˢ t, (p : α × α).1 ⊔ p.2 
goal: sInf s ⊔ sInf t = ⨅ p ∈ s ×ˢ t, p.1 ⊔ p.2

full_name: iInf_sup_of_monotone
code: theorem iInf_sup_of_monotone {ι : Type*} [Preorder ι] [IsDirected ι (swap (· ≤ ·))] {f g : ι → α}
    (hf : Monotone f) (hg : Monotone g) : ⨅ i, f i ⊔ g i = (⨅ i, f i) ⊔ ⨅ i, g i 
goal: ⨅ i, f i ⊔ g i = (⨅ i, f i) ⊔ ⨅ i, g i

full_name: iInf_sup_of_antitone
code: theorem iInf_sup_of_antitone {ι : Type*} [Preorder ι] [IsDirected ι (· ≤ ·)] {f g : ι → α}
    (hf : Antitone f) (hg : Antitone g) : ⨅ i, f i ⊔ g i = (⨅ i, f i) ⊔ ⨅ i, g i 
goal: ⨅ i, f i ⊔ g i = (⨅ i, f i) ⊔ ⨅ i, g i

full_name: Coframe.toDistribLattice
code: instance (priority := 100) Coframe.toDistribLattice : DistribLattice α 
goal: DistribLattice α

full_name: Prod.instCoframe
code: instance Prod.instCoframe [Coframe β] : Coframe (α × β) 
goal: Order.Coframe (α × β)

full_name: Pi.instCoframe
code: instance Pi.instCoframe {ι : Type*} {π : ι → Type*} [∀ i, Coframe (π i)] : Coframe (∀ i, π i) 
goal: Order.Coframe ((i : ι) → π i)

full_name: OrderDual.instCompleteDistribLattice
code: instance OrderDual.instCompleteDistribLattice [CompleteDistribLattice α] :
    CompleteDistribLattice αᵒᵈ 
goal: CompleteDistribLattice αᵒᵈ

full_name: Prod.instCompleteDistribLattice
code: instance Prod.instCompleteDistribLattice [CompleteDistribLattice β] :
    CompleteDistribLattice (α × β) 
goal: CompleteDistribLattice (α × β)

full_name: Pi.instCompleteDistribLattice
code: instance Pi.instCompleteDistribLattice {ι : Type*} {π : ι → Type*}
    [∀ i, CompleteDistribLattice (π i)] : CompleteDistribLattice (∀ i, π i) 
goal: CompleteDistribLattice ((i : ι) → π i)

full_name: OrderDual.instCompletelyDistribLattice
code: instance OrderDual.instCompletelyDistribLattice [CompletelyDistribLattice α] :
    CompletelyDistribLattice αᵒᵈ 
goal: CompletelyDistribLattice αᵒᵈ

full_name: Prod.instCompletelyDistribLattice
code: instance Prod.instCompletelyDistribLattice [CompletelyDistribLattice α]
    [CompletelyDistribLattice β] : CompletelyDistribLattice (α × β) 
goal: CompletelyDistribLattice (α × β)

full_name: Pi.instCompletelyDistribLattice
code: instance Pi.instCompletelyDistribLattice {ι : Type*} {π : ι → Type*}
    [∀ i, CompletelyDistribLattice (π i)] : CompletelyDistribLattice (∀ i, π i) 
goal: CompletelyDistribLattice ((i : ι) → π i)

full_name: CompleteBooleanAlgebra.iInf_sup_le_sup_sInf
code: /--
A complete Boolean algebra is a Boolean algebra that is also a complete distributive lattice.

It is only completely distributive if it is also atomic.
-/
-- We do not directly extend `CompleteDistribLattice` to avoid having the `hnot` field
class CompleteBooleanAlgebra (α) extends CompleteLattice α, BooleanAlgebra α where
  /-- `⊓` distributes over `⨆`. -/
  inf_sSup_le_iSup_inf (a : α) (s : Set α) : a ⊓ sSup s ≤ ⨆ b ∈ s, a ⊓ b
  /-- `⊔` distributes over `⨅`. -/
  iInf_sup_le_sup_sInf (a : α) (s : Set α) : ⨅ b ∈ s, a ⊔ b ≤ a ⊔ sInf s
goal: ⨅ b ∈ s, a ⊔ b ≤ a ⊔ sInf s

full_name: CompleteBooleanAlgebra
code: /--
A complete Boolean algebra is a Boolean algebra that is also a complete distributive lattice.

It is only completely distributive if it is also atomic.
-/
-- We do not directly extend `CompleteDistribLattice` to avoid having the `hnot` field
class CompleteBooleanAlgebra (α) extends CompleteLattice α, BooleanAlgebra α where
  /-- `⊓` distributes over `⨆`. -/
  inf_sSup_le_iSup_inf (a : α) (s : Set α) : a ⊓ sSup s ≤ ⨆ b ∈ s, a ⊓ b
  /-- `⊔` distributes over `⨅`. -/
  iInf_sup_le_sup_sInf (a : α) (s : Set α) : ⨅ b ∈ s, a ⊔ b ≤ a ⊔ sInf s
goal: Type u_1

full_name: CompleteBooleanAlgebra.inf_sSup_le_iSup_inf
code: /--
A complete Boolean algebra is a Boolean algebra that is also a complete distributive lattice.

It is only completely distributive if it is also atomic.
-/
-- We do not directly extend `CompleteDistribLattice` to avoid having the `hnot` field
class CompleteBooleanAlgebra (α) extends CompleteLattice α, BooleanAlgebra α where
  /-- `⊓` distributes over `⨆`. -/
  inf_sSup_le_iSup_inf (a : α) (s : Set α) : a ⊓ sSup s ≤ ⨆ b ∈ s, a ⊓ b
  /-- `⊔` distributes over `⨅`. -/
  iInf_sup_le_sup_sInf (a : α) (s : Set α) : ⨅ b ∈ s, a ⊔ b ≤ a ⊔ sInf s
goal: a ⊓ sSup s ≤ ⨆ b ∈ s, a ⊓ b

full_name: CompleteBooleanAlgebra.toCompleteDistribLattice
code: instance (priority := 100) CompleteBooleanAlgebra.toCompleteDistribLattice
    [CompleteBooleanAlgebra α] : CompleteDistribLattice α 
goal: CompleteDistribLattice α

full_name: Prod.instCompleteBooleanAlgebra
code: instance Prod.instCompleteBooleanAlgebra [CompleteBooleanAlgebra α] [CompleteBooleanAlgebra β] :
    CompleteBooleanAlgebra (α × β) 
goal: CompleteBooleanAlgebra (α × β)

full_name: Pi.instCompleteBooleanAlgebra
code: instance Pi.instCompleteBooleanAlgebra {ι : Type*} {π : ι → Type*}
    [∀ i, CompleteBooleanAlgebra (π i)] : CompleteBooleanAlgebra (∀ i, π i) 
goal: CompleteBooleanAlgebra ((i : ι) → π i)

full_name: OrderDual.instCompleteBooleanAlgebra
code: instance OrderDual.instCompleteBooleanAlgebra [CompleteBooleanAlgebra α] :
    CompleteBooleanAlgebra αᵒᵈ 
goal: CompleteBooleanAlgebra αᵒᵈ

full_name: compl_iInf
code: theorem compl_iInf : (iInf f)ᶜ = ⨆ i, (f i)ᶜ 
goal: (iInf f)ᶜ = ⨆ i, (f i)ᶜ

full_name: compl_iSup
code: theorem compl_iSup : (iSup f)ᶜ = ⨅ i, (f i)ᶜ 
goal: (iSup f)ᶜ = ⨅ i, (f i)ᶜ

full_name: compl_sInf
code: theorem compl_sInf : (sInf s)ᶜ = ⨆ i ∈ s, iᶜ 
goal: (sInf s)ᶜ = ⨆ i ∈ s, iᶜ

full_name: compl_sSup
code: theorem compl_sSup : (sSup s)ᶜ = ⨅ i ∈ s, iᶜ 
goal: (sSup s)ᶜ = ⨅ i ∈ s, iᶜ

full_name: compl_sInf'
code: theorem compl_sInf' : (sInf s)ᶜ = sSup (HasCompl.compl '' s) 
goal: (sInf s)ᶜ = sSup (compl '' s)

full_name: compl_sSup'
code: theorem compl_sSup' : (sSup s)ᶜ = sInf (HasCompl.compl '' s) 
goal: (sSup s)ᶜ = sInf (compl '' s)

full_name: iSup_symmDiff_iSup_le
code: /-- The symmetric difference of two `iSup`s is at most the `iSup` of the symmetric differences. -/
theorem iSup_symmDiff_iSup_le {g : ι → α} : (⨆ i, f i) ∆ (⨆ i, g i) ≤ ⨆ i, ((f i) ∆ (g i)) 
goal: symmDiff (⨆ i, f i) (⨆ i, g i) ≤ ⨆ i, symmDiff (f i) (g i)

full_name: biSup_symmDiff_biSup_le
code: /-- A `biSup` version of `iSup_symmDiff_iSup_le`. -/
theorem biSup_symmDiff_biSup_le {p : ι → Prop} {f g : (i : ι) → p i → α} :
    (⨆ i, ⨆ (h : p i), f i h) ∆ (⨆ i, ⨆ (h : p i), g i h) ≤
    ⨆ i, ⨆ (h : p i), ((f i h) ∆ (g i h)) 
goal: symmDiff (⨆ i, ⨆ (h : p i), f i h) (⨆ i, ⨆ (h : p i), g i h) ≤ ⨆ i, ⨆ (h : p i), symmDiff (f i h) (g i h)

full_name: CompleteAtomicBooleanAlgebra
code: /--
A complete atomic Boolean algebra is a complete Boolean algebra
that is also completely distributive.

We take iSup_iInf_eq as the definition here,
and prove later on that this implies atomicity.
-/
-- We do not directly extend `CompletelyDistribLattice` to avoid having the `hnot` field
-- We do not directly extend `CompleteBooleanAlgebra` to avoid having the `inf_sSup_le_iSup_inf` and
-- `iInf_sup_le_sup_sInf` fields
class CompleteAtomicBooleanAlgebra (α : Type u) extends CompleteLattice α, BooleanAlgebra α where
  protected iInf_iSup_eq {ι : Type u} {κ : ι → Type u} (f : ∀ a, κ a → α) :
    (⨅ a, ⨆ b, f a b) = ⨆ g : ∀ a, κ a, ⨅ a, f a (g a)
goal: Type u

full_name: CompleteAtomicBooleanAlgebra.iInf_iSup_eq
code: /--
A complete atomic Boolean algebra is a complete Boolean algebra
that is also completely distributive.

We take iSup_iInf_eq as the definition here,
and prove later on that this implies atomicity.
-/
-- We do not directly extend `CompletelyDistribLattice` to avoid having the `hnot` field
-- We do not directly extend `CompleteBooleanAlgebra` to avoid having the `inf_sSup_le_iSup_inf` and
-- `iInf_sup_le_sup_sInf` fields
class CompleteAtomicBooleanAlgebra (α : Type u) extends CompleteLattice α, BooleanAlgebra α where
  protected iInf_iSup_eq {ι : Type u} {κ : ι → Type u} (f : ∀ a, κ a → α) :
    (⨅ a, ⨆ b, f a b) = ⨆ g : ∀ a, κ a, ⨅ a, f a (g a)
goal: ⨅ a, ⨆ b, f a b = ⨆ g, ⨅ a, f a (g a)

full_name: CompleteAtomicBooleanAlgebra.toCompletelyDistribLattice
code: instance (priority := 100) CompleteAtomicBooleanAlgebra.toCompletelyDistribLattice
    [CompleteAtomicBooleanAlgebra α] : CompletelyDistribLattice α 
goal: CompletelyDistribLattice α

full_name: CompleteAtomicBooleanAlgebra.toCompleteBooleanAlgebra
code: instance (priority := 100) CompleteAtomicBooleanAlgebra.toCompleteBooleanAlgebra
    [CompleteAtomicBooleanAlgebra α] : CompleteBooleanAlgebra α 
goal: CompleteBooleanAlgebra α

full_name: Prod.instCompleteAtomicBooleanAlgebra
code: instance Prod.instCompleteAtomicBooleanAlgebra [CompleteAtomicBooleanAlgebra α]
    [CompleteAtomicBooleanAlgebra β] : CompleteAtomicBooleanAlgebra (α × β) 
goal: CompleteAtomicBooleanAlgebra (α × β)

full_name: Pi.instCompleteAtomicBooleanAlgebra
code: instance Pi.instCompleteAtomicBooleanAlgebra {ι : Type*} {π : ι → Type*}
    [∀ i, CompleteAtomicBooleanAlgebra (π i)] : CompleteAtomicBooleanAlgebra (∀ i, π i) 
goal: CompleteAtomicBooleanAlgebra ((i : ι) → π i)

full_name: OrderDual.instCompleteAtomicBooleanAlgebra
code: instance OrderDual.instCompleteAtomicBooleanAlgebra [CompleteAtomicBooleanAlgebra α] :
    CompleteAtomicBooleanAlgebra αᵒᵈ 
goal: CompleteAtomicBooleanAlgebra αᵒᵈ

full_name: Prop.instCompleteAtomicBooleanAlgebra
code: instance Prop.instCompleteAtomicBooleanAlgebra : CompleteAtomicBooleanAlgebra Prop 
goal: CompleteAtomicBooleanAlgebra Prop

full_name: Prop.instCompleteBooleanAlgebra
code: instance Prop.instCompleteBooleanAlgebra : CompleteBooleanAlgebra Prop 
goal: CompleteBooleanAlgebra Prop

full_name: Function.Injective.frameMinimalAxioms
code: /-- Pullback an `Order.Frame.MinimalAxioms` along an injection. -/
protected abbrev Function.Injective.frameMinimalAxioms [Sup α] [Inf α] [SupSet α] [InfSet α] [Top α]
    [Bot α] (minAx : Frame.MinimalAxioms β) (f : α → β) (hf : Injective f)
    (map_sup : ∀ a b, f (a ⊔ b) = f a ⊔ f b) (map_inf : ∀ a b, f (a ⊓ b) = f a ⊓ f b)
    (map_sSup : ∀ s, f (sSup s) = ⨆ a ∈ s, f a) (map_sInf : ∀ s, f (sInf s) = ⨅ a ∈ s, f a)
    (map_top : f ⊤ = ⊤) (map_bot : f ⊥ = ⊥) : Frame.MinimalAxioms α 
goal: Order.Frame.MinimalAxioms α

full_name: Function.Injective.coframeMinimalAxioms
code: /-- Pullback an `Order.Coframe.MinimalAxioms` along an injection. -/
protected abbrev Function.Injective.coframeMinimalAxioms [Sup α] [Inf α] [SupSet α] [InfSet α]
    [Top α] [Bot α] (minAx : Coframe.MinimalAxioms β) (f : α → β) (hf : Injective f)
    (map_sup : ∀ a b, f (a ⊔ b) = f a ⊔ f b) (map_inf : ∀ a b, f (a ⊓ b) = f a ⊓ f b)
    (map_sSup : ∀ s, f (sSup s) = ⨆ a ∈ s, f a) (map_sInf : ∀ s, f (sInf s) = ⨅ a ∈ s, f a)
    (map_top : f ⊤ = ⊤) (map_bot : f ⊥ = ⊥) : Coframe.MinimalAxioms α 
goal: Order.Coframe.MinimalAxioms α

full_name: Function.Injective.frame
code: /-- Pullback an `Order.Frame` along an injection. -/
protected abbrev Function.Injective.frame [Sup α] [Inf α] [SupSet α] [InfSet α] [Top α] [Bot α]
    [HasCompl α] [HImp α] [Frame β] (f : α → β) (hf : Injective f)
    (map_sup : ∀ a b, f (a ⊔ b) = f a ⊔ f b) (map_inf : ∀ a b, f (a ⊓ b) = f a ⊓ f b)
    (map_sSup : ∀ s, f (sSup s) = ⨆ a ∈ s, f a) (map_sInf : ∀ s, f (sInf s) = ⨅ a ∈ s, f a)
    (map_top : f ⊤ = ⊤) (map_bot : f ⊥ = ⊥) (map_compl : ∀ a, f aᶜ = (f a)ᶜ)
    (map_himp : ∀ a b, f (a ⇨ b) = f a ⇨ f b) : Frame α 
goal: Order.Frame α

full_name: Function.Injective.coframe
code: /-- Pullback an `Order.Coframe` along an injection. -/
protected abbrev Function.Injective.coframe [Sup α] [Inf α] [SupSet α] [InfSet α] [Top α] [Bot α]
    [HNot α] [SDiff α] [Coframe β] (f : α → β) (hf : Injective f)
    (map_sup : ∀ a b, f (a ⊔ b) = f a ⊔ f b) (map_inf : ∀ a b, f (a ⊓ b) = f a ⊓ f b)
    (map_sSup : ∀ s, f (sSup s) = ⨆ a ∈ s, f a) (map_sInf : ∀ s, f (sInf s) = ⨅ a ∈ s, f a)
    (map_top : f ⊤ = ⊤) (map_bot : f ⊥ = ⊥) (map_hnot : ∀ a, f (￢a) = ￢f a)
    (map_sdiff : ∀ a b, f (a \ b) = f a \ f b) : Coframe α 
goal: Order.Coframe α

full_name: Function.Injective.completeDistribLatticeMinimalAxioms
code: /-- Pullback a `CompleteDistribLattice.MinimalAxioms` along an injection. -/
protected abbrev Function.Injective.completeDistribLatticeMinimalAxioms [Sup α] [Inf α] [SupSet α]
    [InfSet α] [Top α] [Bot α] (minAx : CompleteDistribLattice.MinimalAxioms β) (f : α → β)
    (hf : Injective f) (map_sup : let _ := minAx.toCompleteLattice
      ∀ a b, f (a ⊔ b) = f a ⊔ f b) (map_inf : let _ := minAx.toCompleteLattice
      ∀ a b, f (a ⊓ b) = f a ⊓ f b) (map_sSup : let _ := minAx.toCompleteLattice
      ∀ s, f (sSup s) = ⨆ a ∈ s, f a) (map_sInf : let _ := minAx.toCompleteLattice
      ∀ s, f (sInf s) = ⨅ a ∈ s, f a) (map_top : let _ := minAx.toCompleteLattice
      f ⊤ = ⊤) (map_bot : let _ := minAx.toCompleteLattice
      f ⊥ = ⊥) :
    CompleteDistribLattice.MinimalAxioms α 
goal: CompleteDistribLattice.MinimalAxioms α

full_name: Function.Injective.completeDistribLattice
code: /-- Pullback a `CompleteDistribLattice` along an injection. -/
protected abbrev Function.Injective.completeDistribLattice [Sup α] [Inf α] [SupSet α] [InfSet α]
    [Top α] [Bot α] [HasCompl α] [HImp α] [HNot α] [SDiff α] [CompleteDistribLattice β] (f : α → β)
    (hf : Injective f)
    (map_sup : ∀ a b, f (a ⊔ b) = f a ⊔ f b) (map_inf : ∀ a b, f (a ⊓ b) = f a ⊓ f b)
    (map_sSup : ∀ s, f (sSup s) = ⨆ a ∈ s, f a) (map_sInf : ∀ s, f (sInf s) = ⨅ a ∈ s, f a)
    (map_top : f ⊤ = ⊤) (map_bot : f ⊥ = ⊥)
    (map_compl : ∀ a, f aᶜ = (f a)ᶜ) (map_himp : ∀ a b, f (a ⇨ b) = f a ⇨ f b)
    (map_hnot : ∀ a, f (￢a) = ￢f a) (map_sdiff : ∀ a b, f (a \ b) = f a \ f b) :
    CompleteDistribLattice α 
goal: CompleteDistribLattice α

full_name: Function.Injective.completelyDistribLatticeMinimalAxioms
code: /-- Pullback a `CompletelyDistribLattice.MinimalAxioms` along an injection. -/
protected abbrev Function.Injective.completelyDistribLatticeMinimalAxioms [Sup α] [Inf α] [SupSet α]
    [InfSet α] [Top α] [Bot α] (minAx : CompletelyDistribLattice.MinimalAxioms β) (f : α → β)
    (hf : Injective f) (map_sup : let _ := minAx.toCompleteLattice
      ∀ a b, f (a ⊔ b) = f a ⊔ f b) (map_inf : let _ := minAx.toCompleteLattice
      ∀ a b, f (a ⊓ b) = f a ⊓ f b) (map_sSup : let _ := minAx.toCompleteLattice
      ∀ s, f (sSup s) = ⨆ a ∈ s, f a) (map_sInf : let _ := minAx.toCompleteLattice
      ∀ s, f (sInf s) = ⨅ a ∈ s, f a) (map_top : let _ := minAx.toCompleteLattice
      f ⊤ = ⊤) (map_bot : let _ := minAx.toCompleteLattice
      f ⊥ = ⊥) :
    CompletelyDistribLattice.MinimalAxioms α 
goal: CompletelyDistribLattice.MinimalAxioms α

full_name: Function.Injective.completelyDistribLattice
code: /-- Pullback a `CompletelyDistribLattice` along an injection. -/
protected abbrev Function.Injective.completelyDistribLattice [Sup α] [Inf α] [SupSet α] [InfSet α]
    [Top α] [Bot α] [HasCompl α] [HImp α] [HNot α] [SDiff α] [CompletelyDistribLattice β]
    (f : α → β) (hf : Injective f)
    (map_sup : ∀ a b, f (a ⊔ b) = f a ⊔ f b) (map_inf : ∀ a b, f (a ⊓ b) = f a ⊓ f b)
    (map_sSup : ∀ s, f (sSup s) = ⨆ a ∈ s, f a) (map_sInf : ∀ s, f (sInf s) = ⨅ a ∈ s, f a)
    (map_top : f ⊤ = ⊤) (map_bot : f ⊥ = ⊥)
    (map_compl : ∀ a, f aᶜ = (f a)ᶜ) (map_himp : ∀ a b, f (a ⇨ b) = f a ⇨ f b)
    (map_hnot : ∀ a, f (￢a) = ￢f a) (map_sdiff : ∀ a b, f (a \ b) = f a \ f b) :
    CompletelyDistribLattice α 
goal: CompletelyDistribLattice α

full_name: Function.Injective.completeBooleanAlgebra
code: /-- Pullback a `CompleteBooleanAlgebra` along an injection. -/
protected abbrev Function.Injective.completeBooleanAlgebra [Sup α] [Inf α] [SupSet α] [InfSet α]
    [Top α] [Bot α] [HasCompl α] [HImp α] [SDiff α] [CompleteBooleanAlgebra β] (f : α → β)
    (hf : Injective f) (map_sup : ∀ a b, f (a ⊔ b) = f a ⊔ f b)
    (map_inf : ∀ a b, f (a ⊓ b) = f a ⊓ f b) (map_sSup : ∀ s, f (sSup s) = ⨆ a ∈ s, f a)
    (map_sInf : ∀ s, f (sInf s) = ⨅ a ∈ s, f a) (map_top : f ⊤ = ⊤) (map_bot : f ⊥ = ⊥)
    (map_compl : ∀ a, f aᶜ = (f a)ᶜ) (map_himp : ∀ a b, f (a ⇨ b) = f a ⇨ f b)
    (map_sdiff : ∀ a b, f (a \ b) = f a \ f b) :
    CompleteBooleanAlgebra α 
goal: CompleteBooleanAlgebra α

full_name: Function.Injective.completeAtomicBooleanAlgebra
code: /-- Pullback a `CompleteAtomicBooleanAlgebra` along an injection. -/
protected abbrev Function.Injective.completeAtomicBooleanAlgebra [Sup α] [Inf α] [SupSet α]
    [InfSet α] [Top α] [Bot α] [HasCompl α] [HImp α] [HNot α] [SDiff α]
    [CompleteAtomicBooleanAlgebra β] (f : α → β) (hf : Injective f)
    (map_sup : ∀ a b, f (a ⊔ b) = f a ⊔ f b) (map_inf : ∀ a b, f (a ⊓ b) = f a ⊓ f b)
    (map_sSup : ∀ s, f (sSup s) = ⨆ a ∈ s, f a) (map_sInf : ∀ s, f (sInf s) = ⨅ a ∈ s, f a)
    (map_top : f ⊤ = ⊤) (map_bot : f ⊥ = ⊥)
    (map_compl : ∀ a, f aᶜ = (f a)ᶜ) (map_himp : ∀ a b, f (a ⇨ b) = f a ⇨ f b)
    (map_hnot : ∀ a, f (￢a) = ￢f a) (map_sdiff : ∀ a b, f (a \ b) = f a \ f b) :
    CompleteAtomicBooleanAlgebra α 
goal: CompleteAtomicBooleanAlgebra α

full_name: PUnit.instCompleteAtomicBooleanAlgebra
code: instance instCompleteAtomicBooleanAlgebra : CompleteAtomicBooleanAlgebra PUnit 
goal: CompleteAtomicBooleanAlgebra PUnit.{u_1 + 1}

full_name: PUnit.instCompleteBooleanAlgebra
code: instance instCompleteBooleanAlgebra : CompleteBooleanAlgebra PUnit 
goal: CompleteBooleanAlgebra PUnit.{u_1 + 1}

full_name: PUnit.sSup_eq
code: @[simp]
theorem sSup_eq : sSup s = unit 
goal: sSup s = PUnit.unit

full_name: PUnit.sInf_eq
code: @[simp]
theorem sInf_eq : sInf s = unit 
goal: sInf s = PUnit.unit