The Ginsberg–Fitting product bilattice #
The product L ⊙ R of two lattices, the fundamental bilattice construction, carries pairs
(a, b) recording evidence for (a ∈ L) and against (b ∈ R) a proposition, ordered two ways.
- The truth order, more for and less against, is the carrier's
≤. The type isL ⊙ R := L × Rᵒᵈ, so theProdandOrderDualinstances provide the truth lattice, its boundst = (⊤, ⊥)andf = (⊥, ⊤), and distributivity. - The knowledge order, more evidence both ways, is the plain
Prodorder, installed on the synonymKnow (L ⊙ R).
The IsInterlaced (L ⊙ R) instance packages the four monotonicity laws, so the product is an
interlaced bilattice. On the diagonal L ⊙ L, swapping the coordinates is Ginsberg's negation.
Avron credits the construction to Ginsberg, generalized by Fitting. [UPSTREAM] candidate:
mathlib has no bilattices.
Main definitions #
Bilattice.Product(L ⊙ R): the carrier, with truth-order instances fromL × Rᵒᵈand knowledge-order instances onKnow (L ⊙ R)fromL × R.Bilattice.Product.mk,Bilattice.Product.pro,Bilattice.Product.con: the plain-coordinate constructor and projections.- the
Compl (L ⊙ L)instance: Ginsberg negation on the diagonal, with theInvolutiveComplandNegationinstances it underlies. Bilattice.Product.conflation: the conflation induced by an involution of the factor.
Main results #
Bilattice.Product.isExact_iff,Bilattice.Product.isConsistent_iff,Bilattice.Product.isAnticonsistent_iff: the three classes in coordinates.
References #
The Ginsberg–Fitting product L ⊙ R of pairs of evidence for and against ([Avr96]
Def 2.4). Its order is the truth order of L × Rᵒᵈ, more for and less against; the knowledge
order, more evidence both ways, is that of L × R on Know (L ⊙ R).
Equations
- Bilattice.Product L R = (L × Rᵒᵈ)
Instances For
The Ginsberg–Fitting product L ⊙ R of pairs of evidence for and against ([Avr96]
Def 2.4). Its order is the truth order of L × Rᵒᵈ, more for and less against; the knowledge
order, more evidence both ways, is that of L × R on Know (L ⊙ R).
Equations
- Bilattice.«term_⊙_» = Lean.ParserDescr.trailingNode `Bilattice.«term_⊙_» 70 70 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⊙ ") (Lean.ParserDescr.cat `term 71))
Instances For
The pair with evidence a for and b against.
Equations
- Bilattice.Product.mk a b = (a, OrderDual.toDual b)
Instances For
The truth order #
The carrier instances are transported from L × Rᵒᵈ. Its ≤ is the truth order
([Avr96] Def 2.4(ii)), ⊓ and ⊔ the truth meet and join (ibid. Def 2.4(iv), (iii)),
⊤ = t and ⊥ = f the truth bounds (ibid. Def 2.4(vii)), and the product of distributive
lattices is distributive (ibid. Thm 2.5).
Equations
- Bilattice.Product.instPreorder = { le := Bilattice.Product.instPreorder._aux_1, lt := Bilattice.Product.instPreorder._aux_3, le_refl := ⋯, le_trans := ⋯, lt_iff_le_not_ge := ⋯ }
Equations
- Bilattice.Product.instPartialOrder = { toPreorder := Bilattice.Product.instPreorder, le_antisymm := ⋯ }
Equations
- One or more equations did not get rendered due to their size.
Equations
- Bilattice.Product.instDistribLattice = { toLattice := Bilattice.Product.instLattice, le_sup_inf := ⋯ }
Equations
- Bilattice.Product.instBoundedOrder = { top := Bilattice.Product.instBoundedOrder._aux_1, le_top := ⋯, bot := Bilattice.Product.instBoundedOrder._aux_4, bot_le := ⋯ }
Equations
- Bilattice.Product.instFintype = { elems := Bilattice.Product.instFintype._aux_1, complete := ⋯ }
The knowledge order #
The instances on the synonym Know (L ⊙ R) are transported from the plain Prod order on
L × R, so ⊓ₖ, ⊔ₖ and ≤ₖ are the generic knowledge operations of
Core.Order.Bilattice.Defs.
Equations
- Bilattice.Product.instPreorderKnow = { le := Bilattice.Product.instPreorderKnow._aux_1, lt := Bilattice.Product.instPreorderKnow._aux_3, le_refl := ⋯, le_trans := ⋯, lt_iff_le_not_ge := ⋯ }
Equations
- Bilattice.Product.instPartialOrderKnow = { toPreorder := Bilattice.Product.instPreorderKnow, le_antisymm := ⋯ }
Equations
- Bilattice.Product.instDistribLatticeKnow = { toLattice := Bilattice.Product.instLatticeKnow, le_sup_inf := ⋯ }
Equations
- Bilattice.Product.instBoundedOrderKnow = { top := Bilattice.Product.instBoundedOrderKnow._aux_1, le_top := ⋯, bot := Bilattice.Product.instBoundedOrderKnow._aux_4, bot_le := ⋯ }
The product is an interlaced bilattice, each order's meet and join being monotone for the other order ([Avr96] Thm 2.5).
Negation #
On the diagonal L ⊙ L, Ginsberg's negation swaps the coordinates ([Gin88];
[Avr96] Thm 2.5(2)). It needs no order on L, so it is a bare Compl instance. Over a
preorder it is an involution of the truth order (InvolutiveCompl) and a bilattice Negation, so
over a bounded distributive lattice the truth lattice is a De Morgan algebra ([Fit21]
§8.3).
Ginsberg negation on L ⊙ L swaps the evidence for and the evidence against.
Equations
- Bilattice.Product.instCompl = { compl := fun (x : Bilattice.Product L L) => Bilattice.Product.mk x.con x.pro }
Equations
- Bilattice.Product.instInvolutiveCompl = { toCompl := Bilattice.Product.instCompl, compl_compl := ⋯, compl_le_compl := ⋯ }
Conflation #
Swapping the coordinates and applying an order-reversing involution of the factor to each is a
conflation of L ⊙ L ([Fit94] §7, [Fit21] §8.8). An involutive complement of the
factor gives the conflation instance, which commutes with Ginsberg negation, and the exact,
consistent and anticonsistent values read off the coordinates.
The conflation ⟨a, b⟩ ↦ ⟨f b, f a⟩ of L ⊙ L induced by an order-reversing involution f
of the factor.
Equations
- Bilattice.Product.conflation f hf ha = { conf := fun (x : Bilattice.Product L L) => Bilattice.Product.mk (f x.con) (f x.pro), conf_conf := ⋯, conf_le_conf := ⋯, conf_kLE_conf := ⋯ }
Instances For
Equations
- Bilattice.Product.instConflation = Bilattice.Product.conflation (fun (x : L) => xᶜ) ⋯ ⋯
The exact values are the pairs ⟨a, aᶜ⟩.
A pair is consistent when its evidence against lies below the complement of its evidence for.
A pair is anticonsistent when the complement of its evidence for lies below its evidence against.
Disjoint coordinates #
The pairs whose evidence for and against are disjoint are closed under negation by the symmetry
of Disjoint and, over a distributive factor, under the truth operations, and negation satisfies
the Kleene law on them: they form Kalman's construction Kalman L
(Core/Order/DeMorganAlgebra/Kalman.lean). Over a Boolean factor disjointness is Fitting's
consistency. Over a De Morgan factor neither implies the other: ⟨0, 0⟩ in
SignType ⊙ SignType is consistent but not disjoint, and the pair of the glut and the gap in
FOUR ⊙ FOUR is disjoint but not consistent. Over a Heyting factor, whose pseudocomplement is no
involution, disjointness is the only notion available.
On pairs with disjoint coordinates negation satisfies the Kleene law, since a contradiction
x ⊓ xᶜ has no evidence for and an excluded middle y ⊔ yᶜ no evidence against.