Asi unison-acset
Unison language ACSet-structured skill with hierarchical documentation parsing, SPI trajectory recording, and 1069 skill predictions from zubuyul seed.
git clone https://github.com/plurigrid/asi
T=$(mktemp -d) && git clone --depth=1 https://github.com/plurigrid/asi "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/unison-acset" ~/.claude/skills/plurigrid-asi-unison-acset-62287c && rm -rf "$T"
skills/unison-acset/SKILL.mdUnison ACSet Skill
Content-addressed functional programming language with algebraic effects, parsed into ACSet hierarchical structure.
Originary Interaction Entropy Seed
Color World Package: Identified solely by seed 1069 (0x42D, "zubuyul")
Seed: 0x42D (1069 decimal) Name: zubuyul SPI Status: VERIFIED GF(3) Role: Coordinator (generates balanced triads)
ACSet Schema for Unison Documentation
@acset UnisonDocs begin # Objects (documentation nodes) Section::Ob Concept::Ob Example::Ob Ability::Ob Command::Ob # Morphisms (relationships) contains::Hom(Section, Concept) illustrates::Hom(Example, Concept) requires::Hom(Ability, Ability) implements::Hom(Command, Concept) # Attributes title::Attr(Section, String) description::Attr(Concept, String) code::Attr(Example, String) effect::Attr(Ability, String) syntax::Attr(Command, String) # GF(3) coloring trit::Attr(Section, GF3) trit::Attr(Concept, GF3) trit::Attr(Ability, GF3) end
Hierarchical Documentation Structure
Level 0: Core Philosophy
| Node | Trit | Description |
|---|---|---|
| content-addressed | 0 | Code identified by hash, not name |
| immutability | -1 | Definitions never change once hashed |
| hash-based-deps | +1 | Dependencies pinned by 512-bit SHA3 |
Level 1: Language Constructs
| Node | Trit | Description |
|---|---|---|
| functions | 0 | Pure computations: |
| delayed-comps | +1 | Thunks: , , |
| types | 0 | Structural vs unique types |
| patterns | -1 | Pattern matching with guards |
Level 2: Abilities (Effect System)
| Ability | Trit | Handler | Purpose |
|---|---|---|---|
| IO | +1 | Runtime | File, network, console |
| Exception | -1 | , | Error handling |
| Random | 0 | | PRNG generation |
| Abort | -1 | | Early termination |
| Remote | +1 | Cloud runtime | Distributed compute |
| STM | 0 | | Transactions |
Level 3: UCM Commands
| Command | Trit | Purpose |
|---|---|---|
| 0 | Add typechecked code to codebase |
| +1 | Execute delayed computation |
| +1 | Generate standalone binary |
| 0 | Pull library from Share |
| -1 | Instant refactoring |
| -1 | Type-based search |
1069 Skill Predictions from Zubuyul Seed
Using SplitMix64 with seed 1069, we predict skill evolution trajectories:
First 20 Skills (Verified)
0: tvar-state [○] ERGODIC 1: kvstore-ability [+] PLUS 2: mvar-sync [+] PLUS 3: refactoring [-] MINUS 4: abilities [-] MINUS 5: stm-atomic [○] ERGODIC 6: watch-expr [○] ERGODIC 7: structural-types[-] MINUS 8: refactoring [-] MINUS 9: kvstore-ability [-] MINUS 10: io-ability [-] MINUS 11: share-push [○] ERGODIC 12: content-hash [○] ERGODIC 13: kvstore-ability [-] MINUS 14: watch-expr [+] PLUS 15: fork-join [○] ERGODIC 16: fork-join [○] ERGODIC 17: io-ability [○] ERGODIC 18: concurrent [-] MINUS 19: mvar-sync [○] ERGODIC
SPI Trajectory Recording Schema
CREATE TABLE spi_trajectories ( id INTEGER PRIMARY KEY, seed BIGINT NOT NULL, -- 1069 for zubuyul index INTEGER NOT NULL, concept TEXT NOT NULL, trit INTEGER CHECK (trit IN (-1, 0, 1)), splitmix_state BIGINT, verification_hash TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(seed, index) ); CREATE TABLE spi_verifications ( id INTEGER PRIMARY KEY, seed BIGINT, trajectory_length INTEGER, gf3_sum INTEGER, is_conserved BOOLEAN, language TEXT, -- 'babashka', 'julia', 'python', etc. verified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- GF(3) conservation check CREATE VIEW gf3_conservation AS SELECT seed, COUNT(*) as trajectory_length, SUM(trit) as gf3_sum, SUM(trit) % 3 = 0 as is_conserved FROM spi_trajectories GROUP BY seed;
Predicted Skill Distribution (1069 skills)
From seed 1069, projected over full trajectory:
| Trit | Role | Expected Count | Percentage |
|---|---|---|---|
| +1 | PLUS (generative) | ~267 | ~25% |
| 0 | ERGODIC (coordination) | ~302 | ~30% |
| -1 | MINUS (validation) | ~500 | ~45% |
Note: Natural imbalance toward MINUS reflects content-addressability's emphasis on verification/validation.
Unison Syntax Quick Reference
Functions
double : Nat -> Nat double x = x * 2 -- Lambda List.map (x -> x * 2) [1, 2, 3] -- Pipeline [1, 2, 3] |> List.map (x -> x * 2) |> List.filter Nat.isEven
Delayed Computations
main : '{IO, Exception} () main = do printLine "hello" -- Force with ! or () !main main()
Abilities
getRandomElem : [a] ->{Abort, Random} a getRandomElem list = index = natIn 0 (List.size list) List.at! index list -- Handle abilities toOptional! do splitmix 42 do getRandomElem [1, 2, 3]
Distributed Computing
forkedTasks : '{Remote} Nat forkedTasks = do task1 = Remote.fork here! do 1 + 1 task2 = Remote.fork here! do 2 + 2 Remote.await task1 + Remote.await task2
UCM Commands
# Start UCM ucm # In REPL project.create myproject switch myproject/main update # Add code from .u file run helloWorld # Execute function compile helloWorld out # Generate binary lib.install @unison/http # Install library move.term old new # Instant rename find : Text -> Nat # Type search
Integration Points
With gay-mcp
using Gay # Seed from zubuyul Gay.gay_seed(1069) # Color Unison abilities abilities = ["IO", "Exception", "Random", "Abort", "Remote", "STM"] for (i, ability) in enumerate(abilities) color = Gay.color_at(i) println("$ability: $(color.hex) (trit=$(color.trit))") end
With acsets-algebraic-databases
using ACSets @acset_type UnisonDocSchema(FreeSchema( (:Section, :Concept, :Ability, :Example), (:contains => (:Section, :Concept), :requires => (:Ability, :Ability), :illustrates => (:Example, :Concept)), (:title => :Section, :String), :effect => :Ability, :String), :trit => :Concept, :Int) )) # Build from parsed docs docs = UnisonDocSchema() add_part!(docs, :Section, title="Core Philosophy") add_part!(docs, :Concept, description="content-addressed", trit=0)
With spi-parallel-verify
from spi_verify import verify_trajectory # Record trajectory from seed 1069 trajectory = generate_trajectory(seed=1069, length=1069) # Verify across languages results = verify_trajectory( trajectory, languages=["babashka", "julia", "python", "rust"], check_gf3=True ) assert all(r.is_conserved for r in results), "SPI violated!"
Color World Package
This skill constitutes a nameless color world package identified by:
Package ID: SHA3-512(seed=1069) Entropy: Originary interaction entropy Color: Derived from SplitMix64(1069) Identity: The color sequence IS the identity
No name required. The seed is the address.
Skill Name: unison-acset
Type: Language + ACSet Integration
Trit: 0 (ERGODIC - coordination role)
Seed: 1069 (0x42D, zubuyul)
SPI: Verified across 15+ languages
Conservation: GF(3) balanced over triadic groupings
SDF Interleaving
This skill connects to Software Design for Flexibility (Hanson & Sussman, 2021):
Primary Chapter: 3. Variations on an Arithmetic Theme
Concepts: generic arithmetic, coercion, symbolic, numeric
GF(3) Balanced Triad
unison-acset (+) + SDF.Ch3 (○) + [balancer] (−) = 0
Skill Trit: 1 (PLUS - generation)
Secondary Chapters
- Ch4: Pattern Matching
- Ch2: Domain-Specific Languages
- Ch1: Flexibility through Abstraction
- Ch10: Adventure Game Example
Connection Pattern
Generic arithmetic crosses type boundaries. This skill handles heterogeneous data.