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 byCompletelyDistribLattice
andCompleteAtomicBooleanAlgebra
.
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]
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 : α
In a coframe,
⊔
distributes over⨅
.
Instances
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 : α
In a complete distributive lattice,
⊔
distributes over⨅
.
Instances
Equations
- CompleteDistribLattice.toCoframe = let __src := inst; Order.Coframe.mk ⋯
Equations
- CompletelyDistribLattice.toCompleteDistribLattice = CompleteDistribLattice.mk ⋯
Equations
- CompleteLinearOrder.toCompletelyDistribLattice = CompletelyDistribLattice.mk ⋯
Equations
- OrderDual.instCoframe = let __spread.0 := OrderDual.instCompleteLattice α; Order.Coframe.mk ⋯
Equations
- Prod.instFrame α β = let __spread.0 := Prod.instCompleteLattice α β; Order.Frame.mk ⋯
Equations
- Pi.instFrame = let __spread.0 := Pi.instCompleteLattice; Order.Frame.mk ⋯
Equations
- Frame.toDistribLattice = DistribLattice.ofInfSupLe ⋯
Equations
- OrderDual.instFrame = let __spread.0 := OrderDual.instCompleteLattice α; Order.Frame.mk ⋯
Equations
- Prod.instCoframe α β = let __spread.0 := Prod.instCompleteLattice α β; Order.Coframe.mk ⋯
Equations
- Pi.instCoframe = let __spread.0 := Pi.instCompleteLattice; Order.Coframe.mk ⋯
Equations
- Coframe.toDistribLattice = let __spread.0 := inst; DistribLattice.mk ⋯
Equations
- OrderDual.instCompleteDistribLattice α = let __spread.0 := OrderDual.instFrame; let __spread.1 := OrderDual.instCoframe; CompleteDistribLattice.mk ⋯
Equations
- Prod.instCompleteDistribLattice α β = let __spread.0 := Prod.instCompleteLattice α β; let __spread.1 := Prod.instFrame α β; let __spread.2 := 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.instCompleteLattice α; CompletelyDistribLattice.mk ⋯
Equations
- Prod.instCompletelyDistribLattice α β = let __spread.0 := Prod.instCompleteLattice α β; CompletelyDistribLattice.mk ⋯
Equations
- Pi.instCompletelyDistribLattice = let __spread.0 := Pi.instCompleteLattice; 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 : α → α → α
- compl : α → α
- sdiff : α → α → α
- himp : α → α → α
- top : α
- bot : α
- sSup : Set α → α
Any element of a set is less than the set supremum.
Any upper bound is more than the set supremum.
- sInf : Set α → α
Any element of a set is more than the set infimum.
Any lower bound is less than the set infimum.
In a frame,
⊓
distributes over⨆
.In a complete distributive lattice,
⊔
distributes over⨅
.
Instances
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 ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
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
x
andxᶜ
is at most⊥
The supremum of
x
andxᶜ
is at least⊤
x \ y
is equal tox ⊓ yᶜ
x ⇨ y
is equal toy ⊔ xᶜ
In a frame,
⊓
distributes over⨆
.In a complete distributive lattice,
⊔
distributes over⨅
.
Instances
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
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
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
- PUnit.instCompleteBooleanAlgebra = inferInstance
Equations
- One or more equations did not get rendered due to their size.