- **Generic arithmetic** extensible across numeric types
Scanned 9/6/2026
Install to Claude Code
npx -y skills add plurigrid/asi --skill sicm --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Sicm?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/plurigrid-sicm)More formats (shields.io, HTML) on the badges page.
---
name: sicm
description: '- **Generic arithmetic** extensible across numeric types'
metadata:
interface_ports:
- References
- Commands
- Integration with
trit: 0
---
# SICM Skill - Structure and Interpretation of Classical Mechanics
> *"The variational formulation of mechanics is coordinate-independent and leads to a systematic computational approach."*
> — Sussman & Wisdom
## Overview
**SICMUtils** is a Clojure/ClojureScript implementation of scmutils—the computer algebra system from MIT's SICM course. It provides:
- **Generic arithmetic** extensible across numeric types
- **Symbolic computation** with automatic differentiation
- **Functional differential geometry** on manifolds
- **Lagrangian/Hamiltonian mechanics** with Noether's theorem
**Trit**: 0 (ERGODIC - Coordinator between SICP abstractions and physical mechanics)
## Architecture
```
┌────────────────────────────────────────────────────────────┐
│ sicmutils.env │
│ (batteries-included namespace) │
└─────────────────────────┬──────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
┌───▼────────┐ ┌─────▼──────┐ ┌──────▼─────┐
│ mechanics/ │ │ calculus/ │ │ numerical/ │
│ Lagrangian │ │ manifold │ │ integration│
│ Hamiltonian│ │ vector-fld │ │ optimize │
│ Noether │ │ form-field │ │ ODE solve │
└────────────┘ └────────────┘ └────────────┘
│ │ │
└─────────────────┼────────────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
┌───▼────────┐ ┌─────▼──────┐ ┌──────▼─────┐
│ simplify/ │ │ operator │ │ derivative │
│ polynomial │ │ composition│ │ D, partial │
│ rules │ │ algebra │ │ dual nums │
└────────────┘ └────────────┘ └────────────┘
│ │ │
└─────────────────┼────────────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
┌───▼────────┐ ┌─────▼──────┐ ┌──────▼─────┐
│ generic │ │ value │ │ structure │
│ +,-,*,/ │ │ protocol │ │ up/down │
│ extensible│ │ kind,zero? │ │ vectors │
└────────────┘ └────────────┘ └────────────┘
```
## Core Namespaces (GF(3) Decomposition)
### MINUS (-1): Verification/Structure
| Namespace | Purpose |
|-----------|---------|
| `sicmutils.value` | Value protocol: `zero?`, `one?`, `kind` |
| `sicmutils.generic` | Generic arithmetic operations |
| `sicmutils.structure` | Up/down tuple vectors |
| `sicmutils.matrix` | Linear algebra |
| `sicmutils.simplify.*` | Expression simplification |
### ERGODIC (0): Coordination/Transformation
| Namespace | Purpose |
|-----------|---------|
| `sicmutils.expression` | Symbolic expression trees |
| `sicmutils.operator` | Operator algebra composition |
| `sicmutils.function` | Higher-order function utilities |
| `sicmutils.calculus.derivative` | D operator, partials |
| `sicmutils.calculus.manifold` | Differentiable manifolds |
| `sicmutils.calculus.coordinate` | Coordinate systems |
### PLUS (+1): Generation/Execution
| Namespace | Purpose |
|-----------|---------|
| `sicmutils.differential` | Dual numbers for AD |
| `sicmutils.abstract.number` | Symbolic numeric literals |
| `sicmutils.abstract.function` | Literal functions |
| `sicmutils.mechanics.lagrange` | Lagrangian mechanics |
| `sicmutils.mechanics.hamilton` | Hamiltonian mechanics |
| `sicmutils.numerical.*` | Numerical integration |
## Key Concepts
### 1. Generic Arithmetic (Extensible Tower)
```clojure
(require '[sicmutils.env :as e])
;; Works on numbers
(e/* 3 4) ;=> 12
;; Works on symbols
(e/* 'x 'y) ;=> (* x y)
;; Works on functions
((e/* e/sin e/cos) 'x) ;=> (* (sin x) (cos x))
;; Extend to custom types via protocols
```
### 2. Automatic Differentiation (D Operator)
```clojure
;; D is the derivative operator
(e/D e/sin) ;=> cos
((e/D e/sin) 'x) ;=> (cos x)
;; Higher derivatives
((e/expt e/D 2) e/sin) ;=> -sin
;; Partial derivatives
((e/partial 0) (fn [[x y]] (e/* x y))) ; ∂/∂x(xy) = y
```
### 3. Structures (Up/Down Vectors)
```clojure
;; Up = contravariant (coordinate-like)
(e/up 1 2 3)
;; Down = covariant (momentum-like)
(e/down 1 2 3)
;; Lagrangian state: (t, q, q̇)
(e/up 't (e/up 'x 'y) (e/up 'vx 'vy))
;; Hamiltonian state: (t, q, p)
(e/up 't (e/up 'x 'y) (e/down 'px 'py))
```
### 4. Lagrangian Mechanics
```clojure
(require '[sicmutils.mechanics.lagrange :as L])
;; Free particle Lagrangian: L = T - V = ½mv²
(defn L-free-particle [mass]
(fn [[_ _ v]]
(e/* (e// 1 2) mass (e/square v))))
;; Euler-Lagrange equations
(L/Lagrange-equations (L-free-particle 'm))
;; Action functional
(L/Lagrangian-action L q t1 t2)
```
### 5. Manifolds and Differential Geometry
```clojure
(require '[sicmutils.calculus.manifold :as m])
(require '[sicmutils.calculus.coordinate :as c])
;; Define R² with rectangular coordinates
(def R2 (m/make-manifold m/Rn 2))
(def rect (c/coordinate-system-at 'rectangular :origin R2))
;; Vector fields
(def d:dx (c/vector-field rect 0))
(def d:dy (c/vector-field rect 1))
;; Differential forms
(def dx (c/oneform-field rect 0))
(def dy (c/oneform-field rect 1))
;; Lie derivative, exterior derivative, etc.
```
### 6. Simplification
```clojure
(require '[sicmutils.simplify :as s])
;; Simplify expressions
(s/simplify (e/+ (e/square (e/sin 'x))
(e/square (e/cos 'x))))
;=> 1
;; Render to LaTeX
(e/->TeX (e/simplify expr))
;; Render to infix
(e/->infix (e/simplify expr))
```
## SICP → SICM Bridge
The progression from SICP to SICM:
| SICP Chapter | SICM Connection |
|--------------|-----------------|
| Ch 1: Procedures | Generic operations, function composition |
| Ch 2: Data abstraction | Structures, symbolic expressions |
| Ch 3: Assignment & state | Lagrangian/Hamiltonian state |
| Ch 4: Metalinguistic | Expression simplifier, rule system |
| Ch 5: Register machines | Numerical integrators |
### Shared Patterns
```scheme
;; SICP: deriv procedure
(define (deriv exp var) ...)
;; SICM: D operator on symbolic expressions
((D (literal-function 'f)) 'x)
```
## Incremental Update Schema
For semantic world closure with incremental updates:
```clojure
(def sicm-acset-schema
{:objects [:Namespace :Symbol :Expression :Operator]
:morphisms {:depends [:Namespace :Namespace]
:defines [:Namespace :Symbol]
:uses [:Expression :Symbol]
:applies [:Operator :Expression]}
:attributes {:trit [:Namespace :GF3]
:kind [:Symbol :Keyword]
:arity [:Operator :Int]}})
;; Incremental update: only recompute changed subgraph
(defn incremental-update [delta-expr sicm-graph]
(let [affected (transitive-deps delta-expr sicm-graph)
unchanged (set/difference (all-nodes sicm-graph) affected)]
(-> sicm-graph
(invalidate-nodes affected)
(recompute-nodes affected)
(verify-gf3-conservation))))
```
## World Closure
SICM completes the semantic world by bridging:
```
SICP (abstraction) ←→ SICM (mechanics) ←→ FDG (geometry)
λ-calculus variational manifolds
procedures Lagrangians vector fields
data abstraction state tuples differential forms
interpreters simplifiers coordinate systems
```
---
## End-of-Skill Interface
## Commands
```bash
# Add dependency
clj -Sdeps '{:deps {sicmutils/sicmutils {:mvn/version "0.23.0"}}}'
# REPL with SICMUtils
clj -M -e "(require '[sicmutils.env :refer :all])"
# ClojureScript (browser/Node)
shadow-cljs watch sicm-app
# With Babashka (limited - no symbolic)
bb -e "(require '[sicmutils.value :as v]) (v/zero? 0)"
```
## Integration with Gay.jl / GF(3)
### Namespace → Trit Mapping
```clojure
;; Use Gay.jl colors to track namespace triads
(def namespace-trits
{"sicmutils.value" -1 ; foundation
"sicmutils.generic" -1 ; arithmetic
"sicmutils.structure" -1 ; data
"sicmutils.operator" 0 ; coordination
"sicmutils.expression" 0 ; symbolic
"sicmutils.derivative" 0 ; calculus bridge
"sicmutils.lagrange" +1 ; mechanics
"sicmutils.hamilton" +1 ; dynamics
"sicmutils.numerical" +1 ; execution
})
;; GF(3) conserved per layer:
;; 3×(-1) + 3×(0) + 3×(+1) = 0 ✓
```
### Color Coding for Expressions
```clojure
;; Map expression types to Gay.jl palette
(defn expr-color [expr seed]
(let [kind (value/kind expr)
idx (case kind
::number 1
::symbol 2
::structure 3
::operator 4
::function 5
6)]
(gay/color-at seed idx)))
```
## References
- [SICM Book](https://mitpress.mit.edu/sites/default/files/sicm/book.html) (Sussman & Wisdom)
- [SICMUtils GitHub](https://github.com/sicmutils/sicmutils)
- [Emmy (successor)](https://github.com/mentat-collective/emmy)
- [FDG Book](https://mitpress.mit.edu/9780262019347/) (Functional Differential Geometry)
- [cljdoc Reference](https://cljdoc.org/d/sicmutils/sicmutils)
---
**Skill**: sicm
**Trit**: 0 (ERGODIC - bridges SICP abstraction to physical mechanics)
**GF(3) Triad**: `sicp (-1) ⊗ sicm (0) ⊗ fdg (+1) = 0`
**Status**: Ready for incremental semantic updates
---
## 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.*
## REPL siblings
Julia family: `sicmutils` · `sicp` · `julia-scientific` · `julia-gay` · `julia-gpu-kernels` · `julia-tempering` · `quarto-julia`. Atlas: `repl-commons`.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!