Kalman's construction #
Over a distributive lattice L with a least element, the pairs (a, b) with a ⊓ b = ⊥ form a
distributive lattice Kalman L with meet (a, b) ⊓ (c, d) = (a ⊓ c, b ⊔ d), and the swap
(a, b)ᶜ = (b, a) is an involution satisfying Kleene's law; when L is bounded, Kalman L is a
Kleene algebra. Reading a as evidence for and b as evidence against a proposition, these are
the pairs of the product bilattice L ⊙ L whose evidence never overlaps, and Kalman L is that
subtype, with the truth order, truth operations and Ginsberg negation of L ⊙ L. A bounded
lattice homomorphism acts on both coordinates (Kalman.map), which is the action on morphisms of
Cignoli's functor from bounded distributive lattices to Kleene algebras.
Main definitions #
Kalman L: the pairs ofL ⊙ Lwith disjoint coordinates, with itsDistribLattice,BoundedOrder,InvolutiveComplandIsKleeneinstances.Kalman.map: the construction on bounded lattice homomorphisms.
Implementation notes #
Kalman L is a subtype of L ⊙ L in the manner of mathlib's Complementeds, rather than a
Sublattice, so that its order and involution need only a partial order with a least element. The
closure of the disjoint pairs under the operations and the Kleene law are lemmas about the product
(Bilattice.Product.supClosed_disjoint_pro_con, Bilattice.Product.infClosed_disjoint_pro_con,
Bilattice.Product.inf_compl_le_sup_compl_of_disjoint).
TODO #
- Kalman's general
P(a): for any elementaof a distributive lattice, the pairs withx ⊓ y ≤ a ≤ x ⊔ yform a normal i-lattice with center(a, a); this file is the casea = ⊥. - Kalman's Theorem 6: the normal extensions of
Lare the i-sublattices ofKalman Lcontaining the pairs(⊥, y)and(x, ⊥).
References #
Kalman's construction is the type of pairs of the product bilattice L ⊙ L with disjoint
coordinates, written P(O) in [Kal58] §3.
Equations
- Kalman L = { x : Bilattice.Product L L // Disjoint x.pro x.con }
Instances For
The order and the involution #
The pair with no evidence either way, the fixed point of the involution.
Equations
- Kalman.instInhabited = { default := Kalman.mk ⊥ ⊥ ⋯ }
Ginsberg's negation, swapping the coordinates, restricts to the disjoint pairs.
Equations
- Kalman.instInvolutiveCompl = { compl := fun (x : Kalman L) => ⟨(↑x)ᶜ, ⋯⟩, compl_compl := ⋯, compl_le_compl := ⋯ }
Equations
- Kalman.instBoundedOrder = Subtype.boundedOrder ⋯ ⋯
The Kleene lattice #
Equations
- Kalman.instDistribLattice = Subtype.distribLattice ⋯ ⋯
Functoriality #
Kalman's construction on morphisms applies a bounded lattice homomorphism to both coordinates ([Cig86], as presented by [JSM17]).
Equations
- Kalman.map f = { toFun := fun (x : Kalman L) => Kalman.mk (f x.pro) (f x.con) ⋯, map_sup' := ⋯, map_inf' := ⋯, map_top' := ⋯, map_bot' := ⋯ }