ies/music-topos/.agents/skills/lispsyntax-acset/SKILL.md
LispSyntax.jl ↔ ACSets.jl bidirectional bridge with OCaml ppx_sexp_conv-style deriving
npx skillsauth add plurigrid/asi lispsyntax-acsetInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Bidirectional S-expression ↔ ACSet conversion inspired by OCaml's ppx_sexp_conv
Version: 1.1.0 Trit: 0 (Ergodic - coordinates data serialization) Bundle: serialization Dynamic Sufficiency: ✅ VERIFIED (2025-12-22) - handles ACSets of arbitrary complexity
This skill bridges LispSyntax.jl (Lisp-like syntax in Julia) with ACSets.jl (algebraic databases) using the pattern established by OCaml's ppx_sexp_conv library. It enables:
parse_sexp("(+ 1 2)") → Sexpsexp_of_acset(graph) → Sexpacset_of_sexp(GraphType, sexp) → Graph(* OCaml pattern *)
type color = Red | Blue | Green [@@deriving sexp]
(* generates: sexp_of_color and color_of_sexp *)
# Julia equivalent for ACSets
sexp_of_acset(acs::ACSet) → Sexp
acset_of_sexp(::Type{T}, ::Sexp) → T where T <: ACSet
abstract type Sexp end
struct Atom <: Sexp
value::String
end
struct SList <: Sexp
children::Vector{Sexp}
end
# String → Sexp (like OCaml's Sexp.of_string)
sexp = parse_sexp("(define (square x) (* x x))")
# Sexp → String (like OCaml's Sexp.to_string)
str = to_string(sexp)
# Roundtrip verification
@assert verify_parse_roundtrip("(a (b c) d)")
# To S-expression
sexp_of_int(42) # → Atom("42")
sexp_of_float(3.14) # → Atom("3.14")
sexp_of_string("hello") # → Atom("hello")
sexp_of_list(sexp_of_int, [1,2,3]) # → SList([1, 2, 3])
# From S-expression
int_of_sexp(Atom("42")) # → 42
list_of_sexp(int_of_sexp, SList([...])) # → [1, 2, 3]
# ACSet → Sexp
# Produces: (TypeName (Ob1 ((id1 attrs...) ...)) (hom1 ((src tgt) ...)) ...)
sexp = sexp_of_acset(my_graph)
# Sexp → ACSet
graph = acset_of_sexp(GraphType, sexp)
# Verify roundtrip
@assert verify_roundtrip(original_graph)
# Colorize with deterministic seed
colored = colorize(sexp, seed=0x598F318E2B9E884)
# ColoredSexp with LCH color from SplitMix64
ACSet to S-expression produces structured output:
(Graph
(V ((1) (2) (3))) ; Vertices (object parts)
(E ((1) (2))) ; Edges (object parts)
(src ((1 1) (2 2))) ; Source morphism (id → target)
(tgt ((1 2) (2 3)))) ; Target morphism (id → target)
| Trit | Skill | Role | |------|-------|------| | -1 | slime-lisp | Validates Lisp syntax | | 0 | lispsyntax-acset | Coordinates serialization | | +1 | cider-clojure | Generates Clojure interop |
Conservation: (-1) + (0) + (+1) = 0 ✓
;; Hy uses same sexp concepts
(defclass ColoredSExpr []
"S-expression with semantic color annotations")
(defn acset-to-colored-sexpr [acset]
"Convert ThreadACSet to Colored S-expression tree")
# Inverse operation: Sexp → ACSet graph
function sexp_to_graph(sexp::ColoredSexp)::ColoredSexpData
data = ColoredSexpData()
_add_sexp!(data, sexp, nothing, 0)
data
end
# Run demo
lispsyntax-demo:
julia --project=. -e 'include("lib/lispsyntax_acset_bridge.jl"); LispSyntaxAcsetBridge.demo()'
# Test roundtrip parsing
lispsyntax-test:
julia --project=. -e '
include("lib/lispsyntax_acset_bridge.jl")
using .LispSyntaxAcsetBridge
@assert verify_parse_roundtrip("(a (b c) d)")
println("✓ Parse roundtrip OK")
'
lib/lispsyntax_acset_bridge.jllib/colored_sexp_acset.jllib/thread_relational_hyjax.hysrc/sicp/colored-sexp.cljNEW 2025-12-22: Integrated Specter-style bidirectional navigation with Julia-specific optimizations achieving 93-113x speedup over CPS-based implementation.
| Operation | Hand-Written | Original CPS | Optimized | Ratio | |-----------|--------------|--------------|-----------|-------| | Select evens (n=1000) | 423.8 ns | 52.58 μs | 561.6 ns | 1.3x | | Transform evens | 354.9 ns | 40.04 μs | 354.2 ns | 1.0x | | comp_navs allocation | - | 7.8 ns | 0.5 ns | 15.7x |
Vector{Navigator} → type stability, 0 allocs@inline annotations → aggressive hot path inliningPath caching follows 3-MATCH gadget principles:
# Correct-by-construction path caching
compiled_path = TupleNav((ALL, pred(iseven))) # Type-stable, 0 allocs
result = nav_select(compiled_path, data, IDENTITY) # Guaranteed correct
lib/specter_optimized.jl - Zero-overhead implementationlib/specter_chairmarks_world.jl - Chairmarks benchmarksSPECTER_OPTIMIZATION_RESULTS.md - Full benchmark reportacsets-algebraic-databases skill - ACSet foundationsgay-mcp skill - Deterministic coloringthree-match skill - Correct-by-construction cachingdevelopment
BDD-Driven Mathematical Content Verification Skill Combines Behavior-Driven Development with mathematical formula extraction, verification, and transformation using: - Cucumber/Gherkin for specification - RSpec for implementation verification - mathpix-gem for LaTeX/mathematical content extraction - Pattern matching on syntax trees for formula validation Enables iterative discovery and verification of mathematical properties through executable specifications.
tools
Meta-skill that generates domain-specific AI skills from tool documentation
development
Code Query with AI-enhanced deterministic analysis via SplitMix ternary classification
development
Directed Yoneda lemma as directed path induction. Riehl-Shulman's key insight for synthetic ∞-categories.