Asi catlab-asi-interleave

Bridge layer connecting AlgebraicJulia/Catlab.jl to plurigrid/asi. Wires ACSets (attributed C-sets), wiring diagrams, decorated cospans, and the AlgebraicJulia ecosystem (AlgebraicDynamics, AlgebraicPetri, AlgebraicRewriting, Decapodes) into the ASI skill graph. ACSets generalize relational databases with categorical semantics; every diagram, network, and model in the ecosystem is an ACSet.

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/catlab-asi-interleave" ~/.claude/skills/plurigrid-asi-catlab-asi-interleave && rm -rf "$T"
manifest: skills/catlab-asi-interleave/SKILL.md
source content

Catlab.jl x ASI Interleave

Bridge connecting AlgebraicJulia/Catlab.jl (categorical algebra in Julia) to the ASI skill graph (GF(3)-colored capability system).

Catlab Core Concepts (from DeepWiki deep-mine)

ACSets (Attributed C-Sets)

The universal data structure. A schema defines objects, homomorphisms (morphisms between objects), and attribute types. An ACSet instance is a functor from that schema category to Set.

# SchGraph: objects V, E; morphisms src: E->V, tgt: E->V
=======
description: >
  Bridge connecting AlgebraicJulia/Catlab.jl to skill graphs.
  Triggers: ACSets, attributed C-sets, wiring diagrams, decorated cospans,
  DPO rewriting on skill graphs, AlgebraicDynamics, AlgebraicPetri,
  AlgebraicRewriting, Decapodes, categorical algebra in Julia.
---

# Catlab.jl Interleave

Bridge connecting AlgebraicJulia/Catlab.jl (categorical algebra in Julia) to skill graphs.

## Catlab Core Concepts

### ACSets (Attributed C-Sets)

The universal data structure. A schema defines objects, homomorphisms, and attribute types. An ACSet instance is a functor from that schema category to Set.

