The Revolutionary Idea: In Spock AGISystem2, truth is not a binary value (true/false). It's a direction in high-dimensional space. A proposition is "true" to the degree that it aligns with this direction.
The Problem with Boolean Truth
❌ Classical Logic
Only TRUE or FALSE
"Socrates is mortal" = TRUE
"It might rain" = ??? (undefined)
No degrees of belief
Composition is complex (AND/OR/NOT)
✓ Geometric Truth
Continuous from 0 to 1
"Socrates is mortal" = 0.95
"It might rain" = 0.6
Uncertainty is natural
Composition is vector addition
Truth as a Canonical Direction
At engine initialization, Spock creates a special vector called Truth:
Truth = normalise(randomVector(512))
False = -Truth
Unknown = any vector orthogonal to Truth
Computing Truth Degree
The Evaluate verb projects a proposition onto the Truth axis:
truth_degree(P) = (cos(P, Truth) + 1) / 2
= (⟨P, Truth⟩ / (‖P‖ · ‖Truth‖) + 1) / 2
→ Result in [0, 1]
0 (False)0.250.5 (Unknown)0.751 (True)
Evidence Accumulation
One of the most powerful features: evidence adds naturally.
Example: Multiple Witnesses
Witness A says the light was red (60% confident): evidenceA = 0.6 × Truth
Witness B also says red (50% confident): evidenceB = 0.5 × Truth
Combined evidence: combined = evidenceA + evidenceB = 1.1 × Truth
After normalization: ~85% true
Contradictory Evidence
Contradictions also emerge naturally:
Example: Conflicting Witnesses
Witness A says red (80%): evidenceA = 0.8 × Truth
Witness B says NOT red (70%): evidenceB = 0.7 × (-Truth) = -0.7 × Truth
Combined: combined = 0.8 × Truth - 0.7 × Truth = 0.1 × Truth
Result: barely true (~55%)
Uncertainty vs. Falsehood
A crucial distinction that boolean logic can't make:
Situation
Vector Position
Truth Score
Meaning
Definitely true
Parallel to Truth
1.0
Strong positive evidence
Probably true
~30° from Truth
0.75
Good evidence, some uncertainty
Unknown
Orthogonal to Truth
0.5
No evidence either way
Probably false
~150° from Truth
0.25
Evidence against
Definitely false
Opposite to Truth
0.0
Strong negative evidence
The Evaluate Verb
In SpockDSL, the Evaluate verb computes this projection:
@claim Socrates Is Mortal
@truth claim Evaluate Truth
// Returns: SCALAR with value in [0, 1]
Confidence vs. Truth
Spock also tracks confidence (how far from 0.5):
confidence = |truth_score - 0.5| × 2
0.95 truth → 0.9 confidence (very sure it's true)
0.50 truth → 0.0 confidence (no idea)
0.10 truth → 0.8 confidence (pretty sure it's false)
Why This Matters
Geometric truth enables:
Graceful degradation: Partial knowledge → partial truth, not error