Asi gf3-trit-oracle
install
source · Clone the upstream repo
git clone https://github.com/plurigrid/asi
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/plurigrid/asi "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/gf3-trit-oracle" ~/.claude/skills/plurigrid-asi-gf3-trit-oracle && rm -rf "$T"
manifest:
skills/gf3-trit-oracle/SKILL.mdsource content
GF(3) Trit Oracle
Formal Specification
Type
<<<<<<< HEAD TritOracle : X → Trit Trit = {-1, 0, +1} ⊂ ℤ/3ℤ Invariant: ∀ x₁, x₂, x₃ ∈ X valid-triad(x₁,x₂,x₃) → TritOracle(x₁) + TritOracle(x₂) + TritOracle(x₃) ≡ 0 (mod 3) ======= TritOracle : X -> Trit Trit = {-1, 0, +1} subset Z/3Z Invariant: for all x1, x2, x3 in X valid-triad(x1,x2,x3) -> TritOracle(x1) + TritOracle(x2) + TritOracle(x3) = 0 (mod 3) >>>>>>> origin/main
Preconditions
<<<<<<< HEAD
is a well-formed skill, operation, agent, or value in the ASI universex
has a unique canonical identifier (skill name, CID, or hash)x- The oracle has access to at least one of: (a)
registry entry, (b) behavioral trace, (c) structural signatureskills.json
Postconditions
- Returns exactly one value in
— never{-1, 0, +1}
, never partialnull - Deterministic: same input → same output (no randomness) =======
is a well-formed skill, operation, agent, or valuex
has a unique canonical identifierx- The oracle has access to at least one of: (a) registry entry, (b) behavioral trace, (c) structural signature
Postconditions
- Returns exactly one value in
{-1, 0, +1} - Deterministic: same input -> same output
origin/main
- Conservation: any trit triad produced by
sums to 0 mod 3build_triad
Failure mode
<<<<<<< HEAD If the oracle cannot determine a trit (input unknown), it returns
CellValue.nothing — NOT a guess. CellValue.contradiction is returned if two authoritative sources disagree.
======= Returns
CellValue.nothing if input unknown. Returns CellValue.contradiction if two authoritative sources disagree.
origin/main
The CellValue Lattice (from propagator.zig)
// Partial information lattice // Ordering: nothing < value(-1|0|+1) < contradiction pub fn CellValue(comptime T: type) type { return union(enum) { <<<<<<< HEAD nothing, // oracle has no information yet value: T, // oracle has a definite answer contradiction: struct { a: T, b: T }, // two sources disagree }; } // The ONLY merge operation ======= nothing, value: T, contradiction: struct { a: T, b: T }, }; } >>>>>>> origin/main pub fn latticeMerge(existing: CellValue(Trit), incoming: CellValue(Trit)) CellValue(Trit) { return switch (existing) { .nothing => incoming, .contradiction => existing, .value => |v| switch (incoming) { .nothing => existing, .value => |w| if (v == w) existing else .{ .contradiction = .{ .a = v, .b = w } }, .contradiction => incoming, }, }; }
<<<<<<< HEAD This lattice is the only way trit values accumulate. No averaging, no weighted voting, no softmax. Either you know, or you don't.
=======
origin/main
Oracle Implementations (in order of authority)
1. Registry Oracle (highest authority)
# Requirement: skills.json entry exists with "trit" field <<<<<<< HEAD # Requirement: trit ∈ {-1, 0, 1} (integers, not strings) # Postcondition: returns CellValue.value(trit_from_registry) ======= >>>>>>> origin/main jq -r --arg name "$SKILL_NAME" \ '.skills[] | select(.name == $name) | .trit' \ ~/i/asi/skills.json # Output: -1 | 0 | 1 <<<<<<< HEAD # If not found: returns CellValue.nothing (empty output) ======= # If not found: CellValue.nothing >>>>>>> origin/main
2. Structural Oracle
<<<<<<< HEAD # Requirement: skill has SKILL.md with role: field # Precondition: role ∈ {VALIDATOR, ERGODIC, GENERATOR, BRIDGE} # Postcondition: deterministic mapping to trit ROLE_TO_TRIT = { "VALIDATOR": -1, # verifies, constrains, reduces "ERGODIC": 0, # mediates, balances, routes "BRIDGE": 0, # connects (same as ERGODIC) "GENERATOR": +1, # creates, composes, generates } def structural_oracle(skill_path: str) -> CellValue[int]: ======= ROLE_TO_TRIT = { "VALIDATOR": -1, "ERGODIC": 0, "BRIDGE": 0, "GENERATOR": +1, } def structural_oracle(skill_path: str): >>>>>>> origin/main frontmatter = parse_frontmatter(skill_path + "/SKILL.md") role = frontmatter.get("role") if role is None: return CellValue.nothing() trit = ROLE_TO_TRIT.get(role) if trit is None: return CellValue.nothing() return CellValue.value(trit)
3. Behavioral Oracle (Gemini)
Only invoked when registry and structural oracles return
CellValue.nothing.
<<<<<<< HEAD # Requirement: access to Gemini API (OAuth2 bearer token) # Requirement: skill description text ≥ 50 characters # Postcondition: response is EXACTLY one of "-1", "0", "+1" # Fallback on malformed response: CellValue.nothing (NOT a guess) ======= >>>>>>> origin/main SKILL_DESC="$1" TOKEN=$(gcloud auth print-access-token) PROJECT=$(gcloud config get project 2>/dev/null) RESPONSE=$(curl -s -X POST \ "https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/us-central1/publishers/google/models/gemini-2.0-flash:generateContent" \ -H "Authorization: Bearer ${TOKEN}" \ -H "Content-Type: application/json" \ -d "{ <<<<<<< HEAD \"contents\": [{\"role\": \"user\", \"parts\": [{\"text\": \"Classify this skill/operation as exactly one of: -1 (validates/constrains/reduces), 0 (mediates/routes/bridges), or +1 (creates/composes/generates). Respond with ONLY the number, nothing else. Skill: ${SKILL_DESC}\"}]}], \"generationConfig\": {\"temperature\": 0.0, \"maxOutputTokens\": 4} }" | jq -r '.candidates[0].content.parts[0].text' | tr -d '[:space:]') # Strict validation case "$RESPONSE" in "-1"|"0"|"1"|"+1") echo "${RESPONSE/+/}" ;; *) echo "nothing" ;; # malformed → CellValue.nothing ======= \"contents\": [{\"role\": \"user\", \"parts\": [{\"text\": \"Classify this skill as exactly one of: -1 (validates/constrains), 0 (mediates/routes), or +1 (creates/composes). Respond with ONLY the number. Skill: ${SKILL_DESC}\"}]}], \"generationConfig\": {\"temperature\": 0.0, \"maxOutputTokens\": 4} }" | jq -r '.candidates[0].content.parts[0].text' | tr -d '[:space:]') case "$RESPONSE" in "-1"|"0"|"1"|"+1") echo "${RESPONSE/+/}" ;; *) echo "nothing" ;; >>>>>>> origin/main esac
4. Propagator Network Oracle
<<<<<<< HEAD When multiple sources provide trit evidence, accumulate via the lattice:
def propagator_oracle(skill_name: str) -> CellValue[int]: """Accumulate trit evidence from all sources via latticeMerge.""" cell = CellValue.nothing() # Source 1: registry cell = lattice_merge(cell, registry_oracle(skill_name)) if cell.is_contradiction(): return cell # contradiction absorbs all # Source 2: structural ======= ```python def propagator_oracle(skill_name: str): """Accumulate trit evidence from all sources via latticeMerge.""" cell = CellValue.nothing() cell = lattice_merge(cell, registry_oracle(skill_name)) if cell.is_contradiction(): return cell >>>>>>> origin/main cell = lattice_merge(cell, structural_oracle(skill_path(skill_name))) if cell.is_contradiction(): return cell <<<<<<< HEAD # Source 3: behavioral (only if still nothing) ======= >>>>>>> origin/main if cell.is_nothing(): cell = lattice_merge(cell, behavioral_oracle(skill_description(skill_name))) return cell
<<<<<<< HEAD
Trit Arithmetic (GF(3))
# GF(3) = ℤ/3ℤ with elements {-1, 0, +1} ≡ {2, 0, 1} mod 3 def gf3_add(a: int, b: int) -> int: """Add two trits in GF(3). Result ∈ {-1, 0, +1}.""" raw = (a + b) % 3 return raw if raw <= 1 else raw - 3 # map {2} → {-1} def gf3_mul(a: int, b: int) -> int: """Multiply two trits in GF(3). Result ∈ {-1, 0, +1}.""" ======= ## Trit Arithmetic (GF(3)) ```python def gf3_add(a: int, b: int) -> int: raw = (a + b) % 3 return raw if raw <= 1 else raw - 3 def gf3_mul(a: int, b: int) -> int: >>>>>>> origin/main raw = (a * b) % 3 return raw if raw <= 1 else raw - 3 def is_valid_triad(t1: int, t2: int, t3: int) -> bool: <<<<<<< HEAD """Conservation law: Σ trits ≡ 0 mod 3.""" ======= >>>>>>> origin/main return gf3_add(gf3_add(t1, t2), t3) == 0 def build_triad(t1: int, t2: int) -> int: """Given two trits, compute the unique third that conserves GF(3).""" <<<<<<< HEAD return gf3_add(-(t1 + t2) % 3, 0) # t3 = -(t1+t2) mod 3
Oracle Composition
Two trit oracles compose only if the triad is valid:
def compose_skills(s1: str, s2: str, s3: str) -> Optional[Composition]: """ Compose three skills if and only if their trit triad is valid. Precondition: all three trits are CellValue.value (not nothing/contradiction) Postcondition: iff is_valid_triad(t1, t2, t3) → Composition(s1, s2, s3) else → None (composition refused) """ t1 = propagator_oracle(s1) t2 = propagator_oracle(s2) t3 = propagator_oracle(s3) # Reject partial information if any(c.is_nothing() or c.is_contradiction() for c in [t1, t2, t3]): return None # cannot compose without complete trit information # Enforce conservation law if not is_valid_triad(t1.value, t2.value, t3.value): return None # trit conservation violated → composition refused return Composition(s1, s2, s3)
Neurofeedback Trit Oracle (from propagator.zig)
The BCI-to-trit oracle is a concrete instance:
// Requirement: focus ∈ [0.0, 1.0] (EEG-derived focus score) // Postcondition: trit ∈ {-1, 0, +1}, deterministic fn neurofeedback_trit(focus: f32) Trit { return if (focus > 0.66) .plus // high focus → Generator (+1) else if (focus < 0.33) .minus // low focus → Validator (-1) else .zero; // medium → Coordinator (0) } // This is a SPECIFIC oracle. Threshold: 0.33, 0.66. No fuzz.
What This Oracle Is NOT
- NOT a softmax over trit probabilities — trits are discrete, not continuous
- NOT a learnable parameter — trits are determined, not trained
- NOT a majority vote — the lattice uses identity or contradiction, never averaging
- NOT partial — a trit is either known (value) or unknown (nothing), never "0.7"
- NOT overridable — once
, it stays contradictionCellValue.contradiction
Related Skills
— composition invariant checkergf3-tripartite
— pre-commit hook enforcing conservationgf3-pr-verify
— validates skill registry entriesskill-validation-gf3
— behavioral equivalence oracle (uses trit as classification)bisimulation-game
— Radul-Sussman propagator network (the CellValue lattice)propagators
— propagator.zig with neurofeedback_gatezig-syrup-propagator-interleave
(Gay.jl) —balance-triad
in Juliais_valid_triad
— trit-conserving skill composition router ======= return gf3_add(-(t1 + t2) % 3, 0)triad-interleave
## Neurofeedback Trit Oracle ```zig fn neurofeedback_trit(focus: f32) Trit { return if (focus > 0.66) .plus // high focus -> Generator (+1) else if (focus < 0.33) .minus // low focus -> Validator (-1) else .zero; // medium -> Coordinator (0) }
What This Oracle Is NOT
- NOT a softmax over probabilities -- trits are discrete
- NOT a learnable parameter -- trits are determined, not trained
- NOT a majority vote -- identity or contradiction, never averaging
- NOT partial -- a trit is known (value) or unknown (nothing), never "0.7"
- NOT overridable -- once
, it staysCellValue.contradiction
origin/main