Variables: 
bool[1]: "a" 
bool[2]: "b" 
bool[3]: "c" 
bool[4]: "d" 

Event graph: 
event[0]: fork: null, #pred: 0, succ: 1 

# process[0]:
event[1]: fork: , pid: 0, #pred: 1, succ: 19 20 21 22 
event[2]: null: null, pid: 0, #pred: 1, succ: 23 
event[3]: assign: c := true, pid: 0, #pred: 1, succ: 2 
event[4]: select: [ a -> ... [] else -> ... ], pid: 0, #pred: 1, succ: 3 2 
event[5]: null: null, pid: 0, #pred: 1, succ: 23 
event[6]: assign: d := true, pid: 0, #pred: 1, succ: 5 
event[7]: select: [ b -> ... [] else -> ... ], pid: 0, #pred: 1, succ: 6 5 
event[8]: join: , pid: 0, #pred: 2, succ: 23 
event[9]: assign: c := false, pid: 0, #pred: 1, succ: 8 
event[10]: assign: d := false, pid: 0, #pred: 1, succ: 8 
event[11]: fork: , pid: 0, #pred: 1, succ: 9 10 
event[12]: wait: [c&&d], pid: 0, #pred: 1, succ: 11 
bool deps: 3 4 
event[13]: fork: , pid: 0, #pred: 1, succ: 4 7 12 
event[14]: join: , pid: 0, #pred: 2, succ: 13 
event[15]: assign: b := true, pid: 0, #pred: 1, succ: 14 
event[16]: assign: a := true, pid: 0, #pred: 1, succ: 14 
event[17]: fork: , pid: 0, #pred: 1, succ: 15 16 
event[18]: join: , pid: 0, #pred: 4, succ: 17 
event[19]: assign: a := false, pid: 0, #pred: 1, succ: 18 
event[20]: assign: b := false, pid: 0, #pred: 1, succ: 18 
event[21]: assign: c := false, pid: 0, #pred: 1, succ: 18 
event[22]: assign: d := false, pid: 0, #pred: 1, succ: 18 
event[23]: join: , pid: 0, #pred: 3, succ: 

