Deterministic discrete Petri net modeling and reachability analysis for MoonBit
Dependencies
构造模型或导入受限 PNML → 验证 → enabled / fire → 有限 BFS
→ 最短 firing trace、死锁证据、稳定文本或 JSON 报告git clone https://github.com/okMambaOut/moonpetri.git
cd moonpetri
moon update
moon check --target wasm-gc --deny-warn
moon test --target wasm-gc
moon run examples/api-demomoon run cmd/moonpetri -- validate examples/producer-consumer.pnml
# valid places=2 transitions=2 enabled=1
moon run cmd/moonpetri -- explore examples/producer-consumer.pnml --max-states 100
# states=3 edges=4 deadlocks=0 max_tokens=2 truncated=false
moon run cmd/moonpetri -- fire examples/producer-consumer.pnml t_produce t_consume
# marking=[2,0]moon run cmd/moonpetri -- explore examples/traffic-light.pnml
# states=3 edges=3 deadlocks=0 max_tokens=1 truncated=false
moon run cmd/moonpetri -- fire examples/traffic-light.pnml t_green t_yellow t_red
# marking=[1,0,0]moon run cmd/moonpetri -- validate examples/deadlock.pnml
# valid places=2 transitions=2 enabled=0
moon run cmd/moonpetri -- report examples/deadlock.pnml
# {"states":1,"edges":0,"deadlocks":1,"max_tokens":0,"truncated":false}python scripts/smoke.pyimport {
"okMambaOut/moonpetri" @petri,
}| API | 用途 |
|---|---|
| PetriNet::new/add_place/add_transition/add_input/add_output | 构造网络,拒绝重复名称、非法权重/ID,重复同向 arc 合并且检查溢出 |
| initial_marking/validate | 获取初始快照/检查模型不变量 |
| marking/Marking::token/Marking::tokens | 构造 token 快照、读取单个值或防御性副本 |
| enabled/enabled_transitions/fire/fire_sequence | 完整输入消耗后生成输出,不修改原始 marking |
| reachable/shortest_trace | 状态去重、硬上限 BFS、前驱重建最短路径 |
| deadlocks/deadlock_traces | 返回本次探索记录的死锁及最短见证 |
| boundedness/observed_place_maxima | 区分已证明有限与未知;每个 place 的已观察最大 token |
| parse_pnml/serialize_pnml | 导入文档所述子集、按规范化 ID 序列化 |
| analysis_report/AnalysisReport::to_json/run_command | 无网络、稳定结构化输出和可嵌入命令执行 |
moon fmt --check
moon check --target wasm-gc --deny-warn
moon check --target wasm --deny-warn
moon check --target js --deny-warn
moon check --target native --deny-warn
moon test --target wasm-gc
moon build --target wasm-gc
python scripts/smoke.py
moon run examples/api-demo
# 完整自动检查(native 执行要求 C 编译器):
python scripts/readiness.py
# 只打包并检查 ZIP 内容,不会发布:
python scripts/package_check.pypub struct AnalysisReport {
states : Int
edges : Int
deadlocks : Int
truncated : Bool
max_tokens : Int
}pub(all) enum PetriError {
EmptyName
InvalidName
NegativeTokens
InvalidWeight
InvalidPlace
InvalidTransition
InvalidMarking
NotEnabled
InvalidMaxStates
DuplicateName(String)
TokenOverflow
SequenceFailed(Int, Int, PetriError)
ParseError(String)
} derive(Eq, Debug)pub struct PetriNet {
// private fields
}pub struct ReachabilityResult {
edges : Int
truncated : Bool
max_tokens : Int
// private fields
}fn run_command(command : String, input : String, args : Array[String]) -> Result[String, Array[PetriError]]Install
Download zipDeterministic discrete Petri net modeling and reachability analysis for MoonBit
Dependencies