go-pflow

module
v0.31.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 13, 2026 License: MIT

README

go-pflow

A Petri-net dynamical modeling engine in Go. You declare one model — places, transitions, arcs, rates — and go-pflow runs it under three simulation semantics from that single declaration: a deterministic mass-action ODE relaxation, an exact SSA jump process (Gillespie), and a chemical-Langevin SDE with the net's own intrinsic firing noise. Around the engines sit system identification and parameter fitting (gradient-free, and gradient-based with forward or adjoint sensitivities), structural analysis and verification (reachability, P/T-invariants, declarative properties with proved / refuted / unknown verdicts and counterexamples), and a cross-language compatibility contract: byte-exact SSA and editor-shape parse goldens held against the pflow.xyz JavaScript engine, with pflow-rs replaying the SSA half and pflow-jl replaying both on a branch not yet merged to its default (see Compatibility for the full matrix).

For the long form, read the book; for why the byte-exact contract exists, the four-language SSA writeup.

What go-pflow is, and is not

It is

  • a Go library: the modeling and runtime core of the pflow ecosystem;
  • one declared net, three engines — stochastic.Solve dispatches to ODE, SSA or SDE, and refuses combinations it cannot honour rather than guessing (see Which engine for which question);
  • a fitting toolkit that learns rates while preserving structure — every fitted parameter is a transition rate, and the fitted model is still analyzable;
  • a verification toolkit whose verdicts carry a method (structural, exhaustive, witness, partial) and, on refutation, a replayable trace (see Model correctness);
  • the reference reading of the pflow.xyz editor format.

It is not

  • an AI/ML library. It implements structural, dynamical computation based on Petri nets and differential equations. learn fits mechanistic models, not opaque ones; see Why Petri Nets?;
  • an MCP server. MCP orchestration — the petri_* tools an agent calls — lives in petri-pilot, which imports this library;
  • a service. Nothing here listens on a port by default;
  • the editor. pflow.xyz is the editor; this repo parses what it saves.

Architecture

flowchart LR
    subgraph model [Model]
        JSONLD["pflow.xyz JSON-LD<br/>(editor shape, CID identity)"]
        P["parser.ModelFromJSON"]
        MM["metamodel.Model<br/>(engine input, shape B)"]
        JSONLD --> P --> MM
    end
    subgraph engines [Engines]
        ODE["solver<br/>ODE relaxation"]
        SSA["stochastic<br/>SSA jump process"]
        SDE["stochastic<br/>SDE chemical Langevin"]
    end
    subgraph learn [Learn]
        FIT["learn / stochastic.FitDiscrete<br/>fitting, forward + adjoint sensitivities"]
    end
    subgraph analysis [Analysis]
        R["reachability<br/>state space, invariants"]
        V["verify<br/>properties, verdicts"]
        M["mining / eventlog<br/>discovery, conformance"]
    end
    subgraph surfaces [Surfaces]
        PILOT["petri-pilot<br/>MCP tools"]
        PORTS["pflow-xyz JS, pflow-jl, pflow-rs<br/>held to shared goldens"]
    end
    MM --> ODE & SSA & SDE
    ODE & SSA --> FIT
    MM --> R & V & M
    engines & learn & analysis --> PILOT
    MM -. "cross-language goldens" .-> PORTS

Two JSON shapes, one rule

