(*** WARNING! This IMITATOR model was automatically generated by fischer-novar-gen.py ***) var x1, x2, x3, x4, x5, x6, x7, x8, x9, x10 : clock; nb : discrete; delta, Delta : parameter; automaton process1 synclabs: Start1, SetX1, Enter1, SetX01; loc idle1: invariant True when True sync Start1 do {x1 := 0} goto trying1; loc trying1: invariant True when x1 < delta sync SetX1 do {x1 := 0} goto waiting1; loc waiting1: invariant True when x1 > Delta sync Enter1 do {nb := nb + 1} goto critical1; loc critical1: invariant True when True sync SetX01 do {nb := nb - 1} goto idle1; end automaton process2 synclabs: Start2, SetX2, Enter2, SetX02; loc idle2: invariant True when True sync Start2 do {x2 := 0} goto trying2; loc trying2: invariant True when x2 < delta sync SetX2 do {x2 := 0} goto waiting2; loc waiting2: invariant True when x2 > Delta sync Enter2 do {nb := nb + 1} goto critical2; loc critical2: invariant True when True sync SetX02 do {nb := nb - 1} goto idle2; end automaton process3 synclabs: Start3, SetX3, Enter3, SetX03; loc idle3: invariant True when True sync Start3 do {x3 := 0} goto trying3; loc trying3: invariant True when x3 < delta sync SetX3 do {x3 := 0} goto waiting3; loc waiting3: invariant True when x3 > Delta sync Enter3 do {nb := nb + 1} goto critical3; loc critical3: invariant True when True sync SetX03 do {nb := nb - 1} goto idle3; end automaton process4 synclabs: Start4, SetX4, Enter4, SetX04; loc idle4: invariant True when True sync Start4 do {x4 := 0} goto trying4; loc trying4: invariant True when x4 < delta sync SetX4 do {x4 := 0} goto waiting4; loc waiting4: invariant True when x4 > Delta sync Enter4 do {nb := nb + 1} goto critical4; loc critical4: invariant True when True sync SetX04 do {nb := nb - 1} goto idle4; end automaton process5 synclabs: Start5, SetX5, Enter5, SetX05; loc idle5: invariant True when True sync Start5 do {x5 := 0} goto trying5; loc trying5: invariant True when x5 < delta sync SetX5 do {x5 := 0} goto waiting5; loc waiting5: invariant True when x5 > Delta sync Enter5 do {nb := nb + 1} goto critical5; loc critical5: invariant True when True sync SetX05 do {nb := nb - 1} goto idle5; end automaton process6 synclabs: Start6, SetX6, Enter6, SetX06; loc idle6: invariant True when True sync Start6 do {x6 := 0} goto trying6; loc trying6: invariant True when x6 < delta sync SetX6 do {x6 := 0} goto waiting6; loc waiting6: invariant True when x6 > Delta sync Enter6 do {nb := nb + 1} goto critical6; loc critical6: invariant True when True sync SetX06 do {nb := nb - 1} goto idle6; end automaton process7 synclabs: Start7, SetX7, Enter7, SetX07; loc idle7: invariant True when True sync Start7 do {x7 := 0} goto trying7; loc trying7: invariant True when x7 < delta sync SetX7 do {x7 := 0} goto waiting7; loc waiting7: invariant True when x7 > Delta sync Enter7 do {nb := nb + 1} goto critical7; loc critical7: invariant True when True sync SetX07 do {nb := nb - 1} goto idle7; end automaton process8 synclabs: Start8, SetX8, Enter8, SetX08; loc idle8: invariant True when True sync Start8 do {x8 := 0} goto trying8; loc trying8: invariant True when x8 < delta sync SetX8 do {x8 := 0} goto waiting8; loc waiting8: invariant True when x8 > Delta sync Enter8 do {nb := nb + 1} goto critical8; loc critical8: invariant True when True sync SetX08 do {nb := nb - 1} goto idle8; end automaton process9 synclabs: Start9, SetX9, Enter9, SetX09; loc idle9: invariant True when True sync Start9 do {x9 := 0} goto trying9; loc trying9: invariant True when x9 < delta sync SetX9 do {x9 := 0} goto waiting9; loc waiting9: invariant True when x9 > Delta sync Enter9 do {nb := nb + 1} goto critical9; loc critical9: invariant True when True sync SetX09 do {nb := nb - 1} goto idle9; end automaton process10 synclabs: Start10, SetX10, Enter10, SetX010; loc idle10: invariant True when True sync Start10 do {x10 := 0} goto trying10; loc trying10: invariant True when x10 < delta sync SetX10 do {x10 := 0} goto waiting10; loc waiting10: invariant True when x10 > Delta sync Enter10 do {nb := nb + 1} goto critical10; loc critical10: invariant True when True sync SetX010 do {nb := nb - 1} goto idle10; end automaton variable synclabs: Start1, SetX1, Enter1, SetX01, Start2, SetX2, Enter2, SetX02, Start3, SetX3, Enter3, SetX03, Start4, SetX4, Enter4, SetX04, Start5, SetX5, Enter5, SetX05, Start6, SetX6, Enter6, SetX06, Start7, SetX7, Enter7, SetX07, Start8, SetX8, Enter8, SetX08, Start9, SetX9, Enter9, SetX09, Start10, SetX10, Enter10, SetX010; loc Val0: invariant True when True sync Start1 do {} goto Val0; when True sync Start2 do {} goto Val0; when True sync Start3 do {} goto Val0; when True sync Start4 do {} goto Val0; when True sync Start5 do {} goto Val0; when True sync Start6 do {} goto Val0; when True sync Start7 do {} goto Val0; when True sync Start8 do {} goto Val0; when True sync Start9 do {} goto Val0; when True sync Start10 do {} goto Val0; when True sync SetX1 do {} goto Val1; when True sync SetX2 do {} goto Val2; when True sync SetX3 do {} goto Val3; when True sync SetX4 do {} goto Val4; when True sync SetX5 do {} goto Val5; when True sync SetX6 do {} goto Val6; when True sync SetX7 do {} goto Val7; when True sync SetX8 do {} goto Val8; when True sync SetX9 do {} goto Val9; when True sync SetX10 do {} goto Val10; loc Val1: invariant True when True sync Enter1 do {} goto Val1; when True sync SetX01 do {} goto Val0; when True sync SetX1 do {} goto Val1; when True sync SetX2 do {} goto Val2; when True sync SetX3 do {} goto Val3; when True sync SetX4 do {} goto Val4; when True sync SetX5 do {} goto Val5; when True sync SetX6 do {} goto Val6; when True sync SetX7 do {} goto Val7; when True sync SetX8 do {} goto Val8; when True sync SetX9 do {} goto Val9; when True sync SetX10 do {} goto Val10; loc Val2: invariant True when True sync Enter2 do {} goto Val2; when True sync SetX02 do {} goto Val0; when True sync SetX1 do {} goto Val1; when True sync SetX2 do {} goto Val2; when True sync SetX3 do {} goto Val3; when True sync SetX4 do {} goto Val4; when True sync SetX5 do {} goto Val5; when True sync SetX6 do {} goto Val6; when True sync SetX7 do {} goto Val7; when True sync SetX8 do {} goto Val8; when True sync SetX9 do {} goto Val9; when True sync SetX10 do {} goto Val10; loc Val3: invariant True when True sync Enter3 do {} goto Val3; when True sync SetX03 do {} goto Val0; when True sync SetX1 do {} goto Val1; when True sync SetX2 do {} goto Val2; when True sync SetX3 do {} goto Val3; when True sync SetX4 do {} goto Val4; when True sync SetX5 do {} goto Val5; when True sync SetX6 do {} goto Val6; when True sync SetX7 do {} goto Val7; when True sync SetX8 do {} goto Val8; when True sync SetX9 do {} goto Val9; when True sync SetX10 do {} goto Val10; loc Val4: invariant True when True sync Enter4 do {} goto Val4; when True sync SetX04 do {} goto Val0; when True sync SetX1 do {} goto Val1; when True sync SetX2 do {} goto Val2; when True sync SetX3 do {} goto Val3; when True sync SetX4 do {} goto Val4; when True sync SetX5 do {} goto Val5; when True sync SetX6 do {} goto Val6; when True sync SetX7 do {} goto Val7; when True sync SetX8 do {} goto Val8; when True sync SetX9 do {} goto Val9; when True sync SetX10 do {} goto Val10; loc Val5: invariant True when True sync Enter5 do {} goto Val5; when True sync SetX05 do {} goto Val0; when True sync SetX1 do {} goto Val1; when True sync SetX2 do {} goto Val2; when True sync SetX3 do {} goto Val3; when True sync SetX4 do {} goto Val4; when True sync SetX5 do {} goto Val5; when True sync SetX6 do {} goto Val6; when True sync SetX7 do {} goto Val7; when True sync SetX8 do {} goto Val8; when True sync SetX9 do {} goto Val9; when True sync SetX10 do {} goto Val10; loc Val6: invariant True when True sync Enter6 do {} goto Val6; when True sync SetX06 do {} goto Val0; when True sync SetX1 do {} goto Val1; when True sync SetX2 do {} goto Val2; when True sync SetX3 do {} goto Val3; when True sync SetX4 do {} goto Val4; when True sync SetX5 do {} goto Val5; when True sync SetX6 do {} goto Val6; when True sync SetX7 do {} goto Val7; when True sync SetX8 do {} goto Val8; when True sync SetX9 do {} goto Val9; when True sync SetX10 do {} goto Val10; loc Val7: invariant True when True sync Enter7 do {} goto Val7; when True sync SetX07 do {} goto Val0; when True sync SetX1 do {} goto Val1; when True sync SetX2 do {} goto Val2; when True sync SetX3 do {} goto Val3; when True sync SetX4 do {} goto Val4; when True sync SetX5 do {} goto Val5; when True sync SetX6 do {} goto Val6; when True sync SetX7 do {} goto Val7; when True sync SetX8 do {} goto Val8; when True sync SetX9 do {} goto Val9; when True sync SetX10 do {} goto Val10; loc Val8: invariant True when True sync Enter8 do {} goto Val8; when True sync SetX08 do {} goto Val0; when True sync SetX1 do {} goto Val1; when True sync SetX2 do {} goto Val2; when True sync SetX3 do {} goto Val3; when True sync SetX4 do {} goto Val4; when True sync SetX5 do {} goto Val5; when True sync SetX6 do {} goto Val6; when True sync SetX7 do {} goto Val7; when True sync SetX8 do {} goto Val8; when True sync SetX9 do {} goto Val9; when True sync SetX10 do {} goto Val10; loc Val9: invariant True when True sync Enter9 do {} goto Val9; when True sync SetX09 do {} goto Val0; when True sync SetX1 do {} goto Val1; when True sync SetX2 do {} goto Val2; when True sync SetX3 do {} goto Val3; when True sync SetX4 do {} goto Val4; when True sync SetX5 do {} goto Val5; when True sync SetX6 do {} goto Val6; when True sync SetX7 do {} goto Val7; when True sync SetX8 do {} goto Val8; when True sync SetX9 do {} goto Val9; when True sync SetX10 do {} goto Val10; loc Val10: invariant True when True sync Enter10 do {} goto Val10; when True sync SetX010 do {} goto Val0; when True sync SetX1 do {} goto Val1; when True sync SetX2 do {} goto Val2; when True sync SetX3 do {} goto Val3; when True sync SetX4 do {} goto Val4; when True sync SetX5 do {} goto Val5; when True sync SetX6 do {} goto Val6; when True sync SetX7 do {} goto Val7; when True sync SetX8 do {} goto Val8; when True sync SetX9 do {} goto Val9; when True sync SetX10 do {} goto Val10; end automaton observer loc obs_OK: invariant True wait {} (* Change '2' with any number of processes in CS *) when nb = 2 do {} goto obs_BAD; loc obs_BAD: invariant True wait {} end (* observer *) init := True & loc[process1] = idle1 & loc[process2] = idle2 & loc[process3] = idle3 & loc[process4] = idle4 & loc[process5] = idle5 & loc[process6] = idle6 & loc[process7] = idle7 & loc[process8] = idle8 & loc[process9] = idle9 & loc[process10] = idle10 & loc[variable] = Val0 & loc[observer] = obs_OK & x1 = 0 & x2 = 0 & x3 = 0 & x4 = 0 & x5 = 0 & x6 = 0 & x7 = 0 & x8 = 0 & x9 = 0 & x10 = 0 & nb = 0 & Delta >= 0 & delta >= 0; end