Skip to main content

sicm

- **Generic arithmetic** extensible across numeric types

Source facts

Repository
plurigrid/asi
Last source activity
June 10, 2026 at 11:55
Detected SKILL.md language
English
Stars
70
Forks
13

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
3 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
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`.
View on GitHub