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/topos-generate" ~/.claude/skills/plurigrid-asi-topos-generate-6e53c2 && rm -rf "$T"
manifest:
skills/topos-generate/SKILL.mdsource content
Topos Generation Skill (PLUS +1)
Sheaf-theoretic model generation via forcing
Trit: +1 (PLUS)
Color: #D82626 (Red)
Role: Generator/Creator
Core Concept
A topos E generates models via:
- Subobject classifier Ω (truth values)
- Internal language (Mitchell-Bénabou)
- Forcing semantics (Kripke-Joyal)
E^op ↓ yoneda [E^op, Set] ↓ sheafification Sh(E, J) ← topos!
Subobject Classifier Ω
In Set: Ω = {0, 1} = Bool In Sh(X): Ω = {open subsets of X} In Sh(C,J): Ω = sieves
For any mono m: A ↣ B ∃! χ_m: B → Ω such that: A ───→ 1 ↓ ↓ true B ──→ Ω χ_m
Internal Language (Mitchell-Bénabou)
Every topos has an internal type theory:
Types ↔ Objects Terms ↔ Morphisms Predicates ↔ Subobjects ∧, ∨, → ↔ Ω operations ∀, ∃ ↔ Quantifiers via adjoints
Internal Logic
⟦A ∧ B⟧ = ⟦A⟧ ×_Ω ⟦B⟧ ⟦A → B⟧ = Ω^{⟦A⟧ → ⟦B⟧} ⟦∀x:X. φ(x)⟧ = ∏_{x:X} ⟦φ(x)⟧
Kripke-Joyal Forcing
Stage-wise truth at object U:
U ⊩ φ ∧ ψ ⟺ U ⊩ φ and U ⊩ ψ U ⊩ φ → ψ ⟺ ∀f:V→U. V ⊩ φ ⟹ V ⊩ ψ U ⊩ ∀x:X.φ ⟺ ∀f:V→U, ∀a:X(V). V ⊩ φ[a/x] U ⊩ ∃x:X.φ ⟺ ∃ cover {Uᵢ→U}, ∃aᵢ:X(Uᵢ). Uᵢ ⊩ φ[aᵢ/x]
Integration with Cider/Clojure
(ns topos.generate (:require [acsets.core :as acs])) ;; Subobject classifier for finite topos (defn omega [topos] (let [sieves (all-sieves (:site topos))] {:object sieves :true (maximal-sieve topos) :false (empty-sieve)})) ;; Force a proposition at stage (defn force [stage prop env] (case (:type prop) :and (and (force stage (:left prop) env) (force stage (:right prop) env)) :implies (every? (fn [morphism] (let [stage' (compose stage morphism)] (if (force stage' (:antecedent prop) env) (force stage' (:consequent prop) env) true))) (covers stage)) :forall (every? (fn [[morphism witness]] (force (compose stage morphism) (:body prop) (assoc env (:var prop) witness))) (all-witnesses stage (:type prop))) :exists (some (fn [[cover witnesses]] (every? (fn [[morph wit]] (force (compose stage morph) (:body prop) (assoc env (:var prop) wit))) (zip cover witnesses))) (all-covers-with-witnesses stage (:type prop))))) ;; Generate model satisfying formula (defn generate-model [topos formula] (let [stages (objects topos)] (for [stage stages :when (force stage formula {})] {:stage stage :witnesses (collect-witnesses stage formula)})))
Forcing for Set Theory
Cohen forcing generates new sets:
P = partial functions ω → 2 (finite approximations) G = generic filter (added by forcing) M[G] = { interpretation of names under G }
GF(3) Triads
sheaf-cohomology (-1) ⊗ dialectica (0) ⊗ topos-generate (+1) = 0 ✓ temporal-coalgebra (-1) ⊗ open-games (0) ⊗ topos-generate (+1) = 0 ✓ three-match (-1) ⊗ kan-extensions (0) ⊗ topos-generate (+1) = 0 ✓
Commands
# Generate subobject classifier just topos-omega site # Force proposition at stage just topos-force stage "∀x. φ(x)" # Generate satisfying model just topos-model formula # Internal language translation just topos-internal formula
Topos Models in Practice
| Topos | Generates | Application |
|---|---|---|
| Set | Classical sets | Standard math |
| Sh(X) | Varying sets over X | Geometry |
| Sh(G) | G-sets | Symmetry |
| Eff | Computable functions | Computability |
| Dialectica | Proof-relevant math | Type theory |
References
- Mac Lane & Moerdijk, "Sheaves in Geometry and Logic"
- Johnstone, "Sketches of an Elephant"
- Awodey, "Category Theory" §8
- nLab: https://ncatlab.org/nlab/show/forcing