58 lines
1.5 KiB
Plaintext
58 lines
1.5 KiB
Plaintext
|
|
// Trace theory with wires and disjunctions
|
||
|
|
// Testing the full vision from 2025-12-12
|
||
|
|
|
||
|
|
theory PetriNet {
|
||
|
|
P : Sort;
|
||
|
|
T : Sort;
|
||
|
|
in : Sort;
|
||
|
|
out : Sort;
|
||
|
|
in/src : in -> P;
|
||
|
|
in/tgt : in -> T;
|
||
|
|
out/src : out -> T;
|
||
|
|
out/tgt : out -> P;
|
||
|
|
}
|
||
|
|
|
||
|
|
theory (N : PetriNet instance) Trace {
|
||
|
|
F : Sort;
|
||
|
|
F/of : F -> N/T;
|
||
|
|
|
||
|
|
W : Sort;
|
||
|
|
W/src : W -> [firing : F, arc : N/out];
|
||
|
|
W/tgt : W -> [firing : F, arc : N/in];
|
||
|
|
|
||
|
|
input_terminal : Sort;
|
||
|
|
output_terminal : Sort;
|
||
|
|
input_terminal/of : input_terminal -> N/P;
|
||
|
|
output_terminal/of : output_terminal -> N/P;
|
||
|
|
input_terminal/tgt : input_terminal -> [firing : F, arc : N/in];
|
||
|
|
output_terminal/src : output_terminal -> [firing : F, arc : N/out];
|
||
|
|
|
||
|
|
// Every out arc of every firing: either wired or terminal
|
||
|
|
ax5 : forall f : F, arc : N/out. |-
|
||
|
|
(exists w : W. w W/src = [firing: f, arc: arc]) \/
|
||
|
|
(exists o : output_terminal. o output_terminal/src = [firing: f, arc: arc]);
|
||
|
|
|
||
|
|
// Every in arc of every firing: either wired or terminal
|
||
|
|
ax6 : forall f : F, arc : N/in. |-
|
||
|
|
(exists w : W. w W/tgt = [firing: f, arc: arc]) \/
|
||
|
|
(exists i : input_terminal. i input_terminal/tgt = [firing: f, arc: arc]);
|
||
|
|
}
|
||
|
|
|
||
|
|
instance SimpleNet : PetriNet = {
|
||
|
|
A : P;
|
||
|
|
B : P;
|
||
|
|
t : T;
|
||
|
|
arc_in : in;
|
||
|
|
arc_in in/src = A;
|
||
|
|
arc_in in/tgt = t;
|
||
|
|
arc_out : out;
|
||
|
|
arc_out out/src = t;
|
||
|
|
arc_out out/tgt = B;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Chase should create both wires AND terminals (naive chase adds all disjuncts)
|
||
|
|
instance trace_test : SimpleNet Trace = chase {
|
||
|
|
f1 : F;
|
||
|
|
f1 F/of = SimpleNet/t;
|
||
|
|
}
|