Complete lattices #
The definitions and instances of the lattice theory: the operations of a complete lattice, the
complete lattice of propositions, the embedding ⌜·⌝ of propositions, supremum-preserving maps with
their upper adjoints, and Heyting implication ⇨.
Additional operations of a complete lattice #
The top element ⊤, the binary meet ⊓ and join ⊔, and the indexed infimum ⨅ and supremum
⨆. The bottom element ⊥ comes from CCPO, which every complete lattice is.
Top element of a complete lattice (supremum of all elements)
Instances For
Top element of a complete lattice (supremum of all elements)
Instances For
A complete lattice is a chain-complete partial order.
Instances For
Binary meet (infimum)
Instances For
Binary join (supremum)
Instances For
Indexed infimum
Instances For
Indexed supremum
Instances For
The complete lattice of propositions #
⊑ is implication and the supremum of a set of propositions is the existential quantifier over it.
The instances are scoped in Std.Internal.Order, outside of Lean.Order. partial_fixpoint and
coinductive_fixpoint order Prop by ImplicationOrder and ReverseImplicationOrder, and their
monotonicity lemmas live in Lean.Order itself. Open Std.Internal.Order to order Prop by
implication.
Instances For
Supremum for Prop: true iff some element of the set is true
Instances For
Instances For
Embedding of propositions #
⌜p⌝ embeds a proposition p into an assertion lattice as ⊤ if p holds and ⊥ otherwise.
Embedding of propositions into an CompleteLattice type. ⌜p⌝ embeds p : Prop as ⊤ if p holds
and ⊥ otherwise.
Instances For
Embedding of propositions into an CompleteLattice type. ⌜p⌝ embeds p : Prop as ⊤ if p holds
and ⊥ otherwise.
Instances For
Supremum-preserving maps and Heyting implication #
A supremum-preserving map on a complete lattice is a lower adjoint. Its upper adjoint is the
implication belonging to it: Heyting ⇨ for the lattice meet, a magic wand for a separating
conjunction.
f : α → α preserves suprema if it distributes over arbitrary suprema:
f (sup s) = sup { f x | x ∈ s }. Equivalently f is a lower adjoint, so it has an upper adjoint
PreservesSup.upperAdjoint f.
A frame operator acts by a supremum-preserving map for each resource r: the lattice meet
(a ⊓ ·),
or a cost combinator (costConj r) for a counter resource. The upper adjoint is the corresponding
implication: Heyting ⇨ for the meet, a magic wand for separating conjunction.
- map_sup (s : α → Prop) : f (CompleteLattice.sup s) = CompleteLattice.sup fun (y : α) => ∃ (x : α), s x ∧ y = f x
fpreserves joins.
Instances
The upper adjoint of f: the join of all x with f x ⊑ b. For f = (a ⊓ ·) this is Heyting
implication a ⇨ ·.
Instances For
Unit, free from the definition of upperAdjoint: f x ⊑ b → x ⊑ upperAdjoint f b. Needs only
CompleteLattice.
A complete lattice whose meets preserve suprema. The Heyting implication ⇨ is then a right
adjoint, and ⊓ distributes over suprema of arbitrary families. The literature also calls such a
lattice a frame.
Instances For
Heyting implication: the upper adjoint of the lattice meet. For Prop it is →.
Instances For
Heyting implication: the upper adjoint of the lattice meet. For Prop it is →.