Frames, completely distributive lattices and complete Boolean algebras #
In this file we define and provide API for (co)frames, completely distributive lattices and complete Boolean algebras.
We distinguish two different distributivity properties:
inf_iSup_eq : (a ⊓ ⨆ i, f i) = ⨆ i, a ⊓ f i(finite⊓distributes over infinite⨆). This is required byFrame,CompleteDistribLattice, andCompleteBooleanAlgebra(Coframe, etc., require the dual property).iInf_iSup_eq : (⨅ i, ⨆ j, f i j) = ⨆ s, ⨅ i, f i (s i)(infinite⨅distributes over infinite⨆). This stronger property is called "completely distributive", and is required byCompletelyDistribLatticeandCompleteAtomicBooleanAlgebra.
Typeclasses #
Order.Frame: Frame: A complete lattice whose⊓distributes over⨆.Order.Coframe: Coframe: A complete lattice whose⊔distributes over⨅.CompleteDistribLattice: Complete distributive lattices: A complete lattice whose⊓and⊔distribute over⨆and⨅respectively.CompleteBooleanAlgebra: Complete Boolean algebra: A Boolean algebra whose⊓and⊔distribute over⨆and⨅respectively.CompletelyDistribLattice: Completely distributive lattices: A complete lattice whose⨅and⨆satisfyiInf_iSup_eq.CompleteBooleanAlgebra: Complete Boolean algebra: A Boolean algebra whose⊓and⊔distribute over⨆and⨅respectively.CompleteAtomicBooleanAlgebra: Complete atomic Boolean algebra: A complete Boolean algebra which is additionally completely distributive. (This implies that it's (co)atom(ist)ic.)
A set of opens gives rise to a topological space precisely if it forms a frame. Such a frame is also
completely distributive, but not all frames are. Filter is a coframe but not a completely
distributive lattice.
References #
- Wikipedia, Complete Heyting algebra
- [Francis Borceux, Handbook of Categorical Algebra III][borceux-vol3]
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.
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- inf : α → α → α
- sSup : Set α → α
- sInf : Set α → α
- top : α
- bot : α
Instances
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.
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- inf : α → α → α
- sSup : Set α → α
- sInf : Set α → α
- top : α
- bot : α
Instances
A frame, aka complete Heyting algebra, is a complete lattice whose ⊓ distributes over ⨆.
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- inf : α → α → α
- sSup : Set α → α
- sInf : Set α → α
- top : α
- bot : α
- himp : α → α → α
a ⇨is right adjoint toa ⊓- compl : α → α
a ⇨is right adjoint toa ⊓⊓distributes over⨆.
Instances
⊓ distributes over ⨆.
A coframe, aka complete Brouwer algebra or complete co-Heyting algebra, is a complete lattice
whose ⊔ distributes over ⨅.
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- inf : α → α → α
- sSup : Set α → α
- sInf : Set α → α
- top : α
- bot : α
- sdiff : α → α → α
\ ais right adjoint to⊔ a- hnot : α → α
⊤ \ ais¬a⊔distributes over⨅.
Instances
⊔ distributes over ⨅.
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.
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- inf : α → α → α
- sSup : Set α → α
- sInf : Set α → α
- top : α
- bot : α
Instances For
A complete distributive lattice is a complete lattice whose ⊔ and ⊓ respectively
distribute over ⨅ and ⨆.
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- inf : α → α → α
- sSup : Set α → α
- sInf : Set α → α
- top : α
- bot : α
- himp : α → α → α
- compl : α → α
- sdiff : α → α → α
\ ais right adjoint to⊔ a- hnot : α → α
⊤ \ ais¬a⊔distributes over⨅.
Instances
⊔ distributes over ⨅.
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.
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- inf : α → α → α
- sSup : Set α → α
- sInf : Set α → α
- top : α
- bot : α
Instances For
A completely distributive lattice is a complete lattice whose ⨅ and ⨆
distribute over each other.
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- inf : α → α → α
- sSup : Set α → α
- sInf : Set α → α
- top : α
- bot : α
- himp : α → α → α
a ⇨is right adjoint toa ⊓- compl : α → α
a ⇨is right adjoint toa ⊓- sdiff : α → α → α
- hnot : α → α
\ ais right adjoint to⊔ a⊤ \ ais¬a
Instances
The Order.Frame.MinimalAxioms element corresponding to a frame.
Equations
- Order.Frame.MinimalAxioms.of = let __src := inst; Order.Frame.MinimalAxioms.mk ⋯
Instances For
Construct a frame instance using the minimal amount of work needed.
This sets a ⇨ b := sSup {c | c ⊓ a ≤ b} and aᶜ := a ⇨ ⊥.
Equations
- Order.Frame.ofMinimalAxioms minAx = let __spread.0 := minAx; Order.Frame.mk ⋯ ⋯ ⋯
Instances For
The Order.Coframe.MinimalAxioms element corresponding to a frame.
Equations
- Order.Coframe.MinimalAxioms.of = let __src := inst; Order.Coframe.MinimalAxioms.mk ⋯
Instances For
Construct a coframe instance using the minimal amount of work needed.
This sets a \ b := sInf {c | a ≤ b ⊔ c} and ¬a := ⊤ \ a.
Equations
- Order.Coframe.ofMinimalAxioms minAx = let __spread.0 := minAx; Order.Coframe.mk ⋯ ⋯ ⋯
Instances For
The CompleteDistribLattice.MinimalAxioms element corresponding to a complete distrib lattice.
Equations
- CompleteDistribLattice.MinimalAxioms.of = let __src := inst; { toCompleteLattice := Order.Frame.toCompleteLattice, inf_sSup_le_iSup_inf := ⋯, iInf_sup_le_sup_sInf := ⋯ }
Instances For
Turn minimal axioms for CompleteDistribLattice into minimal axioms for Order.Frame.
Equations
- minAx.toFrame = minAx.toMinimalAxioms
Instances For
Turn minimal axioms for CompleteDistribLattice into minimal axioms for Order.Coframe.
Equations
- minAx.toCoframe = let __spread.0 := minAx; Order.Coframe.MinimalAxioms.mk ⋯
Instances For
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.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Turn minimal axioms for CompletelyDistribLattice into minimal axioms for
CompleteDistribLattice.
Equations
- minAx.toCompleteDistribLattice = let __spread.0 := minAx; { toCompleteLattice := __spread.0.toCompleteLattice, inf_sSup_le_iSup_inf := ⋯, iInf_sup_le_sup_sInf := ⋯ }
Instances For
The CompletelyDistribLattice.MinimalAxioms element corresponding to a frame.
Equations
- CompletelyDistribLattice.MinimalAxioms.of = let __src := inst; { toCompleteLattice := CompletelyDistribLattice.toCompleteLattice, iInf_iSup_eq := ⋯ }
Instances For
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.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- CompleteLinearOrder.toCompletelyDistribLattice = let __spread.0 := inst; CompletelyDistribLattice.mk ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- OrderDual.instCoframe = let __spread.0 := OrderDual.instCompleteLattice; let __spread.1 := OrderDual.instCoheytingAlgebra; Order.Coframe.mk ⋯ ⋯ ⋯
Equations
- Frame.toDistribLattice = DistribLattice.ofInfSupLe ⋯
Equations
- Prod.instFrame = let __spread.0 := Prod.instCompleteLattice; let __spread.1 := Prod.instHeytingAlgebra; Order.Frame.mk ⋯ ⋯ ⋯
Equations
- Pi.instFrame = let __spread.0 := Pi.instCompleteLattice; let __spread.1 := Pi.instHeytingAlgebra; Order.Frame.mk ⋯ ⋯ ⋯
Equations
- OrderDual.instFrame = let __spread.0 := OrderDual.instCompleteLattice; let __spread.1 := OrderDual.instHeytingAlgebra; Order.Frame.mk ⋯ ⋯ ⋯
Equations
- Coframe.toDistribLattice = let __spread.0 := inst; DistribLattice.mk ⋯
Equations
- Prod.instCoframe = let __spread.0 := Prod.instCompleteLattice; let __spread.1 := Prod.instCoheytingAlgebra; Order.Coframe.mk ⋯ ⋯ ⋯
Equations
- Pi.instCoframe = let __spread.0 := Pi.instCompleteLattice; let __spread.1 := Pi.instCoheytingAlgebra; Order.Coframe.mk ⋯ ⋯ ⋯
Equations
- OrderDual.instCompleteDistribLattice = let __spread.0 := OrderDual.instFrame; let __spread.1 := OrderDual.instCoframe; CompleteDistribLattice.mk ⋯ ⋯ ⋯
Equations
- Prod.instCompleteDistribLattice = let __spread.0 := Prod.instFrame; let __spread.1 := Prod.instCoframe; CompleteDistribLattice.mk ⋯ ⋯ ⋯
Equations
- Pi.instCompleteDistribLattice = let __spread.0 := Pi.instFrame; let __spread.1 := Pi.instCoframe; CompleteDistribLattice.mk ⋯ ⋯ ⋯
Equations
- OrderDual.instCompletelyDistribLattice = let __spread.0 := OrderDual.instFrame; let __spread.1 := OrderDual.instCoframe; CompletelyDistribLattice.mk ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- Prod.instCompletelyDistribLattice = let __spread.0 := Prod.instFrame; let __spread.1 := Prod.instCoframe; CompletelyDistribLattice.mk ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- Pi.instCompletelyDistribLattice = let __spread.0 := Pi.instFrame; let __spread.1 := Pi.instCoframe; CompletelyDistribLattice.mk ⋯ ⋯ ⋯ ⋯ ⋯
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.
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- inf : α → α → α
- sSup : Set α → α
- sInf : Set α → α
- top : α
- bot : α
The infimum distributes over the supremum
- compl : α → α
- sdiff : α → α → α
- himp : α → α → α
The infimum of
xandxᶜis at most⊥The supremum of
xandxᶜis at least⊤x \ yis equal tox ⊓ yᶜx ⇨ yis equal toy ⊔ xᶜ⊓distributes over⨆.⊔distributes over⨅.
Instances
⊓ distributes over ⨆.
⊔ distributes over ⨅.
Equations
- CompleteBooleanAlgebra.toCompleteDistribLattice = let __spread.0 := inst; let __spread.1 := BooleanAlgebra.toBiheytingAlgebra; CompleteDistribLattice.mk ⋯ ⋯ ⋯
Equations
- Prod.instCompleteBooleanAlgebra = let __spread.0 := Prod.instBooleanAlgebra; let __spread.1 := Prod.instCompleteDistribLattice; CompleteBooleanAlgebra.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- Pi.instCompleteBooleanAlgebra = let __spread.0 := Pi.instBooleanAlgebra; let __spread.1 := Pi.instCompleteDistribLattice; CompleteBooleanAlgebra.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- OrderDual.instCompleteBooleanAlgebra = let __spread.0 := OrderDual.instBooleanAlgebra; let __spread.1 := OrderDual.instCompleteDistribLattice; CompleteBooleanAlgebra.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
The symmetric difference of two iSups is at most the iSup of the symmetric differences.
A biSup version of iSup_symmDiff_iSup_le.
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.
- sup : α → α → α
- le : α → α → Prop
- lt : α → α → Prop
- le_refl : ∀ (a : α), a ≤ a
- inf : α → α → α
- sSup : Set α → α
- sInf : Set α → α
- top : α
- bot : α
The infimum distributes over the supremum
- compl : α → α
- sdiff : α → α → α
- himp : α → α → α
The infimum of
xandxᶜis at most⊥The supremum of
xandxᶜis at least⊤x \ yis equal tox ⊓ yᶜx ⇨ yis equal toy ⊔ xᶜ
Instances
Equations
- CompleteAtomicBooleanAlgebra.toCompletelyDistribLattice = let __spread.0 := inst; let __spread.1 := BooleanAlgebra.toBiheytingAlgebra; CompletelyDistribLattice.mk ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- CompleteAtomicBooleanAlgebra.toCompleteBooleanAlgebra = let __spread.0 := inst; let __spread.1 := CompletelyDistribLattice.toCompleteDistribLattice; CompleteBooleanAlgebra.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- Prod.instCompleteAtomicBooleanAlgebra = let __spread.0 := Prod.instBooleanAlgebra; let __spread.1 := Prod.instCompletelyDistribLattice; CompleteAtomicBooleanAlgebra.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- Pi.instCompleteAtomicBooleanAlgebra = let __spread.0 := Pi.instCompleteBooleanAlgebra; CompleteAtomicBooleanAlgebra.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- Prop.instCompleteBooleanAlgebra = inferInstance
Pullback an Order.Frame.MinimalAxioms along an injection.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Pullback an Order.Coframe.MinimalAxioms along an injection.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Pullback an Order.Frame along an injection.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Pullback an Order.Coframe along an injection.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Pullback a CompleteDistribLattice.MinimalAxioms along an injection.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Pullback a CompleteDistribLattice along an injection.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Pullback a CompletelyDistribLattice.MinimalAxioms along an injection.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Pullback a CompletelyDistribLattice along an injection.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Pullback a CompleteBooleanAlgebra along an injection.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Pullback a CompleteAtomicBooleanAlgebra along an injection.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- PUnit.instCompleteBooleanAlgebra = inferInstance