shape role
pflow.xyz JSON-LD (@context: https://pflow.xyz/schema; places and transitions keyed by id, source/target, per-color vectors, inhibitTransition, CID as @id) the editor's wire and identity format. Every saved model is addressed by a CID over it, so it does not change.
metamodel (arrays of {id}, from/to, type: read|inhibitor, kinetic, rate, schedule, stages, parameters) the only shape the engines and analyses read.

The rule: an editor document reaches an engine through exactly one converter, parser.ModelFromJSON. Colors unfold to place.color, an output-side inhibitor becomes an explicit read arc, per-color capacity is summed. The seven goldens under parser/testdata/editor-shape/ pin that reading (go run ./cmd/shape-goldens regenerates them). pflow-xyz keeps byte-identical copies as parity/editor-shape/ and replays them in CI from public/petri-shape_test.ts; pflow-jl keeps the same bytes as test/testdata/editor-shape/ and replays them from test/test_editor_shape.jl, but on its algebraic-petri branch — not yet on its default branch, main. pflow-rs has no editor-shape parser yet; it replays the SSA goldens, plus (a separate contract) go-pflow's ODE parity corpus and the generated-learn goldens.

Installation

go get github.com/pflow-xyz/go-pflow

Quick start

The canonical end-to-end example is the café:

go run ./examples/cafe

It walks one model through the whole stack — declare, observe, fit, ODE / SSA / SDE, compare the engines, sensitivities, verify — and ends at the same model the petri-pilot MCP tools serve. It reuses the café fixtures from the pflow showcase rather than inventing a toy. Which engine to believe on which question is docs/engine-selection.md; the capability table is docs/solver-matrix.md.

The smallest program that shows the dispatch:

m := &metamodel.Model{
    Name: "sir",
    Places: []metamodel.Place{
        {ID: "S", Initial: 990}, {ID: "I", Initial: 10}, {ID: "R"},
    },
    Transitions: []metamodel.Transition{
        {ID: "infect", Rate: 0.0005}, {ID: "recover", Rate: 0.1},
    },
    Arcs: []metamodel.Arc{
        {From: "S", To: "infect"}, {From: "I", To: "infect"}, {From: "infect", To: "I", Weight: 2},
        {From: "I", To: "recover"}, {From: "recover", To: "R"},
    },
}

for _, method := range []stochastic.Method{stochastic.MethodODE, stochastic.MethodSSA, stochastic.MethodSDE} {
    res, err := stochastic.Solve(m, nil, stochastic.Options{
        Method: method, Horizon: 40, Samples: 81, Realizations: 100, Seed: 42,
    })
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(res.Method, "final R:", res.Final["R"], "caveats:", res.Caveats)
}

The three answers agree on the mean here because no input arc has weight above one and nothing gates a firing. Add a read arc, an inhibitor or a reached capacity and the ODE and SDE paths set Diverged and say why instead of returning a smooth curve for a constrained system.

The petri builder and solver remain the direct ODE path when you have no metamodel:

net, rates := petri.Build().
    Place("S", 999).Place("I", 1).Place("R", 0).
    Transition("infect").Transition("recover").
    Arc("S", "infect", 1).Arc("I", "infect", 1).Arc("infect", "I", 2).
    Arc("I", "recover", 1).Arc("recover", "R", 1).
    WithCustomRates(map[string]float64{"infect": 0.3, "recover": 0.1})

prob := solver.NewProblem(net, net.SetState(nil), [2]float64{0, 100}, rates)
sol := solver.Solve(prob, solver.Tsit5(), solver.DefaultOptions())
fmt.Println("Final state:", sol.GetFinalState())

See The go-pflow Library for the full API guide.

What you can model, and where the edges are

The formalism is Turing-complete once inhibitor arcs are in play, so the question is never can it be expressed but whether the tooling makes it natural. Natural today:

  • Anything with a discrete state and countable resources — workflows, queues, inventories, protocols, game rules, token standards. Places hold integer counts, transitions fire, and every analysis package reads the same net.
  • Population dynamics — epidemics, chemical kinetics, market flows — where the same net runs as a mass-action ODE, an exact Gillespie sample path, or a chemical Langevin SDE. Which engine for which question says when each one is telling the truth.
  • Correctness questions, not just trajectories: invariants, deadlocks, boundedness, declared properties with counterexamples, conformance against event logs, and a Groth16 proof of an execution. The ladder is in MODEL-CORRECTNESS.md.

Where you will be working against the grain:

You want What exists What it costs you
Tokens that carry data (a struct per token) Vector-valued tokens: a fixed set of colors, unfolded by petri.ExpandColors Encode the data as places or colors; predicates over token fields become guard strings
Guards enforced in simulation stochastic.Options.Guard is an injected evaluator; stochastic/markingguard decides guards over tokens(...) A nil evaluator caveats every guard rather than enforcing it — read Result.Caveats
Deterministic durations delay on a transition: inputs consumed at start, outputs exactly delay later, one clock per enabling; stages for an Erlang-k approximation Only the discrete engine honours delay, byte-exact in all four languages; the ODE and SDE refuse it. Deadlines and pre-emption are still outside the net
Exhaustive analysis of a large state space reachability enumerates explicitly Fine for a café, not for a board game; the chess example is N-Queens for that reason
Continuous dynamics with gating stochastic.Forecast refuses a gated net rather than running it unconstrained Use Simulate (SSA); the refusal is the engine doing its job

Packages

Package Purpose Book chapter
metamodel The engine input schema; NewBundle composes typed subnets into a *Bundle, and Bundle.Flatten lowers it to one Model Ch 4: Token Language
parser pflow.xyz JSON-LD import/export; ModelFromJSON is the one editor-shape → metamodel converter Ch 17: Visual Editor
petri Core net types, colors, fluent Builder Ch 1: Why Petri Nets?
solver ODE solvers (Tsit5, RK45, implicit), equilibrium detection Ch 3: Discrete to Continuous
stochastic Solve dispatch; Gillespie SSA, schedules, chemical-Langevin SDE, FitDiscrete CTMC likelihood fitting. Options{Portable: true} is byte-exact with pflow-rs and pflow-xyz, and with pflow-jl on its algebraic-petri branch (goldens in stochastic/testdata/portable/, make ssa-goldens) Ch 3: Discrete to Continuous
learn ODE parameter fitting and system identification: Nelder-Mead, Adam, forward and adjoint sensitivities, tied parameters, hybrid MLP rates Ch 19: go-pflow Library
sensitivity Parameter sensitivity analysis Ch 19: go-pflow Library
derive Evaluation variants of a declared net
reachability Discrete state space, deadlock/liveness, Farkas P/T-invariants, unboundedness witnesses Ch 2: Mathematics of Flow
verify Declarative property checking — proved / refuted / unknown + counterexample Model correctness
validation Structural validation with located errors and suggested fixes Ch 13: Topology-Driven Verification
eventlog, mining, monitoring Event log parsing, process discovery and conformance, real-time prediction and SLA alerts Ch 11: Process Mining
hypothesis Move evaluation for game AI Ch 6: Game Mechanics
statemachine, workflow, actor Statecharts, task dependencies and SLAs, message-passing actors — all on a Petri-net backend Ch 10: Complex State Machines
tokenmodel (+ dsl, petri, subnet, windowing, dataflow) Token model schemas, S-expression DSL, Beam-style streaming pipelines Ch 4: Token Language
codegen/solidity, templates Solidity generation from token models; common net patterns Ch 18: Code Generation
prover, zkcompile Groth16 proofs of state transitions with gnark; net → circuit compilation Ch 12: Zero-Knowledge Proofs
eventsource, graphql, results, compat Event sourcing, GraphQL over models, structured simulation output, bridge between the two Petri implementations. schema/ beside them is JSON Schema and JSON-LD assets, not a Go package Ch 16: Declarative Infrastructure
visualization, plotter, cache, stateutil SVG rendering, time-series plots, simulation memoization, state-map utilities Ch 19: go-pflow Library

Examples

examples/cafe is the one to start with. The rest each map to a book chapter; see examples/README.md for the full table, run commands and a complexity progression.

Example Domain Book chapter
basic Token flow fundamentals Ch 1
coffeeshop Resource modeling, actors, workflows Ch 5
neural, dataset_comparison Parameter fitting, calibration Ch 3
tictactoe, connect4, nim Game AI, move evaluation Ch 6
sudoku, chess, knapsack Constraint satisfaction, optimization Ch 7, Ch 8
poker Complex state machines Ch 10
mining_demo, monitoring_demo, incident_simulator Process mining, SLA prediction Ch 11
erc Token standards, Solidity codegen Ch 4

The book

book.pflow.xyz covers everything from foundations to advanced topics:

Part I: FoundationsWhy Petri Nets, Mathematics of Flow, Discrete to Continuous, Token Language

Part II: ApplicationsResource Modeling, Game Mechanics, Constraint Satisfaction, Optimization, Enzyme Kinetics, Complex State Machines

Part III: AdvancedProcess Mining, Zero-Knowledge Proofs, Topology-Driven Verification, On-Chain ZK Verification, Exponential Weights and Scoring Systems, Declarative Infrastructure

Part IV: BuildingVisual Editor, Code Generation, go-pflow Library, Dual Implementation

EpilogueWhat the Abstraction Sits On

Testing

go test ./...

Bazel (hermetic, with nogo) also works: bazel test //... — see CLAUDE.md.

CLI

The pflow CLI provides simulation, analysis, verification and plotting from the command line. See cmd/pflow/README.md.

Compatibility

See CHANGELOG.md for breaking changes since the last tag.

  • Go 1.24.9+ (the go directive in go.mod; CI builds on 1.24)
  • Reads and writes the pflow.xyz JSON-LD format
  • SSA goldens (stochastic/testdata/portable/, produced under stochastic.Options{Portable: true}) are replayed byte-for-byte by pflow-xyz in JS and by pflow-rs in Rust; pflow-jl replays them on its algebraic-petri branch, not yet on its default branch
  • Editor-shape parse goldens (parser/testdata/editor-shape/) are replayed by pflow-xyz in JS, and by pflow-jl on algebraic-petri; pflow-rs has no editor-shape parser yet

License

MIT License - see LICENSE for details.

Directories

Path Synopsis
Composable form of ActorSystem on the metamodel composition layer.
Composable form of ActorSystem on the metamodel composition layer.
Package cache provides memoization for ODE simulations.
Package cache provides memoization for ODE simulations.
cmd
bundle-goldens command
Command bundle-goldens writes flatten goldens for metamodel.Bundle inputs — metamodel/testdata/bundle/<name>.flatten.json, one per source bundle: the single Model that Bundle.Flatten() produces, serialized as canonical JSON (keys sorted alphabetically at every level, via a generic re-encode) so a byte diff reflects a change in the flattened net and nothing else — no struct-field-order noise, no incidental @id churn from the source bundle's JSON-LD envelope, since Flatten's output is a plain metamodel.Model and carries none.
Command bundle-goldens writes flatten goldens for metamodel.Bundle inputs — metamodel/testdata/bundle/<name>.flatten.json, one per source bundle: the single Model that Bundle.Flatten() produces, serialized as canonical JSON (keys sorted alphabetically at every level, via a generic re-encode) so a byte diff reflects a change in the flattened net and nothing else — no struct-field-order noise, no incidental @id churn from the source bundle's JSON-LD envelope, since Flatten's output is a plain metamodel.Model and carries none.
pflow command
properties-goldens command
Command properties-goldens writes the verify golden — verify/testdata/showcase/properties.json — that pflow-rs's pflow-verify crate replays field for field against the showcase's cafe-order.json (ROADMAP.md Phase 2 exit criterion: "petri_verify-equivalent output for cafe-order.json matches Go field for field").
Command properties-goldens writes the verify golden — verify/testdata/showcase/properties.json — that pflow-rs's pflow-verify crate replays field for field against the showcase's cafe-order.json (ROADMAP.md Phase 2 exit criterion: "petri_verify-equivalent output for cafe-order.json matches Go field for field").
scheduled-goldens command
Command scheduled-goldens writes a deterministic golden for the scheduled+staged SSA engine — stochastic/testdata/scheduled/<name>.json — against the pflow showcase's cafe-service.json (Variation II: stages, schedules, guard/inhibitor/read arcs, a per-parameter bean arc).
Command scheduled-goldens writes a deterministic golden for the scheduled+staged SSA engine — stochastic/testdata/scheduled/<name>.json — against the pflow showcase's cafe-service.json (Variation II: stages, schedules, guard/inhibitor/read arcs, a per-parameter bean arc).
sde-goldens command
Command sde-goldens writes the portable chemical Langevin (SDE) goldens — stochastic/testdata/sde/<name>.json — the SDE counterpart of cmd/ssa-goldens.
Command sde-goldens writes the portable chemical Langevin (SDE) goldens — stochastic/testdata/sde/<name>.json — the SDE counterpart of cmd/ssa-goldens.
shape-goldens command
Command shape-goldens writes the editor-shape parse goldens under parser/testdata/editor-shape/, one per input document: the parsed colored net, its color expansion and its unfolded metamodel, as go-pflow reads them.
Command shape-goldens writes the editor-shape parse goldens under parser/testdata/editor-shape/, one per input document: the parsed colored net, its color expansion and its unfolded metamodel, as go-pflow reads them.
ssa-goldens command
Command ssa-goldens writes the portable SSA goldens — stochastic/testdata/portable/<name>.json — that pflow-rs, pflow-xyz and pflow-jl replay byte for byte.
Command ssa-goldens writes the portable SSA goldens — stochastic/testdata/portable/<name>.json — that pflow-rs, pflow-xyz and pflow-jl replay byte for byte.
zk-field-parity command
Command zk-field-parity emits a deterministic digest of BN254 field arithmetic and gnark circuit artifacts.
Command zk-field-parity emits a deterministic digest of BN254 field arithmetic and gnark circuit artifacts.
codegen
solidity
Package solidity generates Solidity smart contracts from token model schemas.
Package solidity generates Solidity smart contracts from token model schemas.
Package compat bridges the two Petri implementations in this repo so facades built on either side can interoperate during migration.
Package compat bridges the two Petri implementations in this repo so facades built on either side can interoperate during migration.
Package derive builds evaluation variants of a declared Petri net.
Package derive builds evaluation variants of a declared Petri net.
Package engine provides a state machine harness for continuous Petri net simulation.
Package engine provides a state machine harness for continuous Petri net simulation.
Package eventlog provides parsing and analysis of process event logs.
Package eventlog provides parsing and analysis of process event logs.
Package eventsource provides event sourcing infrastructure for CQRS applications.
Package eventsource provides event sourcing infrastructure for CQRS applications.
examples
basic command
cafe command
Command cafe is go-pflow's canonical end-to-end example: one café model, the same one the pflow ecosystem showcase uses, taken through the whole stack in a single run — declare, observe, fit, ODE / SSA / SDE, compare, sensitivities, verify, and the MCP calls that expose the same model.
Command cafe is go-pflow's canonical end-to-end example: one café model, the same one the pflow ecosystem showcase uses, taken through the whole stack in a single run — declare, observe, fit, ODE / SSA / SDE, compare, sensitivities, verify, and the MCP calls that expose the same model.
chess/cmd command
coffeeshop
Package coffeeshop demonstrates a fully automated coffee shop using go-pflow.
Package coffeeshop demonstrates a fully automated coffee shop using go-pflow.
coffeeshop/cmd command
Coffee Shop Automation Demo
Coffee Shop Automation Demo
coffeeshop/cmd/sim command
Coffee Shop Simulator CLI
Coffee Shop Simulator CLI
coffeeshop/dataflow
Package dataflow expresses the coffeeshop simulation as an Apache Beam / Cloud Dataflow style multi-stage pipeline whose internals lower to a subnet bundle of tokenmodel/petri nets.
Package dataflow expresses the coffeeshop simulation as an Apache Beam / Cloud Dataflow style multi-stage pipeline whose internals lower to a subnet bundle of tokenmodel/petri nets.
coffeeshop/dataflow/cmd command
Demo: coffeeshop expressed as a Beam-style Dataflow pipeline whose internals are tokenmodel/petri subnets.
Demo: coffeeshop expressed as a Beam-style Dataflow pipeline whose internals are tokenmodel/petri subnets.
connect4/cmd command
erc command
Package main demonstrates defining ERC token standards as Petri net schemas and generating Solidity contracts from them.
Package main demonstrates defining ERC token standards as Petri net schemas and generating Solidity contracts from them.
eventlog_demo command
f91w
Package f91w provides a Petri net simulation of the Casio F-91W digital watch.
Package f91w provides a Petri net simulation of the Casio F-91W digital watch.
f91w/cmd command
Casio F-91W Watch Simulator Based on the XState machine from https://github.com/dundalek/casio-f91w-fsm
Casio F-91W Watch Simulator Based on the XState machine from https://github.com/dundalek/casio-f91w-fsm
knapsack/cmd command
mining_demo command
monitoring_demo command
neural/cmd/demo command
neural/cmd/main command
nim/cmd command
poker/cmd command
stoplight command
sudoku/cmd command
tictactoe/cmd command
tictactoe/metamodel
Package metamodel demonstrates the struct tag DSL for Tic-tac-toe.
Package metamodel demonstrates the struct tag DSL for Tic-tac-toe.
trafficlight command
visualization_demo command
Visualization demo - generates example SVG files for workflows and state machines
Visualization demo - generates example SVG files for workflows and state machines
Package graphql provides a GraphQL server for Petri net models.
Package graphql provides a GraphQL server for Petri net models.
example command
Example GraphQL server for Petri net models.
Example GraphQL server for Petri net models.
Package hypothesis provides utilities for evaluating hypothetical states via ODE simulation.
Package hypothesis provides utilities for evaluating hypothetical states via ODE simulation.
Package learn fits the unknown parameters of continuous Petri-net models to observed data — mechanistic system identification.
Package learn fits the unknown parameters of continuous Petri-net models to observed data — mechanistic system identification.
Package metamodel provides compatibility utilities for migrating from the legacy Model type to the modern generic PetriNet types.
Package metamodel provides compatibility utilities for migrating from the legacy Model type to the modern generic PetriNet types.
metapetri
Package metapetri is the bridge from a metamodel.Model to the petri.PetriNet that reachability, invariants and verify consume.
Package metapetri is the bridge from a metamodel.Model to the petri.PetriNet that reachability, invariants and verify consume.
Package mining provides process mining algorithms including discovery and conformance checking.
Package mining provides process mining algorithms including discovery and conformance checking.
Package monitoring provides real-time predictive process monitoring.
Package monitoring provides real-time predictive process monitoring.
Package parser handles JSON import/export for Petri nets.
Package parser handles JSON import/export for Petri nets.
Package petri implements core Petri net data structures.
Package petri implements core Petri net data structures.
Package plotter provides SVG visualization for ODE solutions.
Package plotter provides SVG visualization for ODE solutions.
Package reachability provides state space analysis for Petri nets.
Package reachability provides state space analysis for Petri nets.
Package results defines the structured output format for simulations
Package results defines the structured output format for simulations
Package sensitivity provides tools for analyzing how Petri net behavior changes with different parameters.
Package sensitivity provides tools for analyzing how Petri net behavior changes with different parameters.
Package solver implements ODE (Ordinary Differential Equation) solvers for Petri net simulation using mass-action kinetics.
Package solver implements ODE (Ordinary Differential Equation) solvers for Petri net simulation using mass-action kinetics.
Composable form of Chart on the metamodel composition layer.
Composable form of Chart on the metamodel composition layer.
Package stateutil provides utility functions for manipulating Petri net state maps.
Package stateutil provides utility functions for manipulating Petri net state maps.
Package stochastic simulates a metamodel.Model as a continuous-time Markov chain (Gillespie's direct method) and dispatches the same declared net to either that engine or the mass-action ODE in solver — Petri.jl's ODEProblem/JumpProblem choice, off one structure.
Package stochastic simulates a metamodel.Model as a continuous-time Markov chain (Gillespie's direct method) and dispatches the same declared net to either that engine or the mass-action ODE in solver — Petri.jl's ODEProblem/JumpProblem choice, off one structure.
markingguard
Package markingguard is a GuardFunc for guards written over the marking alone — the tokens("place") op n form that metamodel's composition and queue patterns emit, and anything the tokenmodel/guard grammar accepts as long as it references nothing but tokens(...).
Package markingguard is a GuardFunc for guards written over the marking alone — the tokens("place") op n form that metamodel's composition and queue patterns emit, and anything the tokenmodel/guard grammar accepts as long as it references nothing but tokens(...).
Package templates provides common Petri net patterns
Package templates provides common Petri net patterns
Package tokenmodel defines abstract building blocks for formal models.
Package tokenmodel defines abstract building blocks for formal models.
dataflow
Beam-style fluent source chaining.
Beam-style fluent source chaining.
dataflow/transport
Package transport is the L3.1 wire layer for subnet.Bundle execution.
Package transport is the L3.1 wire layer for subnet.Bundle execution.
dsl
Package dsl implements an S-expression DSL for defining token model schemas.
Package dsl implements an S-expression DSL for defining token model schemas.
guard
Package guard implements a secure guard expression evaluator for Petri net transitions.
Package guard implements a secure guard expression evaluator for Petri net transitions.
petri
Package petri provides structural analysis for Petri net invariant proofs.
Package petri provides structural analysis for Petri net invariant proofs.
subnet
Graphviz DOT rendering for Bundles.
Graphviz DOT rendering for Bundles.
windowing
Package windowing scaffolds Apache Beam-style streaming windowing as a modeled feature over tokenmodel/petri.
Package windowing scaffolds Apache Beam-style streaming windowing as a modeled feature over tokenmodel/petri.
Package validation provides structural analysis and validation for Petri nets
Package validation provides structural analysis and validation for Petri nets
Package verify turns questions about a Petri net into verdicts with evidence.
Package verify turns questions about a Petri net into verdicts with evidence.
Package visualization provides utilities for visualizing Petri nets as SVG.
Package visualization provides utilities for visualizing Petri nets as SVG.
Composable form of Workflow on the metamodel composition layer.
Composable form of Workflow on the metamodel composition layer.
Package zkcompile transforms Petri net models into ZK circuit constraints.
Package zkcompile transforms Petri net models into ZK circuit constraints.
petrigen
Package petrigen generates gnark ZK circuits from Petri net models.
Package petrigen generates gnark ZK circuits from Petri net models.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL