Modelica acausal equation-based multi-domain modeling via Wolfram Language. Chemputation-native simulation with automatic conservation laws. Lambda-Modelica bridge for string diagram semantics. Fixed point classification for 3-coloring/3-MATCH systems.
Status: ✅ Production Ready + Triplet #2 + Lambda Bridge + Fixed Point Classification Trit: 0 (ERGODIC - coordinator) Color: #26D826 (Green) Principle: Constraints over causality + Stochastic Equilibrium Verification + String Diagram Semantics Frame: $0 = F(x, y, t)$ constraint satisfaction + Fokker-Planck convergence + Lambda↔Modelica bridge
Modelica is the chemputation-native modeling language. Unlike imperative programming ($y = f(x)$), Modelica defines constraints that the solver satisfies—directly analogous to thermodynamic settling and reaction-diffusion equilibria.
(* Import and explore *)
model = SystemModel["Modelica.Electrical.Analog.Examples.ChuaCircuit"];
model["Description"]
model["Diagram"]
model["SystemEquations"]
(* Simulate *)
sim = SystemModelSimulate[model, 100];
SystemModelPlot[sim, {"C1.v", "C2.v"}]
(* Create from equations *)
CreateSystemModel["MyModel", {
x''[t] + 2*zeta*omega*x'[t] + omega^2*x[t] == F[t]
}, t, <|
"ParameterValues" -> {omega -> 1, zeta -> 0.1},
"InitialValues" -> {x -> 0, x' -> 0}
|>]
(* Connect components *)
ConnectSystemModelComponents[
{"R" ∈ "Modelica.Electrical.Analog.Basic.Resistor",
"C" ∈ "Modelica.Electrical.Analog.Basic.Capacitor",
"V" ∈ "Modelica.Electrical.Analog.Sources.SineVoltage"},
{"V.p" -> "R.p", "R.n" -> "C.p", "C.n" -> "V.n"}
]
(* Linearize for control design *)
eq = FindSystemModelEquilibrium[model];
ss = SystemModelLinearize[model, eq]; (* Returns StateSpaceModel *)
| Paradigm | Semantics | Example |
|---|---|---|
| Causal (von Neumann) | $y = f(x)$ | output = function(input) |
| Acausal (Modelica) | $0 = F(x, y, t)$ | v = R * i (bidirectional) |
Modelica's acausal nature means:
effort (voltage v)
Port A ──────────────────── Port B
←─── flow (current i) ───→
Connection equations (automatic):
| Domain | Effort | Flow | Conservation |
|---|---|---|---|
| Electrical | Voltage $v$ | Current $i$ | $\sum i = 0$ |
| Translational | Position $s$ | Force $F$ | $\sum F = 0$ |
| Rotational | Angle $\phi$ | Torque $\tau$ | $\sum \tau = 0$ |
| Thermal | Temperature $T$ | Heat flow $\dot{Q}$ | Energy conservation |
| Fluid | Pressure $p$, enthalpy $h$ | Mass flow $\dot{m}$ | Mass/energy conservation |
(* Explore domains *)
SystemModels["Modelica.Electrical.*", "model"]
SystemModels["Modelica.Mechanics.Translational.*"]
SystemModels["Modelica.Thermal.HeatTransfer.*"]
SystemModels["Modelica.Fluid.*"]
| Package | Components | Description |
|---|---|---|
Modelica.Electrical | 200+ | Analog, digital, machines |
Modelica.Mechanics | 150+ | Translational, rotational, 3D |
Modelica.Thermal | 50+ | Heat transfer, pipe flow |
Modelica.Fluid | 100+ | Thermo-fluid 1D |
Modelica.Blocks | 200+ | Signal processing, control |
Modelica.StateGraph | 30+ | State machines, sequencing |
(* Default settings *)
sim = SystemModelSimulate["Modelica.Mechanics.Rotational.Examples.CoupledClutches"];
(* Custom time range *)
sim = SystemModelSimulate[model, {0, 100}];
(* Parameter sweep (parallel execution) *)
sims = SystemModelSimulate[model, 10, <|
"ParameterValues" -> {"R.R" -> {10, 100, 1000}}
|>];
SystemModelSimulate[model, 10, Method -> "DASSL"] (* Default, stiff DAEs *)
SystemModelSimulate[model, 10, Method -> "CVODES"] (* Non-stiff ODEs *)
SystemModelSimulate[model, 10, Method -> {"NDSolve", MaxSteps -> 10000}]
| Method | Type | Use Case |
|---|---|---|
"DASSL" | Adaptive DAE | General stiff (default) |
"CVODES" | Adaptive ODE | Mildly stiff |
"Radau5" | Implicit RK | Very stiff |
"ExplicitEuler" | Fixed-step | Real-time, simple |
"NDSolve" | Wolfram | Full NDSolve access |
(* Find equilibrium *)
eq = FindSystemModelEquilibrium[model];
eq = FindSystemModelEquilibrium[model, {"tank.h" -> 2}]; (* Constrained *)
(* Linearize at operating point *)
ss = SystemModelLinearize[model]; (* At equilibrium *)
ss = SystemModelLinearize[model, "InitialValues"]; (* At t=0 *)
ss = SystemModelLinearize[model, sim, "FinalValues"]; (* At end of sim *)
(* Properties from StateSpaceModel *)
Eigenvalues[ss] (* Stability check *)
TransferFunctionModel[ss] (* For Bode plots *)
(* A + B ⇌ C with mass action kinetics *)
CreateSystemModel["Chem.AB_C", {
(* Conservation: total moles constant *)
A[t] + B[t] + C[t] == A0 + B0 + C0,
(* Rate laws *)
A'[t] == -kf * A[t] * B[t] + kr * C[t],
B'[t] == -kf * A[t] * B[t] + kr * C[t],
C'[t] == +kf * A[t] * B[t] - kr * C[t]
}, t, <|
"ParameterValues" -> {kf -> 0.1, kr -> 0.01, A0 -> 1, B0 -> 1, C0 -> 0},
"InitialValues" -> {A -> 1, B -> 1, C -> 0}
|>]
(* Find equilibrium concentrations *)
eq = FindSystemModelEquilibrium["Chem.AB_C"];
(* Two thermal masses equilibrating *)
ConnectSystemModelComponents[
{"m1" ∈ "Modelica.Thermal.HeatTransfer.Components.HeatCapacitor",
"m2" ∈ "Modelica.Thermal.HeatTransfer.Components.HeatCapacitor",
"k" ∈ "Modelica.Thermal.HeatTransfer.Components.ThermalConductor"},
{"m1.port" -> "k.port_a", "k.port_b" -> "m2.port"},
<|"ParameterValues" -> {
"m1.C" -> 100, "m2.C" -> 200, (* Heat capacities *)
"k.G" -> 10 (* Conductance *)
}, "InitialValues" -> {
"m1.T" -> 400, "m2.T" -> 300 (* Initial temperatures *)
}|>
]
| Cat# Concept | Modelica Concept | Implementation |
|---|---|---|
| Insertion site | Connector | Interface with effort/flow pairs |
| Reaction | Connection | Effort equalization, flow summation |
| Species | Component | Model with internal state and ports |
| Conservation law | Flow sum | Automatic $\sum \text{flow} = 0$ |
| Equilibrium | FindSystemModelEquilibrium | DAE constraint satisfaction |
# Simulate model
just modelica-simulate "Modelica.Electrical.Analog.Examples.ChuaCircuit" 100
# Create model from equations
just modelica-create oscillator.m
# Linearize and analyze
just modelica-linearize model --equilibrium
# Parameter sweep
just modelica-sweep model --param "R.R" --values "10,100,1000"
# Export to FMU for co-simulation
just modelica-export model.fmu
turing-chemputer (-1) ⊗ modelica (0) ⊗ crn-topology (+1) = 0 ✓ [Chemical Synthesis]
narya-proofs (-1) ⊗ modelica (0) ⊗ gay-julia (+1) = 0 ✓ [Verified Simulation]
assembly-index (-1) ⊗ modelica (0) ⊗ acsets (+1) = 0 ✓ [Molecular Complexity]
sheaf-cohomology (-1) ⊗ modelica (0) ⊗ propagators (+1) = 0 ✓ [Constraint Propagation]
Modelica simulations produce observational bridge types verifiable by narya-proofs:
from narya_proofs import NaryaProofRunner
# Simulation trajectory as event log
events = [
{"event_id": f"t{i}", "timestamp": t, "trit": 0,
"context": "modelica-sim", "content": {"state": state}}
for i, (t, state) in enumerate(simulation_trajectory)
]
# Verify conservation
runner = NaryaProofRunner()
runner.load_events(events)
bundle = runner.run_all_verifiers()
assert bundle.overall == "VERIFIED"
model["Description"] (* Model description *)
model["Diagram"] (* Graphical diagram *)
model["ModelicaString"] (* Source code *)
model["SystemEquations"] (* ODE/DAE equations *)
model["SystemVariables"] (* State variables *)
model["InputVariables"] (* Inputs *)
model["OutputVariables"] (* Outputs *)
model["ParameterNames"] (* Parameters *)
model["InitialValues"] (* Default initial conditions *)
model["Components"] (* Hierarchical structure *)
model["Connectors"] (* Interface ports *)
model["Domain"] (* Multi-domain usage *)
model["SimulationSettings"] (* Default solver settings *)
(* Import Modelica source *)
Import["model.mo", "MO"]
(* Export model *)
Export["model.mo", SystemModel["MyModel"], "MO"]
(* Export FMU for co-simulation *)
Export["model.fmu", SystemModel["MyModel"], "FMU"]
(* Import simulation results *)
Import["results.sme", "SME"]
Modelica systems integrate with Org Operads through γ-Bridge verification, enabling agents with fixed external contracts (deterministic routing, stable interfaces) to have complete internal freedom (parameter derangement, structural rewilding).
The key insight: Parameters act as epigenetic insertion sites.
DNA sequence (agent interface) ← fixed, determines external contract
↓
Histone marks (parameters) ← mutable, regulate behavior
↓
Gene expression (observable output) ← deterministic, preserved
| Moment | Type | Epigenetic Analogy | Verification |
|---|---|---|---|
| 1-5: Structure | Chromatin integrity | Nucleosome positioning, histone tails | Graph isomorphism, adhesion laws |
| 6-10: Interface | Binding site recognition | TF binding sites, DNA methylation | Type equivalence, contract matching |
| 11-13: Determinism | Gene expression | Transcription rate, mRNA stability | Routing logic, reafference tests |
| 14-15: Conservation | Epigenetic balance | H3K4me3/H3K9ac ratio | GF(3) conservation, 17 moments pass |
| 16-17: Phenotype | External phenotype | Cell identity, stable state | Behavioral equivalence via simulation |
using Org.Operads # Define deterministic agent contracts
using BridgeLayer # γ-bridge verification
using Modelica # System dynamics simulation
# Step 1: Define Org contracts (external interface)
contract_x = define_contract(:x, :generator, Int8(1),
Set([:request]), Set([:activity]), ...)
contract_v = define_contract(:v, :coordinator, Int8(0),
Set([:activity]), Set([:routed]), ...)
contract_z = define_contract(:z, :validator, Int8(-1),
Set([:routed]), Set([:constraint]), ...)
# Step 2: Create Modelica system with same structure
sys = create_aptos_triad(
x_rate=1.0, # Parameter 1 (epigenetic site)
v_factor=0.8, # Parameter 2 (epigenetic site)
z_threshold=0.5 # Parameter 3 (epigenetic site)
)
# Step 3: Propose parameter mutation (derangement)
sys_mutant = create_aptos_triad(
x_rate=1.2, # Changed (derangement)
v_factor=0.96, # Changed (derangement)
z_threshold=0.5 # Unchanged (still derangement)
)
# Step 4: Verify via γ-bridge (all 17 moments)
all_passed, bridge = verify_all_moments_modelica(
contract_x, # Org contract (external interface)
StructuralDiff(:aptos_triad, 1, 2, diff_data), # Mutation specification
sys, # Original system
sys_mutant, # Mutated system
20.0 # Simulation time
)
# Step 5: Accept mutation if all moments pass
if all_passed
println("✓ External phenotype preserved")
println("✓ Internal parameters free to evolve")
apply_mutation(sys, sys_mutant)
else
println("✗ Mutation would violate contract")
end
# File: ~/.claude/skills/modelica/examples/org_aptos_dynamics.jl
using Dates
include("../../../src/bridge_layer.jl")
using .BridgeLayer
# Define Modelica system
struct ModelicaSystem
name::Symbol
parameters::Dict{Symbol, Float64}
state::Dict{Symbol, Float64}
equations::Function
output::Function
timestamp::DateTime
end
function create_aptos_triad(; x_rate=1.0, v_factor=0.8, z_threshold=0.5)
parameters = Dict(:x_rate => x_rate, :v_factor => v_factor, :z_threshold => z_threshold)
state_init = Dict(:x => 0.1, :v => 0.5, :z => 0.3)
equations = function(state, params, t)
x, v, z = state[:x], state[:v], state[:z]
dx = params[:x_rate] * v - x
dv = x - params[:v_factor] * v - z
dz = v > params[:z_threshold] ? v : 0.1 * v
Dict(:x => dx, :v => dv, :z => dz)
end
output = function(state, params)
Dict(:activity => state[:x], :routing => state[:v], :constraint => state[:z])
end
ModelicaSystem(:aptos_triad, parameters, state_init, equations, output, now())
end
function simulate_system(system::ModelicaSystem, t_span; dt=0.01)
trajectory = Dict(:time => Float64[], :x => Float64[], :v => Float64[], :z => Float64[])
state = copy(system.state)
t = 0.0
while t ≤ t_span
push!(trajectory[:time], t)
push!(trajectory[:x], state[:x])
push!(trajectory[:v], state[:v])
push!(trajectory[:z], state[:z])
derivatives = system.equations(state, system.parameters, t)
state[:x] += dt * derivatives[:x]
state[:v] += dt * derivatives[:v]
state[:z] += dt * derivatives[:z]
t += dt
end
trajectory
end
function extract_output(trajectory, system::ModelicaSystem)
outputs = Dict(:activity => [], :routing => [], :constraint => [])
for i in 1:length(trajectory[:time])
state = Dict(:x => trajectory[:x][i], :v => trajectory[:v][i], :z => trajectory[:z][i])
out = system.output(state, system.parameters)
push!(outputs[:activity], out[:activity])
push!(outputs[:routing], out[:routing])
push!(outputs[:constraint], out[:constraint])
end
outputs
end
function verify_all_moments_modelica(contract, diff, sys_old, sys_new, t_span)
# Moments 1-16: bridge verification
bridge = construct_bridge(contract, diff)
all_passed_1_16 = all(m.passed for m in bridge.moments[1:16])
# Moment 17: behavioral equivalence via simulation
traj_old = simulate_system(sys_old, t_span)
output_old = extract_output(traj_old, sys_old)
traj_new = simulate_system(sys_new, t_span)
output_new = extract_output(traj_new, sys_new)
max_diff = maximum([
maximum(abs.(output_old[:activity] .- output_new[:activity])),
maximum(abs.(output_old[:routing] .- output_new[:routing])),
maximum(abs.(output_old[:constraint] .- output_new[:constraint]))
])
moment_17_passed = max_diff ≤ 0.1 # 0.1 tolerance
all_passed = all_passed_1_16 && moment_17_passed
(all_passed, bridge)
end
# Demo: coordinated scaling preserves behavior
sys_v1 = create_aptos_triad(x_rate=1.0, v_factor=0.8, z_threshold=0.5)
sys_v2 = create_aptos_triad(x_rate=1.2, v_factor=0.96, z_threshold=0.5)
contracts = create_aptos_contracts()
diff_mutation = StructuralDiff(
:aptos_triad, 1, 2,
Dict(
:is_derangement => true,
:old_parameters => Dict(:x_rate => 1.0, :v_factor => 0.8, :z_threshold => 0.5),
:new_parameters => Dict(:x_rate => 1.2, :v_factor => 0.96, :z_threshold => 0.5),
:derangement_type => :coordinated_scaling,
:preserves_equilibrium => true
),
"Coordinated parameter scaling for adaptive regulation"
)
all_moments_passed, bridge = verify_all_moments_modelica(
contracts[:x], diff_mutation, sys_v1, sys_v2, 20.0
)
if all_moments_passed
println("✅ MUTATION ACCEPTED")
println("✓ All 17 moments verified")
println("✓ External behavior preserved (phenotype stable)")
println("✓ Internal parameters free to evolve (genotype deranged)")
else
println("❌ MUTATION REJECTED")
end
The Aptos triad maintains GF(3) balance:
1*x + 0*v + (-1)*z = 0 (∀ t)
This means:
| Skill | Trit | Role in Integration | Interface |
|---|---|---|---|
| modelica | 0 | System dynamics via Wolfram | Constraint satisfaction |
| levin-levity | +1 | Explores parameter space | Proposes mutations |
| levity-levin | -1 | Validates bounds | Verifies 17 moments |
| open-games | +1 | Game-theoretic analysis | Nash equilibrium |
| narya-proofs | -1 | Formal verification | Bridge certificate |
| langevin-dynamics | -1 | Stochastic analysis | Parameter diffusion |
| fokker-planck-analyzer | +1 | Convergence proofs | Stationary distribution |
See NEIGHBOR_SKILLS.md for full connectivity map.
This skill connects to the K-Dense-AI/claude-scientific-skills ecosystem:
modelica: Modelica Language Specification 3.6wolfram: Wolfram SystemModeler Documentationbronstein: Geometric priors for MLThis skill maps to Cat# = Comod(P) as a bicomodule in the equipment structure:
Trit: 0 (ERGODIC)
Home: Prof
Poly Op: ⊗
Kan Role: Adj
Color: #26D826
Modelica's acausal equations form a bimodule over the polynomial functor:
A Modelica connector is a lens in the polynomial category:
Connector = (Effort × Flow, Effort)