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
The Truth Axis Truth False Other dimensions P₁ (80% true) θ = 37° P₂ (50% = unknown) P₃ (20% true) Truth Degree cos(θ) = ⟨P, Truth⟩ score = (cos + 1) / 2 → normalized to [0, 1]

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.25 0.5 (Unknown) 0.75 1 (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

Evidence Accumulation Truth Evidence A (0.6) + Truth Evidence B (0.5) = Truth Combined (1.1) → ~85% after norm Vector addition naturally accumulates aligned evidence!

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):

0 False 0.5 Unknown 1 True High confidence (false) Low confidence High confidence (true)
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:

Implementation in Code

// From primitiveOps.js function distance(a, b) { const cosSim = vectorSpace.cosineSimilarity(a, b); return (cosSim + 1) / 2; // Normalize to [0, 1] } // From sessionApi.js - Evaluate verb function computeScores(session) { const truth = getSymbol(session, 'Truth'); const result = getSymbol(session, '@result'); const truthScore = executeEvaluate(result, truth, context); const confidence = Math.abs(truthScore - 0.5) * 2; return { truth: truthScore, confidence }; }