The knowledge order: Flat Bool and the Kleene bilattice #
Trivalent's native order is the truth order false < indet < true; Flat Bool
(equivFlatBool) carries the knowledge order ⊥ ⊑ true, ⊥ ⊑ false. Two orders
on one carrier is a bilattice. Strong Kleene ∧/∨ are the truth-order lattice
operations ⊓/⊔; what makes them canonical is interlacing — they are monotone
for the knowledge order as well ([Kle52]'s regularity condition), while Weak
Kleene is not (meetWeak_not_truthMono).
Flat Bool's SemilatticeInf meet ⊓ is the consensus ⊗; its partial join
(PartialUnify) is the gullibility ⊕, partial because three values lack the ⊤
("both") of a full four-valued bilattice — so Trivalent is the consistent fragment
of that bilattice.
The carrier bijection Trivalent ≃ Flat Bool: indet ↔ ⊥, true ↔ some true,
false ↔ some false. Flat Bool carries the knowledge order, distinct from the
truth order — the two orders of the Kleene bilattice.
Equations
- Trivalent.indet.toFlat = none
- Trivalent.true.toFlat = some true
- Trivalent.false.toFlat = some false
Instances For
Inverse of toFlat.
Equations
- Trivalent.ofFlat none = Trivalent.indet
- Trivalent.ofFlat (some true) = Trivalent.true
- Trivalent.ofFlat (some false) = Trivalent.false
Instances For
Trivalent and the flat domain Flat Bool share a carrier.
Equations
- Trivalent.equivFlatBool = { toFun := Trivalent.toFlat, invFun := Trivalent.ofFlat, left_inv := Trivalent.equivFlatBool._proof_1, right_inv := Trivalent.equivFlatBool._proof_2 }
Instances For
Weak Kleene conjunction is not interlaced — it fails truth-order monotonicity
(indet ≤ true, yet meetWeak .indet .false = .indet ≰ .false), so unlike Strong
Kleene ⊓ it is not a bilattice operation.