```julia
>>>>>>> origin/main
@present SchGraph(FreeSchema) begin
  V::Ob; E::Ob
  src::Hom(E,V); tgt::Hom(E,V)
end

<<<<<<< HEAD
# Attributed: add attribute types
=======
>>>>>>> origin/main
@present SchWeightedGraph <: SchGraph begin
  T::AttrType
  weight::Attr(E,T)
end

const WeightedGraph = ACSetType(SchWeightedGraph, index=[:src,:tgt])

<<<<<<< HEAD Every diagram, network, and model in the ecosystem is an ACSet.

Wiring Diagrams as ACSets

SchAttributedWiringDiagram with Box/InPort/OutPort/Wire. Boxes = operations/processes, wires = data flow. Used to compose dynamical systems, Petri nets, and more.

Decorated Cospans

Functor L: A -> X gives "open" ACSets. OpenGraph with hypergraph category structure. Operations:
compose
,
otimes
(monoidal product),
mcopy
,
mmerge
,
delete
,
create
. Enable compositional modeling of open systems.

Wiring Diagrams as ACSets

SchAttributedWiringDiagram with Box/InPort/OutPort/Wire. Boxes = operations, wires = data flow. Used to compose dynamical systems, Petri nets, and more.

Decorated Cospans

Functor L: A -> X gives "open" ACSets. Operations:

compose
,
otimes
(monoidal product),
mcopy
,
mmerge
,
delete
,
create
. Enable compositional modeling of open systems.

origin/main

Downstream Ecosystem

AlgebraicJulia/Catlab.jl (foundation)
<<<<<<< HEAD
  |- AlgebraicDynamics.jl     <- dynamical systems via decorated cospans
  |- AlgebraicPetri.jl        <- Petri nets with reaction network semantics
  |- AlgebraicRewriting.jl    <- DPO/SPO graph rewriting on ACSets
  |- CategoricalTensorNetworks.jl <- tensor contractions as string diagrams
  |- CombinatorialSpaces.jl   <- simplicial sets, discrete exterior calculus
  |- DataMigrations.jl        <- functorial data migration between schemas
  |- DiagrammaticEquations.jl <- physics equations as decorated cospans
  |- Decapodes.jl             <- multiphysics simulation via DEC

No probabilistic/inference capabilities -- must come from downstream packages or bridges. This is where

monad-bayes-asi-interleave
fills the gap.

GF(3) Tripartite Tag

algebraic-dynamics(-1) otimes catlab-asi-interleave(0) otimes algebraic-rewriting(+1) = 0

Dynamics (-1) x Foundation (0) x Rewriting (+1) = balanced categorical stack.


ASI Integration Points

1. acsets / acsets-algebraic-databases / acsets-relational-thinking <-> ACSets Core

Model the ASI skill graph as an ACSet for relational querying:

@present SchASISkills(FreeSchema) begin
=======
  |- AlgebraicDynamics.jl     -- dynamical systems via decorated cospans
  |- AlgebraicPetri.jl        -- Petri nets with reaction network semantics
  |- AlgebraicRewriting.jl    -- DPO/SPO graph rewriting on ACSets
  |- CategoricalTensorNetworks.jl -- tensor contractions as string diagrams
  |- CombinatorialSpaces.jl   -- simplicial sets, discrete exterior calculus
  |- DataMigrations.jl        -- functorial data migration between schemas
  |- DiagrammaticEquations.jl -- physics equations as decorated cospans
  |- Decapodes.jl             -- multiphysics simulation via DEC

Integration Points

Skill Graph as ACSet

@present SchSkills(FreeSchema) begin
>>>>>>> origin/main
  Skill::Ob; Edge::Ob; Hub::Ob
  src::Hom(Edge,Skill); tgt::Hom(Edge,Skill)
  hub_ref::Hom(Hub,Skill)
  SkillName::AttrType; TritVal::AttrType; Category::AttrType
  name::Attr(Skill,SkillName)
<<<<<<< HEAD
  trit::Attr(Skill,TritVal)        # -1, 0, +1
  category::Attr(Skill,Category)   # development | meta | ai-agents | ...
end

const ASISkills = ACSetType(SchASISkills, index=[:src,:tgt,:hub_ref])
skills = ASISkills()

# Conjunctive query: all GF(3)-balanced triads
gf3_triads(s) = filter(parts(s,:Edge)) do e
  t_src = s[s[e,:src], :trit]
  t_tgt = s[s[e,:tgt], :trit]
  (t_src + t_tgt) % 3 == 0
end

2. algebraic-rewriting / topos-adhesive-rewriting <-> DPO/SPO Rewriting

Double-pushout rewriting for safe skill graph mutation (MONOTONIC_SKILL_INVARIANT):

trit::Attr(Skill,TritVal) category::Attr(Skill,Category) end

const Skills = ACSetType(SchSkills, index=[:src,:tgt,:hub_ref])


### DPO Rewriting for Safe Skill Graph Mutation
>>>>>>> origin/main

```julia
using AlgebraicRewriting

