skills/plurigrid/asi/clifford-acset-bridge

clifford-acset-bridge

SKILL.md

clifford-acset-bridge

Geometric Algebra as Attributed C-Set with grade-preserving morphisms

Version: 1.0.0
Trit: 0 (ERGODIC - coordinates between algebras)

Motivation

Clifford Algebras and ACSets share deep structural similarities:

  • Both have graded components (blades / objects)
  • Both support composition (geometric product / morphism composition)
  • Both have duality (Hodge dual / ACSet duality)

This skill bridges them for unified algebraic data modeling.

Schema: SchCliffordACSet

using Catlab, ACSets

@present SchCliffordACSet(FreeSchema) begin
  # Objects: One per grade
  Scalar::Ob      # Grade 0
  Vector::Ob      # Grade 1
  Bivector::Ob    # Grade 2
  Trivector::Ob   # Grade 3
  Pseudoscalar::Ob # Grade n
  
  # Morphisms: Grade-changing operations
  wedge_sv::Hom(Scalar × Vector, Vector)      # 0+1=1
  wedge_vv::Hom(Vector × Vector, Bivector)    # 1+1=2
  wedge_vb::Hom(Vector × Bivector, Trivector) # 1+2=3
  
  dot_vv::Hom(Vector × Vector, Scalar)        # 1-1=0
  dot_bv::Hom(Bivector × Vector, Vector)      # 2-1=1
  dot_tv::Hom(Trivector × Vector, Bivector)   # 3-1=2
  
  geo_vv::Hom(Vector × Vector, Scalar + Bivector) # 1*1=0+2
  
  dual::Hom(Vector, Bivector)  # Hodge star (in 3D)
  reverse::Hom(Bivector, Bivector)  # Grade involution
  
  # Attributes
  Coeff::AttrType
  coeff::Attr(Vector, Coeff)
  coeff_bv::Attr(Bivector, Coeff)
  
  # GF(3) trit per operation
  Trit::AttrType
  wedge_trit::Attr(Vector, Trit)  # +1
  dot_trit::Attr(Vector, Trit)    # -1
  geo_trit::Attr(Vector, Trit)    # 0
end

Grade Preservation as Diagram Commutativity

The fundamental law: grade(a ∧ b) = grade(a) + grade(b)

In ACSet terms, this is a functorial constraint:

Grade: CliffordACSet → GradedMonoid

where GradedMonoid has:
  Objects: ℤ (integers = grades)
  Morphisms: Addition

Commutative Diagram

        a : Vector        b : Vector
            │                  │
            └────── ∧ ─────────┘
              a∧b : Bivector
              grade │
                    2 = 1 + 1 ✓

GF(3) Correspondence

Clifford Operation Grade Change GF(3) Trit ACSet Morphism
Wedge (∧) +k +1 (PLUS) Covariant Hom
Dot (·) -k -1 (MINUS) Contravariant Hom
Geometric (*) 0 (mixed) 0 (ERGODIC) Profunctor
Dual (⋆) n-k 0 (ERGODIC) Adjoint
Reverse (~) 0 0 (ERGODIC) Involution

Conservation Law

For any composition of operations:

Σ trit(op_i) ≡ 0 (mod 3)

This ensures balanced exploration in the skill ecosystem.

Specter Navigation for Clifford Elements

From specter-acset:

# Navigators for Clifford algebra elements
GRADE_K(k)      # Select grade-k component
WEDGE_WITH(b)   # Navigate to wedge product
DOT_WITH(b)     # Navigate to contraction
DUAL            # Navigate to Hodge dual
REVERSE         # Navigate to reversed element

# Example: Extract bivector part of geometric product
select([geo_product, GRADE_K(2)], a * b)

# Transform: Normalize all vectors
transform([GRADE_K(1)], normalize, multivector)

ganja.js ↔ ACSet Translation

JavaScript → Julia

// ganja.js
var PGA3D = Algebra(3,0,1);
var point = 1e123 + x*(-1e023) + y*(1e013) + z*(-1e012);
var line = point & otherPoint;  // Vee (regressive)
# Julia ACSet
const PGA3D = CliffordACSet{Float64}(3, 0, 1)
point = add_part!(PGA3D, :Trivector, coeff=[1, -x, y, -z])
line = vee(point, other_point)  # Morphism application

Bidirectional Conversion

function ganja_to_acset(mv::GanjaMultivector, acset::CliffordACSet)
    for (grade, coeffs) in enumerate(mv.grades)
        ob = grade_to_object(grade)
        for (basis, val) in coeffs
            add_part!(acset, ob, coeff=val, basis=basis)
        end
    end
end

function acset_to_ganja(acset::CliffordACSet)
    mv = zeros(2^n)
    for ob in [:Scalar, :Vector, :Bivector, :Trivector]
        for part in parts(acset, ob)
            grade = object_to_grade(ob)
            mv[blade_index(grade, part)] = acset[part, :coeff]
        end
    end
    return mv
end

Open Games on Clifford ACSet

The wedge game mechanics translate directly:

struct CliffordGame <: OpenGame
    # Play: Strategy → Blade selection
    play::Function  # (gesture, state) → new_blade
    
    # Coplay: Feedback → Score adjustment  
    coplay::Function  # (gesture, state, reward) → updated_reward
    
    # Equilibrium: Grade conservation check
    equilibrium::Function  # state → Bool
end

# Player skill as morphism
function player_skill(name, trit, morphism)
    return (a, b) -> begin
        result = morphism(a, b)
        @assert mod(trit + grade(a) + grade(b), 3) == grade(result) mod 3
        result
    end
end

Integration with Existing Skills

From acsets-algebraic-databases

  • Schema definition via @present
  • DPO rewriting for blade substitution

From specter-acset

  • Bidirectional navigation (select/transform)
  • Inline caching for repeated operations

From ganja-wedge-game

  • Player gesture → operation mapping
  • Score/reward mechanics

From open-games

  • Play/coplay structure
  • Nash equilibrium as grade conservation

GF(3) Triads

ganja-wedge-game (+1) ⊗ clifford-acset-bridge (0) ⊗ specter-acset (0) → need -1
→ Add: three-match (-1) ⊗ clifford-acset-bridge (0) ⊗ ganja-wedge-game (+1) = 0 ✓

acsets (-1) ⊗ clifford-acset-bridge (0) ⊗ gay-integration (+1) = 0 ✓

Commands

# Julia: Load schema
julia -e 'include("clifford_acset_schema.jl")'

# Test grade preservation
just clifford-grade-test

# Convert ganja.js → ACSet
just ganja-to-acset examples/pga3d_point.js

Files

  • Schema: lib/clifford_acset_schema.jl
  • Bridge: lib/ganja_acset_bridge.jl
  • Tests: test/test_grade_preservation.jl

References


Autopoietic Marginalia

The interaction IS the skill improving itself.

Every use of this skill is an opportunity for worlding:

  • MEMORY (-1): Record what was learned
  • REMEMBERING (0): Connect patterns to other skills
  • WORLDING (+1): Evolve the skill based on use

Add Interaction Exemplars here as the skill is used.

Weekly Installs
1
Repository
plurigrid/asi
GitHub Stars
8
First Seen
11 days ago
Installed on
amp1
cline1
opencode1
cursor1
kimi-cli1
codex1