TauLib.BookI.Logic.BooleanRecovery
TauLib.Logic.BooleanRecovery
Boolean recovery: the forgetful functor from Truth4 to Bool.
Registry Cross-References
-
[I.P13] Boolean Recovery –
boolean_recovery,forget_preserves_meet,forget_preserves_join -
[I.D41] Subobject Classifier Preview –
Omega_tau
Ground Truth Sources
-
chunk_0228_M002194: Split-complex algebra, bipolar balance
-
chunk_0310_M002679: Bipolar partition
Mathematical Content
The forgetful map forget : Truth4 -> Bool collapses the four truth values
to two by an “optimistic” projection: B (overdetermined) maps to true,
N (underdetermined) maps to false. Equivalently, forget reads only the
B-sector component of the Bool x Bool encoding.
Key results:
-
forget is a LATTICE homomorphism: it preserves meet and join.
-
forget FAILS to preserve negation at B and N – this is the precise fingerprint of information loss from 4-valued to 2-valued logic.
-
The boolean_recovery theorem: forget is lossless (preserves negation) if and only if the input is classical (T or F).
The Heyting implication is also defined. Since Truth4 is a Boolean algebra (isomorphic to 2 x 2), the Heyting implication coincides with the material implication at all designated values, but we define and verify it independently.
Omega_tau := Truth4 is declared as the subobject classifier preview for the tau-topos (to be developed in the Topos module).
Tau.Logic.forget
source def Tau.Logic.forget :Truth4 → Bool
[I.P13] Forgetful map from Truth4 to Bool. “Optimistic” projection: reads the B-sector (first component of Bool x Bool). T -> true, B -> true, N -> false, F -> false. Equations
- Tau.Logic.forget Tau.Logic.Truth4.T = true
- Tau.Logic.forget Tau.Logic.Truth4.B = true
- Tau.Logic.forget Tau.Logic.Truth4.N = false
- Tau.Logic.forget Tau.Logic.Truth4.F = false Instances For
Tau.Logic.forget_preserves_meet
source theorem Tau.Logic.forget_preserves_meet (a b : Truth4) :forget (a.meet b) = (forget a && forget b)
forget preserves meet: forget(meet a b) = forget(a) && forget(b).
Tau.Logic.forget_preserves_join
source theorem Tau.Logic.forget_preserves_join (a b : Truth4) :forget (a.join b) = (forget a || forget b)
| forget preserves join: forget(join a b) = forget(a) | forget(b). |
Tau.Logic.forget_conflates_T_B
source theorem Tau.Logic.forget_conflates_T_B :forget Truth4.T = forget Truth4.B
forget conflates T and B: both map to true.
Tau.Logic.forget_conflates_F_N
source theorem Tau.Logic.forget_conflates_F_N :forget Truth4.F = forget Truth4.N
forget conflates F and N: both map to false.
Tau.Logic.forget_not_injective
source theorem Tau.Logic.forget_not_injective :¬∀ (a b : Truth4), forget a = forget b → a = b
forget is NOT injective: T <> B but forget T = forget B.
Tau.Logic.forget_preserves_neg
source theorem Tau.Logic.forget_preserves_neg (v : Truth4) :forget v.neg = !forget v
forget does preserve negation (for the optimistic projection).
Tau.Logic.forget_pessimistic
source def Tau.Logic.forget_pessimistic :Truth4 → Bool
The pessimistic forgetful map: reads the C-sector (second component). T -> true, N -> true, B -> false, F -> false. Equations
- Tau.Logic.forget_pessimistic Tau.Logic.Truth4.T = true
- Tau.Logic.forget_pessimistic Tau.Logic.Truth4.N = true
- Tau.Logic.forget_pessimistic Tau.Logic.Truth4.B = false
- Tau.Logic.forget_pessimistic Tau.Logic.Truth4.F = false Instances For
Tau.Logic.forget_pessimistic_preserves_meet
source theorem Tau.Logic.forget_pessimistic_preserves_meet (a b : Truth4) :forget_pessimistic (a.meet b) = (forget_pessimistic a && forget_pessimistic b)
The pessimistic map also preserves meet.
Tau.Logic.forget_pessimistic_preserves_join
source theorem Tau.Logic.forget_pessimistic_preserves_join (a b : Truth4) :forget_pessimistic (a.join b) = (forget_pessimistic a || forget_pessimistic b)
The pessimistic map also preserves join.
Tau.Logic.forget_pessimistic_preserves_neg
source theorem Tau.Logic.forget_pessimistic_preserves_neg (v : Truth4) :forget_pessimistic v.neg = !forget_pessimistic v
The pessimistic map also preserves negation.
Tau.Logic.dual_forget_injective
source **theorem Tau.Logic.dual_forget_injective (a b : Truth4)
(h1 : forget a = forget b)
(h2 : forget_pessimistic a = forget_pessimistic b) :a = b**
The two projections together recover Truth4: the pair (forget v, forget_pessimistic v) uniquely determines v.
Tau.Logic.dual_forget_is_toBoolPair
source theorem Tau.Logic.dual_forget_is_toBoolPair (v : Truth4) :(forget v, forget_pessimistic v) = v.toBoolPair
The dual-forget map is exactly the toBoolPair isomorphism.
Tau.Logic.boolean_recovery
source theorem Tau.Logic.boolean_recovery (v : Truth4) :v = Truth4.T ∨ v = Truth4.F ↔ forget v = forget_pessimistic v
[I.P13] Boolean recovery: a Truth4 value is classical (T or F) if and only if both sector projections agree.
For classical values: forget T = true = forget_pessimistic T, forget F = false = forget_pessimistic F. For non-classical: forget B = true but forget_pessimistic B = false (sectors disagree).
Tau.Logic.forget_fiber_T_B
source theorem Tau.Logic.forget_fiber_T_B :forget Truth4.T = forget Truth4.B
The forget fiber has exactly 2 elements for each output value.
Tau.Logic.forget_fiber_F_N
source theorem Tau.Logic.forget_fiber_F_N :forget Truth4.F = forget Truth4.N
Tau.Logic.forget_never_injective
source theorem Tau.Logic.forget_never_injective (v : Truth4) :∃ (w : Truth4), w ≠ v ∧ forget w = forget v
No Truth4 value has a singleton forget-fiber: the projection always loses information.
Tau.Logic.forget_fiber
source theorem Tau.Logic.forget_fiber (a b : Truth4) :forget a = forget b ↔ a = b ∨ a = Truth4.T ∧ b = Truth4.B ∨ a = Truth4.B ∧ b = Truth4.T ∨ a = Truth4.F ∧ b = Truth4.N ∨ a = Truth4.N ∧ b = Truth4.F
The key information-loss theorem: forget loses exactly the B/N distinction. Two values have the same forget image iff they agree on “B-sector truth”.
Tau.Logic.Omega_tau
source@[reducible, inline]
abbrev Tau.Logic.Omega_tau :Type
[I.D41] The tau subobject classifier: Truth4 serves as the subobject classifier Omega_tau for the tau-topos. Full development deferred to TauLib.Topos. Equations
- Tau.Logic.Omega_tau = Tau.Logic.Truth4 Instances For
Tau.Logic.omega_true
source def Tau.Logic.omega_true :Omega_tau
The “true” arrow: the inclusion of the terminal object into Omega_tau. Equations
- Tau.Logic.omega_true = Tau.Logic.Truth4.T Instances For
Tau.Logic.omega_false
source def Tau.Logic.omega_false :Omega_tau
The characteristic map of the empty subobject. Equations
- Tau.Logic.omega_false = Tau.Logic.Truth4.F Instances For
Tau.Logic.omega_both
source def Tau.Logic.omega_both :Omega_tau
The characteristic map of an overdetermined subobject. Equations
- Tau.Logic.omega_both = Tau.Logic.Truth4.B Instances For
Tau.Logic.omega_neither
source def Tau.Logic.omega_neither :Omega_tau
The characteristic map of an underdetermined subobject. Equations
- Tau.Logic.omega_neither = Tau.Logic.Truth4.N Instances For
Tau.Logic.Truth4.heyting_impl
source def Tau.Logic.Truth4.heyting_impl :Truth4 → Truth4 → Truth4
Heyting implication: a => b = sup{c : meet(a,c) <= b}.
For Truth4 (which is Boolean), this coincides with material implication. The table is computed by hand: a\b | T F B N —-+—————- T | T F B N F | T T T T B | T N T N N | T B B T Equations
- Tau.Logic.Truth4.T.heyting_impl x✝ = x✝
- Tau.Logic.Truth4.F.heyting_impl x✝ = Tau.Logic.Truth4.T
- Tau.Logic.Truth4.B.heyting_impl Tau.Logic.Truth4.T = Tau.Logic.Truth4.T
- Tau.Logic.Truth4.B.heyting_impl Tau.Logic.Truth4.F = Tau.Logic.Truth4.N
- Tau.Logic.Truth4.B.heyting_impl Tau.Logic.Truth4.B = Tau.Logic.Truth4.T
- Tau.Logic.Truth4.B.heyting_impl Tau.Logic.Truth4.N = Tau.Logic.Truth4.N
- Tau.Logic.Truth4.N.heyting_impl Tau.Logic.Truth4.T = Tau.Logic.Truth4.T
- Tau.Logic.Truth4.N.heyting_impl Tau.Logic.Truth4.F = Tau.Logic.Truth4.B
- Tau.Logic.Truth4.N.heyting_impl Tau.Logic.Truth4.B = Tau.Logic.Truth4.B
- Tau.Logic.Truth4.N.heyting_impl Tau.Logic.Truth4.N = Tau.Logic.Truth4.T Instances For
Tau.Logic.heyting_eq_material
source theorem Tau.Logic.heyting_eq_material (a b : Truth4) :a.heyting_impl b = a.impl b
Heyting implication coincides with material implication on Truth4. This is expected: Truth4 is Boolean, and in a Boolean algebra the Heyting implication equals a -> b = neg(a) v b.
Tau.Logic.heyting_adjunction
source theorem Tau.Logic.heyting_adjunction (a b : Truth4) :(a.meet (a.heyting_impl b)).le b = true
Heyting adjunction (main direction): meet(a, a => b) <= b. Verified via the le predicate.
Tau.Logic.heyting_maximality
source **theorem Tau.Logic.heyting_maximality (a b c : Truth4)
(h : (a.meet c).le b = true) :c.le (a.heyting_impl b) = true**
Heyting adjunction (maximality): if meet(a, c) <= b then c <= a => b.
Tau.Logic.Truth4.heyting_neg
source def Tau.Logic.Truth4.heyting_neg (a : Truth4) :Truth4
Heyting pseudo-complement: neg_H(a) := a => F. Equations
- a.heyting_neg = a.heyting_impl Tau.Logic.Truth4.F Instances For
Tau.Logic.heyting_neg_eq_neg
source theorem Tau.Logic.heyting_neg_eq_neg (a : Truth4) :a.heyting_neg = a.neg
Heyting negation coincides with bipolar negation on Truth4.
Tau.Logic.excluded_middle
source theorem Tau.Logic.excluded_middle (v : Truth4) :v.join v.neg = Truth4.T
Excluded middle holds in Truth4: join v (neg v) = T for all v. This confirms Truth4 is Boolean, not merely Heyting.
Tau.Logic.double_negation
source theorem Tau.Logic.double_negation (v : Truth4) :v.neg.neg = v
Double negation elimination: neg(neg v) = v. (Already proved as neg_involutive.)
Tau.Logic.non_contradiction
source theorem Tau.Logic.non_contradiction (v : Truth4) :v.meet v.neg = Truth4.F
Non-contradiction: meet v (neg v) = F for all v.
Tau.Logic.truth4_is_boolean
source theorem Tau.Logic.truth4_is_boolean :(∀ (a : Truth4), a.meet a.neg = Truth4.F) ∧ (∀ (a : Truth4), a.join a.neg = Truth4.T) ∧ (∀ (a b c : Truth4), a.meet (b.join c) = (a.meet b).join (a.meet c)) ∧ ∀ (a : Truth4), a.neg.neg = a
Truth4 is a Boolean algebra: it has complement laws (complement_meet, complement_join), distributivity (meet_distrib_join, join_distrib_meet), and excluded middle. The non-classical behavior is confined to the material implication’s interaction with overdetermined/underdetermined values, not the lattice structure itself.
Tau.Logic.explosion_is_semantic
source theorem Tau.Logic.explosion_is_semantic :(∀ (a : Truth4), a.meet a.neg = Truth4.F) ∧ (∀ (a : Truth4), a.join a.neg = Truth4.T) ∧ Truth4.B.impl Truth4.F ≠ Truth4.T
The explosion barrier is about material implication, not lattice structure. Truth4 IS Boolean, but impl B F = N <> T. This demonstrates that “paraconsistency” in Truth4 is a semantic phenomenon (about how we interpret B as “overdetermined truth”) rather than a structural departure from Boolean algebra.