Skip to main content

catcolab-petri-nets

CatColab Petri Nets - concurrent system modeling via places (states), transitions (events), and token flow. Foundation for process algebra, workflow, and chemical reaction networks.

Zur Installation springen

Quellinformationen

Repository
plurigrid/asi
Letzte Quellaktivität
10. Juni 2026 um 11:55
Erkannte Sprache von SKILL.md
Englisch
Sterne
64
Forks
12

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
3 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
catcolab-petri-nets
description
CatColab Petri Nets - concurrent system modeling via places (states), transitions (events), and token flow. Foundation for process algebra, workflow, and chemical reaction networks.
version
1.0.0
# CatColab Petri Nets: Concurrent Systems **Trit**: +1 (PLUS - generator) **Color**: Magenta (#FF00FF) ## Overview Petri nets in CatColab model concurrent and distributed systems: - **Places**: States holding tokens (resources, conditions) - **Transitions**: Events that fire when enabled - **Arcs**: Flow of tokens between places and transitions - **Tokens**: Resources consumed/produced by transitions Petri nets are the categorical foundation for process algebra, workflow modeling, and chemical reaction networks. ## Mathematical Foundation A Petri net is a bipartite graph: ``` ┌─────────────────────────────────────────────────────┐ │ PETRI NET │ ├─────────────────────────────────────────────────────┤ │ Places (States): │ │ (P1) Ready (P2) Running (P3) Done │ │ │ │ Transitions (Events): │ │ [T1] Start [T2] Finish │ │ │ │ Arcs (Token Flow): │ │ P1 → T1 → P2 → T2 → P3 │ │ │ │ Diagram: │ │ (P1)●──►[T1]──►(P2)──►[T2]──►(P3) │ │ ●=token │ └─────────────────────────────────────────────────────┘ ``` ## Free Symmetric Monoidal Category Petri nets are the **free symmetric monoidal category** on a signature: ``` Objects: P₁, P₂, ..., Pₙ (places) Morphisms: Generated by transitions Tensor: P₁ ⊗ P₂ (concurrent resources) Composition: Sequential firing Example: T: P₁ ⊗ P₂ → P₃ ⊗ P₄ "Transition T consumes tokens from P₁, P₂ and produces tokens in P₃, P₄" ``` ## Double Theory ```rust // Petri net double theory pub fn th_petri_net() -> DiscreteDblTheory { let mut cat = FpCategory::new(); // Object type cat.add_ob_generator(name("Place")); // Morphism type (transitions as structured morphisms) cat.add_mor_generator(name("Transition"), name("Place"), name("Place")); // Monoidal structure (parallel composition) // P ⊗ Q represents "P and Q concurrently" cat.into() } ``` ## CatColab Implementation ### Place Declaration ```typescript { "type": "ObDecl", "name": "Idle", "theory_type": "Place", "description": "process waiting for input" } ``` ### Transition Declaration ```typescript { "type": "MorDecl", "name": "activate", "inputs": ["Idle", "Resource"], "outputs": ["Active"], "theory_type": "Transition", "description": "process starts when resource available" } ``` ## Practical Examples ### Example 1: Producer-Consumer ``` Places: Buffer (capacity N), Produced, Consumed Transitions: produce: Empty → Buffer + Produced consume: Buffer → Consumed Tokens: Buffer starts empty, count items produced/consumed ``` ### Example 2: Dining Philosophers ``` Places: Thinking(i), Eating(i), Fork(i) for i=1..5 Transitions: pickup(i): Thinking(i) ⊗ Fork(i) ⊗ Fork(i+1) → Eating(i) putdown(i): Eating(i) → Thinking(i) ⊗ Fork(i) ⊗ Fork(i+1) Deadlock possible when all pick up left fork simultaneously ``` ### Example 3: Chemical Reaction (A + B → C) ``` Places: A, B, C (species concentrations as token counts) Transitions: react: A ⊗ B → C Stochastic: Rate = k·[A]·[B] (mass action) ``` ## Connection to Stock-Flow Petri nets and stock-flow diagrams are **equivalent**: ``` Petri Net ≅ Stock-Flow Place ↔ Stock Transition ↔ Flow Token count ↔ Population Firing rate ↔ Mass-action rate ``` ## AlgebraicPetri.jl Integration ```julia using AlgebraicPetri using Catlab # Define SIR as Petri net sir_petri = @acset LabelledPetriNet begin S = 3 # places: S, I, R T = 2 # transitions: infect, recover tname = [:infect, :recover] sname = [:S, :I, :R] is = [1, 2] # infect inputs: S, I os = [2, 2] # infect outputs: I, I it = [1, 1] # transition indices ot = [1, 1] end # Compose Petri nets combined = sir_petri ⊕ vaccination_petri ``` ## GF(3) Triads ``` catcolab-regulatory-networks (-1) ⊗ topos-catcolab (0) ⊗ catcolab-petri-nets (+1) = 0 ✓ crn-topology (-1) ⊗ catcolab-stock-flow (0) ⊗ catcolab-petri-nets (+1) = 0 ✓ ``` ## Commands ```bash # Create Petri net just catcolab-new petri-net "producer-consumer" # Analyze reachability just catcolab-analyze producer-consumer --reachability # Check for deadlock just catcolab-analyze producer-consumer --deadlock # Export to PNML just catcolab-export producer-consumer --format=pnml # Simulate token dynamics just catcolab-simulate producer-consumer --stochastic ``` ## References - Baez & Master (2020) "Open Petri nets" - Patterson et al. (2022) "Categorical data structures for technical computing" - [AlgebraicPetri.jl](https://algebraicjulia.github.io/AlgebraicPetri.jl/) - [CatColab Petri Net Help](https://catcolab.org/help/logics/petri-net) (planned) --- **Skill Name**: catcolab-petri-nets **Type**: Concurrent Systems / Process Algebra **Trit**: +1 (PLUS) **GF(3)**: Balances the CatColab skill ecosystem
Auf GitHub ansehen