# DPO rule: add bridge skill to hub (never delete)
<<<<<<< HEAD
# L -> K <- R where |R| >= |L| always
add_bridge_rule = Rule(
  ACSetTransformation(L, K),   # L: match hub pattern
  ACSetTransformation(R, K),   # R: hub + new bridge skill
=======
# L -> K <- R where |R| >= |L| always (monotonic)
add_bridge_rule = Rule(
  ACSetTransformation(L, K),
  ACSetTransformation(R, K),
>>>>>>> origin/main
)
new_skills = rewrite(add_bridge_rule, current_skills)
@assert nparts(new_skills, :Skill) >= nparts(current_skills, :Skill)

<<<<<<< HEAD SPO rewriting available for partial matches (non-adhesive contexts).

3. discopy / discopy-operads <-> Wiring Diagram Composition

Catlab's wiring diagrams and DisCoPy's string diagrams are the same mathematical object:

# ASI skill composition as wiring diagram
=======
### Wiring Diagram Composition

```julia
# Skill composition as wiring diagram
>>>>>>> origin/main
wd = @program SchSkillOp (validator::Val, coordinator::Coord, generator::Gen) begin
  validated = validator(input)
  coordinated = coordinator(validated)
  result = generator(coordinated)
  return result
end
<<<<<<< HEAD
# This WiringDiagram ACSet can be exported to DisCoPy format

Bridge: Julia WiringDiagram ACSet <-> Python DisCoPy Diagram via JSON serialization.

4. topos-catcolab / catcolab-* <-> CatColab Collaborative Modeling

CatColab is the web frontend to Catlab. Skills:

catcolab-ologs
,
catcolab-petri-nets
,
catcolab-stock-flow
,
catcolab-causal-loop
,
catcolab-decapodes
. All CatColab models are ACSets underneath.

5. interaction-nets <-> Decorated Cospans / Hypergraph Categories

Decorated cospans give OpenGraph a hypergraph category structure. Operations:

compose
(sequential),
otimes
(parallel),
mcopy
(fan-out),
mmerge
(fan-in),
delete
,
create
. Interaction nets are the computational model; decorated cospans are the categorical semantics.

6. crn-topology <-> AlgebraicPetri Reaction Networks

=======

WiringDiagram ACSet can be exported to DisCoPy format via JSON


### AlgebraicPetri Reaction Networks
>>>>>>> origin/main

```julia
using AlgebraicPetri

<<<<<<< HEAD
# Chemical reaction network as Petri net ACSet
=======
>>>>>>> origin/main
sir_model = LabelledPetriNet([:S,:I,:R],
  :infection => ((:S,:I) => (:I,:I)),
  :recovery  => (:I => :R)
)
<<<<<<< HEAD
# Compose via decorated cospans
open_sir = Open(sir_model, [:S], [:R])

Connects to

crn-topology
for topological analysis of reaction networks.

7. dynamical-system-functor / coupled-system <-> AlgebraicDynamics

======= open_sir = Open(sir_model, [:S], [:R])


### AlgebraicDynamics
>>>>>>> origin/main

```julia
using AlgebraicDynamics, Catlab

<<<<<<< HEAD
# Open continuous dynamical system
=======
>>>>>>> origin/main
rb_system = ContinuousResourceSharer{Float64}(
  [:temperature, :velocity, :pressure],
  (u, p, t) -> rb_dynamics(u, p, t)
)
<<<<<<< HEAD
# Compose via wiring diagram
=======
>>>>>>> origin/main
full_system = oapply(boundary_diagram, [rb_system, thermal_bc])
solution = solve(ODEProblem(full_system, u0, tspan), Tsit5())

<<<<<<< HEAD

8. julia-scientific <-> Julia Runtime for Catlab

Catlab requires Julia >= 1.10. Entry points:

julia-scientific
,
julia-gay
. Enzyme.jl autodiff works with AlgebraicDynamics ODE solvers.

9. topos-unified / topos-generate <-> Topos-Theoretic Foundations

Catlab implements presentable categories, limits/colimits, Kan extensions. The topos-theoretic skills (

topos-unified
,
topos-generate
,
effective-topos
) provide the foundation that Catlab operationalizes in code.

10. monad-bayes-asi-interleave <-> Fills Probabilistic Gap

Catlab has no built-in probabilistic inference.

monad-bayes-asi-interleave
provides SMC/MCMC/PMMH/RMSMC stacks. The bridge: Catlab composes the model structure, monad-bayes performs inference on it.

11. vertex-ai-protein-interleave <-> Protein Reaction Networks

AlgebraicPetri reaction networks model biochemical pathways. Protein folding/docking pipelines from

vertex-ai-protein-interleave
can use Catlab ACSets to represent reaction networks, pathway composition, and multi-target drug interaction graphs.


ASI Skill Graph as an ACSet (Self-Modeling)

The ASI skill graph itself is naturally an ACSet:

# Skills = objects, edges = morphisms, GF(3) trits = attributes
@present SchASIGraph(FreeSchema) begin
  Skill::Ob
  Edge::Ob
  src::Hom(Edge,Skill)
  tgt::Hom(Edge,Skill)
  # Attribute types
  Name::AttrType; Trit::AttrType; Role::AttrType; Version::AttrType
  # Attributes
  name::Attr(Skill,Name)
  trit::Attr(Skill,Trit)          # GF(3): -1, 0, +1
  role::Attr(Skill,Role)          # BRIDGE | HUB | LEAF | ERGODIC
  version::Attr(Skill,Version)
  edge_type::Attr(Edge,Name)      # :citation | :behavioral | :trit_equiv
end

# Invariants as ACSet constraints:
# 1. MONOTONIC: nparts(g, :Skill) >= 1360 (never decreases)
# 2. GF3_CONSERVATION: for any triad (s1,s2,s3), sum of trits = 0 mod 3
# 3. HUB_REACHABILITY: 17 hub skills; every leaf reachable from >= 1 hub

This enables: conjunctive queries over the skill graph, functorial data migration between schema versions, DPO rewriting for safe skill addition, and wiring diagram visualization of skill pipelines.


Connection to ASI Topos Stories

Story (task)Catlab Connection
Task 21: Categorical worlding kitCatlab.jl engine + CatColab UI + UnwiringDiagrams.jl
Task 22: Compositional game theoryWiring diagrams encode open game composition
Task 23: Nonlinear dynamics observatoryAlgebraicDynamics for attractor ODE composition
Task 24: ASI skill federationACSet as skill registry; DPO rewriting for safe addition
Task 20: Self-walking proof pipelineAlgebraicRewriting as proof rewrite system

Gap Registry

CapabilityStatusFilled By
Probabilistic inference on ACSetsMISSING in Catlab
monad-bayes-asi-interleave
GPU-accelerated ACSet operationsMISSINGFuture: CUDA.jl + ACSet kernels
ACSet <-> DuckDB serializationPARTIAL
duckdb-ies
(Parquet round-trip)
ACSet <-> JSON-RPC for MCPMISSINGNeed: syrup/JSON bridge for ACSets
Real-time collaborative ACSetsPARTIALCatColab (web only, no MCP)
ACSet diff/merge (CRDT semantics)MISSING
crdt
skill + DPO rewriting
Tensor network contraction at scaleMISSINGCategoricalTensorNetworks exists but no GPU
Discrete exterior calculus on DGXMISSINGDecapodes + CUDA offload needed

Related ASI Skills

  • acsets
    /
    acsets-relational-thinking
    /
    acsets-algebraic-databases
    -- core ACSet skills
  • algebraic-rewriting
    /
    topos-adhesive-rewriting
    -- DPO/SPO rewriting on ACSets
  • discopy
    /
    discopy-operads
    -- Python string diagram companion to Catlab
  • catcolab-ologs
    /
    catcolab-petri-nets
    /
    catcolab-stock-flow
    /
    catcolab-decapodes
    -- CatColab frontends
  • interaction-nets
    -- computational model for decorated cospan composition
  • crn-topology
    -- topological analysis of AlgebraicPetri reaction networks
  • dynamical-system-functor
    /
    coupled-system
    -- AlgebraicDynamics integration
  • julia-scientific
    /
    julia-gay
    -- Julia ecosystem entry points
  • topos-unified
    /
    topos-generate
    /
    effective-topos
    -- topos-theoretic foundations
  • monad-bayes-asi-interleave
    -- fills probabilistic inference gap
  • vertex-ai-protein-interleave
    -- protein reaction networks via AlgebraicPetri
  • structured-decomp
    -- structured decompositions = open graphs (Catlab cospans)
  • enzyme-autodiff
    -- Enzyme.jl autodiff for AlgebraicDynamics simulation
  • wolframite-compass
    -- Wolfram -> Catlab via Julia bridge
  • string-diagram-rewriting-protocol
    -- rewriting protocol for wiring diagrams =======

Runtime

Catlab requires Julia >= 1.10. Enzyme.jl autodiff works with AlgebraicDynamics ODE solvers.

Gap Registry

CapabilityStatusNotes
Probabilistic inference on ACSetsMISSING in CatlabUse monad-bayes bridge
GPU-accelerated ACSet operationsMISSINGFuture: CUDA.jl + ACSet kernels
ACSet <-> DuckDB serializationPARTIALParquet round-trip
ACSet <-> JSON-RPC for MCPMISSINGNeed syrup/JSON bridge
ACSet diff/merge (CRDT semantics)MISSINGDPO rewriting approach

origin/main