mirror of
https://github.com/zaphar/merkle-dag.git
synced 2025-07-23 11:09:51 -04:00
41 lines
893 B
Plaintext
41 lines
893 B
Plaintext
---- MODULE dag ----
|
|
EXTENDS TLC, Integers
|
|
CONSTANT
|
|
NumNodes, Null
|
|
|
|
Nodes == 1..NumNodes
|
|
|
|
VARIABLE graph, pc, tmp, edges
|
|
|
|
vars == << graph, pc, tmp, edges >>
|
|
|
|
Init == /\ graph = {}
|
|
/\ pc = "GetEdge"
|
|
/\ tmp = Null
|
|
/\ edges = {x \in (Nodes \X Nodes): x[1] # x[2]}
|
|
|
|
GetEdge == /\ tmp = Null
|
|
/\ \/ /\ graph = {}
|
|
/\ tmp' = Null
|
|
\/ tmp' = CHOOSE e \in edges: (e \notin graph /\ e[1] # e[2])
|
|
/\ edges' = edges \ {tmp'}
|
|
/\ pc' = "AddEdge"
|
|
/\ UNCHANGED graph
|
|
|
|
AddEdge == /\ tmp # Null
|
|
/\ graph' = (graph \union {tmp})
|
|
/\ pc' = "Done"
|
|
/\ tmp' = Null
|
|
/\ UNCHANGED edges
|
|
|
|
Terminating == /\ pc = "Done"
|
|
/\ UNCHANGED vars
|
|
|
|
Next == \/ GetEdge \/ AddEdge
|
|
\/ Terminating
|
|
|
|
Termination == <>(pc = "Done")
|
|
|
|
Spec == Init /\ [][Next]_vars
|
|
====
|