diff --git a/bayonet.d b/bayonet.d index 6d05699..15ff3be 100644 --- a/bayonet.d +++ b/bayonet.d @@ -3,6 +3,8 @@ import file=std.file; import lexer, parser, expression, declaration, error, util; import scope_, semantic_; +enum OutputType { PSI, PRISM, PRISM_DET } + string getActualPath(string path){ // TODO: search path auto ext = path.extension; @@ -16,12 +18,12 @@ string readCode(File f){ auto app=mallocAppender!(char[])(); foreach(r;f.byChunk(1024)){app.put(cast(char[])r);} app.put("\0\0\0\0"); // insert 4 padding zero bytes - return cast(string)app.data; + return cast(string)app.data; } string readCode(string path){ return readCode(File(path)); } -int run(string path){ +int run(string path, OutputType ot){ path = getActualPath(path); auto ext = path.extension; if(ext != ".bayonet"){ @@ -41,8 +43,18 @@ int run(string path){ program=semantic(src,program,new TopScope(err)); //writeln(program); if(!err.nerrors){ - import translate_; - writeln(translate(program,new Builder())); + if(ot==OutputType.PSI){ + import translate_; + writeln(translate(program,new Builder())); + }else if(ot==OutputType.PRISM){ + import translate_prism; + writeln(translate(program,new Builder())); + }else if(ot==OutputType.PRISM_DET){ + import translate_prism_deterministic; + writeln(translate(program,new Builder())); + }else{ + assert(0); + } } return !!err.nerrors; } @@ -56,8 +68,26 @@ int main(string[] args){ } args.popFront(); args.sort!((a,b)=>a.startsWith("--")>b.startsWith("--")); + OutputType ot = OutputType.PSI; + bool otSet = false; foreach(x;args){ - if(auto r=run(x)) return r; + if(x=="--psi" || x=="--prism" || x=="--prism-det"){ + if(otSet){ + stderr.writeln("error: output type already set"); + return 1; + } + if(x=="--psi") + ot = OutputType.PSI; + else if(x=="--prism") + ot = OutputType.PRISM; + else if(x=="--prism-det") + ot = OutputType.PRISM_DET; + else + assert(0); + otSet = true; + continue; + } + if(auto r=run(x,ot)) return r; } return 0; } diff --git a/build.sh b/build.sh index 9679aca..c44a810 100755 --- a/build.sh +++ b/build.sh @@ -12,6 +12,6 @@ else fi # debug build -$DMD -g -debug bayonet.d declaration.d error.d expression.d lexer.d parser.d scope_.d semantic_.d terminal.d translate_.d util.d -ofbayonet +$DMD -g -debug bayonet.d declaration.d error.d expression.d lexer.d parser.d scope_.d semantic_.d terminal.d translate_.d translate_prism.d translate_prism_deterministic.d util.d -ofbayonet $DMD -g -debug maketable.d -ofmaketable diff --git a/keyur/congestion-10.bayonet b/keyur/congestion-10.bayonet new file mode 100644 index 0000000..c09ae75 --- /dev/null +++ b/keyur/congestion-10.bayonet @@ -0,0 +1,101 @@ +parameters{ NUM_PACKETS(3), COST_01(1), COST_02(2), COST_03(3), COST_12(1), COST_23(1) } + +queue_capacity 2; + +query probability(pkt_count@H1 < NUM_PACKETS); + +packet_fields{} + + +num_steps 54 ; +topology { + nodes { H0, H1, S0, S1, S2, S3, S4, S5, S6, S7 } + links { + (H0,pt1) <-> (S0,pt1), + + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S0,pt4) <-> (S3,pt4), + (S1,pt2) <-> (S3,pt1), + (S2,pt2) <-> (S3,pt2), + + (S3,pt3) <-> (S4,pt1), + + (S4,pt2) <-> (S5,pt1), + (S4,pt3) <-> (S6,pt1), + (S4,pt4) <-> (S7,pt4), + (S5,pt2) <-> (S7,pt1), + (S6,pt2) <-> (S7,pt2), + + (S7,pt3) <-> (H1,pt1) + } +} +programs { H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3, S4 -> s0, S5 -> s1, S6 -> s2, S7 -> s3 } + + +def h0(pkt, port) state pkt_count(0){ + new; + if pkt_count < NUM_PACKETS{ + pkt_count = pkt_count + 1; + fwd(1); + }else { drop; drop; } +} + +def h1(pkt, port) state pkt_count(0){ + pkt_count = pkt_count + 1; + drop; +} + +def s0(pkt, port) +state +route1(0), route2(0), route3(0), +shortest1(0), shortest2(0), shortest3(0), +nshortest(0), which(0) +{ + if port == 1{ + route1 = COST_01 + COST_12 + COST_23; + route2 = COST_03; + route3 = COST_02 + COST_23; + shortest1=0; shortest2=0; shortest3=0; + if (route1 <= route2 && route2 <= route3) { shortest1 = 1; } + if (route2 <= route1 && route2 <= route3) { shortest2 = 1; } + if (route3 <= route1 && route3 <= route2) { shortest3 = 1; } + nshortest = shortest1 + shortest2 + shortest3; + if (nshortest==1) { + which = 1; + } else if (nshortest==2) { + which = uniformInt(1,2); + } else { + which = uniformInt(1,3); + } + if which == shortest1 { fwd(2); } + else if which == shortest1+shortest2 { fwd(3); } + else { fwd(4); } + } +} + +def s1(pkt,port){ + if port == 1{ + fwd(2); + } +} +def s2(pkt,port){ + if port == 1{ + fwd(2); + } +} +def s3(pkt,port){ + if port == 1 || port == 2 || port == 4{ + fwd(3); + } +} + +def scheduler() state num_actions(0){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + num_actions += 1; + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/congestion-10.prism b/keyur/congestion-10.prism new file mode 100644 index 0000000..79cf51b --- /dev/null +++ b/keyur/congestion-10.prism @@ -0,0 +1,505 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 54; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 1; +const int v7COST_02 = 2; +const int v7COST_03 = 3; +const int v7COST_12 = 1; +const int v7COST_23 = 1; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..8] init 0; n2H0ra:[-6..8] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=3 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=4); +[] n2H0pc=4 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=8); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] n2H0pc=7 -> (n2H0pc'=-3)&(n2H0ra'=8); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4v6route1:[INTMIN..INTMAX] init 0; +n2S4v6route2:[INTMIN..INTMAX] init 0; +n2S4v6route3:[INTMIN..INTMAX] init 0; +n2S4v9shortest1:[INTMIN..INTMAX] init 0; +n2S4v9shortest2:[INTMIN..INTMAX] init 0; +n2S4v9shortest3:[INTMIN..INTMAX] init 0; +n2S4v9nshortest:[INTMIN..INTMAX] init 0; +n2S4v5which:[INTMIN..INTMAX] init 0; +n2S4t0:[1..2]; +n2S4t1:[1..3]; +n2S4ip0:[1..4] init 1; +n2S4ip1:[1..4] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..4] init 1; +n2S4op1:[1..4] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..4] init 1; +n2S4pc:[-6..35] init 0; n2S4ra:[-6..35] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S7f4] n2S4is=0 -> (n2S4ip0'=4)&(n2S4is'=1); +[n2S7f4] n2S4is=1 -> (n2S4ip1'=4)&(n2S4is'=2); +[n2S7f4] n2S4is=2 -> true; +[n2S6f1] n2S4is=0 -> (n2S4ip0'=3)&(n2S4is'=1); +[n2S6f1] n2S4is=1 -> (n2S4ip1'=3)&(n2S4is'=2); +[n2S6f1] n2S4is=2 -> true; +[n2S5f1] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S5f1] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S5f1] n2S4is=2 -> true; +[n2S3f3] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f3] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f3] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f4] n2S4pc=-5 & n2S4os>0 & n2S4op0=4 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f3] n2S4pc=-5 & n2S4os>0 & n2S4op0=3 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 & (n2S4ip0=1) -> (n2S4pc'=2); +[] n2S4pc=1 & !((n2S4ip0=1)) -> (n2S4pc'=35); +[] n2S4pc=2 & ((v7COST_01+v7COST_12)+v7COST_23)>=INTMIN & ((v7COST_01+v7COST_12)+v7COST_23)<=INTMAX -> (n2S4v6route1'=((v7COST_01+v7COST_12)+v7COST_23))&(n2S4pc'=3); +[] n2S4pc=3 & v7COST_03>=INTMIN & v7COST_03<=INTMAX -> (n2S4v6route2'=v7COST_03)&(n2S4pc'=4); +[] n2S4pc=4 & (v7COST_02+v7COST_23)>=INTMIN & (v7COST_02+v7COST_23)<=INTMAX -> (n2S4v6route3'=(v7COST_02+v7COST_23))&(n2S4pc'=5); +[] n2S4pc=5 & 0>=INTMIN & 0<=INTMAX -> (n2S4v9shortest1'=0)&(n2S4pc'=6); +[] n2S4pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S4v9shortest2'=0)&(n2S4pc'=7); +[] n2S4pc=7 & 0>=INTMIN & 0<=INTMAX -> (n2S4v9shortest3'=0)&(n2S4pc'=8); +[] n2S4pc=8 & ((n2S4v6route1<=n2S4v6route2)&(n2S4v6route2<=n2S4v6route3)) -> (n2S4pc'=9); +[] n2S4pc=8 & !(((n2S4v6route1<=n2S4v6route2)&(n2S4v6route2<=n2S4v6route3))) -> (n2S4pc'=11); +[] n2S4pc=9 & 1>=INTMIN & 1<=INTMAX -> (n2S4v9shortest1'=1)&(n2S4pc'=10); +[] n2S4pc=10 -> (n2S4pc'=11); +[] n2S4pc=11 & ((n2S4v6route2<=n2S4v6route1)&(n2S4v6route2<=n2S4v6route3)) -> (n2S4pc'=12); +[] n2S4pc=11 & !(((n2S4v6route2<=n2S4v6route1)&(n2S4v6route2<=n2S4v6route3))) -> (n2S4pc'=14); +[] n2S4pc=12 & 1>=INTMIN & 1<=INTMAX -> (n2S4v9shortest2'=1)&(n2S4pc'=13); +[] n2S4pc=13 -> (n2S4pc'=14); +[] n2S4pc=14 & ((n2S4v6route3<=n2S4v6route1)&(n2S4v6route3<=n2S4v6route2)) -> (n2S4pc'=15); +[] n2S4pc=14 & !(((n2S4v6route3<=n2S4v6route1)&(n2S4v6route3<=n2S4v6route2))) -> (n2S4pc'=17); +[] n2S4pc=15 & 1>=INTMIN & 1<=INTMAX -> (n2S4v9shortest3'=1)&(n2S4pc'=16); +[] n2S4pc=16 -> (n2S4pc'=17); +[] n2S4pc=17 & ((n2S4v9shortest1+n2S4v9shortest2)+n2S4v9shortest3)>=INTMIN & ((n2S4v9shortest1+n2S4v9shortest2)+n2S4v9shortest3)<=INTMAX -> (n2S4v9nshortest'=((n2S4v9shortest1+n2S4v9shortest2)+n2S4v9shortest3))&(n2S4pc'=18); +[] n2S4pc=18 & (n2S4v9nshortest=1) -> (n2S4pc'=19); +[] n2S4pc=18 & !((n2S4v9nshortest=1)) -> (n2S4pc'=21); +[] n2S4pc=19 & 1>=INTMIN & 1<=INTMAX -> (n2S4v5which'=1)&(n2S4pc'=20); +[] n2S4pc=20 -> (n2S4pc'=27); +[] n2S4pc=21 & (n2S4v9nshortest=2) -> (n2S4pc'=22); +[] n2S4pc=21 & !((n2S4v9nshortest=2)) -> (n2S4pc'=25); +[] n2S4pc=22 -> 0.5:(n2S4t0'=1)&(n2S4pc'=23) + 0.5:(n2S4t0'=2)&(n2S4pc'=23); +[] n2S4pc=23 & n2S4t0>=INTMIN & n2S4t0<=INTMAX -> (n2S4v5which'=n2S4t0)&(n2S4pc'=24); +[] n2S4pc=24 -> (n2S4pc'=27); +[] n2S4pc=25 -> 0.333333:(n2S4t1'=1)&(n2S4pc'=26) + 0.333333:(n2S4t1'=2)&(n2S4pc'=26) + 0.333333:(n2S4t1'=3)&(n2S4pc'=26); +[] n2S4pc=26 & n2S4t1>=INTMIN & n2S4t1<=INTMAX -> (n2S4v5which'=n2S4t1)&(n2S4pc'=27); +[] n2S4pc=27 & (n2S4v5which=n2S4v9shortest1) -> (n2S4pc'=28); +[] n2S4pc=27 & !((n2S4v5which=n2S4v9shortest1)) -> (n2S4pc'=30); +[] n2S4pc=28 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=29); +[] n2S4pc=29 -> (n2S4pc'=34); +[] n2S4pc=30 & (n2S4v5which=(n2S4v9shortest1+n2S4v9shortest2)) -> (n2S4pc'=31); +[] n2S4pc=30 & !((n2S4v5which=(n2S4v9shortest1+n2S4v9shortest2))) -> (n2S4pc'=33); +[] n2S4pc=31 -> (n2S4opt'=3)&(n2S4pc'=-4)&(n2S4ra'=32); +[] n2S4pc=32 -> (n2S4pc'=34); +[] n2S4pc=33 -> (n2S4opt'=4)&(n2S4pc'=-4)&(n2S4ra'=34); +[] n2S4pc=34 -> (n2S4pc'=35); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..4] init 0; n2S5ra:[-6..4] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S7f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S7f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S7f1] n2S5is=2 -> true; +[n2S4f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 & (n2S5ip0=1) -> (n2S5pc'=2); +[] n2S5pc=1 & !((n2S5ip0=1)) -> (n2S5pc'=4); +[] n2S5pc=2 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=3); +[] n2S5pc=3 -> (n2S5pc'=4); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:[INTMIN..INTMAX] init 0; +n2S0v6route2:[INTMIN..INTMAX] init 0; +n2S0v6route3:[INTMIN..INTMAX] init 0; +n2S0v9shortest1:[INTMIN..INTMAX] init 0; +n2S0v9shortest2:[INTMIN..INTMAX] init 0; +n2S0v9shortest3:[INTMIN..INTMAX] init 0; +n2S0v9nshortest:[INTMIN..INTMAX] init 0; +n2S0v5which:[INTMIN..INTMAX] init 0; +n2S0t0:[1..2]; +n2S0t1:[1..3]; +n2S0ip0:[1..4] init 1; +n2S0ip1:[1..4] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..4] init 1; +n2S0op1:[1..4] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..4] init 1; +n2S0pc:[-6..35] init 0; n2S0ra:[-6..35] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S3f4] n2S0is=0 -> (n2S0ip0'=4)&(n2S0is'=1); +[n2S3f4] n2S0is=1 -> (n2S0ip1'=4)&(n2S0is'=2); +[n2S3f4] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f4] n2S0pc=-5 & n2S0os>0 & n2S0op0=4 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=35); +[] n2S0pc=2 & ((v7COST_01+v7COST_12)+v7COST_23)>=INTMIN & ((v7COST_01+v7COST_12)+v7COST_23)<=INTMAX -> (n2S0v6route1'=((v7COST_01+v7COST_12)+v7COST_23))&(n2S0pc'=3); +[] n2S0pc=3 & v7COST_03>=INTMIN & v7COST_03<=INTMAX -> (n2S0v6route2'=v7COST_03)&(n2S0pc'=4); +[] n2S0pc=4 & (v7COST_02+v7COST_23)>=INTMIN & (v7COST_02+v7COST_23)<=INTMAX -> (n2S0v6route3'=(v7COST_02+v7COST_23))&(n2S0pc'=5); +[] n2S0pc=5 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest1'=0)&(n2S0pc'=6); +[] n2S0pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest2'=0)&(n2S0pc'=7); +[] n2S0pc=7 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest3'=0)&(n2S0pc'=8); +[] n2S0pc=8 & ((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=9); +[] n2S0pc=8 & !(((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=11); +[] n2S0pc=9 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest1'=1)&(n2S0pc'=10); +[] n2S0pc=10 -> (n2S0pc'=11); +[] n2S0pc=11 & ((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=12); +[] n2S0pc=11 & !(((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=14); +[] n2S0pc=12 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest2'=1)&(n2S0pc'=13); +[] n2S0pc=13 -> (n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2)) -> (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2))) -> (n2S0pc'=17); +[] n2S0pc=15 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest3'=1)&(n2S0pc'=16); +[] n2S0pc=16 -> (n2S0pc'=17); +[] n2S0pc=17 & ((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3)>=INTMIN & ((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3)<=INTMAX -> (n2S0v9nshortest'=((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3))&(n2S0pc'=18); +[] n2S0pc=18 & (n2S0v9nshortest=1) -> (n2S0pc'=19); +[] n2S0pc=18 & !((n2S0v9nshortest=1)) -> (n2S0pc'=21); +[] n2S0pc=19 & 1>=INTMIN & 1<=INTMAX -> (n2S0v5which'=1)&(n2S0pc'=20); +[] n2S0pc=20 -> (n2S0pc'=27); +[] n2S0pc=21 & (n2S0v9nshortest=2) -> (n2S0pc'=22); +[] n2S0pc=21 & !((n2S0v9nshortest=2)) -> (n2S0pc'=25); +[] n2S0pc=22 -> 0.5:(n2S0t0'=1)&(n2S0pc'=23) + 0.5:(n2S0t0'=2)&(n2S0pc'=23); +[] n2S0pc=23 & n2S0t0>=INTMIN & n2S0t0<=INTMAX -> (n2S0v5which'=n2S0t0)&(n2S0pc'=24); +[] n2S0pc=24 -> (n2S0pc'=27); +[] n2S0pc=25 -> 0.333333:(n2S0t1'=1)&(n2S0pc'=26) + 0.333333:(n2S0t1'=2)&(n2S0pc'=26) + 0.333333:(n2S0t1'=3)&(n2S0pc'=26); +[] n2S0pc=26 & n2S0t1>=INTMIN & n2S0t1<=INTMAX -> (n2S0v5which'=n2S0t1)&(n2S0pc'=27); +[] n2S0pc=27 & (n2S0v5which=n2S0v9shortest1) -> (n2S0pc'=28); +[] n2S0pc=27 & !((n2S0v5which=n2S0v9shortest1)) -> (n2S0pc'=30); +[] n2S0pc=28 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=29); +[] n2S0pc=29 -> (n2S0pc'=34); +[] n2S0pc=30 & (n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2)) -> (n2S0pc'=31); +[] n2S0pc=30 & !((n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2))) -> (n2S0pc'=33); +[] n2S0pc=31 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=32); +[] n2S0pc=32 -> (n2S0pc'=34); +[] n2S0pc=33 -> (n2S0opt'=4)&(n2S0pc'=-4)&(n2S0ra'=34); +[] n2S0pc=34 -> (n2S0pc'=35); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..4] init 0; n2S1ra:[-6..4] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=4); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S7f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S7f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S7f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..2] init 1; +n2S6ip1:[1..2] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..2] init 1; +n2S6op1:[1..2] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..2] init 1; +n2S6pc:[-6..4] init 0; n2S6ra:[-6..4] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S7f2] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2S7f2] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2S7f2] n2S6is=2 -> true; +[n2S4f3] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S4f3] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S4f3] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 & (n2S6ip0=1) -> (n2S6pc'=2); +[] n2S6pc=1 & !((n2S6ip0=1)) -> (n2S6pc'=4); +[] n2S6pc=2 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=3); +[] n2S6pc=3 -> (n2S6pc'=4); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..4] init 1; +n2S3ip1:[1..4] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..4] init 1; +n2S3op1:[1..4] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..4] init 1; +n2S3pc:[-6..4] init 0; n2S3ra:[-6..4] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S0f4] n2S3is=0 -> (n2S3ip0'=4)&(n2S3is'=1); +[n2S0f4] n2S3is=1 -> (n2S3ip1'=4)&(n2S3is'=2); +[n2S0f4] n2S3is=2 -> true; +[n2S4f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f4] n2S3pc=-5 & n2S3os>0 & n2S3op0=4 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 & (((n2S3ip0=1)|(n2S3ip0=2))|(n2S3ip0=4)) -> (n2S3pc'=2); +[] n2S3pc=1 & !((((n2S3ip0=1)|(n2S3ip0=2))|(n2S3ip0=4))) -> (n2S3pc'=4); +[] n2S3pc=2 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=3); +[] n2S3pc=3 -> (n2S3pc'=4); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..4] init 0; n2S2ra:[-6..4] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & (n2S2ip0=1) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2ip0=1)) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=4); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..4] init 1; +n2S7ip1:[1..4] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..4] init 1; +n2S7op1:[1..4] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..4] init 1; +n2S7pc:[-6..4] init 0; n2S7ra:[-6..4] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S4f4] n2S7is=0 -> (n2S7ip0'=4)&(n2S7is'=1); +[n2S4f4] n2S7is=1 -> (n2S7ip1'=4)&(n2S7is'=2); +[n2S4f4] n2S7is=2 -> true; +[n2H1f1] n2S7is=0 -> (n2S7ip0'=3)&(n2S7is'=1); +[n2H1f1] n2S7is=1 -> (n2S7ip1'=3)&(n2S7is'=2); +[n2H1f1] n2S7is=2 -> true; +[n2S6f2] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S6f2] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S6f2] n2S7is=2 -> true; +[n2S5f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S5f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S5f2] n2S7is=2 -> true; +[] unlk & numSteps0 -> (n2S7pc'=-5)&(unlk'=false); +[n2S7f4] n2S7pc=-5 & n2S7os>0 & n2S7op0=4 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f3] n2S7pc=-5 & n2S7os>0 & n2S7op0=3 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S7pc'=1)&(unlk'=false); +[] n2S7pc=1 & (((n2S7ip0=1)|(n2S7ip0=2))|(n2S7ip0=4)) -> (n2S7pc'=2); +[] n2S7pc=1 & !((((n2S7ip0=1)|(n2S7ip0=2))|(n2S7ip0=4))) -> (n2S7pc'=4); +[] n2S7pc=2 -> (n2S7opt'=3)&(n2S7pc'=-4)&(n2S7ra'=3); +[] n2S7pc=3 -> (n2S7pc'=4); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 10, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9; +NUM_PACKETS := 3, COST_01 := 1, COST_02 := 2, COST_03 := 3, COST_12 := 1, COST_23 := 1; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + Q_in.pushFront((Packet(),0)); + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + Q_in.popFront(); + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + route1: ℝ, route2: ℝ, route3: ℝ, shortest1: ℝ, shortest2: ℝ, shortest3: ℝ, nshortest: ℝ, which: ℝ; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + route1 = 0; + route2 = 0; + route3 = 0; + shortest1 = 0; + shortest2 = 0; + shortest3 = 0; + nshortest = 0; + which = 0; + } + def __run(){ + if (Q_in.data[0][1]==1){ + route1 = ((COST_01+COST_12)+COST_23); + route2 = COST_03; + route3 = (COST_02+COST_23); + shortest1 = 0; + shortest2 = 0; + shortest3 = 0; + if ((route1<=route2)&&(route2<=route3)){ + shortest1 = 1; + } + if ((route2<=route1)&&(route2<=route3)){ + shortest2 = 1; + } + if ((route3<=route1)&&(route3<=route2)){ + shortest3 = 1; + } + nshortest = ((shortest1+shortest2)+shortest3); + if (nshortest==1){ + which = 1; + } else { + if (nshortest==2){ + which = uniformInt(1,2); + } else { + which = uniformInt(1,3); + } + } + if (which==shortest1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } else { + if (which==(shortest1+shortest2)){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],4)); } + } + } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __s3_ty{ + Q_in: Queue, Q_out: Queue; + def __s3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (((Q_in.data[0][1]==1)||(Q_in.data[0][1]==2))||(Q_in.data[0][1]==4)){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s3_ty, __S4 : __s0_ty, __S5 : __s1_ty, __S6 : __s2_ty, __S7 : __s3_ty; + num_actions: ℝ; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s3_ty(), __S4 = __s0_ty(), __S5 = __s1_ty(), __S6 = __s2_ty(), __S7 = __s3_ty(); + num_actions = 0; + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else if i == 4 { __S2.Q_in } else if i == 5 { __S3.Q_in } else if i == 6 { __S4.Q_in } else if i == 7 { __S5.Q_in } else if i == 8 { __S6.Q_in } else { __S7.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else if i == 4 { __S2.Q_out } else if i == 5 { __S3.Q_out } else if i == 6 { __S4.Q_out } else if i == 7 { __S5.Q_out } else if i == 8 { __S6.Q_out } else { __S7.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + num_actions += 1; + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S7.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S3.Q_in.pushBack((pkt, 4)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S0.Q_in.pushBack((pkt, 4)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S6.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S7.Q_in.pushBack((pkt, 4)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 2)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S4.Q_in.pushBack((pkt, 4)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/keyur/congestion-10d.bayonet b/keyur/congestion-10d.bayonet new file mode 100644 index 0000000..0914c9f --- /dev/null +++ b/keyur/congestion-10d.bayonet @@ -0,0 +1,104 @@ +parameters{ NUM_PACKETS(3), COST_01(1), COST_02(2), COST_03(3), COST_12(1), COST_23(1) } + +queue_capacity 2; + +query probability(pkt_count@H1 < NUM_PACKETS); + +packet_fields{} + + +num_steps 54 ; +topology { + nodes { H0, H1, S0, S1, S2, S3, S4, S5, S6, S7 } + links { + (H0,pt1) <-> (S0,pt1), + + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S0,pt4) <-> (S3,pt4), + (S1,pt2) <-> (S3,pt1), + (S2,pt2) <-> (S3,pt2), + + (S3,pt3) <-> (S4,pt1), + + (S4,pt2) <-> (S5,pt1), + (S4,pt3) <-> (S6,pt1), + (S4,pt4) <-> (S7,pt4), + (S5,pt2) <-> (S7,pt1), + (S6,pt2) <-> (S7,pt2), + + (S7,pt3) <-> (H1,pt1) + } +} +programs { H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3, S4 -> s0, S5 -> s1, S6 -> s2, S7 -> s3 } + + +def h0(pkt, port) state pkt_count(0){ + new; + if pkt_count < NUM_PACKETS{ + pkt_count = pkt_count + 1; + fwd(1); + }else { drop; drop; } +} + +def h1(pkt, port) state pkt_count(0){ + pkt_count = pkt_count + 1; + drop; +} + +def s0(pkt, port) +state +route1(0), route2(0), route3(0), +shortest1(0), shortest2(0), shortest3(0), +nshortest(0), which(0) +{ + if port == 1{ + route1 = COST_01 + COST_12 + COST_23; + route2 = COST_03; + route3 = COST_02 + COST_23; + shortest1=0; shortest2=0; shortest3=0; + if (route1 <= route2 && route2 <= route3) { shortest1 = 1; } + if (route2 <= route1 && route2 <= route3) { shortest2 = 1; } + if (route3 <= route1 && route3 <= route2) { shortest3 = 1; } + nshortest = shortest1 + shortest2 + shortest3; + if (nshortest==1) { + which = 1; + } else if (nshortest==2) { + which = uniformInt(1,2); + } else { + which = uniformInt(1,3); + } + if which == shortest1 { fwd(2); } + else if which == shortest1+shortest2 { fwd(3); } + else { fwd(4); } + } +} + +def s1(pkt,port){ + if port == 1{ + fwd(2); + } +} +def s2(pkt,port){ + if port == 1{ + fwd(2); + } +} +def s3(pkt,port){ + if port == 1 || port == 2 || port == 4{ + fwd(3); + } +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/keyur/congestion-10d.prism b/keyur/congestion-10d.prism new file mode 100644 index 0000000..2ab7e62 --- /dev/null +++ b/keyur/congestion-10d.prism @@ -0,0 +1,527 @@ +dtmc +global unlk:[-1..19] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 54; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 20; +global numSkips:[0..20] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 1; +const int v7COST_02 = 2; +const int v7COST_03 = 3; +const int v7COST_12 = 1; +const int v7COST_23 = 1; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..8] init 0; n2H0ra:[-6..8] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk=10 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=3 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=4); +[] n2H0pc=4 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=8); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] n2H0pc=7 -> (n2H0pc'=-3)&(n2H0ra'=8); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4v6route1:[INTMIN..INTMAX] init 0; +n2S4v6route2:[INTMIN..INTMAX] init 0; +n2S4v6route3:[INTMIN..INTMAX] init 0; +n2S4v9shortest1:[INTMIN..INTMAX] init 0; +n2S4v9shortest2:[INTMIN..INTMAX] init 0; +n2S4v9shortest3:[INTMIN..INTMAX] init 0; +n2S4v9nshortest:[INTMIN..INTMAX] init 0; +n2S4v5which:[INTMIN..INTMAX] init 0; +n2S4t0:[1..2]; +n2S4t1:[1..3]; +n2S4ip0:[1..4] init 1; +n2S4ip1:[1..4] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..4] init 1; +n2S4op1:[1..4] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..4] init 1; +n2S4pc:[-6..35] init 0; n2S4ra:[-6..35] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S7f4] n2S4is=0 -> (n2S4ip0'=4)&(n2S4is'=1); +[n2S7f4] n2S4is=1 -> (n2S4ip1'=4)&(n2S4is'=2); +[n2S7f4] n2S4is=2 -> true; +[n2S6f1] n2S4is=0 -> (n2S4ip0'=3)&(n2S4is'=1); +[n2S6f1] n2S4is=1 -> (n2S4ip1'=3)&(n2S4is'=2); +[n2S6f1] n2S4is=2 -> true; +[n2S5f1] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S5f1] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S5f1] n2S4is=2 -> true; +[n2S3f3] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f3] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f3] n2S4is=2 -> true; +[] unlk=16 & numSteps0 -> (n2S4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[n2S4f4] n2S4pc=-5 & n2S4os>0 & n2S4op0=4 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f3] n2S4pc=-5 & n2S4os>0 & n2S4op0=3 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2S4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2S4pc=1 & (n2S4ip0=1) -> (n2S4pc'=2); +[] n2S4pc=1 & !((n2S4ip0=1)) -> (n2S4pc'=35); +[] n2S4pc=2 & ((v7COST_01+v7COST_12)+v7COST_23)>=INTMIN & ((v7COST_01+v7COST_12)+v7COST_23)<=INTMAX -> (n2S4v6route1'=((v7COST_01+v7COST_12)+v7COST_23))&(n2S4pc'=3); +[] n2S4pc=3 & v7COST_03>=INTMIN & v7COST_03<=INTMAX -> (n2S4v6route2'=v7COST_03)&(n2S4pc'=4); +[] n2S4pc=4 & (v7COST_02+v7COST_23)>=INTMIN & (v7COST_02+v7COST_23)<=INTMAX -> (n2S4v6route3'=(v7COST_02+v7COST_23))&(n2S4pc'=5); +[] n2S4pc=5 & 0>=INTMIN & 0<=INTMAX -> (n2S4v9shortest1'=0)&(n2S4pc'=6); +[] n2S4pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S4v9shortest2'=0)&(n2S4pc'=7); +[] n2S4pc=7 & 0>=INTMIN & 0<=INTMAX -> (n2S4v9shortest3'=0)&(n2S4pc'=8); +[] n2S4pc=8 & ((n2S4v6route1<=n2S4v6route2)&(n2S4v6route2<=n2S4v6route3)) -> (n2S4pc'=9); +[] n2S4pc=8 & !(((n2S4v6route1<=n2S4v6route2)&(n2S4v6route2<=n2S4v6route3))) -> (n2S4pc'=11); +[] n2S4pc=9 & 1>=INTMIN & 1<=INTMAX -> (n2S4v9shortest1'=1)&(n2S4pc'=10); +[] n2S4pc=10 -> (n2S4pc'=11); +[] n2S4pc=11 & ((n2S4v6route2<=n2S4v6route1)&(n2S4v6route2<=n2S4v6route3)) -> (n2S4pc'=12); +[] n2S4pc=11 & !(((n2S4v6route2<=n2S4v6route1)&(n2S4v6route2<=n2S4v6route3))) -> (n2S4pc'=14); +[] n2S4pc=12 & 1>=INTMIN & 1<=INTMAX -> (n2S4v9shortest2'=1)&(n2S4pc'=13); +[] n2S4pc=13 -> (n2S4pc'=14); +[] n2S4pc=14 & ((n2S4v6route3<=n2S4v6route1)&(n2S4v6route3<=n2S4v6route2)) -> (n2S4pc'=15); +[] n2S4pc=14 & !(((n2S4v6route3<=n2S4v6route1)&(n2S4v6route3<=n2S4v6route2))) -> (n2S4pc'=17); +[] n2S4pc=15 & 1>=INTMIN & 1<=INTMAX -> (n2S4v9shortest3'=1)&(n2S4pc'=16); +[] n2S4pc=16 -> (n2S4pc'=17); +[] n2S4pc=17 & ((n2S4v9shortest1+n2S4v9shortest2)+n2S4v9shortest3)>=INTMIN & ((n2S4v9shortest1+n2S4v9shortest2)+n2S4v9shortest3)<=INTMAX -> (n2S4v9nshortest'=((n2S4v9shortest1+n2S4v9shortest2)+n2S4v9shortest3))&(n2S4pc'=18); +[] n2S4pc=18 & (n2S4v9nshortest=1) -> (n2S4pc'=19); +[] n2S4pc=18 & !((n2S4v9nshortest=1)) -> (n2S4pc'=21); +[] n2S4pc=19 & 1>=INTMIN & 1<=INTMAX -> (n2S4v5which'=1)&(n2S4pc'=20); +[] n2S4pc=20 -> (n2S4pc'=27); +[] n2S4pc=21 & (n2S4v9nshortest=2) -> (n2S4pc'=22); +[] n2S4pc=21 & !((n2S4v9nshortest=2)) -> (n2S4pc'=25); +[] n2S4pc=22 -> 0.5:(n2S4t0'=1)&(n2S4pc'=23) + 0.5:(n2S4t0'=2)&(n2S4pc'=23); +[] n2S4pc=23 & n2S4t0>=INTMIN & n2S4t0<=INTMAX -> (n2S4v5which'=n2S4t0)&(n2S4pc'=24); +[] n2S4pc=24 -> (n2S4pc'=27); +[] n2S4pc=25 -> 0.333333:(n2S4t1'=1)&(n2S4pc'=26) + 0.333333:(n2S4t1'=2)&(n2S4pc'=26) + 0.333333:(n2S4t1'=3)&(n2S4pc'=26); +[] n2S4pc=26 & n2S4t1>=INTMIN & n2S4t1<=INTMAX -> (n2S4v5which'=n2S4t1)&(n2S4pc'=27); +[] n2S4pc=27 & (n2S4v5which=n2S4v9shortest1) -> (n2S4pc'=28); +[] n2S4pc=27 & !((n2S4v5which=n2S4v9shortest1)) -> (n2S4pc'=30); +[] n2S4pc=28 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=29); +[] n2S4pc=29 -> (n2S4pc'=34); +[] n2S4pc=30 & (n2S4v5which=(n2S4v9shortest1+n2S4v9shortest2)) -> (n2S4pc'=31); +[] n2S4pc=30 & !((n2S4v5which=(n2S4v9shortest1+n2S4v9shortest2))) -> (n2S4pc'=33); +[] n2S4pc=31 -> (n2S4opt'=3)&(n2S4pc'=-4)&(n2S4ra'=32); +[] n2S4pc=32 -> (n2S4pc'=34); +[] n2S4pc=33 -> (n2S4opt'=4)&(n2S4pc'=-4)&(n2S4ra'=34); +[] n2S4pc=34 -> (n2S4pc'=35); +[] numSteps (n2S4pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..4] init 0; n2S5ra:[-6..4] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S7f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S7f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S7f1] n2S5is=2 -> true; +[n2S4f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[] unlk=17 & numSteps0 -> (n2S5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=18)&(numSkips'=numSkips+1); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=18)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2S5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2S5pc=1 & (n2S5ip0=1) -> (n2S5pc'=2); +[] n2S5pc=1 & !((n2S5ip0=1)) -> (n2S5pc'=4); +[] n2S5pc=2 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=3); +[] n2S5pc=3 -> (n2S5pc'=4); +[] numSteps (n2S5pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:[INTMIN..INTMAX] init 0; +n2S0v6route2:[INTMIN..INTMAX] init 0; +n2S0v6route3:[INTMIN..INTMAX] init 0; +n2S0v9shortest1:[INTMIN..INTMAX] init 0; +n2S0v9shortest2:[INTMIN..INTMAX] init 0; +n2S0v9shortest3:[INTMIN..INTMAX] init 0; +n2S0v9nshortest:[INTMIN..INTMAX] init 0; +n2S0v5which:[INTMIN..INTMAX] init 0; +n2S0t0:[1..2]; +n2S0t1:[1..3]; +n2S0ip0:[1..4] init 1; +n2S0ip1:[1..4] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..4] init 1; +n2S0op1:[1..4] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..4] init 1; +n2S0pc:[-6..35] init 0; n2S0ra:[-6..35] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S3f4] n2S0is=0 -> (n2S0ip0'=4)&(n2S0is'=1); +[n2S3f4] n2S0is=1 -> (n2S0ip1'=4)&(n2S0is'=2); +[n2S3f4] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk=12 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[n2S0f4] n2S0pc=-5 & n2S0os>0 & n2S0op0=4 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=35); +[] n2S0pc=2 & ((v7COST_01+v7COST_12)+v7COST_23)>=INTMIN & ((v7COST_01+v7COST_12)+v7COST_23)<=INTMAX -> (n2S0v6route1'=((v7COST_01+v7COST_12)+v7COST_23))&(n2S0pc'=3); +[] n2S0pc=3 & v7COST_03>=INTMIN & v7COST_03<=INTMAX -> (n2S0v6route2'=v7COST_03)&(n2S0pc'=4); +[] n2S0pc=4 & (v7COST_02+v7COST_23)>=INTMIN & (v7COST_02+v7COST_23)<=INTMAX -> (n2S0v6route3'=(v7COST_02+v7COST_23))&(n2S0pc'=5); +[] n2S0pc=5 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest1'=0)&(n2S0pc'=6); +[] n2S0pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest2'=0)&(n2S0pc'=7); +[] n2S0pc=7 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest3'=0)&(n2S0pc'=8); +[] n2S0pc=8 & ((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=9); +[] n2S0pc=8 & !(((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=11); +[] n2S0pc=9 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest1'=1)&(n2S0pc'=10); +[] n2S0pc=10 -> (n2S0pc'=11); +[] n2S0pc=11 & ((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=12); +[] n2S0pc=11 & !(((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=14); +[] n2S0pc=12 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest2'=1)&(n2S0pc'=13); +[] n2S0pc=13 -> (n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2)) -> (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2))) -> (n2S0pc'=17); +[] n2S0pc=15 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest3'=1)&(n2S0pc'=16); +[] n2S0pc=16 -> (n2S0pc'=17); +[] n2S0pc=17 & ((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3)>=INTMIN & ((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3)<=INTMAX -> (n2S0v9nshortest'=((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3))&(n2S0pc'=18); +[] n2S0pc=18 & (n2S0v9nshortest=1) -> (n2S0pc'=19); +[] n2S0pc=18 & !((n2S0v9nshortest=1)) -> (n2S0pc'=21); +[] n2S0pc=19 & 1>=INTMIN & 1<=INTMAX -> (n2S0v5which'=1)&(n2S0pc'=20); +[] n2S0pc=20 -> (n2S0pc'=27); +[] n2S0pc=21 & (n2S0v9nshortest=2) -> (n2S0pc'=22); +[] n2S0pc=21 & !((n2S0v9nshortest=2)) -> (n2S0pc'=25); +[] n2S0pc=22 -> 0.5:(n2S0t0'=1)&(n2S0pc'=23) + 0.5:(n2S0t0'=2)&(n2S0pc'=23); +[] n2S0pc=23 & n2S0t0>=INTMIN & n2S0t0<=INTMAX -> (n2S0v5which'=n2S0t0)&(n2S0pc'=24); +[] n2S0pc=24 -> (n2S0pc'=27); +[] n2S0pc=25 -> 0.333333:(n2S0t1'=1)&(n2S0pc'=26) + 0.333333:(n2S0t1'=2)&(n2S0pc'=26) + 0.333333:(n2S0t1'=3)&(n2S0pc'=26); +[] n2S0pc=26 & n2S0t1>=INTMIN & n2S0t1<=INTMAX -> (n2S0v5which'=n2S0t1)&(n2S0pc'=27); +[] n2S0pc=27 & (n2S0v5which=n2S0v9shortest1) -> (n2S0pc'=28); +[] n2S0pc=27 & !((n2S0v5which=n2S0v9shortest1)) -> (n2S0pc'=30); +[] n2S0pc=28 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=29); +[] n2S0pc=29 -> (n2S0pc'=34); +[] n2S0pc=30 & (n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2)) -> (n2S0pc'=31); +[] n2S0pc=30 & !((n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2))) -> (n2S0pc'=33); +[] n2S0pc=31 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=32); +[] n2S0pc=32 -> (n2S0pc'=34); +[] n2S0pc=33 -> (n2S0opt'=4)&(n2S0pc'=-4)&(n2S0ra'=34); +[] n2S0pc=34 -> (n2S0pc'=35); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..4] init 0; n2S1ra:[-6..4] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=13 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=4); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S7f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S7f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S7f3] n2H1is=2 -> true; +[] unlk=11 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..2] init 1; +n2S6ip1:[1..2] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..2] init 1; +n2S6op1:[1..2] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..2] init 1; +n2S6pc:[-6..4] init 0; n2S6ra:[-6..4] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S7f2] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2S7f2] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2S7f2] n2S6is=2 -> true; +[n2S4f3] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S4f3] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S4f3] n2S6is=2 -> true; +[] unlk=18 & numSteps0 -> (n2S6pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=18 & numSteps (unlk'=19)&(numSkips'=numSkips+1); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=19)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2S6pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2S6pc=1 & (n2S6ip0=1) -> (n2S6pc'=2); +[] n2S6pc=1 & !((n2S6ip0=1)) -> (n2S6pc'=4); +[] n2S6pc=2 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=3); +[] n2S6pc=3 -> (n2S6pc'=4); +[] numSteps (n2S6pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..4] init 1; +n2S3ip1:[1..4] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..4] init 1; +n2S3op1:[1..4] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..4] init 1; +n2S3pc:[-6..4] init 0; n2S3ra:[-6..4] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S0f4] n2S3is=0 -> (n2S3ip0'=4)&(n2S3is'=1); +[n2S0f4] n2S3is=1 -> (n2S3ip1'=4)&(n2S3is'=2); +[n2S0f4] n2S3is=2 -> true; +[n2S4f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[] unlk=15 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[n2S3f4] n2S3pc=-5 & n2S3os>0 & n2S3op0=4 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 & (((n2S3ip0=1)|(n2S3ip0=2))|(n2S3ip0=4)) -> (n2S3pc'=2); +[] n2S3pc=1 & !((((n2S3ip0=1)|(n2S3ip0=2))|(n2S3ip0=4))) -> (n2S3pc'=4); +[] n2S3pc=2 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=3); +[] n2S3pc=3 -> (n2S3pc'=4); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..4] init 0; n2S2ra:[-6..4] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk=14 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 & (n2S2ip0=1) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2ip0=1)) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=4); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..4] init 1; +n2S7ip1:[1..4] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..4] init 1; +n2S7op1:[1..4] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..4] init 1; +n2S7pc:[-6..4] init 0; n2S7ra:[-6..4] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S4f4] n2S7is=0 -> (n2S7ip0'=4)&(n2S7is'=1); +[n2S4f4] n2S7is=1 -> (n2S7ip1'=4)&(n2S7is'=2); +[n2S4f4] n2S7is=2 -> true; +[n2H1f1] n2S7is=0 -> (n2S7ip0'=3)&(n2S7is'=1); +[n2H1f1] n2S7is=1 -> (n2S7ip1'=3)&(n2S7is'=2); +[n2H1f1] n2S7is=2 -> true; +[n2S6f2] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S6f2] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S6f2] n2S7is=2 -> true; +[n2S5f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S5f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S5f2] n2S7is=2 -> true; +[] unlk=19 & numSteps0 -> (n2S7pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=19 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S7f4] n2S7pc=-5 & n2S7os>0 & n2S7op0=4 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f3] n2S7pc=-5 & n2S7os>0 & n2S7op0=3 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=9 & numSteps0 -> (n2S7pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[] n2S7pc=1 & (((n2S7ip0=1)|(n2S7ip0=2))|(n2S7ip0=4)) -> (n2S7pc'=2); +[] n2S7pc=1 & !((((n2S7ip0=1)|(n2S7ip0=2))|(n2S7ip0=4))) -> (n2S7pc'=4); +[] n2S7pc=2 -> (n2S7opt'=3)&(n2S7pc'=-4)&(n2S7ra'=3); +[] n2S7pc=3 -> (n2S7pc'=4); +[] numSteps (n2S7pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 10, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9; +NUM_PACKETS := 3, COST_01 := 1, COST_02 := 2, COST_03 := 3, COST_12 := 1, COST_23 := 1; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + Q_in.pushFront((Packet(),0)); + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + Q_in.popFront(); + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + route1: ℝ, route2: ℝ, route3: ℝ, shortest1: ℝ, shortest2: ℝ, shortest3: ℝ, nshortest: ℝ, which: ℝ; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + route1 = 0; + route2 = 0; + route3 = 0; + shortest1 = 0; + shortest2 = 0; + shortest3 = 0; + nshortest = 0; + which = 0; + } + def __run(){ + if (Q_in.data[0][1]==1){ + route1 = ((COST_01+COST_12)+COST_23); + route2 = COST_03; + route3 = (COST_02+COST_23); + shortest1 = 0; + shortest2 = 0; + shortest3 = 0; + if ((route1<=route2)&&(route2<=route3)){ + shortest1 = 1; + } + if ((route2<=route1)&&(route2<=route3)){ + shortest2 = 1; + } + if ((route3<=route1)&&(route3<=route2)){ + shortest3 = 1; + } + nshortest = ((shortest1+shortest2)+shortest3); + if (nshortest==1){ + which = 1; + } else { + if (nshortest==2){ + which = uniformInt(1,2); + } else { + which = uniformInt(1,3); + } + } + if (which==shortest1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } else { + if (which==(shortest1+shortest2)){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],4)); } + } + } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __s3_ty{ + Q_in: Queue, Q_out: Queue; + def __s3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (((Q_in.data[0][1]==1)||(Q_in.data[0][1]==2))||(Q_in.data[0][1]==4)){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s3_ty, __S4 : __s0_ty, __S5 : __s1_ty, __S6 : __s2_ty, __S7 : __s3_ty; + next: ℝ; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s3_ty(), __S4 = __s0_ty(), __S5 = __s1_ty(), __S6 = __s2_ty(), __S7 = __s3_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else if current == 5 { __S3.Q_in } else if current == 6 { __S4.Q_in } else if current == 7 { __S5.Q_in } else if current == 8 { __S6.Q_in } else { __S7.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else if (current - k) == 5 { __S3.Q_out } else if (current - k) == 6 { __S4.Q_out } else if (current - k) == 7 { __S5.Q_out } else if (current - k) == 8 { __S6.Q_out } else { __S7.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S7.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S3.Q_in.pushBack((pkt, 4)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S0.Q_in.pushBack((pkt, 4)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S6.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S7.Q_in.pushBack((pkt, 4)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 2)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S4.Q_in.pushBack((pkt, 4)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/keyur/congestion-10n.prism b/keyur/congestion-10n.prism new file mode 100644 index 0000000..164d5db --- /dev/null +++ b/keyur/congestion-10n.prism @@ -0,0 +1,505 @@ +mdp +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 54; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 1; +const int v7COST_02 = 2; +const int v7COST_03 = 3; +const int v7COST_12 = 1; +const int v7COST_23 = 1; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..8] init 0; n2H0ra:[-6..8] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=3 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=4); +[] n2H0pc=4 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=8); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] n2H0pc=7 -> (n2H0pc'=-3)&(n2H0ra'=8); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4v6route1:[INTMIN..INTMAX] init 0; +n2S4v6route2:[INTMIN..INTMAX] init 0; +n2S4v6route3:[INTMIN..INTMAX] init 0; +n2S4v9shortest1:[INTMIN..INTMAX] init 0; +n2S4v9shortest2:[INTMIN..INTMAX] init 0; +n2S4v9shortest3:[INTMIN..INTMAX] init 0; +n2S4v9nshortest:[INTMIN..INTMAX] init 0; +n2S4v5which:[INTMIN..INTMAX] init 0; +n2S4t0:[1..2]; +n2S4t1:[1..3]; +n2S4ip0:[1..4] init 1; +n2S4ip1:[1..4] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..4] init 1; +n2S4op1:[1..4] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..4] init 1; +n2S4pc:[-6..35] init 0; n2S4ra:[-6..35] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S7f4] n2S4is=0 -> (n2S4ip0'=4)&(n2S4is'=1); +[n2S7f4] n2S4is=1 -> (n2S4ip1'=4)&(n2S4is'=2); +[n2S7f4] n2S4is=2 -> true; +[n2S6f1] n2S4is=0 -> (n2S4ip0'=3)&(n2S4is'=1); +[n2S6f1] n2S4is=1 -> (n2S4ip1'=3)&(n2S4is'=2); +[n2S6f1] n2S4is=2 -> true; +[n2S5f1] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S5f1] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S5f1] n2S4is=2 -> true; +[n2S3f3] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f3] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f3] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f4] n2S4pc=-5 & n2S4os>0 & n2S4op0=4 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f3] n2S4pc=-5 & n2S4os>0 & n2S4op0=3 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 & (n2S4ip0=1) -> (n2S4pc'=2); +[] n2S4pc=1 & !((n2S4ip0=1)) -> (n2S4pc'=35); +[] n2S4pc=2 & ((v7COST_01+v7COST_12)+v7COST_23)>=INTMIN & ((v7COST_01+v7COST_12)+v7COST_23)<=INTMAX -> (n2S4v6route1'=((v7COST_01+v7COST_12)+v7COST_23))&(n2S4pc'=3); +[] n2S4pc=3 & v7COST_03>=INTMIN & v7COST_03<=INTMAX -> (n2S4v6route2'=v7COST_03)&(n2S4pc'=4); +[] n2S4pc=4 & (v7COST_02+v7COST_23)>=INTMIN & (v7COST_02+v7COST_23)<=INTMAX -> (n2S4v6route3'=(v7COST_02+v7COST_23))&(n2S4pc'=5); +[] n2S4pc=5 & 0>=INTMIN & 0<=INTMAX -> (n2S4v9shortest1'=0)&(n2S4pc'=6); +[] n2S4pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S4v9shortest2'=0)&(n2S4pc'=7); +[] n2S4pc=7 & 0>=INTMIN & 0<=INTMAX -> (n2S4v9shortest3'=0)&(n2S4pc'=8); +[] n2S4pc=8 & ((n2S4v6route1<=n2S4v6route2)&(n2S4v6route2<=n2S4v6route3)) -> (n2S4pc'=9); +[] n2S4pc=8 & !(((n2S4v6route1<=n2S4v6route2)&(n2S4v6route2<=n2S4v6route3))) -> (n2S4pc'=11); +[] n2S4pc=9 & 1>=INTMIN & 1<=INTMAX -> (n2S4v9shortest1'=1)&(n2S4pc'=10); +[] n2S4pc=10 -> (n2S4pc'=11); +[] n2S4pc=11 & ((n2S4v6route2<=n2S4v6route1)&(n2S4v6route2<=n2S4v6route3)) -> (n2S4pc'=12); +[] n2S4pc=11 & !(((n2S4v6route2<=n2S4v6route1)&(n2S4v6route2<=n2S4v6route3))) -> (n2S4pc'=14); +[] n2S4pc=12 & 1>=INTMIN & 1<=INTMAX -> (n2S4v9shortest2'=1)&(n2S4pc'=13); +[] n2S4pc=13 -> (n2S4pc'=14); +[] n2S4pc=14 & ((n2S4v6route3<=n2S4v6route1)&(n2S4v6route3<=n2S4v6route2)) -> (n2S4pc'=15); +[] n2S4pc=14 & !(((n2S4v6route3<=n2S4v6route1)&(n2S4v6route3<=n2S4v6route2))) -> (n2S4pc'=17); +[] n2S4pc=15 & 1>=INTMIN & 1<=INTMAX -> (n2S4v9shortest3'=1)&(n2S4pc'=16); +[] n2S4pc=16 -> (n2S4pc'=17); +[] n2S4pc=17 & ((n2S4v9shortest1+n2S4v9shortest2)+n2S4v9shortest3)>=INTMIN & ((n2S4v9shortest1+n2S4v9shortest2)+n2S4v9shortest3)<=INTMAX -> (n2S4v9nshortest'=((n2S4v9shortest1+n2S4v9shortest2)+n2S4v9shortest3))&(n2S4pc'=18); +[] n2S4pc=18 & (n2S4v9nshortest=1) -> (n2S4pc'=19); +[] n2S4pc=18 & !((n2S4v9nshortest=1)) -> (n2S4pc'=21); +[] n2S4pc=19 & 1>=INTMIN & 1<=INTMAX -> (n2S4v5which'=1)&(n2S4pc'=20); +[] n2S4pc=20 -> (n2S4pc'=27); +[] n2S4pc=21 & (n2S4v9nshortest=2) -> (n2S4pc'=22); +[] n2S4pc=21 & !((n2S4v9nshortest=2)) -> (n2S4pc'=25); +[] n2S4pc=22 -> 0.5:(n2S4t0'=1)&(n2S4pc'=23) + 0.5:(n2S4t0'=2)&(n2S4pc'=23); +[] n2S4pc=23 & n2S4t0>=INTMIN & n2S4t0<=INTMAX -> (n2S4v5which'=n2S4t0)&(n2S4pc'=24); +[] n2S4pc=24 -> (n2S4pc'=27); +[] n2S4pc=25 -> 0.333333:(n2S4t1'=1)&(n2S4pc'=26) + 0.333333:(n2S4t1'=2)&(n2S4pc'=26) + 0.333333:(n2S4t1'=3)&(n2S4pc'=26); +[] n2S4pc=26 & n2S4t1>=INTMIN & n2S4t1<=INTMAX -> (n2S4v5which'=n2S4t1)&(n2S4pc'=27); +[] n2S4pc=27 & (n2S4v5which=n2S4v9shortest1) -> (n2S4pc'=28); +[] n2S4pc=27 & !((n2S4v5which=n2S4v9shortest1)) -> (n2S4pc'=30); +[] n2S4pc=28 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=29); +[] n2S4pc=29 -> (n2S4pc'=34); +[] n2S4pc=30 & (n2S4v5which=(n2S4v9shortest1+n2S4v9shortest2)) -> (n2S4pc'=31); +[] n2S4pc=30 & !((n2S4v5which=(n2S4v9shortest1+n2S4v9shortest2))) -> (n2S4pc'=33); +[] n2S4pc=31 -> (n2S4opt'=3)&(n2S4pc'=-4)&(n2S4ra'=32); +[] n2S4pc=32 -> (n2S4pc'=34); +[] n2S4pc=33 -> (n2S4opt'=4)&(n2S4pc'=-4)&(n2S4ra'=34); +[] n2S4pc=34 -> (n2S4pc'=35); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..4] init 0; n2S5ra:[-6..4] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S7f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S7f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S7f1] n2S5is=2 -> true; +[n2S4f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 & (n2S5ip0=1) -> (n2S5pc'=2); +[] n2S5pc=1 & !((n2S5ip0=1)) -> (n2S5pc'=4); +[] n2S5pc=2 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=3); +[] n2S5pc=3 -> (n2S5pc'=4); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:[INTMIN..INTMAX] init 0; +n2S0v6route2:[INTMIN..INTMAX] init 0; +n2S0v6route3:[INTMIN..INTMAX] init 0; +n2S0v9shortest1:[INTMIN..INTMAX] init 0; +n2S0v9shortest2:[INTMIN..INTMAX] init 0; +n2S0v9shortest3:[INTMIN..INTMAX] init 0; +n2S0v9nshortest:[INTMIN..INTMAX] init 0; +n2S0v5which:[INTMIN..INTMAX] init 0; +n2S0t0:[1..2]; +n2S0t1:[1..3]; +n2S0ip0:[1..4] init 1; +n2S0ip1:[1..4] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..4] init 1; +n2S0op1:[1..4] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..4] init 1; +n2S0pc:[-6..35] init 0; n2S0ra:[-6..35] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S3f4] n2S0is=0 -> (n2S0ip0'=4)&(n2S0is'=1); +[n2S3f4] n2S0is=1 -> (n2S0ip1'=4)&(n2S0is'=2); +[n2S3f4] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f4] n2S0pc=-5 & n2S0os>0 & n2S0op0=4 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=35); +[] n2S0pc=2 & ((v7COST_01+v7COST_12)+v7COST_23)>=INTMIN & ((v7COST_01+v7COST_12)+v7COST_23)<=INTMAX -> (n2S0v6route1'=((v7COST_01+v7COST_12)+v7COST_23))&(n2S0pc'=3); +[] n2S0pc=3 & v7COST_03>=INTMIN & v7COST_03<=INTMAX -> (n2S0v6route2'=v7COST_03)&(n2S0pc'=4); +[] n2S0pc=4 & (v7COST_02+v7COST_23)>=INTMIN & (v7COST_02+v7COST_23)<=INTMAX -> (n2S0v6route3'=(v7COST_02+v7COST_23))&(n2S0pc'=5); +[] n2S0pc=5 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest1'=0)&(n2S0pc'=6); +[] n2S0pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest2'=0)&(n2S0pc'=7); +[] n2S0pc=7 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest3'=0)&(n2S0pc'=8); +[] n2S0pc=8 & ((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=9); +[] n2S0pc=8 & !(((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=11); +[] n2S0pc=9 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest1'=1)&(n2S0pc'=10); +[] n2S0pc=10 -> (n2S0pc'=11); +[] n2S0pc=11 & ((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=12); +[] n2S0pc=11 & !(((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=14); +[] n2S0pc=12 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest2'=1)&(n2S0pc'=13); +[] n2S0pc=13 -> (n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2)) -> (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2))) -> (n2S0pc'=17); +[] n2S0pc=15 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest3'=1)&(n2S0pc'=16); +[] n2S0pc=16 -> (n2S0pc'=17); +[] n2S0pc=17 & ((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3)>=INTMIN & ((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3)<=INTMAX -> (n2S0v9nshortest'=((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3))&(n2S0pc'=18); +[] n2S0pc=18 & (n2S0v9nshortest=1) -> (n2S0pc'=19); +[] n2S0pc=18 & !((n2S0v9nshortest=1)) -> (n2S0pc'=21); +[] n2S0pc=19 & 1>=INTMIN & 1<=INTMAX -> (n2S0v5which'=1)&(n2S0pc'=20); +[] n2S0pc=20 -> (n2S0pc'=27); +[] n2S0pc=21 & (n2S0v9nshortest=2) -> (n2S0pc'=22); +[] n2S0pc=21 & !((n2S0v9nshortest=2)) -> (n2S0pc'=25); +[] n2S0pc=22 -> 0.5:(n2S0t0'=1)&(n2S0pc'=23) + 0.5:(n2S0t0'=2)&(n2S0pc'=23); +[] n2S0pc=23 & n2S0t0>=INTMIN & n2S0t0<=INTMAX -> (n2S0v5which'=n2S0t0)&(n2S0pc'=24); +[] n2S0pc=24 -> (n2S0pc'=27); +[] n2S0pc=25 -> 0.333333:(n2S0t1'=1)&(n2S0pc'=26) + 0.333333:(n2S0t1'=2)&(n2S0pc'=26) + 0.333333:(n2S0t1'=3)&(n2S0pc'=26); +[] n2S0pc=26 & n2S0t1>=INTMIN & n2S0t1<=INTMAX -> (n2S0v5which'=n2S0t1)&(n2S0pc'=27); +[] n2S0pc=27 & (n2S0v5which=n2S0v9shortest1) -> (n2S0pc'=28); +[] n2S0pc=27 & !((n2S0v5which=n2S0v9shortest1)) -> (n2S0pc'=30); +[] n2S0pc=28 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=29); +[] n2S0pc=29 -> (n2S0pc'=34); +[] n2S0pc=30 & (n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2)) -> (n2S0pc'=31); +[] n2S0pc=30 & !((n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2))) -> (n2S0pc'=33); +[] n2S0pc=31 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=32); +[] n2S0pc=32 -> (n2S0pc'=34); +[] n2S0pc=33 -> (n2S0opt'=4)&(n2S0pc'=-4)&(n2S0ra'=34); +[] n2S0pc=34 -> (n2S0pc'=35); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..4] init 0; n2S1ra:[-6..4] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=4); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S7f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S7f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S7f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..2] init 1; +n2S6ip1:[1..2] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..2] init 1; +n2S6op1:[1..2] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..2] init 1; +n2S6pc:[-6..4] init 0; n2S6ra:[-6..4] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S7f2] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2S7f2] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2S7f2] n2S6is=2 -> true; +[n2S4f3] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S4f3] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S4f3] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 & (n2S6ip0=1) -> (n2S6pc'=2); +[] n2S6pc=1 & !((n2S6ip0=1)) -> (n2S6pc'=4); +[] n2S6pc=2 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=3); +[] n2S6pc=3 -> (n2S6pc'=4); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..4] init 1; +n2S3ip1:[1..4] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..4] init 1; +n2S3op1:[1..4] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..4] init 1; +n2S3pc:[-6..4] init 0; n2S3ra:[-6..4] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S0f4] n2S3is=0 -> (n2S3ip0'=4)&(n2S3is'=1); +[n2S0f4] n2S3is=1 -> (n2S3ip1'=4)&(n2S3is'=2); +[n2S0f4] n2S3is=2 -> true; +[n2S4f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f4] n2S3pc=-5 & n2S3os>0 & n2S3op0=4 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 & (((n2S3ip0=1)|(n2S3ip0=2))|(n2S3ip0=4)) -> (n2S3pc'=2); +[] n2S3pc=1 & !((((n2S3ip0=1)|(n2S3ip0=2))|(n2S3ip0=4))) -> (n2S3pc'=4); +[] n2S3pc=2 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=3); +[] n2S3pc=3 -> (n2S3pc'=4); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..4] init 0; n2S2ra:[-6..4] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & (n2S2ip0=1) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2ip0=1)) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=4); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..4] init 1; +n2S7ip1:[1..4] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..4] init 1; +n2S7op1:[1..4] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..4] init 1; +n2S7pc:[-6..4] init 0; n2S7ra:[-6..4] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S4f4] n2S7is=0 -> (n2S7ip0'=4)&(n2S7is'=1); +[n2S4f4] n2S7is=1 -> (n2S7ip1'=4)&(n2S7is'=2); +[n2S4f4] n2S7is=2 -> true; +[n2H1f1] n2S7is=0 -> (n2S7ip0'=3)&(n2S7is'=1); +[n2H1f1] n2S7is=1 -> (n2S7ip1'=3)&(n2S7is'=2); +[n2H1f1] n2S7is=2 -> true; +[n2S6f2] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S6f2] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S6f2] n2S7is=2 -> true; +[n2S5f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S5f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S5f2] n2S7is=2 -> true; +[] unlk & numSteps0 -> (n2S7pc'=-5)&(unlk'=false); +[n2S7f4] n2S7pc=-5 & n2S7os>0 & n2S7op0=4 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f3] n2S7pc=-5 & n2S7os>0 & n2S7op0=3 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S7pc'=1)&(unlk'=false); +[] n2S7pc=1 & (((n2S7ip0=1)|(n2S7ip0=2))|(n2S7ip0=4)) -> (n2S7pc'=2); +[] n2S7pc=1 & !((((n2S7ip0=1)|(n2S7ip0=2))|(n2S7ip0=4))) -> (n2S7pc'=4); +[] n2S7pc=2 -> (n2S7opt'=3)&(n2S7pc'=-4)&(n2S7ra'=3); +[] n2S7pc=3 -> (n2S7pc'=4); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count (S0,pt1), + + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (S3,pt1), + (S2,pt2) <-> (S3,pt2), + + (S3,pt3) <-> (S4,pt1), + + (S4,pt2) <-> (S5,pt1), + (S4,pt3) <-> (S6,pt1), + (S5,pt2) <-> (S7,pt1), + (S6,pt2) <-> (S7,pt2), + + (S7,pt3) <-> (S8,pt1), + + (S8,pt2) <-> (S9,pt1), + (S8,pt3) <-> (S10,pt1), + (S9,pt2) <-> (S11,pt1), + (S10,pt2) <-> (S11,pt2), + + (S11,pt3) <-> (S12,pt1), + + (S12,pt2) <-> (S13,pt1), + (S12,pt3) <-> (S14,pt1), + (S13,pt2) <-> (S15,pt1), + (S14,pt2) <-> (S15,pt2), + + (S15,pt3) <-> (S16,pt1), + + (S16,pt2) <-> (S17,pt1), + (S16,pt3) <-> (S18,pt1), + (S17,pt2) <-> (S19,pt1), + (S18,pt2) <-> (S19,pt2), + + (S19,pt3) <-> (S20,pt1), + + (S20,pt2) <-> (S21,pt1), + (S20,pt3) <-> (S22,pt1), + (S21,pt2) <-> (S23,pt1), + (S22,pt2) <-> (S23,pt2), + + (S23,pt3) <-> (S24,pt1), + + (S24,pt2) <-> (S25,pt1), + (S24,pt3) <-> (S26,pt1), + (S25,pt2) <-> (S27,pt1), + (S26,pt2) <-> (S27,pt2), + + (S27,pt3) <-> (H1,pt1) + } +} +programs { H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3, S4 -> s0, S5 -> s1, S6 -> s2, S7 -> s3, S8 -> s0, S9 -> s1, S10 -> s2, S11 -> s3, S12 -> s0, S13 -> s1, S14 -> s2, S15 -> s3, S16 -> s0, S17 -> s1, S18 -> s2, S19 -> s3, S20 -> s0, S21 -> s1, S22 -> s2, S23 -> s3, S24 -> s0, S25 -> s1, S26 -> s2, S27 -> s3 } + + +def h0(pkt, port) state pkt_count(0) { + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +def h1(pkt, port) state pkt_count(0) { pkt_count = pkt_count + 1; drop; } + + +def s0(pkt, port) { fwd(uniformInt(2,3)); } + +def s1(pkt, port) { fwd(2); } + +def s2(pkt, port) { fwd(2); } + +def s3(pkt, port) { fwd(3); } + +def scheduler() state next(0) { + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/keyur/congestion-30d.bayonet.old b/keyur/congestion-30d.bayonet.old new file mode 100644 index 0000000..03a64e4 --- /dev/null +++ b/keyur/congestion-30d.bayonet.old @@ -0,0 +1,155 @@ + +parameters{ NUM_PACKETS(3), COST_01(1), COST_02(2), COST_03(3), COST_12(1), COST_23(1) } + +num_steps 200; + +queue_capacity 2; + +query probability(pkt_count@H1 < NUM_PACKETS); + + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5, S6, S7, + S8, S9, S10, S11, S12, S13, S14, S15, + S16, S17, S18, S19, S20, S21, S22, S23, + S24, S25, S26, S27 } + + links{ + (H0,pt1) <-> (S0,pt1), + + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (S3,pt1), + (S2,pt2) <-> (S3,pt2), + + (S3,pt3) <-> (S4,pt1), + + (S4,pt2) <-> (S5,pt1), + (S4,pt3) <-> (S6,pt1), + (S5,pt2) <-> (S7,pt1), + (S6,pt2) <-> (S7,pt2), + + (S7,pt3) <-> (S8,pt1), + + (S8,pt2) <-> (S9,pt1), + (S8,pt3) <-> (S10,pt1), + (S9,pt2) <-> (S11,pt1), + (S10,pt2) <-> (S11,pt2), + + (S11,pt3) <-> (S12,pt1), + + (S12,pt2) <-> (S13,pt1), + (S12,pt3) <-> (S14,pt1), + (S13,pt2) <-> (S15,pt1), + (S14,pt2) <-> (S15,pt2), + + + (S15,pt3) <-> (S16,pt1), + + (S16,pt2) <-> (S17,pt1), + (S16,pt3) <-> (S18,pt1), + (S17,pt2) <-> (S19,pt1), + (S18,pt2) <-> (S19,pt2), + + (S19,pt3) <-> (S20,pt1), + + (S20,pt2) <-> (S21,pt1), + (S20,pt3) <-> (S22,pt1), + (S21,pt2) <-> (S23,pt1), + (S22,pt2) <-> (S23,pt2), + + (S23,pt3) <-> (S24,pt1), + + (S24,pt2) <-> (S25,pt1), + (S24,pt3) <-> (S26,pt1), + (S25,pt2) <-> (S27,pt1), + (S26,pt2) <-> (S27,pt2), + + (S27,pt3) <-> (H1,pt1) + } +} + +programs{ H0 -> h0, H1 -> h1, + S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3, + S4 -> s0, S5 -> s1, S6 -> s2, S7 -> s3, + S8 -> s0, S9 -> s1, S10 -> s2, S11 -> s3, + S12 -> s0, S13 -> s1, S14 -> s2, S15 -> s3, + S16 -> s0, S17 -> s1, S18 -> s2, S19 -> s3, + S20 -> s0, S21 -> s1, S22 -> s2, S23 -> s3, + S24 -> s0, S25 -> s1, S26 -> s2, S27 -> s3 +} + + + +packet_fields{} + +def h0(pkt, port) state pkt_count(0){ + new; + if pkt_count < NUM_PACKETS{ + new; + pkt_count = pkt_count + 1; + fwd(1); + }else { drop; drop; } +} + +def h1(pkt, port) state pkt_count(0){ + pkt_count = pkt_count + 1; + drop; +} + +def s0(pkt, port) +state +route1(0), route2(0), route3(0), +shortest1(0), shortest2(0), shortest3(0), +nshortest(0), which(0) +{ + if port == 1{ + route1 = COST_01 + COST_12 + COST_23; + route2 = COST_03; + route3 = COST_02 + COST_23; + shortest1=0; shortest2=0; shortest3=0; + if (route1 <= route2 && route2 <= route3) { shortest1 = 1; } + if (route2 <= route1 && route2 <= route3) { shortest2 = 1; } + if (route3 <= route1 && route3 <= route2) { shortest3 = 1; } + nshortest = shortest1 + shortest2 + shortest3; + if (nshortest==1) { + which = 1; + } else if (nshortest==2) { + which = uniformInt(1,2); + } else { + which = uniformInt(1,3); + } + if which == shortest1 { fwd(2); } + else if which == shortest1+shortest2 { fwd(3); } + else { fwd(4); } + } +} + +def s1(pkt,port){ + if port == 1{ + fwd(2); + } +} +def s2(pkt,port){ + if port == 1 || port == 2{ + fwd(3); + } +} +def s3(pkt,port){ + if port == 1 || port == 2{ + fwd(3); + } +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/keyur/congestion-30d.prism b/keyur/congestion-30d.prism new file mode 100644 index 0000000..4eda4e8 --- /dev/null +++ b/keyur/congestion-30d.prism @@ -0,0 +1,1139 @@ +dtmc +global unlk:[-1..59] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 144; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 60; +global numSkips:[0..60] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk=30 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=30 & numSteps (unlk'=31)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=31)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n3S24 +n3S24t0:[2..3]; +n3S24ip0:[1..3] init 1; +n3S24ip1:[1..3] init 1; +n3S24is:[0..2] init 0; +n3S24op0:[1..3] init 1; +n3S24op1:[1..3] init 1; +n3S24os:[0..2] init 0; +n3S24opt:[1..3] init 1; +n3S24pc:[-6..3] init 0; n3S24ra:[-6..3] init 0; +[] n3S24is<2 & n3S24pc=-1 -> (n3S24ip0'=1)&(n3S24ip1'=n3S24ip0)&(n3S24is'=n3S24is+1)&(n3S24pc'=n3S24ra); +[] n3S24is=2 & n3S24pc=-1 -> (n3S24pc'=n3S24ra); +[] n3S24is=0 & n3S24pc=-2 -> (n3S24pc'=n3S24ra); +[] n3S24is>0 & n3S24is<2 & n3S24pc=-2 -> (n3S24ip1'=n3S24ip0)&(n3S24is'=n3S24is+1)&(n3S24pc'=n3S24ra); +[] n3S24is=2 & n3S24pc=-2 -> (n3S24pc'=n3S24ra); +[] n3S24is=0 & n3S24pc=-3 -> (n3S24pc'=n3S24ra); +[] n3S24is>0 & n3S24pc=-3 -> (n3S24ip0'=n3S24ip1)&(n3S24is'=n3S24is-1)&(n3S24pc'=n3S24ra); +[] n3S24os=0 & n3S24pc=-4 -> (n3S24op0'=n3S24opt)&(n3S24os'=1)&(n3S24pc'=-3); +[] n3S24os=1 & n3S24pc=-4 -> (n3S24op1'=n3S24opt)&(n3S24os'=2)&(n3S24pc'=-3); +[] n3S24os=2 & n3S24pc=-4 -> (n3S24pc'=-3); +[n3S26f1] n3S24is=0 -> (n3S24ip0'=3)&(n3S24is'=1); +[n3S26f1] n3S24is=1 -> (n3S24ip1'=3)&(n3S24is'=2); +[n3S26f1] n3S24is=2 -> true; +[n3S25f1] n3S24is=0 -> (n3S24ip0'=2)&(n3S24is'=1); +[n3S25f1] n3S24is=1 -> (n3S24ip1'=2)&(n3S24is'=2); +[n3S25f1] n3S24is=2 -> true; +[n3S23f3] n3S24is=0 -> (n3S24ip0'=1)&(n3S24is'=1); +[n3S23f3] n3S24is=1 -> (n3S24ip1'=1)&(n3S24is'=2); +[n3S23f3] n3S24is=2 -> true; +[] unlk=56 & numSteps0 -> (n3S24pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=56 & numSteps (unlk'=57)&(numSkips'=numSkips+1); +[n3S24f3] n3S24pc=-5 & n3S24os>0 & n3S24op0=3 -> (n3S24op0'=n3S24op1)&(n3S24os'=n3S24os-1)&(n3S24pc'=-6); +[n3S24f2] n3S24pc=-5 & n3S24os>0 & n3S24op0=2 -> (n3S24op0'=n3S24op1)&(n3S24os'=n3S24os-1)&(n3S24pc'=-6); +[n3S24f1] n3S24pc=-5 & n3S24os>0 & n3S24op0=1 -> (n3S24op0'=n3S24op1)&(n3S24os'=n3S24os-1)&(n3S24pc'=-6); +[] numSteps (n3S24pc'=0)&(unlk'=57)&(numSteps'=numSteps+1); +[] unlk=26 & numSteps0 -> (n3S24pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=26 & numSteps (unlk'=27)&(numSkips'=numSkips+1); +[] n3S24pc=1 -> 0.5:(n3S24t0'=2)&(n3S24pc'=2) + 0.5:(n3S24t0'=3)&(n3S24pc'=2); +[] n3S24pc=2 -> (n3S24opt'=n3S24t0)&(n3S24pc'=-4)&(n3S24ra'=3); +[] numSteps (n3S24pc'=0)&(unlk'=27)&(numSteps'=numSteps+1); +endmodule +module n3S15 +n3S15ip0:[1..3] init 1; +n3S15ip1:[1..3] init 1; +n3S15is:[0..2] init 0; +n3S15op0:[1..3] init 1; +n3S15op1:[1..3] init 1; +n3S15os:[0..2] init 0; +n3S15opt:[1..3] init 1; +n3S15pc:[-6..2] init 0; n3S15ra:[-6..2] init 0; +[] n3S15is<2 & n3S15pc=-1 -> (n3S15ip0'=1)&(n3S15ip1'=n3S15ip0)&(n3S15is'=n3S15is+1)&(n3S15pc'=n3S15ra); +[] n3S15is=2 & n3S15pc=-1 -> (n3S15pc'=n3S15ra); +[] n3S15is=0 & n3S15pc=-2 -> (n3S15pc'=n3S15ra); +[] n3S15is>0 & n3S15is<2 & n3S15pc=-2 -> (n3S15ip1'=n3S15ip0)&(n3S15is'=n3S15is+1)&(n3S15pc'=n3S15ra); +[] n3S15is=2 & n3S15pc=-2 -> (n3S15pc'=n3S15ra); +[] n3S15is=0 & n3S15pc=-3 -> (n3S15pc'=n3S15ra); +[] n3S15is>0 & n3S15pc=-3 -> (n3S15ip0'=n3S15ip1)&(n3S15is'=n3S15is-1)&(n3S15pc'=n3S15ra); +[] n3S15os=0 & n3S15pc=-4 -> (n3S15op0'=n3S15opt)&(n3S15os'=1)&(n3S15pc'=-3); +[] n3S15os=1 & n3S15pc=-4 -> (n3S15op1'=n3S15opt)&(n3S15os'=2)&(n3S15pc'=-3); +[] n3S15os=2 & n3S15pc=-4 -> (n3S15pc'=-3); +[n3S16f1] n3S15is=0 -> (n3S15ip0'=3)&(n3S15is'=1); +[n3S16f1] n3S15is=1 -> (n3S15ip1'=3)&(n3S15is'=2); +[n3S16f1] n3S15is=2 -> true; +[n3S14f2] n3S15is=0 -> (n3S15ip0'=2)&(n3S15is'=1); +[n3S14f2] n3S15is=1 -> (n3S15ip1'=2)&(n3S15is'=2); +[n3S14f2] n3S15is=2 -> true; +[n3S13f2] n3S15is=0 -> (n3S15ip0'=1)&(n3S15is'=1); +[n3S13f2] n3S15is=1 -> (n3S15ip1'=1)&(n3S15is'=2); +[n3S13f2] n3S15is=2 -> true; +[] unlk=47 & numSteps0 -> (n3S15pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=47 & numSteps (unlk'=48)&(numSkips'=numSkips+1); +[n3S15f3] n3S15pc=-5 & n3S15os>0 & n3S15op0=3 -> (n3S15op0'=n3S15op1)&(n3S15os'=n3S15os-1)&(n3S15pc'=-6); +[n3S15f2] n3S15pc=-5 & n3S15os>0 & n3S15op0=2 -> (n3S15op0'=n3S15op1)&(n3S15os'=n3S15os-1)&(n3S15pc'=-6); +[n3S15f1] n3S15pc=-5 & n3S15os>0 & n3S15op0=1 -> (n3S15op0'=n3S15op1)&(n3S15os'=n3S15os-1)&(n3S15pc'=-6); +[] numSteps (n3S15pc'=0)&(unlk'=48)&(numSteps'=numSteps+1); +[] unlk=17 & numSteps0 -> (n3S15pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=18)&(numSkips'=numSkips+1); +[] n3S15pc=1 -> (n3S15opt'=3)&(n3S15pc'=-4)&(n3S15ra'=2); +[] numSteps (n3S15pc'=0)&(unlk'=18)&(numSteps'=numSteps+1); +endmodule +module n3S13 +n3S13ip0:[1..2] init 1; +n3S13ip1:[1..2] init 1; +n3S13is:[0..2] init 0; +n3S13op0:[1..2] init 1; +n3S13op1:[1..2] init 1; +n3S13os:[0..2] init 0; +n3S13opt:[1..2] init 1; +n3S13pc:[-6..2] init 0; n3S13ra:[-6..2] init 0; +[] n3S13is<2 & n3S13pc=-1 -> (n3S13ip0'=1)&(n3S13ip1'=n3S13ip0)&(n3S13is'=n3S13is+1)&(n3S13pc'=n3S13ra); +[] n3S13is=2 & n3S13pc=-1 -> (n3S13pc'=n3S13ra); +[] n3S13is=0 & n3S13pc=-2 -> (n3S13pc'=n3S13ra); +[] n3S13is>0 & n3S13is<2 & n3S13pc=-2 -> (n3S13ip1'=n3S13ip0)&(n3S13is'=n3S13is+1)&(n3S13pc'=n3S13ra); +[] n3S13is=2 & n3S13pc=-2 -> (n3S13pc'=n3S13ra); +[] n3S13is=0 & n3S13pc=-3 -> (n3S13pc'=n3S13ra); +[] n3S13is>0 & n3S13pc=-3 -> (n3S13ip0'=n3S13ip1)&(n3S13is'=n3S13is-1)&(n3S13pc'=n3S13ra); +[] n3S13os=0 & n3S13pc=-4 -> (n3S13op0'=n3S13opt)&(n3S13os'=1)&(n3S13pc'=-3); +[] n3S13os=1 & n3S13pc=-4 -> (n3S13op1'=n3S13opt)&(n3S13os'=2)&(n3S13pc'=-3); +[] n3S13os=2 & n3S13pc=-4 -> (n3S13pc'=-3); +[n3S15f1] n3S13is=0 -> (n3S13ip0'=2)&(n3S13is'=1); +[n3S15f1] n3S13is=1 -> (n3S13ip1'=2)&(n3S13is'=2); +[n3S15f1] n3S13is=2 -> true; +[n3S12f2] n3S13is=0 -> (n3S13ip0'=1)&(n3S13is'=1); +[n3S12f2] n3S13is=1 -> (n3S13ip1'=1)&(n3S13is'=2); +[n3S12f2] n3S13is=2 -> true; +[] unlk=45 & numSteps0 -> (n3S13pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=45 & numSteps (unlk'=46)&(numSkips'=numSkips+1); +[n3S13f2] n3S13pc=-5 & n3S13os>0 & n3S13op0=2 -> (n3S13op0'=n3S13op1)&(n3S13os'=n3S13os-1)&(n3S13pc'=-6); +[n3S13f1] n3S13pc=-5 & n3S13os>0 & n3S13op0=1 -> (n3S13op0'=n3S13op1)&(n3S13os'=n3S13os-1)&(n3S13pc'=-6); +[] numSteps (n3S13pc'=0)&(unlk'=46)&(numSteps'=numSteps+1); +[] unlk=15 & numSteps0 -> (n3S13pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[] n3S13pc=1 -> (n3S13opt'=2)&(n3S13pc'=-4)&(n3S13ra'=2); +[] numSteps (n3S13pc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +endmodule +module n3S22 +n3S22ip0:[1..2] init 1; +n3S22ip1:[1..2] init 1; +n3S22is:[0..2] init 0; +n3S22op0:[1..2] init 1; +n3S22op1:[1..2] init 1; +n3S22os:[0..2] init 0; +n3S22opt:[1..2] init 1; +n3S22pc:[-6..2] init 0; n3S22ra:[-6..2] init 0; +[] n3S22is<2 & n3S22pc=-1 -> (n3S22ip0'=1)&(n3S22ip1'=n3S22ip0)&(n3S22is'=n3S22is+1)&(n3S22pc'=n3S22ra); +[] n3S22is=2 & n3S22pc=-1 -> (n3S22pc'=n3S22ra); +[] n3S22is=0 & n3S22pc=-2 -> (n3S22pc'=n3S22ra); +[] n3S22is>0 & n3S22is<2 & n3S22pc=-2 -> (n3S22ip1'=n3S22ip0)&(n3S22is'=n3S22is+1)&(n3S22pc'=n3S22ra); +[] n3S22is=2 & n3S22pc=-2 -> (n3S22pc'=n3S22ra); +[] n3S22is=0 & n3S22pc=-3 -> (n3S22pc'=n3S22ra); +[] n3S22is>0 & n3S22pc=-3 -> (n3S22ip0'=n3S22ip1)&(n3S22is'=n3S22is-1)&(n3S22pc'=n3S22ra); +[] n3S22os=0 & n3S22pc=-4 -> (n3S22op0'=n3S22opt)&(n3S22os'=1)&(n3S22pc'=-3); +[] n3S22os=1 & n3S22pc=-4 -> (n3S22op1'=n3S22opt)&(n3S22os'=2)&(n3S22pc'=-3); +[] n3S22os=2 & n3S22pc=-4 -> (n3S22pc'=-3); +[n3S23f2] n3S22is=0 -> (n3S22ip0'=2)&(n3S22is'=1); +[n3S23f2] n3S22is=1 -> (n3S22ip1'=2)&(n3S22is'=2); +[n3S23f2] n3S22is=2 -> true; +[n3S20f3] n3S22is=0 -> (n3S22ip0'=1)&(n3S22is'=1); +[n3S20f3] n3S22is=1 -> (n3S22ip1'=1)&(n3S22is'=2); +[n3S20f3] n3S22is=2 -> true; +[] unlk=54 & numSteps0 -> (n3S22pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=54 & numSteps (unlk'=55)&(numSkips'=numSkips+1); +[n3S22f2] n3S22pc=-5 & n3S22os>0 & n3S22op0=2 -> (n3S22op0'=n3S22op1)&(n3S22os'=n3S22os-1)&(n3S22pc'=-6); +[n3S22f1] n3S22pc=-5 & n3S22os>0 & n3S22op0=1 -> (n3S22op0'=n3S22op1)&(n3S22os'=n3S22os-1)&(n3S22pc'=-6); +[] numSteps (n3S22pc'=0)&(unlk'=55)&(numSteps'=numSteps+1); +[] unlk=24 & numSteps0 -> (n3S22pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=24 & numSteps (unlk'=25)&(numSkips'=numSkips+1); +[] n3S22pc=1 -> (n3S22opt'=2)&(n3S22pc'=-4)&(n3S22ra'=2); +[] numSteps (n3S22pc'=0)&(unlk'=25)&(numSteps'=numSteps+1); +endmodule +module n3S17 +n3S17ip0:[1..2] init 1; +n3S17ip1:[1..2] init 1; +n3S17is:[0..2] init 0; +n3S17op0:[1..2] init 1; +n3S17op1:[1..2] init 1; +n3S17os:[0..2] init 0; +n3S17opt:[1..2] init 1; +n3S17pc:[-6..2] init 0; n3S17ra:[-6..2] init 0; +[] n3S17is<2 & n3S17pc=-1 -> (n3S17ip0'=1)&(n3S17ip1'=n3S17ip0)&(n3S17is'=n3S17is+1)&(n3S17pc'=n3S17ra); +[] n3S17is=2 & n3S17pc=-1 -> (n3S17pc'=n3S17ra); +[] n3S17is=0 & n3S17pc=-2 -> (n3S17pc'=n3S17ra); +[] n3S17is>0 & n3S17is<2 & n3S17pc=-2 -> (n3S17ip1'=n3S17ip0)&(n3S17is'=n3S17is+1)&(n3S17pc'=n3S17ra); +[] n3S17is=2 & n3S17pc=-2 -> (n3S17pc'=n3S17ra); +[] n3S17is=0 & n3S17pc=-3 -> (n3S17pc'=n3S17ra); +[] n3S17is>0 & n3S17pc=-3 -> (n3S17ip0'=n3S17ip1)&(n3S17is'=n3S17is-1)&(n3S17pc'=n3S17ra); +[] n3S17os=0 & n3S17pc=-4 -> (n3S17op0'=n3S17opt)&(n3S17os'=1)&(n3S17pc'=-3); +[] n3S17os=1 & n3S17pc=-4 -> (n3S17op1'=n3S17opt)&(n3S17os'=2)&(n3S17pc'=-3); +[] n3S17os=2 & n3S17pc=-4 -> (n3S17pc'=-3); +[n3S19f1] n3S17is=0 -> (n3S17ip0'=2)&(n3S17is'=1); +[n3S19f1] n3S17is=1 -> (n3S17ip1'=2)&(n3S17is'=2); +[n3S19f1] n3S17is=2 -> true; +[n3S16f2] n3S17is=0 -> (n3S17ip0'=1)&(n3S17is'=1); +[n3S16f2] n3S17is=1 -> (n3S17ip1'=1)&(n3S17is'=2); +[n3S16f2] n3S17is=2 -> true; +[] unlk=49 & numSteps0 -> (n3S17pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=49 & numSteps (unlk'=50)&(numSkips'=numSkips+1); +[n3S17f2] n3S17pc=-5 & n3S17os>0 & n3S17op0=2 -> (n3S17op0'=n3S17op1)&(n3S17os'=n3S17os-1)&(n3S17pc'=-6); +[n3S17f1] n3S17pc=-5 & n3S17os>0 & n3S17op0=1 -> (n3S17op0'=n3S17op1)&(n3S17os'=n3S17os-1)&(n3S17pc'=-6); +[] numSteps (n3S17pc'=0)&(unlk'=50)&(numSteps'=numSteps+1); +[] unlk=19 & numSteps0 -> (n3S17pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=19 & numSteps (unlk'=20)&(numSkips'=numSkips+1); +[] n3S17pc=1 -> (n3S17opt'=2)&(n3S17pc'=-4)&(n3S17ra'=2); +[] numSteps (n3S17pc'=0)&(unlk'=20)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4t0:[2..3]; +n2S4ip0:[1..3] init 1; +n2S4ip1:[1..3] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..3] init 1; +n2S4op1:[1..3] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..3] init 1; +n2S4pc:[-6..3] init 0; n2S4ra:[-6..3] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S6f1] n2S4is=0 -> (n2S4ip0'=3)&(n2S4is'=1); +[n2S6f1] n2S4is=1 -> (n2S4ip1'=3)&(n2S4is'=2); +[n2S6f1] n2S4is=2 -> true; +[n2S5f1] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S5f1] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S5f1] n2S4is=2 -> true; +[n2S3f3] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f3] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f3] n2S4is=2 -> true; +[] unlk=36 & numSteps0 -> (n2S4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=36 & numSteps (unlk'=37)&(numSkips'=numSkips+1); +[n2S4f3] n2S4pc=-5 & n2S4os>0 & n2S4op0=3 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=37)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2S4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2S4pc=1 -> 0.5:(n2S4t0'=2)&(n2S4pc'=2) + 0.5:(n2S4t0'=3)&(n2S4pc'=2); +[] n2S4pc=2 -> (n2S4opt'=n2S4t0)&(n2S4pc'=-4)&(n2S4ra'=3); +[] numSteps (n2S4pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n3S26 +n3S26ip0:[1..2] init 1; +n3S26ip1:[1..2] init 1; +n3S26is:[0..2] init 0; +n3S26op0:[1..2] init 1; +n3S26op1:[1..2] init 1; +n3S26os:[0..2] init 0; +n3S26opt:[1..2] init 1; +n3S26pc:[-6..2] init 0; n3S26ra:[-6..2] init 0; +[] n3S26is<2 & n3S26pc=-1 -> (n3S26ip0'=1)&(n3S26ip1'=n3S26ip0)&(n3S26is'=n3S26is+1)&(n3S26pc'=n3S26ra); +[] n3S26is=2 & n3S26pc=-1 -> (n3S26pc'=n3S26ra); +[] n3S26is=0 & n3S26pc=-2 -> (n3S26pc'=n3S26ra); +[] n3S26is>0 & n3S26is<2 & n3S26pc=-2 -> (n3S26ip1'=n3S26ip0)&(n3S26is'=n3S26is+1)&(n3S26pc'=n3S26ra); +[] n3S26is=2 & n3S26pc=-2 -> (n3S26pc'=n3S26ra); +[] n3S26is=0 & n3S26pc=-3 -> (n3S26pc'=n3S26ra); +[] n3S26is>0 & n3S26pc=-3 -> (n3S26ip0'=n3S26ip1)&(n3S26is'=n3S26is-1)&(n3S26pc'=n3S26ra); +[] n3S26os=0 & n3S26pc=-4 -> (n3S26op0'=n3S26opt)&(n3S26os'=1)&(n3S26pc'=-3); +[] n3S26os=1 & n3S26pc=-4 -> (n3S26op1'=n3S26opt)&(n3S26os'=2)&(n3S26pc'=-3); +[] n3S26os=2 & n3S26pc=-4 -> (n3S26pc'=-3); +[n3S27f2] n3S26is=0 -> (n3S26ip0'=2)&(n3S26is'=1); +[n3S27f2] n3S26is=1 -> (n3S26ip1'=2)&(n3S26is'=2); +[n3S27f2] n3S26is=2 -> true; +[n3S24f3] n3S26is=0 -> (n3S26ip0'=1)&(n3S26is'=1); +[n3S24f3] n3S26is=1 -> (n3S26ip1'=1)&(n3S26is'=2); +[n3S24f3] n3S26is=2 -> true; +[] unlk=58 & numSteps0 -> (n3S26pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=58 & numSteps (unlk'=59)&(numSkips'=numSkips+1); +[n3S26f2] n3S26pc=-5 & n3S26os>0 & n3S26op0=2 -> (n3S26op0'=n3S26op1)&(n3S26os'=n3S26os-1)&(n3S26pc'=-6); +[n3S26f1] n3S26pc=-5 & n3S26os>0 & n3S26op0=1 -> (n3S26op0'=n3S26op1)&(n3S26os'=n3S26os-1)&(n3S26pc'=-6); +[] numSteps (n3S26pc'=0)&(unlk'=59)&(numSteps'=numSteps+1); +[] unlk=28 & numSteps0 -> (n3S26pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=28 & numSteps (unlk'=29)&(numSkips'=numSkips+1); +[] n3S26pc=1 -> (n3S26opt'=2)&(n3S26pc'=-4)&(n3S26ra'=2); +[] numSteps (n3S26pc'=0)&(unlk'=29)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8t0:[2..3]; +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..3] init 0; n2S8ra:[-6..3] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n3S10f1] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n3S10f1] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n3S10f1] n2S8is=2 -> true; +[n2S9f1] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n2S9f1] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n2S9f1] n2S8is=2 -> true; +[n2S7f3] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S7f3] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S7f3] n2S8is=2 -> true; +[] unlk=40 & numSteps0 -> (n2S8pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=40 & numSteps (unlk'=41)&(numSkips'=numSkips+1); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=41)&(numSteps'=numSteps+1); +[] unlk=10 & numSteps0 -> (n2S8pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[] n2S8pc=1 -> 0.5:(n2S8t0'=2)&(n2S8pc'=2) + 0.5:(n2S8t0'=3)&(n2S8pc'=2); +[] n2S8pc=2 -> (n2S8opt'=n2S8t0)&(n2S8pc'=-4)&(n2S8ra'=3); +[] numSteps (n2S8pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n3S27f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n3S27f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n3S27f3] n2H1is=2 -> true; +[] unlk=31 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=31 & numSteps (unlk'=32)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=32)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..2] init 1; +n2S6ip1:[1..2] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..2] init 1; +n2S6op1:[1..2] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..2] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S7f2] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2S7f2] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2S7f2] n2S6is=2 -> true; +[n2S4f3] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S4f3] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S4f3] n2S6is=2 -> true; +[] unlk=38 & numSteps0 -> (n2S6pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=38 & numSteps (unlk'=39)&(numSkips'=numSkips+1); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=39)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2S6pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n3S11 +n3S11ip0:[1..3] init 1; +n3S11ip1:[1..3] init 1; +n3S11is:[0..2] init 0; +n3S11op0:[1..3] init 1; +n3S11op1:[1..3] init 1; +n3S11os:[0..2] init 0; +n3S11opt:[1..3] init 1; +n3S11pc:[-6..2] init 0; n3S11ra:[-6..2] init 0; +[] n3S11is<2 & n3S11pc=-1 -> (n3S11ip0'=1)&(n3S11ip1'=n3S11ip0)&(n3S11is'=n3S11is+1)&(n3S11pc'=n3S11ra); +[] n3S11is=2 & n3S11pc=-1 -> (n3S11pc'=n3S11ra); +[] n3S11is=0 & n3S11pc=-2 -> (n3S11pc'=n3S11ra); +[] n3S11is>0 & n3S11is<2 & n3S11pc=-2 -> (n3S11ip1'=n3S11ip0)&(n3S11is'=n3S11is+1)&(n3S11pc'=n3S11ra); +[] n3S11is=2 & n3S11pc=-2 -> (n3S11pc'=n3S11ra); +[] n3S11is=0 & n3S11pc=-3 -> (n3S11pc'=n3S11ra); +[] n3S11is>0 & n3S11pc=-3 -> (n3S11ip0'=n3S11ip1)&(n3S11is'=n3S11is-1)&(n3S11pc'=n3S11ra); +[] n3S11os=0 & n3S11pc=-4 -> (n3S11op0'=n3S11opt)&(n3S11os'=1)&(n3S11pc'=-3); +[] n3S11os=1 & n3S11pc=-4 -> (n3S11op1'=n3S11opt)&(n3S11os'=2)&(n3S11pc'=-3); +[] n3S11os=2 & n3S11pc=-4 -> (n3S11pc'=-3); +[n3S12f1] n3S11is=0 -> (n3S11ip0'=3)&(n3S11is'=1); +[n3S12f1] n3S11is=1 -> (n3S11ip1'=3)&(n3S11is'=2); +[n3S12f1] n3S11is=2 -> true; +[n3S10f2] n3S11is=0 -> (n3S11ip0'=2)&(n3S11is'=1); +[n3S10f2] n3S11is=1 -> (n3S11ip1'=2)&(n3S11is'=2); +[n3S10f2] n3S11is=2 -> true; +[n2S9f2] n3S11is=0 -> (n3S11ip0'=1)&(n3S11is'=1); +[n2S9f2] n3S11is=1 -> (n3S11ip1'=1)&(n3S11is'=2); +[n2S9f2] n3S11is=2 -> true; +[] unlk=43 & numSteps0 -> (n3S11pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=43 & numSteps (unlk'=44)&(numSkips'=numSkips+1); +[n3S11f3] n3S11pc=-5 & n3S11os>0 & n3S11op0=3 -> (n3S11op0'=n3S11op1)&(n3S11os'=n3S11os-1)&(n3S11pc'=-6); +[n3S11f2] n3S11pc=-5 & n3S11os>0 & n3S11op0=2 -> (n3S11op0'=n3S11op1)&(n3S11os'=n3S11os-1)&(n3S11pc'=-6); +[n3S11f1] n3S11pc=-5 & n3S11os>0 & n3S11op0=1 -> (n3S11op0'=n3S11op1)&(n3S11os'=n3S11os-1)&(n3S11pc'=-6); +[] numSteps (n3S11pc'=0)&(unlk'=44)&(numSteps'=numSteps+1); +[] unlk=13 & numSteps0 -> (n3S11pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[] n3S11pc=1 -> (n3S11opt'=3)&(n3S11pc'=-4)&(n3S11ra'=2); +[] numSteps (n3S11pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +endmodule +module n3S19 +n3S19ip0:[1..3] init 1; +n3S19ip1:[1..3] init 1; +n3S19is:[0..2] init 0; +n3S19op0:[1..3] init 1; +n3S19op1:[1..3] init 1; +n3S19os:[0..2] init 0; +n3S19opt:[1..3] init 1; +n3S19pc:[-6..2] init 0; n3S19ra:[-6..2] init 0; +[] n3S19is<2 & n3S19pc=-1 -> (n3S19ip0'=1)&(n3S19ip1'=n3S19ip0)&(n3S19is'=n3S19is+1)&(n3S19pc'=n3S19ra); +[] n3S19is=2 & n3S19pc=-1 -> (n3S19pc'=n3S19ra); +[] n3S19is=0 & n3S19pc=-2 -> (n3S19pc'=n3S19ra); +[] n3S19is>0 & n3S19is<2 & n3S19pc=-2 -> (n3S19ip1'=n3S19ip0)&(n3S19is'=n3S19is+1)&(n3S19pc'=n3S19ra); +[] n3S19is=2 & n3S19pc=-2 -> (n3S19pc'=n3S19ra); +[] n3S19is=0 & n3S19pc=-3 -> (n3S19pc'=n3S19ra); +[] n3S19is>0 & n3S19pc=-3 -> (n3S19ip0'=n3S19ip1)&(n3S19is'=n3S19is-1)&(n3S19pc'=n3S19ra); +[] n3S19os=0 & n3S19pc=-4 -> (n3S19op0'=n3S19opt)&(n3S19os'=1)&(n3S19pc'=-3); +[] n3S19os=1 & n3S19pc=-4 -> (n3S19op1'=n3S19opt)&(n3S19os'=2)&(n3S19pc'=-3); +[] n3S19os=2 & n3S19pc=-4 -> (n3S19pc'=-3); +[n3S20f1] n3S19is=0 -> (n3S19ip0'=3)&(n3S19is'=1); +[n3S20f1] n3S19is=1 -> (n3S19ip1'=3)&(n3S19is'=2); +[n3S20f1] n3S19is=2 -> true; +[n3S18f2] n3S19is=0 -> (n3S19ip0'=2)&(n3S19is'=1); +[n3S18f2] n3S19is=1 -> (n3S19ip1'=2)&(n3S19is'=2); +[n3S18f2] n3S19is=2 -> true; +[n3S17f2] n3S19is=0 -> (n3S19ip0'=1)&(n3S19is'=1); +[n3S17f2] n3S19is=1 -> (n3S19ip1'=1)&(n3S19is'=2); +[n3S17f2] n3S19is=2 -> true; +[] unlk=51 & numSteps0 -> (n3S19pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=51 & numSteps (unlk'=52)&(numSkips'=numSkips+1); +[n3S19f3] n3S19pc=-5 & n3S19os>0 & n3S19op0=3 -> (n3S19op0'=n3S19op1)&(n3S19os'=n3S19os-1)&(n3S19pc'=-6); +[n3S19f2] n3S19pc=-5 & n3S19os>0 & n3S19op0=2 -> (n3S19op0'=n3S19op1)&(n3S19os'=n3S19os-1)&(n3S19pc'=-6); +[n3S19f1] n3S19pc=-5 & n3S19os>0 & n3S19op0=1 -> (n3S19op0'=n3S19op1)&(n3S19os'=n3S19os-1)&(n3S19pc'=-6); +[] numSteps (n3S19pc'=0)&(unlk'=52)&(numSteps'=numSteps+1); +[] unlk=21 & numSteps0 -> (n3S19pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=21 & numSteps (unlk'=22)&(numSkips'=numSkips+1); +[] n3S19pc=1 -> (n3S19opt'=3)&(n3S19pc'=-4)&(n3S19ra'=2); +[] numSteps (n3S19pc'=0)&(unlk'=22)&(numSteps'=numSteps+1); +endmodule +module n3S10 +n3S10ip0:[1..2] init 1; +n3S10ip1:[1..2] init 1; +n3S10is:[0..2] init 0; +n3S10op0:[1..2] init 1; +n3S10op1:[1..2] init 1; +n3S10os:[0..2] init 0; +n3S10opt:[1..2] init 1; +n3S10pc:[-6..2] init 0; n3S10ra:[-6..2] init 0; +[] n3S10is<2 & n3S10pc=-1 -> (n3S10ip0'=1)&(n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-1 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10is<2 & n3S10pc=-2 -> (n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-3 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10pc=-3 -> (n3S10ip0'=n3S10ip1)&(n3S10is'=n3S10is-1)&(n3S10pc'=n3S10ra); +[] n3S10os=0 & n3S10pc=-4 -> (n3S10op0'=n3S10opt)&(n3S10os'=1)&(n3S10pc'=-3); +[] n3S10os=1 & n3S10pc=-4 -> (n3S10op1'=n3S10opt)&(n3S10os'=2)&(n3S10pc'=-3); +[] n3S10os=2 & n3S10pc=-4 -> (n3S10pc'=-3); +[n3S11f2] n3S10is=0 -> (n3S10ip0'=2)&(n3S10is'=1); +[n3S11f2] n3S10is=1 -> (n3S10ip1'=2)&(n3S10is'=2); +[n3S11f2] n3S10is=2 -> true; +[n2S8f3] n3S10is=0 -> (n3S10ip0'=1)&(n3S10is'=1); +[n2S8f3] n3S10is=1 -> (n3S10ip1'=1)&(n3S10is'=2); +[n2S8f3] n3S10is=2 -> true; +[] unlk=42 & numSteps0 -> (n3S10pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=42 & numSteps (unlk'=43)&(numSkips'=numSkips+1); +[n3S10f2] n3S10pc=-5 & n3S10os>0 & n3S10op0=2 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f1] n3S10pc=-5 & n3S10os>0 & n3S10op0=1 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[] numSteps (n3S10pc'=0)&(unlk'=43)&(numSteps'=numSteps+1); +[] unlk=12 & numSteps0 -> (n3S10pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[] n3S10pc=1 -> (n3S10opt'=2)&(n3S10pc'=-4)&(n3S10ra'=2); +[] numSteps (n3S10pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +endmodule +module n3S12 +n3S12t0:[2..3]; +n3S12ip0:[1..3] init 1; +n3S12ip1:[1..3] init 1; +n3S12is:[0..2] init 0; +n3S12op0:[1..3] init 1; +n3S12op1:[1..3] init 1; +n3S12os:[0..2] init 0; +n3S12opt:[1..3] init 1; +n3S12pc:[-6..3] init 0; n3S12ra:[-6..3] init 0; +[] n3S12is<2 & n3S12pc=-1 -> (n3S12ip0'=1)&(n3S12ip1'=n3S12ip0)&(n3S12is'=n3S12is+1)&(n3S12pc'=n3S12ra); +[] n3S12is=2 & n3S12pc=-1 -> (n3S12pc'=n3S12ra); +[] n3S12is=0 & n3S12pc=-2 -> (n3S12pc'=n3S12ra); +[] n3S12is>0 & n3S12is<2 & n3S12pc=-2 -> (n3S12ip1'=n3S12ip0)&(n3S12is'=n3S12is+1)&(n3S12pc'=n3S12ra); +[] n3S12is=2 & n3S12pc=-2 -> (n3S12pc'=n3S12ra); +[] n3S12is=0 & n3S12pc=-3 -> (n3S12pc'=n3S12ra); +[] n3S12is>0 & n3S12pc=-3 -> (n3S12ip0'=n3S12ip1)&(n3S12is'=n3S12is-1)&(n3S12pc'=n3S12ra); +[] n3S12os=0 & n3S12pc=-4 -> (n3S12op0'=n3S12opt)&(n3S12os'=1)&(n3S12pc'=-3); +[] n3S12os=1 & n3S12pc=-4 -> (n3S12op1'=n3S12opt)&(n3S12os'=2)&(n3S12pc'=-3); +[] n3S12os=2 & n3S12pc=-4 -> (n3S12pc'=-3); +[n3S14f1] n3S12is=0 -> (n3S12ip0'=3)&(n3S12is'=1); +[n3S14f1] n3S12is=1 -> (n3S12ip1'=3)&(n3S12is'=2); +[n3S14f1] n3S12is=2 -> true; +[n3S13f1] n3S12is=0 -> (n3S12ip0'=2)&(n3S12is'=1); +[n3S13f1] n3S12is=1 -> (n3S12ip1'=2)&(n3S12is'=2); +[n3S13f1] n3S12is=2 -> true; +[n3S11f3] n3S12is=0 -> (n3S12ip0'=1)&(n3S12is'=1); +[n3S11f3] n3S12is=1 -> (n3S12ip1'=1)&(n3S12is'=2); +[n3S11f3] n3S12is=2 -> true; +[] unlk=44 & numSteps0 -> (n3S12pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=44 & numSteps (unlk'=45)&(numSkips'=numSkips+1); +[n3S12f3] n3S12pc=-5 & n3S12os>0 & n3S12op0=3 -> (n3S12op0'=n3S12op1)&(n3S12os'=n3S12os-1)&(n3S12pc'=-6); +[n3S12f2] n3S12pc=-5 & n3S12os>0 & n3S12op0=2 -> (n3S12op0'=n3S12op1)&(n3S12os'=n3S12os-1)&(n3S12pc'=-6); +[n3S12f1] n3S12pc=-5 & n3S12os>0 & n3S12op0=1 -> (n3S12op0'=n3S12op1)&(n3S12os'=n3S12os-1)&(n3S12pc'=-6); +[] numSteps (n3S12pc'=0)&(unlk'=45)&(numSteps'=numSteps+1); +[] unlk=14 & numSteps0 -> (n3S12pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[] n3S12pc=1 -> 0.5:(n3S12t0'=2)&(n3S12pc'=2) + 0.5:(n3S12t0'=3)&(n3S12pc'=2); +[] n3S12pc=2 -> (n3S12opt'=n3S12t0)&(n3S12pc'=-4)&(n3S12ra'=3); +[] numSteps (n3S12pc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +endmodule +module n3S21 +n3S21ip0:[1..2] init 1; +n3S21ip1:[1..2] init 1; +n3S21is:[0..2] init 0; +n3S21op0:[1..2] init 1; +n3S21op1:[1..2] init 1; +n3S21os:[0..2] init 0; +n3S21opt:[1..2] init 1; +n3S21pc:[-6..2] init 0; n3S21ra:[-6..2] init 0; +[] n3S21is<2 & n3S21pc=-1 -> (n3S21ip0'=1)&(n3S21ip1'=n3S21ip0)&(n3S21is'=n3S21is+1)&(n3S21pc'=n3S21ra); +[] n3S21is=2 & n3S21pc=-1 -> (n3S21pc'=n3S21ra); +[] n3S21is=0 & n3S21pc=-2 -> (n3S21pc'=n3S21ra); +[] n3S21is>0 & n3S21is<2 & n3S21pc=-2 -> (n3S21ip1'=n3S21ip0)&(n3S21is'=n3S21is+1)&(n3S21pc'=n3S21ra); +[] n3S21is=2 & n3S21pc=-2 -> (n3S21pc'=n3S21ra); +[] n3S21is=0 & n3S21pc=-3 -> (n3S21pc'=n3S21ra); +[] n3S21is>0 & n3S21pc=-3 -> (n3S21ip0'=n3S21ip1)&(n3S21is'=n3S21is-1)&(n3S21pc'=n3S21ra); +[] n3S21os=0 & n3S21pc=-4 -> (n3S21op0'=n3S21opt)&(n3S21os'=1)&(n3S21pc'=-3); +[] n3S21os=1 & n3S21pc=-4 -> (n3S21op1'=n3S21opt)&(n3S21os'=2)&(n3S21pc'=-3); +[] n3S21os=2 & n3S21pc=-4 -> (n3S21pc'=-3); +[n3S23f1] n3S21is=0 -> (n3S21ip0'=2)&(n3S21is'=1); +[n3S23f1] n3S21is=1 -> (n3S21ip1'=2)&(n3S21is'=2); +[n3S23f1] n3S21is=2 -> true; +[n3S20f2] n3S21is=0 -> (n3S21ip0'=1)&(n3S21is'=1); +[n3S20f2] n3S21is=1 -> (n3S21ip1'=1)&(n3S21is'=2); +[n3S20f2] n3S21is=2 -> true; +[] unlk=53 & numSteps0 -> (n3S21pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=53 & numSteps (unlk'=54)&(numSkips'=numSkips+1); +[n3S21f2] n3S21pc=-5 & n3S21os>0 & n3S21op0=2 -> (n3S21op0'=n3S21op1)&(n3S21os'=n3S21os-1)&(n3S21pc'=-6); +[n3S21f1] n3S21pc=-5 & n3S21os>0 & n3S21op0=1 -> (n3S21op0'=n3S21op1)&(n3S21os'=n3S21os-1)&(n3S21pc'=-6); +[] numSteps (n3S21pc'=0)&(unlk'=54)&(numSteps'=numSteps+1); +[] unlk=23 & numSteps0 -> (n3S21pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=23 & numSteps (unlk'=24)&(numSkips'=numSkips+1); +[] n3S21pc=1 -> (n3S21opt'=2)&(n3S21pc'=-4)&(n3S21ra'=2); +[] numSteps (n3S21pc'=0)&(unlk'=24)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=33 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=33 & numSteps (unlk'=34)&(numSkips'=numSkips+1); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=34)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[] unlk=35 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=35 & numSteps (unlk'=36)&(numSkips'=numSkips+1); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=36)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk=34 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=34 & numSteps (unlk'=35)&(numSkips'=numSkips+1); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=35)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n3S20 +n3S20t0:[2..3]; +n3S20ip0:[1..3] init 1; +n3S20ip1:[1..3] init 1; +n3S20is:[0..2] init 0; +n3S20op0:[1..3] init 1; +n3S20op1:[1..3] init 1; +n3S20os:[0..2] init 0; +n3S20opt:[1..3] init 1; +n3S20pc:[-6..3] init 0; n3S20ra:[-6..3] init 0; +[] n3S20is<2 & n3S20pc=-1 -> (n3S20ip0'=1)&(n3S20ip1'=n3S20ip0)&(n3S20is'=n3S20is+1)&(n3S20pc'=n3S20ra); +[] n3S20is=2 & n3S20pc=-1 -> (n3S20pc'=n3S20ra); +[] n3S20is=0 & n3S20pc=-2 -> (n3S20pc'=n3S20ra); +[] n3S20is>0 & n3S20is<2 & n3S20pc=-2 -> (n3S20ip1'=n3S20ip0)&(n3S20is'=n3S20is+1)&(n3S20pc'=n3S20ra); +[] n3S20is=2 & n3S20pc=-2 -> (n3S20pc'=n3S20ra); +[] n3S20is=0 & n3S20pc=-3 -> (n3S20pc'=n3S20ra); +[] n3S20is>0 & n3S20pc=-3 -> (n3S20ip0'=n3S20ip1)&(n3S20is'=n3S20is-1)&(n3S20pc'=n3S20ra); +[] n3S20os=0 & n3S20pc=-4 -> (n3S20op0'=n3S20opt)&(n3S20os'=1)&(n3S20pc'=-3); +[] n3S20os=1 & n3S20pc=-4 -> (n3S20op1'=n3S20opt)&(n3S20os'=2)&(n3S20pc'=-3); +[] n3S20os=2 & n3S20pc=-4 -> (n3S20pc'=-3); +[n3S22f1] n3S20is=0 -> (n3S20ip0'=3)&(n3S20is'=1); +[n3S22f1] n3S20is=1 -> (n3S20ip1'=3)&(n3S20is'=2); +[n3S22f1] n3S20is=2 -> true; +[n3S21f1] n3S20is=0 -> (n3S20ip0'=2)&(n3S20is'=1); +[n3S21f1] n3S20is=1 -> (n3S20ip1'=2)&(n3S20is'=2); +[n3S21f1] n3S20is=2 -> true; +[n3S19f3] n3S20is=0 -> (n3S20ip0'=1)&(n3S20is'=1); +[n3S19f3] n3S20is=1 -> (n3S20ip1'=1)&(n3S20is'=2); +[n3S19f3] n3S20is=2 -> true; +[] unlk=52 & numSteps0 -> (n3S20pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=52 & numSteps (unlk'=53)&(numSkips'=numSkips+1); +[n3S20f3] n3S20pc=-5 & n3S20os>0 & n3S20op0=3 -> (n3S20op0'=n3S20op1)&(n3S20os'=n3S20os-1)&(n3S20pc'=-6); +[n3S20f2] n3S20pc=-5 & n3S20os>0 & n3S20op0=2 -> (n3S20op0'=n3S20op1)&(n3S20os'=n3S20os-1)&(n3S20pc'=-6); +[n3S20f1] n3S20pc=-5 & n3S20os>0 & n3S20op0=1 -> (n3S20op0'=n3S20op1)&(n3S20os'=n3S20os-1)&(n3S20pc'=-6); +[] numSteps (n3S20pc'=0)&(unlk'=53)&(numSteps'=numSteps+1); +[] unlk=22 & numSteps0 -> (n3S20pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=22 & numSteps (unlk'=23)&(numSkips'=numSkips+1); +[] n3S20pc=1 -> 0.5:(n3S20t0'=2)&(n3S20pc'=2) + 0.5:(n3S20t0'=3)&(n3S20pc'=2); +[] n3S20pc=2 -> (n3S20opt'=n3S20t0)&(n3S20pc'=-4)&(n3S20ra'=3); +[] numSteps (n3S20pc'=0)&(unlk'=23)&(numSteps'=numSteps+1); +endmodule +module n3S18 +n3S18ip0:[1..2] init 1; +n3S18ip1:[1..2] init 1; +n3S18is:[0..2] init 0; +n3S18op0:[1..2] init 1; +n3S18op1:[1..2] init 1; +n3S18os:[0..2] init 0; +n3S18opt:[1..2] init 1; +n3S18pc:[-6..2] init 0; n3S18ra:[-6..2] init 0; +[] n3S18is<2 & n3S18pc=-1 -> (n3S18ip0'=1)&(n3S18ip1'=n3S18ip0)&(n3S18is'=n3S18is+1)&(n3S18pc'=n3S18ra); +[] n3S18is=2 & n3S18pc=-1 -> (n3S18pc'=n3S18ra); +[] n3S18is=0 & n3S18pc=-2 -> (n3S18pc'=n3S18ra); +[] n3S18is>0 & n3S18is<2 & n3S18pc=-2 -> (n3S18ip1'=n3S18ip0)&(n3S18is'=n3S18is+1)&(n3S18pc'=n3S18ra); +[] n3S18is=2 & n3S18pc=-2 -> (n3S18pc'=n3S18ra); +[] n3S18is=0 & n3S18pc=-3 -> (n3S18pc'=n3S18ra); +[] n3S18is>0 & n3S18pc=-3 -> (n3S18ip0'=n3S18ip1)&(n3S18is'=n3S18is-1)&(n3S18pc'=n3S18ra); +[] n3S18os=0 & n3S18pc=-4 -> (n3S18op0'=n3S18opt)&(n3S18os'=1)&(n3S18pc'=-3); +[] n3S18os=1 & n3S18pc=-4 -> (n3S18op1'=n3S18opt)&(n3S18os'=2)&(n3S18pc'=-3); +[] n3S18os=2 & n3S18pc=-4 -> (n3S18pc'=-3); +[n3S19f2] n3S18is=0 -> (n3S18ip0'=2)&(n3S18is'=1); +[n3S19f2] n3S18is=1 -> (n3S18ip1'=2)&(n3S18is'=2); +[n3S19f2] n3S18is=2 -> true; +[n3S16f3] n3S18is=0 -> (n3S18ip0'=1)&(n3S18is'=1); +[n3S16f3] n3S18is=1 -> (n3S18ip1'=1)&(n3S18is'=2); +[n3S16f3] n3S18is=2 -> true; +[] unlk=50 & numSteps0 -> (n3S18pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=50 & numSteps (unlk'=51)&(numSkips'=numSkips+1); +[n3S18f2] n3S18pc=-5 & n3S18os>0 & n3S18op0=2 -> (n3S18op0'=n3S18op1)&(n3S18os'=n3S18os-1)&(n3S18pc'=-6); +[n3S18f1] n3S18pc=-5 & n3S18os>0 & n3S18op0=1 -> (n3S18op0'=n3S18op1)&(n3S18os'=n3S18os-1)&(n3S18pc'=-6); +[] numSteps (n3S18pc'=0)&(unlk'=51)&(numSteps'=numSteps+1); +[] unlk=20 & numSteps0 -> (n3S18pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=20 & numSteps (unlk'=21)&(numSkips'=numSkips+1); +[] n3S18pc=1 -> (n3S18opt'=2)&(n3S18pc'=-4)&(n3S18ra'=2); +[] numSteps (n3S18pc'=0)&(unlk'=21)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S7f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S7f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S7f1] n2S5is=2 -> true; +[n2S4f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[] unlk=37 & numSteps0 -> (n2S5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=37 & numSteps (unlk'=38)&(numSkips'=numSkips+1); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=38)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2S5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[2..3]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..3] init 0; n2S0ra:[-6..3] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk=32 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=32 & numSteps (unlk'=33)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=33)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 -> 0.5:(n2S0t0'=2)&(n2S0pc'=2) + 0.5:(n2S0t0'=3)&(n2S0pc'=2); +[] n2S0pc=2 -> (n2S0opt'=n2S0t0)&(n2S0pc'=-4)&(n2S0ra'=3); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9ip0:[1..2] init 1; +n2S9ip1:[1..2] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..2] init 1; +n2S9op1:[1..2] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..2] init 1; +n2S9pc:[-6..2] init 0; n2S9ra:[-6..2] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n3S11f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n3S11f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n3S11f1] n2S9is=2 -> true; +[n2S8f2] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S8f2] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S8f2] n2S9is=2 -> true; +[] unlk=41 & numSteps0 -> (n2S9pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=41 & numSteps (unlk'=42)&(numSkips'=numSkips+1); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=42)&(numSteps'=numSteps+1); +[] unlk=11 & numSteps0 -> (n2S9pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[] n2S9pc=1 -> (n2S9opt'=2)&(n2S9pc'=-4)&(n2S9ra'=2); +[] numSteps (n2S9pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +endmodule +module n3S27 +n3S27ip0:[1..3] init 1; +n3S27ip1:[1..3] init 1; +n3S27is:[0..2] init 0; +n3S27op0:[1..3] init 1; +n3S27op1:[1..3] init 1; +n3S27os:[0..2] init 0; +n3S27opt:[1..3] init 1; +n3S27pc:[-6..2] init 0; n3S27ra:[-6..2] init 0; +[] n3S27is<2 & n3S27pc=-1 -> (n3S27ip0'=1)&(n3S27ip1'=n3S27ip0)&(n3S27is'=n3S27is+1)&(n3S27pc'=n3S27ra); +[] n3S27is=2 & n3S27pc=-1 -> (n3S27pc'=n3S27ra); +[] n3S27is=0 & n3S27pc=-2 -> (n3S27pc'=n3S27ra); +[] n3S27is>0 & n3S27is<2 & n3S27pc=-2 -> (n3S27ip1'=n3S27ip0)&(n3S27is'=n3S27is+1)&(n3S27pc'=n3S27ra); +[] n3S27is=2 & n3S27pc=-2 -> (n3S27pc'=n3S27ra); +[] n3S27is=0 & n3S27pc=-3 -> (n3S27pc'=n3S27ra); +[] n3S27is>0 & n3S27pc=-3 -> (n3S27ip0'=n3S27ip1)&(n3S27is'=n3S27is-1)&(n3S27pc'=n3S27ra); +[] n3S27os=0 & n3S27pc=-4 -> (n3S27op0'=n3S27opt)&(n3S27os'=1)&(n3S27pc'=-3); +[] n3S27os=1 & n3S27pc=-4 -> (n3S27op1'=n3S27opt)&(n3S27os'=2)&(n3S27pc'=-3); +[] n3S27os=2 & n3S27pc=-4 -> (n3S27pc'=-3); +[n2H1f1] n3S27is=0 -> (n3S27ip0'=3)&(n3S27is'=1); +[n2H1f1] n3S27is=1 -> (n3S27ip1'=3)&(n3S27is'=2); +[n2H1f1] n3S27is=2 -> true; +[n3S26f2] n3S27is=0 -> (n3S27ip0'=2)&(n3S27is'=1); +[n3S26f2] n3S27is=1 -> (n3S27ip1'=2)&(n3S27is'=2); +[n3S26f2] n3S27is=2 -> true; +[n3S25f2] n3S27is=0 -> (n3S27ip0'=1)&(n3S27is'=1); +[n3S25f2] n3S27is=1 -> (n3S27ip1'=1)&(n3S27is'=2); +[n3S25f2] n3S27is=2 -> true; +[] unlk=59 & numSteps0 -> (n3S27pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=59 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n3S27f3] n3S27pc=-5 & n3S27os>0 & n3S27op0=3 -> (n3S27op0'=n3S27op1)&(n3S27os'=n3S27os-1)&(n3S27pc'=-6); +[n3S27f2] n3S27pc=-5 & n3S27os>0 & n3S27op0=2 -> (n3S27op0'=n3S27op1)&(n3S27os'=n3S27os-1)&(n3S27pc'=-6); +[n3S27f1] n3S27pc=-5 & n3S27os>0 & n3S27op0=1 -> (n3S27op0'=n3S27op1)&(n3S27os'=n3S27os-1)&(n3S27pc'=-6); +[] numSteps (n3S27pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=29 & numSteps0 -> (n3S27pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=29 & numSteps (unlk'=30)&(numSkips'=numSkips+1); +[] n3S27pc=1 -> (n3S27opt'=3)&(n3S27pc'=-4)&(n3S27ra'=2); +[] numSteps (n3S27pc'=0)&(unlk'=30)&(numSteps'=numSteps+1); +endmodule +module n3S14 +n3S14ip0:[1..2] init 1; +n3S14ip1:[1..2] init 1; +n3S14is:[0..2] init 0; +n3S14op0:[1..2] init 1; +n3S14op1:[1..2] init 1; +n3S14os:[0..2] init 0; +n3S14opt:[1..2] init 1; +n3S14pc:[-6..2] init 0; n3S14ra:[-6..2] init 0; +[] n3S14is<2 & n3S14pc=-1 -> (n3S14ip0'=1)&(n3S14ip1'=n3S14ip0)&(n3S14is'=n3S14is+1)&(n3S14pc'=n3S14ra); +[] n3S14is=2 & n3S14pc=-1 -> (n3S14pc'=n3S14ra); +[] n3S14is=0 & n3S14pc=-2 -> (n3S14pc'=n3S14ra); +[] n3S14is>0 & n3S14is<2 & n3S14pc=-2 -> (n3S14ip1'=n3S14ip0)&(n3S14is'=n3S14is+1)&(n3S14pc'=n3S14ra); +[] n3S14is=2 & n3S14pc=-2 -> (n3S14pc'=n3S14ra); +[] n3S14is=0 & n3S14pc=-3 -> (n3S14pc'=n3S14ra); +[] n3S14is>0 & n3S14pc=-3 -> (n3S14ip0'=n3S14ip1)&(n3S14is'=n3S14is-1)&(n3S14pc'=n3S14ra); +[] n3S14os=0 & n3S14pc=-4 -> (n3S14op0'=n3S14opt)&(n3S14os'=1)&(n3S14pc'=-3); +[] n3S14os=1 & n3S14pc=-4 -> (n3S14op1'=n3S14opt)&(n3S14os'=2)&(n3S14pc'=-3); +[] n3S14os=2 & n3S14pc=-4 -> (n3S14pc'=-3); +[n3S15f2] n3S14is=0 -> (n3S14ip0'=2)&(n3S14is'=1); +[n3S15f2] n3S14is=1 -> (n3S14ip1'=2)&(n3S14is'=2); +[n3S15f2] n3S14is=2 -> true; +[n3S12f3] n3S14is=0 -> (n3S14ip0'=1)&(n3S14is'=1); +[n3S12f3] n3S14is=1 -> (n3S14ip1'=1)&(n3S14is'=2); +[n3S12f3] n3S14is=2 -> true; +[] unlk=46 & numSteps0 -> (n3S14pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=46 & numSteps (unlk'=47)&(numSkips'=numSkips+1); +[n3S14f2] n3S14pc=-5 & n3S14os>0 & n3S14op0=2 -> (n3S14op0'=n3S14op1)&(n3S14os'=n3S14os-1)&(n3S14pc'=-6); +[n3S14f1] n3S14pc=-5 & n3S14os>0 & n3S14op0=1 -> (n3S14op0'=n3S14op1)&(n3S14os'=n3S14os-1)&(n3S14pc'=-6); +[] numSteps (n3S14pc'=0)&(unlk'=47)&(numSteps'=numSteps+1); +[] unlk=16 & numSteps0 -> (n3S14pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[] n3S14pc=1 -> (n3S14opt'=2)&(n3S14pc'=-4)&(n3S14ra'=2); +[] numSteps (n3S14pc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +endmodule +module n3S25 +n3S25ip0:[1..2] init 1; +n3S25ip1:[1..2] init 1; +n3S25is:[0..2] init 0; +n3S25op0:[1..2] init 1; +n3S25op1:[1..2] init 1; +n3S25os:[0..2] init 0; +n3S25opt:[1..2] init 1; +n3S25pc:[-6..2] init 0; n3S25ra:[-6..2] init 0; +[] n3S25is<2 & n3S25pc=-1 -> (n3S25ip0'=1)&(n3S25ip1'=n3S25ip0)&(n3S25is'=n3S25is+1)&(n3S25pc'=n3S25ra); +[] n3S25is=2 & n3S25pc=-1 -> (n3S25pc'=n3S25ra); +[] n3S25is=0 & n3S25pc=-2 -> (n3S25pc'=n3S25ra); +[] n3S25is>0 & n3S25is<2 & n3S25pc=-2 -> (n3S25ip1'=n3S25ip0)&(n3S25is'=n3S25is+1)&(n3S25pc'=n3S25ra); +[] n3S25is=2 & n3S25pc=-2 -> (n3S25pc'=n3S25ra); +[] n3S25is=0 & n3S25pc=-3 -> (n3S25pc'=n3S25ra); +[] n3S25is>0 & n3S25pc=-3 -> (n3S25ip0'=n3S25ip1)&(n3S25is'=n3S25is-1)&(n3S25pc'=n3S25ra); +[] n3S25os=0 & n3S25pc=-4 -> (n3S25op0'=n3S25opt)&(n3S25os'=1)&(n3S25pc'=-3); +[] n3S25os=1 & n3S25pc=-4 -> (n3S25op1'=n3S25opt)&(n3S25os'=2)&(n3S25pc'=-3); +[] n3S25os=2 & n3S25pc=-4 -> (n3S25pc'=-3); +[n3S27f1] n3S25is=0 -> (n3S25ip0'=2)&(n3S25is'=1); +[n3S27f1] n3S25is=1 -> (n3S25ip1'=2)&(n3S25is'=2); +[n3S27f1] n3S25is=2 -> true; +[n3S24f2] n3S25is=0 -> (n3S25ip0'=1)&(n3S25is'=1); +[n3S24f2] n3S25is=1 -> (n3S25ip1'=1)&(n3S25is'=2); +[n3S24f2] n3S25is=2 -> true; +[] unlk=57 & numSteps0 -> (n3S25pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=57 & numSteps (unlk'=58)&(numSkips'=numSkips+1); +[n3S25f2] n3S25pc=-5 & n3S25os>0 & n3S25op0=2 -> (n3S25op0'=n3S25op1)&(n3S25os'=n3S25os-1)&(n3S25pc'=-6); +[n3S25f1] n3S25pc=-5 & n3S25os>0 & n3S25op0=1 -> (n3S25op0'=n3S25op1)&(n3S25os'=n3S25os-1)&(n3S25pc'=-6); +[] numSteps (n3S25pc'=0)&(unlk'=58)&(numSteps'=numSteps+1); +[] unlk=27 & numSteps0 -> (n3S25pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=27 & numSteps (unlk'=28)&(numSkips'=numSkips+1); +[] n3S25pc=1 -> (n3S25opt'=2)&(n3S25pc'=-4)&(n3S25ra'=2); +[] numSteps (n3S25pc'=0)&(unlk'=28)&(numSteps'=numSteps+1); +endmodule +module n3S23 +n3S23ip0:[1..3] init 1; +n3S23ip1:[1..3] init 1; +n3S23is:[0..2] init 0; +n3S23op0:[1..3] init 1; +n3S23op1:[1..3] init 1; +n3S23os:[0..2] init 0; +n3S23opt:[1..3] init 1; +n3S23pc:[-6..2] init 0; n3S23ra:[-6..2] init 0; +[] n3S23is<2 & n3S23pc=-1 -> (n3S23ip0'=1)&(n3S23ip1'=n3S23ip0)&(n3S23is'=n3S23is+1)&(n3S23pc'=n3S23ra); +[] n3S23is=2 & n3S23pc=-1 -> (n3S23pc'=n3S23ra); +[] n3S23is=0 & n3S23pc=-2 -> (n3S23pc'=n3S23ra); +[] n3S23is>0 & n3S23is<2 & n3S23pc=-2 -> (n3S23ip1'=n3S23ip0)&(n3S23is'=n3S23is+1)&(n3S23pc'=n3S23ra); +[] n3S23is=2 & n3S23pc=-2 -> (n3S23pc'=n3S23ra); +[] n3S23is=0 & n3S23pc=-3 -> (n3S23pc'=n3S23ra); +[] n3S23is>0 & n3S23pc=-3 -> (n3S23ip0'=n3S23ip1)&(n3S23is'=n3S23is-1)&(n3S23pc'=n3S23ra); +[] n3S23os=0 & n3S23pc=-4 -> (n3S23op0'=n3S23opt)&(n3S23os'=1)&(n3S23pc'=-3); +[] n3S23os=1 & n3S23pc=-4 -> (n3S23op1'=n3S23opt)&(n3S23os'=2)&(n3S23pc'=-3); +[] n3S23os=2 & n3S23pc=-4 -> (n3S23pc'=-3); +[n3S24f1] n3S23is=0 -> (n3S23ip0'=3)&(n3S23is'=1); +[n3S24f1] n3S23is=1 -> (n3S23ip1'=3)&(n3S23is'=2); +[n3S24f1] n3S23is=2 -> true; +[n3S22f2] n3S23is=0 -> (n3S23ip0'=2)&(n3S23is'=1); +[n3S22f2] n3S23is=1 -> (n3S23ip1'=2)&(n3S23is'=2); +[n3S22f2] n3S23is=2 -> true; +[n3S21f2] n3S23is=0 -> (n3S23ip0'=1)&(n3S23is'=1); +[n3S21f2] n3S23is=1 -> (n3S23ip1'=1)&(n3S23is'=2); +[n3S21f2] n3S23is=2 -> true; +[] unlk=55 & numSteps0 -> (n3S23pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=55 & numSteps (unlk'=56)&(numSkips'=numSkips+1); +[n3S23f3] n3S23pc=-5 & n3S23os>0 & n3S23op0=3 -> (n3S23op0'=n3S23op1)&(n3S23os'=n3S23os-1)&(n3S23pc'=-6); +[n3S23f2] n3S23pc=-5 & n3S23os>0 & n3S23op0=2 -> (n3S23op0'=n3S23op1)&(n3S23os'=n3S23os-1)&(n3S23pc'=-6); +[n3S23f1] n3S23pc=-5 & n3S23os>0 & n3S23op0=1 -> (n3S23op0'=n3S23op1)&(n3S23os'=n3S23os-1)&(n3S23pc'=-6); +[] numSteps (n3S23pc'=0)&(unlk'=56)&(numSteps'=numSteps+1); +[] unlk=25 & numSteps0 -> (n3S23pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=25 & numSteps (unlk'=26)&(numSkips'=numSkips+1); +[] n3S23pc=1 -> (n3S23opt'=3)&(n3S23pc'=-4)&(n3S23ra'=2); +[] numSteps (n3S23pc'=0)&(unlk'=26)&(numSteps'=numSteps+1); +endmodule +module n3S16 +n3S16t0:[2..3]; +n3S16ip0:[1..3] init 1; +n3S16ip1:[1..3] init 1; +n3S16is:[0..2] init 0; +n3S16op0:[1..3] init 1; +n3S16op1:[1..3] init 1; +n3S16os:[0..2] init 0; +n3S16opt:[1..3] init 1; +n3S16pc:[-6..3] init 0; n3S16ra:[-6..3] init 0; +[] n3S16is<2 & n3S16pc=-1 -> (n3S16ip0'=1)&(n3S16ip1'=n3S16ip0)&(n3S16is'=n3S16is+1)&(n3S16pc'=n3S16ra); +[] n3S16is=2 & n3S16pc=-1 -> (n3S16pc'=n3S16ra); +[] n3S16is=0 & n3S16pc=-2 -> (n3S16pc'=n3S16ra); +[] n3S16is>0 & n3S16is<2 & n3S16pc=-2 -> (n3S16ip1'=n3S16ip0)&(n3S16is'=n3S16is+1)&(n3S16pc'=n3S16ra); +[] n3S16is=2 & n3S16pc=-2 -> (n3S16pc'=n3S16ra); +[] n3S16is=0 & n3S16pc=-3 -> (n3S16pc'=n3S16ra); +[] n3S16is>0 & n3S16pc=-3 -> (n3S16ip0'=n3S16ip1)&(n3S16is'=n3S16is-1)&(n3S16pc'=n3S16ra); +[] n3S16os=0 & n3S16pc=-4 -> (n3S16op0'=n3S16opt)&(n3S16os'=1)&(n3S16pc'=-3); +[] n3S16os=1 & n3S16pc=-4 -> (n3S16op1'=n3S16opt)&(n3S16os'=2)&(n3S16pc'=-3); +[] n3S16os=2 & n3S16pc=-4 -> (n3S16pc'=-3); +[n3S18f1] n3S16is=0 -> (n3S16ip0'=3)&(n3S16is'=1); +[n3S18f1] n3S16is=1 -> (n3S16ip1'=3)&(n3S16is'=2); +[n3S18f1] n3S16is=2 -> true; +[n3S17f1] n3S16is=0 -> (n3S16ip0'=2)&(n3S16is'=1); +[n3S17f1] n3S16is=1 -> (n3S16ip1'=2)&(n3S16is'=2); +[n3S17f1] n3S16is=2 -> true; +[n3S15f3] n3S16is=0 -> (n3S16ip0'=1)&(n3S16is'=1); +[n3S15f3] n3S16is=1 -> (n3S16ip1'=1)&(n3S16is'=2); +[n3S15f3] n3S16is=2 -> true; +[] unlk=48 & numSteps0 -> (n3S16pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=48 & numSteps (unlk'=49)&(numSkips'=numSkips+1); +[n3S16f3] n3S16pc=-5 & n3S16os>0 & n3S16op0=3 -> (n3S16op0'=n3S16op1)&(n3S16os'=n3S16os-1)&(n3S16pc'=-6); +[n3S16f2] n3S16pc=-5 & n3S16os>0 & n3S16op0=2 -> (n3S16op0'=n3S16op1)&(n3S16os'=n3S16os-1)&(n3S16pc'=-6); +[n3S16f1] n3S16pc=-5 & n3S16os>0 & n3S16op0=1 -> (n3S16op0'=n3S16op1)&(n3S16os'=n3S16os-1)&(n3S16pc'=-6); +[] numSteps (n3S16pc'=0)&(unlk'=49)&(numSteps'=numSteps+1); +[] unlk=18 & numSteps0 -> (n3S16pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=18 & numSteps (unlk'=19)&(numSkips'=numSkips+1); +[] n3S16pc=1 -> 0.5:(n3S16t0'=2)&(n3S16pc'=2) + 0.5:(n3S16t0'=3)&(n3S16pc'=2); +[] n3S16pc=2 -> (n3S16opt'=n3S16t0)&(n3S16pc'=-4)&(n3S16ra'=3); +[] numSteps (n3S16pc'=0)&(unlk'=19)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..3] init 1; +n2S7ip1:[1..3] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..3] init 1; +n2S7op1:[1..3] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..3] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S8f1] n2S7is=0 -> (n2S7ip0'=3)&(n2S7is'=1); +[n2S8f1] n2S7is=1 -> (n2S7ip1'=3)&(n2S7is'=2); +[n2S8f1] n2S7is=2 -> true; +[n2S6f2] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S6f2] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S6f2] n2S7is=2 -> true; +[n2S5f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S5f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S5f2] n2S7is=2 -> true; +[] unlk=39 & numSteps0 -> (n2S7pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=39 & numSteps (unlk'=40)&(numSkips'=numSkips+1); +[n2S7f3] n2S7pc=-5 & n2S7os>0 & n2S7op0=3 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=40)&(numSteps'=numSteps+1); +[] unlk=9 & numSteps0 -> (n2S7pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[] n2S7pc=1 -> (n2S7opt'=3)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 & n3S10is=0 & n3S10os=0 & n3S11is=0 & n3S11os=0 & n3S12is=0 & n3S12os=0 & n3S13is=0 & n3S13os=0 & n3S14is=0 & n3S14os=0 & n3S15is=0 & n3S15os=0 & n3S16is=0 & n3S16os=0 & n3S17is=0 & n3S17os=0 & n3S18is=0 & n3S18os=0 & n3S19is=0 & n3S19os=0 & n3S20is=0 & n3S20os=0 & n3S21is=0 & n3S21os=0 & n3S22is=0 & n3S22os=0 & n3S23is=0 & n3S23os=0 & n3S24is=0 & n3S24os=0 & n3S25is=0 & n3S25os=0 & n3S26is=0 & n3S26os=0 & n3S27is=0 & n3S27os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 30, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9, S8 := 10, S9 := 11, S10 := 12, S11 := 13, S12 := 14, S13 := 15, S14 := 16, S15 := 17, S16 := 18, S17 := 19, S18 := 20, S19 := 21, S20 := 22, S21 := 23, S22 := 24, S23 := 25, S24 := 26, S25 := 27, S26 := 28, S27 := 29; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + Q_in.pushFront((Packet(),0)); + } else { + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],uniformInt(2,3))); } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __s3_ty{ + Q_in: Queue, Q_out: Queue; + def __s3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s3_ty, __S4 : __s0_ty, __S5 : __s1_ty, __S6 : __s2_ty, __S7 : __s3_ty, __S8 : __s0_ty, __S9 : __s1_ty, __S10 : __s2_ty, __S11 : __s3_ty, __S12 : __s0_ty, __S13 : __s1_ty, __S14 : __s2_ty, __S15 : __s3_ty, __S16 : __s0_ty, __S17 : __s1_ty, __S18 : __s2_ty, __S19 : __s3_ty, __S20 : __s0_ty, __S21 : __s1_ty, __S22 : __s2_ty, __S23 : __s3_ty, __S24 : __s0_ty, __S25 : __s1_ty, __S26 : __s2_ty, __S27 : __s3_ty; + next: ℝ; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s3_ty(), __S4 = __s0_ty(), __S5 = __s1_ty(), __S6 = __s2_ty(), __S7 = __s3_ty(), __S8 = __s0_ty(), __S9 = __s1_ty(), __S10 = __s2_ty(), __S11 = __s3_ty(), __S12 = __s0_ty(), __S13 = __s1_ty(), __S14 = __s2_ty(), __S15 = __s3_ty(), __S16 = __s0_ty(), __S17 = __s1_ty(), __S18 = __s2_ty(), __S19 = __s3_ty(), __S20 = __s0_ty(), __S21 = __s1_ty(), __S22 = __s2_ty(), __S23 = __s3_ty(), __S24 = __s0_ty(), __S25 = __s1_ty(), __S26 = __s2_ty(), __S27 = __s3_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else if current == 5 { __S3.Q_in } else if current == 6 { __S4.Q_in } else if current == 7 { __S5.Q_in } else if current == 8 { __S6.Q_in } else if current == 9 { __S7.Q_in } else if current == 10 { __S8.Q_in } else if current == 11 { __S9.Q_in } else if current == 12 { __S10.Q_in } else if current == 13 { __S11.Q_in } else if current == 14 { __S12.Q_in } else if current == 15 { __S13.Q_in } else if current == 16 { __S14.Q_in } else if current == 17 { __S15.Q_in } else if current == 18 { __S16.Q_in } else if current == 19 { __S17.Q_in } else if current == 20 { __S18.Q_in } else if current == 21 { __S19.Q_in } else if current == 22 { __S20.Q_in } else if current == 23 { __S21.Q_in } else if current == 24 { __S22.Q_in } else if current == 25 { __S23.Q_in } else if current == 26 { __S24.Q_in } else if current == 27 { __S25.Q_in } else if current == 28 { __S26.Q_in } else { __S27.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else if (current - k) == 5 { __S3.Q_out } else if (current - k) == 6 { __S4.Q_out } else if (current - k) == 7 { __S5.Q_out } else if (current - k) == 8 { __S6.Q_out } else if (current - k) == 9 { __S7.Q_out } else if (current - k) == 10 { __S8.Q_out } else if (current - k) == 11 { __S9.Q_out } else if (current - k) == 12 { __S10.Q_out } else if (current - k) == 13 { __S11.Q_out } else if (current - k) == 14 { __S12.Q_out } else if (current - k) == 15 { __S13.Q_out } else if (current - k) == 16 { __S14.Q_out } else if (current - k) == 17 { __S15.Q_out } else if (current - k) == 18 { __S16.Q_out } else if (current - k) == 19 { __S17.Q_out } else if (current - k) == 20 { __S18.Q_out } else if (current - k) == 21 { __S19.Q_out } else if (current - k) == 22 { __S20.Q_out } else if (current - k) == 23 { __S21.Q_out } else if (current - k) == 24 { __S22.Q_out } else if (current - k) == 25 { __S23.Q_out } else if (current - k) == 26 { __S24.Q_out } else if (current - k) == 27 { __S25.Q_out } else if (current - k) == 28 { __S26.Q_out } else { __S27.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() || __S8.Q_in.size() || __S8.Q_out.size() || __S9.Q_in.size() || __S9.Q_out.size() || __S10.Q_in.size() || __S10.Q_out.size() || __S11.Q_in.size() || __S11.Q_out.size() || __S12.Q_in.size() || __S12.Q_out.size() || __S13.Q_in.size() || __S13.Q_out.size() || __S14.Q_in.size() || __S14.Q_out.size() || __S15.Q_in.size() || __S15.Q_out.size() || __S16.Q_in.size() || __S16.Q_out.size() || __S17.Q_in.size() || __S17.Q_out.size() || __S18.Q_in.size() || __S18.Q_out.size() || __S19.Q_in.size() || __S19.Q_out.size() || __S20.Q_in.size() || __S20.Q_out.size() || __S21.Q_in.size() || __S21.Q_out.size() || __S22.Q_in.size() || __S22.Q_out.size() || __S23.Q_in.size() || __S23.Q_out.size() || __S24.Q_in.size() || __S24.Q_out.size() || __S25.Q_in.size() || __S25.Q_out.size() || __S26.Q_in.size() || __S26.Q_out.size() || __S27.Q_in.size() || __S27.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S27.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 2)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S8.Q_in.pushBack((pkt, 1)); + } + } + if node == 10 && __S8.Q_out.size() { + (pkt,port) := __S8.Q_out.takeFront(); + if port == 1 { + __S7.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S10.Q_in.pushBack((pkt, 1)); + } + } + if node == 11 && __S9.Q_out.size() { + (pkt,port) := __S9.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S11.Q_in.pushBack((pkt, 1)); + } + } + if node == 12 && __S10.Q_out.size() { + (pkt,port) := __S10.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S11.Q_in.pushBack((pkt, 2)); + } + } + if node == 13 && __S11.Q_out.size() { + (pkt,port) := __S11.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S10.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S12.Q_in.pushBack((pkt, 1)); + } + } + if node == 14 && __S12.Q_out.size() { + (pkt,port) := __S12.Q_out.takeFront(); + if port == 1 { + __S11.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S13.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S14.Q_in.pushBack((pkt, 1)); + } + } + if node == 15 && __S13.Q_out.size() { + (pkt,port) := __S13.Q_out.takeFront(); + if port == 1 { + __S12.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S15.Q_in.pushBack((pkt, 1)); + } + } + if node == 16 && __S14.Q_out.size() { + (pkt,port) := __S14.Q_out.takeFront(); + if port == 1 { + __S12.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S15.Q_in.pushBack((pkt, 2)); + } + } + if node == 17 && __S15.Q_out.size() { + (pkt,port) := __S15.Q_out.takeFront(); + if port == 1 { + __S13.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S14.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S16.Q_in.pushBack((pkt, 1)); + } + } + if node == 18 && __S16.Q_out.size() { + (pkt,port) := __S16.Q_out.takeFront(); + if port == 1 { + __S15.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S17.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S18.Q_in.pushBack((pkt, 1)); + } + } + if node == 19 && __S17.Q_out.size() { + (pkt,port) := __S17.Q_out.takeFront(); + if port == 1 { + __S16.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S19.Q_in.pushBack((pkt, 1)); + } + } + if node == 20 && __S18.Q_out.size() { + (pkt,port) := __S18.Q_out.takeFront(); + if port == 1 { + __S16.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S19.Q_in.pushBack((pkt, 2)); + } + } + if node == 21 && __S19.Q_out.size() { + (pkt,port) := __S19.Q_out.takeFront(); + if port == 1 { + __S17.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S18.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S20.Q_in.pushBack((pkt, 1)); + } + } + if node == 22 && __S20.Q_out.size() { + (pkt,port) := __S20.Q_out.takeFront(); + if port == 1 { + __S19.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S21.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S22.Q_in.pushBack((pkt, 1)); + } + } + if node == 23 && __S21.Q_out.size() { + (pkt,port) := __S21.Q_out.takeFront(); + if port == 1 { + __S20.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S23.Q_in.pushBack((pkt, 1)); + } + } + if node == 24 && __S22.Q_out.size() { + (pkt,port) := __S22.Q_out.takeFront(); + if port == 1 { + __S20.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S23.Q_in.pushBack((pkt, 2)); + } + } + if node == 25 && __S23.Q_out.size() { + (pkt,port) := __S23.Q_out.takeFront(); + if port == 1 { + __S21.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S22.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S24.Q_in.pushBack((pkt, 1)); + } + } + if node == 26 && __S24.Q_out.size() { + (pkt,port) := __S24.Q_out.takeFront(); + if port == 1 { + __S23.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S25.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S26.Q_in.pushBack((pkt, 1)); + } + } + if node == 27 && __S25.Q_out.size() { + (pkt,port) := __S25.Q_out.takeFront(); + if port == 1 { + __S24.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S27.Q_in.pushBack((pkt, 1)); + } + } + if node == 28 && __S26.Q_out.size() { + (pkt,port) := __S26.Q_out.takeFront(); + if port == 1 { + __S24.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S27.Q_in.pushBack((pkt, 2)); + } + } + if node == 29 && __S27.Q_out.size() { + (pkt,port) := __S27.Q_out.takeFront(); + if port == 1 { + __S25.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S26.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + if node == 10 && __S8.Q_in.size() { + __S8.__run(); + } + if node == 11 && __S9.Q_in.size() { + __S9.__run(); + } + if node == 12 && __S10.Q_in.size() { + __S10.__run(); + } + if node == 13 && __S11.Q_in.size() { + __S11.__run(); + } + if node == 14 && __S12.Q_in.size() { + __S12.__run(); + } + if node == 15 && __S13.Q_in.size() { + __S13.__run(); + } + if node == 16 && __S14.Q_in.size() { + __S14.__run(); + } + if node == 17 && __S15.Q_in.size() { + __S15.__run(); + } + if node == 18 && __S16.Q_in.size() { + __S16.__run(); + } + if node == 19 && __S17.Q_in.size() { + __S17.__run(); + } + if node == 20 && __S18.Q_in.size() { + __S18.__run(); + } + if node == 21 && __S19.Q_in.size() { + __S19.__run(); + } + if node == 22 && __S20.Q_in.size() { + __S20.__run(); + } + if node == 23 && __S21.Q_in.size() { + __S21.__run(); + } + if node == 24 && __S22.Q_in.size() { + __S22.__run(); + } + if node == 25 && __S23.Q_in.size() { + __S23.__run(); + } + if node == 26 && __S24.Q_in.size() { + __S24.__run(); + } + if node == 27 && __S25.Q_in.size() { + __S25.__run(); + } + if node == 28 && __S26.Q_in.size() { + __S26.__run(); + } + if node == 29 && __S27.Q_in.size() { + __S27.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size() || __d.__S8.Q_in.size() || __d.__S8.Q_out.size() || __d.__S9.Q_in.size() || __d.__S9.Q_out.size() || __d.__S10.Q_in.size() || __d.__S10.Q_out.size() || __d.__S11.Q_in.size() || __d.__S11.Q_out.size() || __d.__S12.Q_in.size() || __d.__S12.Q_out.size() || __d.__S13.Q_in.size() || __d.__S13.Q_out.size() || __d.__S14.Q_in.size() || __d.__S14.Q_out.size() || __d.__S15.Q_in.size() || __d.__S15.Q_out.size() || __d.__S16.Q_in.size() || __d.__S16.Q_out.size() || __d.__S17.Q_in.size() || __d.__S17.Q_out.size() || __d.__S18.Q_in.size() || __d.__S18.Q_out.size() || __d.__S19.Q_in.size() || __d.__S19.Q_out.size() || __d.__S20.Q_in.size() || __d.__S20.Q_out.size() || __d.__S21.Q_in.size() || __d.__S21.Q_out.size() || __d.__S22.Q_in.size() || __d.__S22.Q_out.size() || __d.__S23.Q_in.size() || __d.__S23.Q_out.size() || __d.__S24.Q_in.size() || __d.__S24.Q_out.size() || __d.__S25.Q_in.size() || __d.__S25.Q_out.size() || __d.__S26.Q_in.size() || __d.__S26.Q_out.size() || __d.__S27.Q_in.size() || __d.__S27.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/keyur/congestion-5.bayonet b/keyur/congestion-5.bayonet new file mode 100644 index 0000000..393cb99 --- /dev/null +++ b/keyur/congestion-5.bayonet @@ -0,0 +1,122 @@ + +parameters{ NUM_PACKETS(3), COST_01(2), COST_02(1), COST_21(1) } + +num_steps 30; + +query probability(pkt_count@H1 < NUM_PACKETS); + +topology{ + nodes{ H0, H1, S0, S1, S2 } + links{ + (H0,pt1) <-> (S0,pt3), + (S0,pt1) <-> (S1,pt1), + (S0,pt2) <-> (S2,pt1), + (S1,pt2) <-> (S2,pt2), + (S1,pt3) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ dst } + +programs{ H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2 } + + +def h0(pkt, port) state pkt_count(0){ + new; + if pkt_count < NUM_PACKETS { + new; + pkt_count = pkt_count + 1; + pkt.dst = H1; + fwd(1); + } else { drop; drop; } +} + +def h1(pkt, port) state pkt_count(0){ pkt_count = pkt_count + 1; drop; } + + +def s0(pkt, port) state route1(0), route2(0){ + if port == 1{ + fwd(3); + }else if port == 2{ + if pkt.dst == H0{ + fwd(3); + }else{ + fwd(1); + } + }else if port == 3{ + route1 = COST_01; + route2 = COST_02 + COST_21; + if route1 < route2 or route1 == route2 and flip(1/2) == 1 { + fwd(1); + }else{ + fwd(2); + } + } +} + +def s1(pkt, port) state route1(0), route2(0){ + if port == 1 { + fwd(3); + }else if port == 2{ + if pkt.dst == H1{ + fwd(3); + }else{ + fwd(1); + } + }else if port == 3{ + route1 = COST_01; + route2 = COST_02 + COST_21; + if route1 < route2 or route1 == route2 and flip(1/2) == 1 { + fwd(1); + }else{ + fwd(2); + } + } +} + +def s2(pkt, port){ + if port == 1 { + fwd(2); + }else{ + fwd(1); + } +} + +def scheduler()/*state cur_action(0)*/{ + /*action := cur_action%2; + node := floor(cur_action/2); + cur_action += 1; + cur_action %= 2*k; + return (action,node);*/ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; + + /*n_actions := 0; + for i in [0..k){ + if (Q_in@i).size() > 0 { n_actions += 1; } + if (Q_out@i).size() > 0 { n_actions += 1; } + } + cur_action := 0; + the_action := uniformInt(0,n_actions-1); + for i in [0..k){ + if (Q_in@i).size() > 0 { if cur_action == the_action { return (RunSw,i); } cur_action += 1; } + if (Q_out@i).size() > 0 { if cur_action == the_action { return (FwdQ,i); } cur_action += 1; } + } + assert(0); + return (0,0); // TODO: make unnecessary!*/ + /*return infer((){ + action := if flip(1/2){ RunSw } else { FwdQ }; + node := uniformInt(0,k-1); + if action == RunSw{ observe((Q_in@node).size()>0); } + if action == FwdQ{ observe((Q_out@node).size()>0); } + return (action,node); + }).sample();*/ + /*action := if flip(1/2){ RunSw } else { FwdQ }; + node := uniformInt(0,k-1); + return (action,node);*/ +} diff --git a/keyur/congestion-5.prism b/keyur/congestion-5.prism new file mode 100644 index 0000000..4670001 --- /dev/null +++ b/keyur/congestion-5.prism @@ -0,0 +1,250 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 30; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 2; +const int v7COST_02 = 1; +const int v7COST_21 = 1; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1;n2H0iv3dst0:[INTMIN..INTMAX] init 0; +n2H0ip1:[1..2] init 1;n2H0iv3dst1:[INTMIN..INTMAX] init 0; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1;n2H0ov3dst0:[INTMIN..INTMAX] init 0; +n2H0op1:[1..2] init 1;n2H0ov3dst1:[INTMIN..INTMAX] init 0; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..10] init 0; n2H0ra:[-6..10] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0iv3dst0'=0)&(n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0iv3dst0'=n2H0iv3dst1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0ov3dst0'=n2H0iv3dst0)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0ov3dst1'=n2H0iv3dst0)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0iv3dst0'=n2S0ov3dst0)&(n2H0is'=1); +[n2S0f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0iv3dst1'=n2S0ov3dst0)&(n2H0is'=2); +[n2S0f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0ov3dst0'=n2H0ov3dst1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=8); +[] n2H0pc=3 -> (n2H0pc'=-1)&(n2H0ra'=4); +[] n2H0pc=4 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=5); +[] n2H0pc=5 & 1>=INTMIN & 1<=INTMAX -> (n2H0iv3dst0'=1)&(n2H0pc'=6); +[] n2H0pc=6 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=7); +[] n2H0pc=7 -> (n2H0pc'=10); +[] n2H0pc=8 -> (n2H0pc'=-3)&(n2H0ra'=9); +[] n2H0pc=9 -> (n2H0pc'=-3)&(n2H0ra'=10); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1;n2S2iv3dst0:[INTMIN..INTMAX] init 0; +n2S2ip1:[1..2] init 1;n2S2iv3dst1:[INTMIN..INTMAX] init 0; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1;n2S2ov3dst0:[INTMIN..INTMAX] init 0; +n2S2op1:[1..2] init 1;n2S2ov3dst1:[INTMIN..INTMAX] init 0; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..5] init 0; n2S2ra:[-6..5] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2iv3dst0'=0)&(n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2iv3dst0'=n2S2iv3dst1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2ov3dst0'=n2S2iv3dst0)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2ov3dst1'=n2S2iv3dst0)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2iv3dst0'=n2S1ov3dst0)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2iv3dst1'=n2S1ov3dst0)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2iv3dst0'=n2S0ov3dst0)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2iv3dst1'=n2S0ov3dst0)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & (n2S2ip0=1) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2ip0=1)) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=5); +[] n2S2pc=4 -> (n2S2opt'=1)&(n2S2pc'=-4)&(n2S2ra'=5); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v6route1:[INTMIN..INTMAX] init 0; +n2S1v6route2:[INTMIN..INTMAX] init 0; +n2S1t0:[0..1]; +n2S1ip0:[1..3] init 1;n2S1iv3dst0:[INTMIN..INTMAX] init 0; +n2S1ip1:[1..3] init 1;n2S1iv3dst1:[INTMIN..INTMAX] init 0; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1;n2S1ov3dst0:[INTMIN..INTMAX] init 0; +n2S1op1:[1..3] init 1;n2S1ov3dst1:[INTMIN..INTMAX] init 0; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..19] init 0; n2S1ra:[-6..19] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1iv3dst0'=0)&(n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1iv3dst0'=n2S1iv3dst1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1ov3dst0'=n2S1iv3dst0)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1ov3dst1'=n2S1iv3dst0)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2H1f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1iv3dst0'=n2H1ov3dst0)&(n2S1is'=1); +[n2H1f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1iv3dst1'=n2H1ov3dst0)&(n2S1is'=2); +[n2H1f1] n2S1is=2 -> true; +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1iv3dst0'=n2S2ov3dst0)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1iv3dst1'=n2S2ov3dst0)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f1] n2S1is=0 -> (n2S1ip0'=1)&(n2S1iv3dst0'=n2S0ov3dst0)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=1)&(n2S1iv3dst1'=n2S0ov3dst0)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=19); +[] n2S1pc=4 & (n2S1ip0=2) -> (n2S1pc'=5); +[] n2S1pc=4 & !((n2S1ip0=2)) -> (n2S1pc'=10); +[] n2S1pc=5 & (n2S1iv3dst0=1) -> (n2S1pc'=6); +[] n2S1pc=5 & !((n2S1iv3dst0=1)) -> (n2S1pc'=8); +[] n2S1pc=6 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=7); +[] n2S1pc=7 -> (n2S1pc'=9); +[] n2S1pc=8 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=9); +[] n2S1pc=9 -> (n2S1pc'=19); +[] n2S1pc=10 & (n2S1ip0=3) -> (n2S1pc'=11); +[] n2S1pc=10 & !((n2S1ip0=3)) -> (n2S1pc'=19); +[] n2S1pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S1v6route1'=v7COST_01)&(n2S1pc'=12); +[] n2S1pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S1v6route2'=(v7COST_02+v7COST_21))&(n2S1pc'=13); +[] n2S1pc=13 -> 0.5:(n2S1t0'=0)&(n2S1pc'=14) + 0.5:(n2S1t0'=1)&(n2S1pc'=14); +[] n2S1pc=14 & ((n2S1v6route1 (n2S1pc'=15); +[] n2S1pc=14 & !(((n2S1v6route1 (n2S1pc'=17); +[] n2S1pc=15 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=16); +[] n2S1pc=16 -> (n2S1pc'=18); +[] n2S1pc=17 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=18); +[] n2S1pc=18 -> (n2S1pc'=19); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:[INTMIN..INTMAX] init 0; +n2S0v6route2:[INTMIN..INTMAX] init 0; +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1;n2S0iv3dst0:[INTMIN..INTMAX] init 0; +n2S0ip1:[1..3] init 1;n2S0iv3dst1:[INTMIN..INTMAX] init 0; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1;n2S0ov3dst0:[INTMIN..INTMAX] init 0; +n2S0op1:[1..3] init 1;n2S0ov3dst1:[INTMIN..INTMAX] init 0; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..19] init 0; n2S0ra:[-6..19] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0iv3dst0'=0)&(n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0iv3dst0'=n2S0iv3dst1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0ov3dst0'=n2S0iv3dst0)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0ov3dst1'=n2S0iv3dst0)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2H0f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0iv3dst0'=n2H0ov3dst0)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0iv3dst1'=n2H0ov3dst0)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0iv3dst0'=n2S2ov3dst0)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0iv3dst1'=n2S2ov3dst0)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0iv3dst0'=n2S1ov3dst0)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0iv3dst1'=n2S1ov3dst0)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=4); +[] n2S0pc=2 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=3); +[] n2S0pc=3 -> (n2S0pc'=19); +[] n2S0pc=4 & (n2S0ip0=2) -> (n2S0pc'=5); +[] n2S0pc=4 & !((n2S0ip0=2)) -> (n2S0pc'=10); +[] n2S0pc=5 & (n2S0iv3dst0=0) -> (n2S0pc'=6); +[] n2S0pc=5 & !((n2S0iv3dst0=0)) -> (n2S0pc'=8); +[] n2S0pc=6 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=7); +[] n2S0pc=7 -> (n2S0pc'=9); +[] n2S0pc=8 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=9); +[] n2S0pc=9 -> (n2S0pc'=19); +[] n2S0pc=10 & (n2S0ip0=3) -> (n2S0pc'=11); +[] n2S0pc=10 & !((n2S0ip0=3)) -> (n2S0pc'=19); +[] n2S0pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S0v6route1'=v7COST_01)&(n2S0pc'=12); +[] n2S0pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S0v6route2'=(v7COST_02+v7COST_21))&(n2S0pc'=13); +[] n2S0pc=13 -> 0.5:(n2S0t0'=0)&(n2S0pc'=14) + 0.5:(n2S0t0'=1)&(n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route1 (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route1 (n2S0pc'=17); +[] n2S0pc=15 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=16); +[] n2S0pc=16 -> (n2S0pc'=18); +[] n2S0pc=17 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=18); +[] n2S0pc=18 -> (n2S0pc'=19); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1;n2H1iv3dst0:[INTMIN..INTMAX] init 0; +n2H1ip1:[1..2] init 1;n2H1iv3dst1:[INTMIN..INTMAX] init 0; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1;n2H1ov3dst0:[INTMIN..INTMAX] init 0; +n2H1op1:[1..2] init 1;n2H1ov3dst1:[INTMIN..INTMAX] init 0; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1iv3dst0'=0)&(n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1iv3dst0'=n2H1iv3dst1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1ov3dst0'=n2H1iv3dst0)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1ov3dst1'=n2H1iv3dst0)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S1f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1iv3dst0'=n2S1ov3dst0)&(n2H1is'=1); +[n2S1f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1iv3dst1'=n2S1ov3dst0)&(n2H1is'=2); +[n2S1f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1ov3dst0'=n2H1ov3dst1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 5, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4; +NUM_PACKETS := 3, COST_01 := 2, COST_02 := 1, COST_21 := 1; +dat Packet{ + dst: ℝ; + def Packet(){ + dst = 0; + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + Q_in.pushFront((Packet(),0)); + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + Q_in.popFront(); + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + route1: ℝ, route2: ℝ; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + route1 = 0; + route2 = 0; + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if (Q_in.data[0][1]==2){ + if (Q_in.data[0][0].dst==H0){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } else { + if (Q_in.data[0][1]==3){ + route1 = COST_01; + route2 = (COST_02+COST_21); + if ((route10){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } + } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + route1: ℝ, route2: ℝ; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + route1 = 0; + route2 = 0; + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if (Q_in.data[0][1]==2){ + if (Q_in.data[0][0].dst==H1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } else { + if (Q_in.data[0][1]==3){ + route1 = COST_01; + route2 = (COST_02+COST_21); + if ((route10){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } + } + } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else { __S2.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else { __S2.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/keyur/congestion-5d.bayonet b/keyur/congestion-5d.bayonet new file mode 100644 index 0000000..8359c11 --- /dev/null +++ b/keyur/congestion-5d.bayonet @@ -0,0 +1,97 @@ + +parameters{ NUM_PACKETS(3), COST_01(2), COST_02(1), COST_21(1) } + +num_steps 30; + +query probability(pkt_count@H1 < NUM_PACKETS); + +topology{ + nodes{ H0, H1, S0, S1, S2 } + links{ + (H0,pt1) <-> (S0,pt3), + (S0,pt1) <-> (S1,pt1), + (S0,pt2) <-> (S2,pt1), + (S1,pt2) <-> (S2,pt2), + (S1,pt3) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ dst } + +programs{ H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2 } + + +def h0(pkt, port) state pkt_count(0){ + new; + if pkt_count < NUM_PACKETS { + new; + pkt_count = pkt_count + 1; + pkt.dst = H1; + fwd(1); + } else { drop; drop; } +} + +def h1(pkt, port) state pkt_count(0){ pkt_count = pkt_count + 1; drop; } + + +def s0(pkt, port) state route1(0), route2(0){ + if port == 1{ + fwd(3); + }else if port == 2{ + if pkt.dst == H0{ + fwd(3); + }else{ + fwd(1); + } + }else if port == 3{ + route1 = COST_01; + route2 = COST_02 + COST_21; + if route1 < route2 or route1 == route2 and flip(1/2) == 1 { + fwd(1); + }else{ + fwd(2); + } + } +} + +def s1(pkt, port) state route1(0), route2(0){ + if port == 1 { + fwd(3); + }else if port == 2{ + if pkt.dst == H1{ + fwd(3); + }else{ + fwd(1); + } + }else if port == 3{ + route1 = COST_01; + route2 = COST_02 + COST_21; + if route1 < route2 or route1 == route2 and flip(1/2) == 1 { + fwd(1); + }else{ + fwd(2); + } + } +} + +def s2(pkt, port){ + if port == 1 { + fwd(2); + }else{ + fwd(1); + } +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/keyur/congestion-5d.prism b/keyur/congestion-5d.prism new file mode 100644 index 0000000..2d07b47 --- /dev/null +++ b/keyur/congestion-5d.prism @@ -0,0 +1,262 @@ +dtmc +global unlk:[-1..9] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 30; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 10; +global numSkips:[0..10] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 2; +const int v7COST_02 = 1; +const int v7COST_21 = 1; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1;n2H0iv3dst0:[INTMIN..INTMAX] init 0; +n2H0ip1:[1..2] init 1;n2H0iv3dst1:[INTMIN..INTMAX] init 0; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1;n2H0ov3dst0:[INTMIN..INTMAX] init 0; +n2H0op1:[1..2] init 1;n2H0ov3dst1:[INTMIN..INTMAX] init 0; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..10] init 0; n2H0ra:[-6..10] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0iv3dst0'=0)&(n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0iv3dst0'=n2H0iv3dst1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0ov3dst0'=n2H0iv3dst0)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0ov3dst1'=n2H0iv3dst0)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0iv3dst0'=n2S0ov3dst0)&(n2H0is'=1); +[n2S0f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0iv3dst1'=n2S0ov3dst0)&(n2H0is'=2); +[n2S0f3] n2H0is=2 -> true; +[] unlk=5 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0ov3dst0'=n2H0ov3dst1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=8); +[] n2H0pc=3 -> (n2H0pc'=-1)&(n2H0ra'=4); +[] n2H0pc=4 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=5); +[] n2H0pc=5 & 1>=INTMIN & 1<=INTMAX -> (n2H0iv3dst0'=1)&(n2H0pc'=6); +[] n2H0pc=6 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=7); +[] n2H0pc=7 -> (n2H0pc'=10); +[] n2H0pc=8 -> (n2H0pc'=-3)&(n2H0ra'=9); +[] n2H0pc=9 -> (n2H0pc'=-3)&(n2H0ra'=10); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1;n2S2iv3dst0:[INTMIN..INTMAX] init 0; +n2S2ip1:[1..2] init 1;n2S2iv3dst1:[INTMIN..INTMAX] init 0; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1;n2S2ov3dst0:[INTMIN..INTMAX] init 0; +n2S2op1:[1..2] init 1;n2S2ov3dst1:[INTMIN..INTMAX] init 0; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..5] init 0; n2S2ra:[-6..5] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2iv3dst0'=0)&(n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2iv3dst0'=n2S2iv3dst1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2ov3dst0'=n2S2iv3dst0)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2ov3dst1'=n2S2iv3dst0)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2iv3dst0'=n2S1ov3dst0)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2iv3dst1'=n2S1ov3dst0)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2iv3dst0'=n2S0ov3dst0)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2iv3dst1'=n2S0ov3dst0)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[] unlk=9 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 & (n2S2ip0=1) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2ip0=1)) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=5); +[] n2S2pc=4 -> (n2S2opt'=1)&(n2S2pc'=-4)&(n2S2ra'=5); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v6route1:[INTMIN..INTMAX] init 0; +n2S1v6route2:[INTMIN..INTMAX] init 0; +n2S1t0:[0..1]; +n2S1ip0:[1..3] init 1;n2S1iv3dst0:[INTMIN..INTMAX] init 0; +n2S1ip1:[1..3] init 1;n2S1iv3dst1:[INTMIN..INTMAX] init 0; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1;n2S1ov3dst0:[INTMIN..INTMAX] init 0; +n2S1op1:[1..3] init 1;n2S1ov3dst1:[INTMIN..INTMAX] init 0; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..19] init 0; n2S1ra:[-6..19] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1iv3dst0'=0)&(n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1iv3dst0'=n2S1iv3dst1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1ov3dst0'=n2S1iv3dst0)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1ov3dst1'=n2S1iv3dst0)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2H1f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1iv3dst0'=n2H1ov3dst0)&(n2S1is'=1); +[n2H1f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1iv3dst1'=n2H1ov3dst0)&(n2S1is'=2); +[n2H1f1] n2S1is=2 -> true; +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1iv3dst0'=n2S2ov3dst0)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1iv3dst1'=n2S2ov3dst0)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f1] n2S1is=0 -> (n2S1ip0'=1)&(n2S1iv3dst0'=n2S0ov3dst0)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=1)&(n2S1iv3dst1'=n2S0ov3dst0)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[] unlk=8 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=19); +[] n2S1pc=4 & (n2S1ip0=2) -> (n2S1pc'=5); +[] n2S1pc=4 & !((n2S1ip0=2)) -> (n2S1pc'=10); +[] n2S1pc=5 & (n2S1iv3dst0=1) -> (n2S1pc'=6); +[] n2S1pc=5 & !((n2S1iv3dst0=1)) -> (n2S1pc'=8); +[] n2S1pc=6 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=7); +[] n2S1pc=7 -> (n2S1pc'=9); +[] n2S1pc=8 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=9); +[] n2S1pc=9 -> (n2S1pc'=19); +[] n2S1pc=10 & (n2S1ip0=3) -> (n2S1pc'=11); +[] n2S1pc=10 & !((n2S1ip0=3)) -> (n2S1pc'=19); +[] n2S1pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S1v6route1'=v7COST_01)&(n2S1pc'=12); +[] n2S1pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S1v6route2'=(v7COST_02+v7COST_21))&(n2S1pc'=13); +[] n2S1pc=13 -> 0.5:(n2S1t0'=0)&(n2S1pc'=14) + 0.5:(n2S1t0'=1)&(n2S1pc'=14); +[] n2S1pc=14 & ((n2S1v6route1 (n2S1pc'=15); +[] n2S1pc=14 & !(((n2S1v6route1 (n2S1pc'=17); +[] n2S1pc=15 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=16); +[] n2S1pc=16 -> (n2S1pc'=18); +[] n2S1pc=17 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=18); +[] n2S1pc=18 -> (n2S1pc'=19); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:[INTMIN..INTMAX] init 0; +n2S0v6route2:[INTMIN..INTMAX] init 0; +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1;n2S0iv3dst0:[INTMIN..INTMAX] init 0; +n2S0ip1:[1..3] init 1;n2S0iv3dst1:[INTMIN..INTMAX] init 0; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1;n2S0ov3dst0:[INTMIN..INTMAX] init 0; +n2S0op1:[1..3] init 1;n2S0ov3dst1:[INTMIN..INTMAX] init 0; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..19] init 0; n2S0ra:[-6..19] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0iv3dst0'=0)&(n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0iv3dst0'=n2S0iv3dst1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0ov3dst0'=n2S0iv3dst0)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0ov3dst1'=n2S0iv3dst0)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2H0f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0iv3dst0'=n2H0ov3dst0)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0iv3dst1'=n2H0ov3dst0)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0iv3dst0'=n2S2ov3dst0)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0iv3dst1'=n2S2ov3dst0)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0iv3dst0'=n2S1ov3dst0)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0iv3dst1'=n2S1ov3dst0)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[] unlk=7 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=4); +[] n2S0pc=2 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=3); +[] n2S0pc=3 -> (n2S0pc'=19); +[] n2S0pc=4 & (n2S0ip0=2) -> (n2S0pc'=5); +[] n2S0pc=4 & !((n2S0ip0=2)) -> (n2S0pc'=10); +[] n2S0pc=5 & (n2S0iv3dst0=0) -> (n2S0pc'=6); +[] n2S0pc=5 & !((n2S0iv3dst0=0)) -> (n2S0pc'=8); +[] n2S0pc=6 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=7); +[] n2S0pc=7 -> (n2S0pc'=9); +[] n2S0pc=8 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=9); +[] n2S0pc=9 -> (n2S0pc'=19); +[] n2S0pc=10 & (n2S0ip0=3) -> (n2S0pc'=11); +[] n2S0pc=10 & !((n2S0ip0=3)) -> (n2S0pc'=19); +[] n2S0pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S0v6route1'=v7COST_01)&(n2S0pc'=12); +[] n2S0pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S0v6route2'=(v7COST_02+v7COST_21))&(n2S0pc'=13); +[] n2S0pc=13 -> 0.5:(n2S0t0'=0)&(n2S0pc'=14) + 0.5:(n2S0t0'=1)&(n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route1 (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route1 (n2S0pc'=17); +[] n2S0pc=15 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=16); +[] n2S0pc=16 -> (n2S0pc'=18); +[] n2S0pc=17 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=18); +[] n2S0pc=18 -> (n2S0pc'=19); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1;n2H1iv3dst0:[INTMIN..INTMAX] init 0; +n2H1ip1:[1..2] init 1;n2H1iv3dst1:[INTMIN..INTMAX] init 0; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1;n2H1ov3dst0:[INTMIN..INTMAX] init 0; +n2H1op1:[1..2] init 1;n2H1ov3dst1:[INTMIN..INTMAX] init 0; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1iv3dst0'=0)&(n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1iv3dst0'=n2H1iv3dst1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1ov3dst0'=n2H1iv3dst0)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1ov3dst1'=n2H1iv3dst0)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S1f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1iv3dst0'=n2S1ov3dst0)&(n2H1is'=1); +[n2S1f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1iv3dst1'=n2S1ov3dst0)&(n2H1is'=2); +[n2S1f3] n2H1is=2 -> true; +[] unlk=6 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1ov3dst0'=n2H1ov3dst1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 5, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4; +NUM_PACKETS := 3, COST_01 := 2, COST_02 := 1, COST_21 := 1; +dat Packet{ + dst: ℝ; + def Packet(){ + dst = 0; + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + Q_in.pushFront((Packet(),0)); + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + Q_in.popFront(); + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + route1: ℝ, route2: ℝ; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + route1 = 0; + route2 = 0; + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if (Q_in.data[0][1]==2){ + if (Q_in.data[0][0].dst==H0){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } else { + if (Q_in.data[0][1]==3){ + route1 = COST_01; + route2 = (COST_02+COST_21); + if ((route10){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } + } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + route1: ℝ, route2: ℝ; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + route1 = 0; + route2 = 0; + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if (Q_in.data[0][1]==2){ + if (Q_in.data[0][0].dst==H1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } else { + if (Q_in.data[0][1]==3){ + route1 = COST_01; + route2 = (COST_02+COST_21); + if ((route10){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } + } + } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty; + next: ℝ; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else { __S2.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else { __S2.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/keyur/congestion-5n.prism b/keyur/congestion-5n.prism new file mode 100644 index 0000000..a0acc69 --- /dev/null +++ b/keyur/congestion-5n.prism @@ -0,0 +1,250 @@ +mdp +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 30; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 2; +const int v7COST_02 = 1; +const int v7COST_21 = 1; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1;n2H0iv3dst0:[INTMIN..INTMAX] init 0; +n2H0ip1:[1..2] init 1;n2H0iv3dst1:[INTMIN..INTMAX] init 0; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1;n2H0ov3dst0:[INTMIN..INTMAX] init 0; +n2H0op1:[1..2] init 1;n2H0ov3dst1:[INTMIN..INTMAX] init 0; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..10] init 0; n2H0ra:[-6..10] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0iv3dst0'=0)&(n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0iv3dst0'=n2H0iv3dst1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0ov3dst0'=n2H0iv3dst0)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0ov3dst1'=n2H0iv3dst0)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0iv3dst0'=n2S0ov3dst0)&(n2H0is'=1); +[n2S0f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0iv3dst1'=n2S0ov3dst0)&(n2H0is'=2); +[n2S0f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0ov3dst0'=n2H0ov3dst1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=8); +[] n2H0pc=3 -> (n2H0pc'=-1)&(n2H0ra'=4); +[] n2H0pc=4 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=5); +[] n2H0pc=5 & 1>=INTMIN & 1<=INTMAX -> (n2H0iv3dst0'=1)&(n2H0pc'=6); +[] n2H0pc=6 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=7); +[] n2H0pc=7 -> (n2H0pc'=10); +[] n2H0pc=8 -> (n2H0pc'=-3)&(n2H0ra'=9); +[] n2H0pc=9 -> (n2H0pc'=-3)&(n2H0ra'=10); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1;n2S2iv3dst0:[INTMIN..INTMAX] init 0; +n2S2ip1:[1..2] init 1;n2S2iv3dst1:[INTMIN..INTMAX] init 0; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1;n2S2ov3dst0:[INTMIN..INTMAX] init 0; +n2S2op1:[1..2] init 1;n2S2ov3dst1:[INTMIN..INTMAX] init 0; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..5] init 0; n2S2ra:[-6..5] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2iv3dst0'=0)&(n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2iv3dst0'=n2S2iv3dst1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2ov3dst0'=n2S2iv3dst0)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2ov3dst1'=n2S2iv3dst0)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2iv3dst0'=n2S1ov3dst0)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2iv3dst1'=n2S1ov3dst0)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2iv3dst0'=n2S0ov3dst0)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2iv3dst1'=n2S0ov3dst0)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & (n2S2ip0=1) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2ip0=1)) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=5); +[] n2S2pc=4 -> (n2S2opt'=1)&(n2S2pc'=-4)&(n2S2ra'=5); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v6route1:[INTMIN..INTMAX] init 0; +n2S1v6route2:[INTMIN..INTMAX] init 0; +n2S1t0:[0..1]; +n2S1ip0:[1..3] init 1;n2S1iv3dst0:[INTMIN..INTMAX] init 0; +n2S1ip1:[1..3] init 1;n2S1iv3dst1:[INTMIN..INTMAX] init 0; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1;n2S1ov3dst0:[INTMIN..INTMAX] init 0; +n2S1op1:[1..3] init 1;n2S1ov3dst1:[INTMIN..INTMAX] init 0; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..19] init 0; n2S1ra:[-6..19] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1iv3dst0'=0)&(n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1iv3dst0'=n2S1iv3dst1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1ov3dst0'=n2S1iv3dst0)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1ov3dst1'=n2S1iv3dst0)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2H1f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1iv3dst0'=n2H1ov3dst0)&(n2S1is'=1); +[n2H1f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1iv3dst1'=n2H1ov3dst0)&(n2S1is'=2); +[n2H1f1] n2S1is=2 -> true; +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1iv3dst0'=n2S2ov3dst0)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1iv3dst1'=n2S2ov3dst0)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f1] n2S1is=0 -> (n2S1ip0'=1)&(n2S1iv3dst0'=n2S0ov3dst0)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=1)&(n2S1iv3dst1'=n2S0ov3dst0)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=19); +[] n2S1pc=4 & (n2S1ip0=2) -> (n2S1pc'=5); +[] n2S1pc=4 & !((n2S1ip0=2)) -> (n2S1pc'=10); +[] n2S1pc=5 & (n2S1iv3dst0=1) -> (n2S1pc'=6); +[] n2S1pc=5 & !((n2S1iv3dst0=1)) -> (n2S1pc'=8); +[] n2S1pc=6 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=7); +[] n2S1pc=7 -> (n2S1pc'=9); +[] n2S1pc=8 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=9); +[] n2S1pc=9 -> (n2S1pc'=19); +[] n2S1pc=10 & (n2S1ip0=3) -> (n2S1pc'=11); +[] n2S1pc=10 & !((n2S1ip0=3)) -> (n2S1pc'=19); +[] n2S1pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S1v6route1'=v7COST_01)&(n2S1pc'=12); +[] n2S1pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S1v6route2'=(v7COST_02+v7COST_21))&(n2S1pc'=13); +[] n2S1pc=13 -> 0.5:(n2S1t0'=0)&(n2S1pc'=14) + 0.5:(n2S1t0'=1)&(n2S1pc'=14); +[] n2S1pc=14 & ((n2S1v6route1 (n2S1pc'=15); +[] n2S1pc=14 & !(((n2S1v6route1 (n2S1pc'=17); +[] n2S1pc=15 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=16); +[] n2S1pc=16 -> (n2S1pc'=18); +[] n2S1pc=17 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=18); +[] n2S1pc=18 -> (n2S1pc'=19); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:[INTMIN..INTMAX] init 0; +n2S0v6route2:[INTMIN..INTMAX] init 0; +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1;n2S0iv3dst0:[INTMIN..INTMAX] init 0; +n2S0ip1:[1..3] init 1;n2S0iv3dst1:[INTMIN..INTMAX] init 0; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1;n2S0ov3dst0:[INTMIN..INTMAX] init 0; +n2S0op1:[1..3] init 1;n2S0ov3dst1:[INTMIN..INTMAX] init 0; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..19] init 0; n2S0ra:[-6..19] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0iv3dst0'=0)&(n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0iv3dst0'=n2S0iv3dst1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0ov3dst0'=n2S0iv3dst0)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0ov3dst1'=n2S0iv3dst0)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2H0f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0iv3dst0'=n2H0ov3dst0)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0iv3dst1'=n2H0ov3dst0)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0iv3dst0'=n2S2ov3dst0)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0iv3dst1'=n2S2ov3dst0)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0iv3dst0'=n2S1ov3dst0)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0iv3dst1'=n2S1ov3dst0)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=4); +[] n2S0pc=2 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=3); +[] n2S0pc=3 -> (n2S0pc'=19); +[] n2S0pc=4 & (n2S0ip0=2) -> (n2S0pc'=5); +[] n2S0pc=4 & !((n2S0ip0=2)) -> (n2S0pc'=10); +[] n2S0pc=5 & (n2S0iv3dst0=0) -> (n2S0pc'=6); +[] n2S0pc=5 & !((n2S0iv3dst0=0)) -> (n2S0pc'=8); +[] n2S0pc=6 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=7); +[] n2S0pc=7 -> (n2S0pc'=9); +[] n2S0pc=8 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=9); +[] n2S0pc=9 -> (n2S0pc'=19); +[] n2S0pc=10 & (n2S0ip0=3) -> (n2S0pc'=11); +[] n2S0pc=10 & !((n2S0ip0=3)) -> (n2S0pc'=19); +[] n2S0pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S0v6route1'=v7COST_01)&(n2S0pc'=12); +[] n2S0pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S0v6route2'=(v7COST_02+v7COST_21))&(n2S0pc'=13); +[] n2S0pc=13 -> 0.5:(n2S0t0'=0)&(n2S0pc'=14) + 0.5:(n2S0t0'=1)&(n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route1 (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route1 (n2S0pc'=17); +[] n2S0pc=15 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=16); +[] n2S0pc=16 -> (n2S0pc'=18); +[] n2S0pc=17 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=18); +[] n2S0pc=18 -> (n2S0pc'=19); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1;n2H1iv3dst0:[INTMIN..INTMAX] init 0; +n2H1ip1:[1..2] init 1;n2H1iv3dst1:[INTMIN..INTMAX] init 0; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1;n2H1ov3dst0:[INTMIN..INTMAX] init 0; +n2H1op1:[1..2] init 1;n2H1ov3dst1:[INTMIN..INTMAX] init 0; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1iv3dst0'=0)&(n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1iv3dst0'=n2H1iv3dst1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1ov3dst0'=n2H1iv3dst0)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1ov3dst1'=n2H1iv3dst0)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S1f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1iv3dst0'=n2S1ov3dst0)&(n2H1is'=1); +[n2S1f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1iv3dst1'=n2S1ov3dst0)&(n2H1is'=2); +[n2S1f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1ov3dst0'=n2H1ov3dst1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count (S0,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S3,pt1), + (S0,pt4) <-> (S2,pt1), + (S1,pt2) <-> (S2,pt2), + (S2,pt3) <-> (S3,pt2), + (S3,pt3) <-> (H1,pt1) + } +} + +packet_fields{} + +programs{ H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3 } + +def h0(pkt, port) state pkt_count(0){ + new; + if pkt_count < NUM_PACKETS{ + new; + pkt_count = pkt_count + 1; + fwd(1); + }else { drop; drop; } +} + +def h1(pkt, port) state pkt_count(0){ + pkt_count = pkt_count + 1; + drop; +} + +def s0(pkt, port) +state +route1(0), route2(0), route3(0), +shortest1(0), shortest2(0), shortest3(0), +nshortest(0), which(0) +{ + if port == 1{ + route1 = COST_01 + COST_12 + COST_23; + route2 = COST_03; + route3 = COST_02 + COST_23; + shortest1=0; shortest2=0; shortest3=0; + if (route1 <= route2 && route2 <= route3) { shortest1 = 1; } + if (route2 <= route1 && route2 <= route3) { shortest2 = 1; } + if (route3 <= route1 && route3 <= route2) { shortest3 = 1; } + nshortest = shortest1 + shortest2 + shortest3; + if (nshortest==1) { + which = 1; + } else if (nshortest==2) { + which = uniformInt(1,2); + } else { + which = uniformInt(1,3); + } + if which == shortest1 { fwd(2); } + else if which == shortest1+shortest2 { fwd(3); } + else { fwd(4); } + } +} + +def s1(pkt,port){ + if port == 1{ + fwd(2); + } +} +def s2(pkt,port){ + if port == 1 || port == 2{ + fwd(3); + } +} +def s3(pkt,port){ + if port == 1 || port == 2{ + fwd(3); + } +} + + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/congestion-6.prism b/keyur/congestion-6.prism new file mode 100644 index 0000000..a664ff7 --- /dev/null +++ b/keyur/congestion-6.prism @@ -0,0 +1,298 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 40; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 1; +const int v7COST_02 = 2; +const int v7COST_03 = 3; +const int v7COST_12 = 1; +const int v7COST_23 = 1; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..9] init 0; n2H0ra:[-6..9] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=7); +[] n2H0pc=3 -> (n2H0pc'=-1)&(n2H0ra'=4); +[] n2H0pc=4 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=5); +[] n2H0pc=5 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=6); +[] n2H0pc=6 -> (n2H0pc'=9); +[] n2H0pc=7 -> (n2H0pc'=-3)&(n2H0ra'=8); +[] n2H0pc=8 -> (n2H0pc'=-3)&(n2H0ra'=9); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..4] init 0; n2S3ra:[-6..4] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2H1f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2H1f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2H1f1] n2S3is=2 -> true; +[n2S2f3] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f3] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f3] n2S3is=2 -> true; +[n2S0f3] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S0f3] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S0f3] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 & ((n2S3ip0=1)|(n2S3ip0=2)) -> (n2S3pc'=2); +[] n2S3pc=1 & !(((n2S3ip0=1)|(n2S3ip0=2))) -> (n2S3pc'=4); +[] n2S3pc=2 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=3); +[] n2S3pc=3 -> (n2S3pc'=4); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..4] init 0; n2S2ra:[-6..4] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f4] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f4] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f4] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & ((n2S2ip0=1)|(n2S2ip0=2)) -> (n2S2pc'=2); +[] n2S2pc=1 & !(((n2S2ip0=1)|(n2S2ip0=2))) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=3)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=4); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..4] init 0; n2S1ra:[-6..4] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=4); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:[INTMIN..INTMAX] init 0; +n2S0v6route2:[INTMIN..INTMAX] init 0; +n2S0v6route3:[INTMIN..INTMAX] init 0; +n2S0v9shortest1:[INTMIN..INTMAX] init 0; +n2S0v9shortest2:[INTMIN..INTMAX] init 0; +n2S0v9shortest3:[INTMIN..INTMAX] init 0; +n2S0v9nshortest:[INTMIN..INTMAX] init 0; +n2S0v5which:[INTMIN..INTMAX] init 0; +n2S0t0:[1..2]; +n2S0t1:[1..3]; +n2S0ip0:[1..4] init 1; +n2S0ip1:[1..4] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..4] init 1; +n2S0op1:[1..4] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..4] init 1; +n2S0pc:[-6..35] init 0; n2S0ra:[-6..35] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=4)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=4)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S3f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S3f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S3f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f4] n2S0pc=-5 & n2S0os>0 & n2S0op0=4 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=35); +[] n2S0pc=2 & ((v7COST_01+v7COST_12)+v7COST_23)>=INTMIN & ((v7COST_01+v7COST_12)+v7COST_23)<=INTMAX -> (n2S0v6route1'=((v7COST_01+v7COST_12)+v7COST_23))&(n2S0pc'=3); +[] n2S0pc=3 & v7COST_03>=INTMIN & v7COST_03<=INTMAX -> (n2S0v6route2'=v7COST_03)&(n2S0pc'=4); +[] n2S0pc=4 & (v7COST_02+v7COST_23)>=INTMIN & (v7COST_02+v7COST_23)<=INTMAX -> (n2S0v6route3'=(v7COST_02+v7COST_23))&(n2S0pc'=5); +[] n2S0pc=5 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest1'=0)&(n2S0pc'=6); +[] n2S0pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest2'=0)&(n2S0pc'=7); +[] n2S0pc=7 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest3'=0)&(n2S0pc'=8); +[] n2S0pc=8 & ((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=9); +[] n2S0pc=8 & !(((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=11); +[] n2S0pc=9 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest1'=1)&(n2S0pc'=10); +[] n2S0pc=10 -> (n2S0pc'=11); +[] n2S0pc=11 & ((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=12); +[] n2S0pc=11 & !(((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=14); +[] n2S0pc=12 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest2'=1)&(n2S0pc'=13); +[] n2S0pc=13 -> (n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2)) -> (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2))) -> (n2S0pc'=17); +[] n2S0pc=15 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest3'=1)&(n2S0pc'=16); +[] n2S0pc=16 -> (n2S0pc'=17); +[] n2S0pc=17 & ((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3)>=INTMIN & ((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3)<=INTMAX -> (n2S0v9nshortest'=((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3))&(n2S0pc'=18); +[] n2S0pc=18 & (n2S0v9nshortest=1) -> (n2S0pc'=19); +[] n2S0pc=18 & !((n2S0v9nshortest=1)) -> (n2S0pc'=21); +[] n2S0pc=19 & 1>=INTMIN & 1<=INTMAX -> (n2S0v5which'=1)&(n2S0pc'=20); +[] n2S0pc=20 -> (n2S0pc'=27); +[] n2S0pc=21 & (n2S0v9nshortest=2) -> (n2S0pc'=22); +[] n2S0pc=21 & !((n2S0v9nshortest=2)) -> (n2S0pc'=25); +[] n2S0pc=22 -> 0.5:(n2S0t0'=1)&(n2S0pc'=23) + 0.5:(n2S0t0'=2)&(n2S0pc'=23); +[] n2S0pc=23 & n2S0t0>=INTMIN & n2S0t0<=INTMAX -> (n2S0v5which'=n2S0t0)&(n2S0pc'=24); +[] n2S0pc=24 -> (n2S0pc'=27); +[] n2S0pc=25 -> 0.333333:(n2S0t1'=1)&(n2S0pc'=26) + 0.333333:(n2S0t1'=2)&(n2S0pc'=26) + 0.333333:(n2S0t1'=3)&(n2S0pc'=26); +[] n2S0pc=26 & n2S0t1>=INTMIN & n2S0t1<=INTMAX -> (n2S0v5which'=n2S0t1)&(n2S0pc'=27); +[] n2S0pc=27 & (n2S0v5which=n2S0v9shortest1) -> (n2S0pc'=28); +[] n2S0pc=27 & !((n2S0v5which=n2S0v9shortest1)) -> (n2S0pc'=30); +[] n2S0pc=28 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=29); +[] n2S0pc=29 -> (n2S0pc'=34); +[] n2S0pc=30 & (n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2)) -> (n2S0pc'=31); +[] n2S0pc=30 & !((n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2))) -> (n2S0pc'=33); +[] n2S0pc=31 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=32); +[] n2S0pc=32 -> (n2S0pc'=34); +[] n2S0pc=33 -> (n2S0opt'=4)&(n2S0pc'=-4)&(n2S0ra'=34); +[] n2S0pc=34 -> (n2S0pc'=35); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S3f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S3f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S3f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 6, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5; +NUM_PACKETS := 3, COST_01 := 1, COST_02 := 2, COST_03 := 3, COST_12 := 1, COST_23 := 1; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + Q_in.pushFront((Packet(),0)); + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + Q_in.popFront(); + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + route1: ℝ, route2: ℝ, route3: ℝ, shortest1: ℝ, shortest2: ℝ, shortest3: ℝ, nshortest: ℝ, which: ℝ; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + route1 = 0; + route2 = 0; + route3 = 0; + shortest1 = 0; + shortest2 = 0; + shortest3 = 0; + nshortest = 0; + which = 0; + } + def __run(){ + if (Q_in.data[0][1]==1){ + route1 = ((COST_01+COST_12)+COST_23); + route2 = COST_03; + route3 = (COST_02+COST_23); + shortest1 = 0; + shortest2 = 0; + shortest3 = 0; + if ((route1<=route2)&&(route2<=route3)){ + shortest1 = 1; + } + if ((route2<=route1)&&(route2<=route3)){ + shortest2 = 1; + } + if ((route3<=route1)&&(route3<=route2)){ + shortest3 = 1; + } + nshortest = ((shortest1+shortest2)+shortest3); + if (nshortest==1){ + which = 1; + } else { + if (nshortest==2){ + which = uniformInt(1,2); + } else { + which = uniformInt(1,3); + } + } + if (which==shortest1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } else { + if (which==(shortest1+shortest2)){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],4)); } + } + } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if ((Q_in.data[0][1]==1)||(Q_in.data[0][1]==2)){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } + } +} +dat __s3_ty{ + Q_in: Queue, Q_out: Queue; + def __s3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if ((Q_in.data[0][1]==1)||(Q_in.data[0][1]==2)){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s3_ty; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s3_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else if i == 4 { __S2.Q_in } else { __S3.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else if i == 4 { __S2.Q_out } else { __S3.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 4)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/keyur/congestion-6d.bayonet b/keyur/congestion-6d.bayonet new file mode 100644 index 0000000..9a8a9eb --- /dev/null +++ b/keyur/congestion-6d.bayonet @@ -0,0 +1,96 @@ + +parameters{ NUM_PACKETS(3), COST_01(1), COST_02(2), COST_03(3), COST_12(1), COST_23(1) } + +num_steps 40; + +queue_capacity 2; + +query probability(pkt_count@H1 < NUM_PACKETS); + +topology{ + nodes{ H0, H1, S0, S1, S2, S3 } + links{ + (H0,pt1) <-> (S0,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S3,pt1), + (S0,pt4) <-> (S2,pt1), + (S1,pt2) <-> (S2,pt2), + (S2,pt3) <-> (S3,pt2), + (S3,pt3) <-> (H1,pt1) + } +} + +packet_fields{} + +programs{ H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3 } + +def h0(pkt, port) state pkt_count(0){ + new; + if pkt_count < NUM_PACKETS{ + new; + pkt_count = pkt_count + 1; + fwd(1); + }else { drop; drop; } +} + +def h1(pkt, port) state pkt_count(0){ + pkt_count = pkt_count + 1; + drop; +} + +def s0(pkt, port) +state +route1(0), route2(0), route3(0), +shortest1(0), shortest2(0), shortest3(0), +nshortest(0), which(0) +{ + if port == 1{ + route1 = COST_01 + COST_12 + COST_23; + route2 = COST_03; + route3 = COST_02 + COST_23; + shortest1=0; shortest2=0; shortest3=0; + if (route1 <= route2 && route2 <= route3) { shortest1 = 1; } + if (route2 <= route1 && route2 <= route3) { shortest2 = 1; } + if (route3 <= route1 && route3 <= route2) { shortest3 = 1; } + nshortest = shortest1 + shortest2 + shortest3; + if (nshortest==1) { + which = 1; + } else if (nshortest==2) { + which = uniformInt(1,2); + } else { + which = uniformInt(1,3); + } + if which == shortest1 { fwd(2); } + else if which == shortest1+shortest2 { fwd(3); } + else { fwd(4); } + } +} + +def s1(pkt,port){ + if port == 1{ + fwd(2); + } +} +def s2(pkt,port){ + if port == 1 || port == 2{ + fwd(3); + } +} +def s3(pkt,port){ + if port == 1 || port == 2{ + fwd(3); + } +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/keyur/congestion-6d.prism b/keyur/congestion-6d.prism new file mode 100644 index 0000000..ce7bafc --- /dev/null +++ b/keyur/congestion-6d.prism @@ -0,0 +1,312 @@ +dtmc +global unlk:[-1..11] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 40; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 12; +global numSkips:[0..12] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 1; +const int v7COST_02 = 2; +const int v7COST_03 = 3; +const int v7COST_12 = 1; +const int v7COST_23 = 1; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..9] init 0; n2H0ra:[-6..9] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk=6 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=7); +[] n2H0pc=3 -> (n2H0pc'=-1)&(n2H0ra'=4); +[] n2H0pc=4 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=5); +[] n2H0pc=5 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=6); +[] n2H0pc=6 -> (n2H0pc'=9); +[] n2H0pc=7 -> (n2H0pc'=-3)&(n2H0ra'=8); +[] n2H0pc=8 -> (n2H0pc'=-3)&(n2H0ra'=9); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..4] init 0; n2S3ra:[-6..4] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2H1f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2H1f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2H1f1] n2S3is=2 -> true; +[n2S2f3] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f3] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f3] n2S3is=2 -> true; +[n2S0f3] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S0f3] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S0f3] n2S3is=2 -> true; +[] unlk=11 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 & ((n2S3ip0=1)|(n2S3ip0=2)) -> (n2S3pc'=2); +[] n2S3pc=1 & !(((n2S3ip0=1)|(n2S3ip0=2))) -> (n2S3pc'=4); +[] n2S3pc=2 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=3); +[] n2S3pc=3 -> (n2S3pc'=4); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..4] init 0; n2S2ra:[-6..4] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f4] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f4] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f4] n2S2is=2 -> true; +[] unlk=10 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 & ((n2S2ip0=1)|(n2S2ip0=2)) -> (n2S2pc'=2); +[] n2S2pc=1 & !(((n2S2ip0=1)|(n2S2ip0=2))) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=3)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=4); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..4] init 0; n2S1ra:[-6..4] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=9 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=4); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:[INTMIN..INTMAX] init 0; +n2S0v6route2:[INTMIN..INTMAX] init 0; +n2S0v6route3:[INTMIN..INTMAX] init 0; +n2S0v9shortest1:[INTMIN..INTMAX] init 0; +n2S0v9shortest2:[INTMIN..INTMAX] init 0; +n2S0v9shortest3:[INTMIN..INTMAX] init 0; +n2S0v9nshortest:[INTMIN..INTMAX] init 0; +n2S0v5which:[INTMIN..INTMAX] init 0; +n2S0t0:[1..2]; +n2S0t1:[1..3]; +n2S0ip0:[1..4] init 1; +n2S0ip1:[1..4] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..4] init 1; +n2S0op1:[1..4] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..4] init 1; +n2S0pc:[-6..35] init 0; n2S0ra:[-6..35] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=4)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=4)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S3f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S3f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S3f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk=8 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[n2S0f4] n2S0pc=-5 & n2S0os>0 & n2S0op0=4 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=35); +[] n2S0pc=2 & ((v7COST_01+v7COST_12)+v7COST_23)>=INTMIN & ((v7COST_01+v7COST_12)+v7COST_23)<=INTMAX -> (n2S0v6route1'=((v7COST_01+v7COST_12)+v7COST_23))&(n2S0pc'=3); +[] n2S0pc=3 & v7COST_03>=INTMIN & v7COST_03<=INTMAX -> (n2S0v6route2'=v7COST_03)&(n2S0pc'=4); +[] n2S0pc=4 & (v7COST_02+v7COST_23)>=INTMIN & (v7COST_02+v7COST_23)<=INTMAX -> (n2S0v6route3'=(v7COST_02+v7COST_23))&(n2S0pc'=5); +[] n2S0pc=5 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest1'=0)&(n2S0pc'=6); +[] n2S0pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest2'=0)&(n2S0pc'=7); +[] n2S0pc=7 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest3'=0)&(n2S0pc'=8); +[] n2S0pc=8 & ((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=9); +[] n2S0pc=8 & !(((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=11); +[] n2S0pc=9 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest1'=1)&(n2S0pc'=10); +[] n2S0pc=10 -> (n2S0pc'=11); +[] n2S0pc=11 & ((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=12); +[] n2S0pc=11 & !(((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=14); +[] n2S0pc=12 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest2'=1)&(n2S0pc'=13); +[] n2S0pc=13 -> (n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2)) -> (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2))) -> (n2S0pc'=17); +[] n2S0pc=15 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest3'=1)&(n2S0pc'=16); +[] n2S0pc=16 -> (n2S0pc'=17); +[] n2S0pc=17 & ((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3)>=INTMIN & ((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3)<=INTMAX -> (n2S0v9nshortest'=((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3))&(n2S0pc'=18); +[] n2S0pc=18 & (n2S0v9nshortest=1) -> (n2S0pc'=19); +[] n2S0pc=18 & !((n2S0v9nshortest=1)) -> (n2S0pc'=21); +[] n2S0pc=19 & 1>=INTMIN & 1<=INTMAX -> (n2S0v5which'=1)&(n2S0pc'=20); +[] n2S0pc=20 -> (n2S0pc'=27); +[] n2S0pc=21 & (n2S0v9nshortest=2) -> (n2S0pc'=22); +[] n2S0pc=21 & !((n2S0v9nshortest=2)) -> (n2S0pc'=25); +[] n2S0pc=22 -> 0.5:(n2S0t0'=1)&(n2S0pc'=23) + 0.5:(n2S0t0'=2)&(n2S0pc'=23); +[] n2S0pc=23 & n2S0t0>=INTMIN & n2S0t0<=INTMAX -> (n2S0v5which'=n2S0t0)&(n2S0pc'=24); +[] n2S0pc=24 -> (n2S0pc'=27); +[] n2S0pc=25 -> 0.333333:(n2S0t1'=1)&(n2S0pc'=26) + 0.333333:(n2S0t1'=2)&(n2S0pc'=26) + 0.333333:(n2S0t1'=3)&(n2S0pc'=26); +[] n2S0pc=26 & n2S0t1>=INTMIN & n2S0t1<=INTMAX -> (n2S0v5which'=n2S0t1)&(n2S0pc'=27); +[] n2S0pc=27 & (n2S0v5which=n2S0v9shortest1) -> (n2S0pc'=28); +[] n2S0pc=27 & !((n2S0v5which=n2S0v9shortest1)) -> (n2S0pc'=30); +[] n2S0pc=28 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=29); +[] n2S0pc=29 -> (n2S0pc'=34); +[] n2S0pc=30 & (n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2)) -> (n2S0pc'=31); +[] n2S0pc=30 & !((n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2))) -> (n2S0pc'=33); +[] n2S0pc=31 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=32); +[] n2S0pc=32 -> (n2S0pc'=34); +[] n2S0pc=33 -> (n2S0opt'=4)&(n2S0pc'=-4)&(n2S0ra'=34); +[] n2S0pc=34 -> (n2S0pc'=35); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S3f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S3f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S3f3] n2H1is=2 -> true; +[] unlk=7 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 6, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5; +NUM_PACKETS := 3, COST_01 := 1, COST_02 := 2, COST_03 := 3, COST_12 := 1, COST_23 := 1; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + Q_in.pushFront((Packet(),0)); + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + Q_in.popFront(); + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + route1: ℝ, route2: ℝ, route3: ℝ, shortest1: ℝ, shortest2: ℝ, shortest3: ℝ, nshortest: ℝ, which: ℝ; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + route1 = 0; + route2 = 0; + route3 = 0; + shortest1 = 0; + shortest2 = 0; + shortest3 = 0; + nshortest = 0; + which = 0; + } + def __run(){ + if (Q_in.data[0][1]==1){ + route1 = ((COST_01+COST_12)+COST_23); + route2 = COST_03; + route3 = (COST_02+COST_23); + shortest1 = 0; + shortest2 = 0; + shortest3 = 0; + if ((route1<=route2)&&(route2<=route3)){ + shortest1 = 1; + } + if ((route2<=route1)&&(route2<=route3)){ + shortest2 = 1; + } + if ((route3<=route1)&&(route3<=route2)){ + shortest3 = 1; + } + nshortest = ((shortest1+shortest2)+shortest3); + if (nshortest==1){ + which = 1; + } else { + if (nshortest==2){ + which = uniformInt(1,2); + } else { + which = uniformInt(1,3); + } + } + if (which==shortest1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } else { + if (which==(shortest1+shortest2)){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],4)); } + } + } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if ((Q_in.data[0][1]==1)||(Q_in.data[0][1]==2)){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } + } +} +dat __s3_ty{ + Q_in: Queue, Q_out: Queue; + def __s3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if ((Q_in.data[0][1]==1)||(Q_in.data[0][1]==2)){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s3_ty; + next: ℝ; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s3_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else { __S3.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else { __S3.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 4)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/keyur/congestion-6n.prism b/keyur/congestion-6n.prism new file mode 100644 index 0000000..3b312d2 --- /dev/null +++ b/keyur/congestion-6n.prism @@ -0,0 +1,298 @@ +mdp +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 40; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 1; +const int v7COST_02 = 2; +const int v7COST_03 = 3; +const int v7COST_12 = 1; +const int v7COST_23 = 1; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..9] init 0; n2H0ra:[-6..9] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=7); +[] n2H0pc=3 -> (n2H0pc'=-1)&(n2H0ra'=4); +[] n2H0pc=4 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=5); +[] n2H0pc=5 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=6); +[] n2H0pc=6 -> (n2H0pc'=9); +[] n2H0pc=7 -> (n2H0pc'=-3)&(n2H0ra'=8); +[] n2H0pc=8 -> (n2H0pc'=-3)&(n2H0ra'=9); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..4] init 0; n2S3ra:[-6..4] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2H1f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2H1f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2H1f1] n2S3is=2 -> true; +[n2S2f3] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f3] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f3] n2S3is=2 -> true; +[n2S0f3] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S0f3] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S0f3] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 & ((n2S3ip0=1)|(n2S3ip0=2)) -> (n2S3pc'=2); +[] n2S3pc=1 & !(((n2S3ip0=1)|(n2S3ip0=2))) -> (n2S3pc'=4); +[] n2S3pc=2 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=3); +[] n2S3pc=3 -> (n2S3pc'=4); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..4] init 0; n2S2ra:[-6..4] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f4] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f4] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f4] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & ((n2S2ip0=1)|(n2S2ip0=2)) -> (n2S2pc'=2); +[] n2S2pc=1 & !(((n2S2ip0=1)|(n2S2ip0=2))) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=3)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=4); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..4] init 0; n2S1ra:[-6..4] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=4); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:[INTMIN..INTMAX] init 0; +n2S0v6route2:[INTMIN..INTMAX] init 0; +n2S0v6route3:[INTMIN..INTMAX] init 0; +n2S0v9shortest1:[INTMIN..INTMAX] init 0; +n2S0v9shortest2:[INTMIN..INTMAX] init 0; +n2S0v9shortest3:[INTMIN..INTMAX] init 0; +n2S0v9nshortest:[INTMIN..INTMAX] init 0; +n2S0v5which:[INTMIN..INTMAX] init 0; +n2S0t0:[1..2]; +n2S0t1:[1..3]; +n2S0ip0:[1..4] init 1; +n2S0ip1:[1..4] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..4] init 1; +n2S0op1:[1..4] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..4] init 1; +n2S0pc:[-6..35] init 0; n2S0ra:[-6..35] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=4)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=4)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S3f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S3f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S3f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f4] n2S0pc=-5 & n2S0os>0 & n2S0op0=4 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=35); +[] n2S0pc=2 & ((v7COST_01+v7COST_12)+v7COST_23)>=INTMIN & ((v7COST_01+v7COST_12)+v7COST_23)<=INTMAX -> (n2S0v6route1'=((v7COST_01+v7COST_12)+v7COST_23))&(n2S0pc'=3); +[] n2S0pc=3 & v7COST_03>=INTMIN & v7COST_03<=INTMAX -> (n2S0v6route2'=v7COST_03)&(n2S0pc'=4); +[] n2S0pc=4 & (v7COST_02+v7COST_23)>=INTMIN & (v7COST_02+v7COST_23)<=INTMAX -> (n2S0v6route3'=(v7COST_02+v7COST_23))&(n2S0pc'=5); +[] n2S0pc=5 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest1'=0)&(n2S0pc'=6); +[] n2S0pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest2'=0)&(n2S0pc'=7); +[] n2S0pc=7 & 0>=INTMIN & 0<=INTMAX -> (n2S0v9shortest3'=0)&(n2S0pc'=8); +[] n2S0pc=8 & ((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=9); +[] n2S0pc=8 & !(((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=11); +[] n2S0pc=9 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest1'=1)&(n2S0pc'=10); +[] n2S0pc=10 -> (n2S0pc'=11); +[] n2S0pc=11 & ((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=12); +[] n2S0pc=11 & !(((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=14); +[] n2S0pc=12 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest2'=1)&(n2S0pc'=13); +[] n2S0pc=13 -> (n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2)) -> (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2))) -> (n2S0pc'=17); +[] n2S0pc=15 & 1>=INTMIN & 1<=INTMAX -> (n2S0v9shortest3'=1)&(n2S0pc'=16); +[] n2S0pc=16 -> (n2S0pc'=17); +[] n2S0pc=17 & ((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3)>=INTMIN & ((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3)<=INTMAX -> (n2S0v9nshortest'=((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3))&(n2S0pc'=18); +[] n2S0pc=18 & (n2S0v9nshortest=1) -> (n2S0pc'=19); +[] n2S0pc=18 & !((n2S0v9nshortest=1)) -> (n2S0pc'=21); +[] n2S0pc=19 & 1>=INTMIN & 1<=INTMAX -> (n2S0v5which'=1)&(n2S0pc'=20); +[] n2S0pc=20 -> (n2S0pc'=27); +[] n2S0pc=21 & (n2S0v9nshortest=2) -> (n2S0pc'=22); +[] n2S0pc=21 & !((n2S0v9nshortest=2)) -> (n2S0pc'=25); +[] n2S0pc=22 -> 0.5:(n2S0t0'=1)&(n2S0pc'=23) + 0.5:(n2S0t0'=2)&(n2S0pc'=23); +[] n2S0pc=23 & n2S0t0>=INTMIN & n2S0t0<=INTMAX -> (n2S0v5which'=n2S0t0)&(n2S0pc'=24); +[] n2S0pc=24 -> (n2S0pc'=27); +[] n2S0pc=25 -> 0.333333:(n2S0t1'=1)&(n2S0pc'=26) + 0.333333:(n2S0t1'=2)&(n2S0pc'=26) + 0.333333:(n2S0t1'=3)&(n2S0pc'=26); +[] n2S0pc=26 & n2S0t1>=INTMIN & n2S0t1<=INTMAX -> (n2S0v5which'=n2S0t1)&(n2S0pc'=27); +[] n2S0pc=27 & (n2S0v5which=n2S0v9shortest1) -> (n2S0pc'=28); +[] n2S0pc=27 & !((n2S0v5which=n2S0v9shortest1)) -> (n2S0pc'=30); +[] n2S0pc=28 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=29); +[] n2S0pc=29 -> (n2S0pc'=34); +[] n2S0pc=30 & (n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2)) -> (n2S0pc'=31); +[] n2S0pc=30 & !((n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2))) -> (n2S0pc'=33); +[] n2S0pc=31 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=32); +[] n2S0pc=32 -> (n2S0pc'=34); +[] n2S0pc=33 -> (n2S0opt'=4)&(n2S0pc'=-4)&(n2S0ra'=34); +[] n2S0pc=34 -> (n2S0pc'=35); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S3f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S3f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S3f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count (S0,pt3), + (S0,pt1) <-> (S1,pt1), + (S0,pt2) <-> (S2,pt1), + (S1,pt2) <-> (S2,pt2), + (S1,pt3) <-> (S3,pt3), + (S3,pt1) <-> (S4,pt1), + (S3,pt2) <-> (S5,pt1), + (S4,pt2) <-> (S5,pt2), + (S4,pt3) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ dst } + +programs{ H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s0, S4 -> s1, S5 -> s2 } + + +def h0(pkt, port) state pkt_count(0){ + new; + if pkt_count < NUM_PACKETS { + new; + pkt_count = pkt_count + 1; + pkt.dst = H1; + fwd(1); + } else { drop; drop; } +} + +def h1(pkt, port) state pkt_count(0){ pkt_count = pkt_count + 1; drop; } + + +def s0(pkt, port) state route1(0), route2(0){ + if port == 1{ + fwd(3); + }else if port == 2{ + if pkt.dst == H0{ + fwd(3); + }else{ + fwd(1); + } + }else if port == 3{ + route1 = COST_01; + route2 = COST_02 + COST_21; + if route1 < route2 or route1 == route2 and flip(1/2) == 1 { + fwd(1); + }else{ + fwd(2); + } + } +} + +def s1(pkt, port) state route1(0), route2(0){ + if port == 1 { + fwd(3); + }else if port == 2{ + if pkt.dst == H1{ + fwd(3); + }else{ + fwd(1); + } + }else if port == 3{ + route1 = COST_01; + route2 = COST_02 + COST_21; + if route1 < route2 or route1 == route2 and flip(1/2) == 1 { + fwd(1); + }else{ + fwd(2); + } + } +} + +def s2(pkt, port){ + if port == 1 { + fwd(2); + }else{ + fwd(1); + } +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/congestion-8.prism b/keyur/congestion-8.prism new file mode 100644 index 0000000..84341b0 --- /dev/null +++ b/keyur/congestion-8.prism @@ -0,0 +1,412 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 2; +const int v7COST_02 = 1; +const int v7COST_21 = 1; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1;n2H0iv3dst0:[INTMIN..INTMAX] init 0; +n2H0ip1:[1..2] init 1;n2H0iv3dst1:[INTMIN..INTMAX] init 0; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1;n2H0ov3dst0:[INTMIN..INTMAX] init 0; +n2H0op1:[1..2] init 1;n2H0ov3dst1:[INTMIN..INTMAX] init 0; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..10] init 0; n2H0ra:[-6..10] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0iv3dst0'=0)&(n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0iv3dst0'=n2H0iv3dst1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0ov3dst0'=n2H0iv3dst0)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0ov3dst1'=n2H0iv3dst0)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0iv3dst0'=n2S0ov3dst0)&(n2H0is'=1); +[n2S0f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0iv3dst1'=n2S0ov3dst0)&(n2H0is'=2); +[n2S0f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0ov3dst0'=n2H0ov3dst1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=8); +[] n2H0pc=3 -> (n2H0pc'=-1)&(n2H0ra'=4); +[] n2H0pc=4 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=5); +[] n2H0pc=5 & 1>=INTMIN & 1<=INTMAX -> (n2H0iv3dst0'=1)&(n2H0pc'=6); +[] n2H0pc=6 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=7); +[] n2H0pc=7 -> (n2H0pc'=10); +[] n2H0pc=8 -> (n2H0pc'=-3)&(n2H0ra'=9); +[] n2H0pc=9 -> (n2H0pc'=-3)&(n2H0ra'=10); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4v6route1:[INTMIN..INTMAX] init 0; +n2S4v6route2:[INTMIN..INTMAX] init 0; +n2S4t0:[0..1]; +n2S4ip0:[1..3] init 1;n2S4iv3dst0:[INTMIN..INTMAX] init 0; +n2S4ip1:[1..3] init 1;n2S4iv3dst1:[INTMIN..INTMAX] init 0; +n2S4is:[0..2] init 0; +n2S4op0:[1..3] init 1;n2S4ov3dst0:[INTMIN..INTMAX] init 0; +n2S4op1:[1..3] init 1;n2S4ov3dst1:[INTMIN..INTMAX] init 0; +n2S4os:[0..2] init 0; +n2S4opt:[1..3] init 1; +n2S4pc:[-6..19] init 0; n2S4ra:[-6..19] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4iv3dst0'=0)&(n2S4ip1'=n2S4ip0)&(n2S4iv3dst1'=n2S4iv3dst0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4iv3dst1'=n2S4iv3dst0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4iv3dst0'=n2S4iv3dst1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4ov3dst0'=n2S4iv3dst0)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4ov3dst1'=n2S4iv3dst0)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2H1f1] n2S4is=0 -> (n2S4ip0'=3)&(n2S4iv3dst0'=n2H1ov3dst0)&(n2S4is'=1); +[n2H1f1] n2S4is=1 -> (n2S4ip1'=3)&(n2S4iv3dst1'=n2H1ov3dst0)&(n2S4is'=2); +[n2H1f1] n2S4is=2 -> true; +[n2S5f2] n2S4is=0 -> (n2S4ip0'=2)&(n2S4iv3dst0'=n2S5ov3dst0)&(n2S4is'=1); +[n2S5f2] n2S4is=1 -> (n2S4ip1'=2)&(n2S4iv3dst1'=n2S5ov3dst0)&(n2S4is'=2); +[n2S5f2] n2S4is=2 -> true; +[n2S3f1] n2S4is=0 -> (n2S4ip0'=1)&(n2S4iv3dst0'=n2S3ov3dst0)&(n2S4is'=1); +[n2S3f1] n2S4is=1 -> (n2S4ip1'=1)&(n2S4iv3dst1'=n2S3ov3dst0)&(n2S4is'=2); +[n2S3f1] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f3] n2S4pc=-5 & n2S4os>0 & n2S4op0=3 -> (n2S4op0'=n2S4op1)&(n2S4ov3dst0'=n2S4ov3dst1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4ov3dst0'=n2S4ov3dst1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4ov3dst0'=n2S4ov3dst1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 & (n2S4ip0=1) -> (n2S4pc'=2); +[] n2S4pc=1 & !((n2S4ip0=1)) -> (n2S4pc'=4); +[] n2S4pc=2 -> (n2S4opt'=3)&(n2S4pc'=-4)&(n2S4ra'=3); +[] n2S4pc=3 -> (n2S4pc'=19); +[] n2S4pc=4 & (n2S4ip0=2) -> (n2S4pc'=5); +[] n2S4pc=4 & !((n2S4ip0=2)) -> (n2S4pc'=10); +[] n2S4pc=5 & (n2S4iv3dst0=1) -> (n2S4pc'=6); +[] n2S4pc=5 & !((n2S4iv3dst0=1)) -> (n2S4pc'=8); +[] n2S4pc=6 -> (n2S4opt'=3)&(n2S4pc'=-4)&(n2S4ra'=7); +[] n2S4pc=7 -> (n2S4pc'=9); +[] n2S4pc=8 -> (n2S4opt'=1)&(n2S4pc'=-4)&(n2S4ra'=9); +[] n2S4pc=9 -> (n2S4pc'=19); +[] n2S4pc=10 & (n2S4ip0=3) -> (n2S4pc'=11); +[] n2S4pc=10 & !((n2S4ip0=3)) -> (n2S4pc'=19); +[] n2S4pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S4v6route1'=v7COST_01)&(n2S4pc'=12); +[] n2S4pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S4v6route2'=(v7COST_02+v7COST_21))&(n2S4pc'=13); +[] n2S4pc=13 -> 0.5:(n2S4t0'=0)&(n2S4pc'=14) + 0.5:(n2S4t0'=1)&(n2S4pc'=14); +[] n2S4pc=14 & ((n2S4v6route1 (n2S4pc'=15); +[] n2S4pc=14 & !(((n2S4v6route1 (n2S4pc'=17); +[] n2S4pc=15 -> (n2S4opt'=1)&(n2S4pc'=-4)&(n2S4ra'=16); +[] n2S4pc=16 -> (n2S4pc'=18); +[] n2S4pc=17 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=18); +[] n2S4pc=18 -> (n2S4pc'=19); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1;n2S5iv3dst0:[INTMIN..INTMAX] init 0; +n2S5ip1:[1..2] init 1;n2S5iv3dst1:[INTMIN..INTMAX] init 0; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1;n2S5ov3dst0:[INTMIN..INTMAX] init 0; +n2S5op1:[1..2] init 1;n2S5ov3dst1:[INTMIN..INTMAX] init 0; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..5] init 0; n2S5ra:[-6..5] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5iv3dst0'=0)&(n2S5ip1'=n2S5ip0)&(n2S5iv3dst1'=n2S5iv3dst0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5iv3dst1'=n2S5iv3dst0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5iv3dst0'=n2S5iv3dst1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5ov3dst0'=n2S5iv3dst0)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5ov3dst1'=n2S5iv3dst0)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S4f2] n2S5is=0 -> (n2S5ip0'=2)&(n2S5iv3dst0'=n2S4ov3dst0)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=2)&(n2S5iv3dst1'=n2S4ov3dst0)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[n2S3f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5iv3dst0'=n2S3ov3dst0)&(n2S5is'=1); +[n2S3f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5iv3dst1'=n2S3ov3dst0)&(n2S5is'=2); +[n2S3f2] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5ov3dst0'=n2S5ov3dst1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5ov3dst0'=n2S5ov3dst1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 & (n2S5ip0=1) -> (n2S5pc'=2); +[] n2S5pc=1 & !((n2S5ip0=1)) -> (n2S5pc'=4); +[] n2S5pc=2 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=3); +[] n2S5pc=3 -> (n2S5pc'=5); +[] n2S5pc=4 -> (n2S5opt'=1)&(n2S5pc'=-4)&(n2S5ra'=5); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:[INTMIN..INTMAX] init 0; +n2S0v6route2:[INTMIN..INTMAX] init 0; +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1;n2S0iv3dst0:[INTMIN..INTMAX] init 0; +n2S0ip1:[1..3] init 1;n2S0iv3dst1:[INTMIN..INTMAX] init 0; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1;n2S0ov3dst0:[INTMIN..INTMAX] init 0; +n2S0op1:[1..3] init 1;n2S0ov3dst1:[INTMIN..INTMAX] init 0; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..19] init 0; n2S0ra:[-6..19] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0iv3dst0'=0)&(n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0iv3dst0'=n2S0iv3dst1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0ov3dst0'=n2S0iv3dst0)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0ov3dst1'=n2S0iv3dst0)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2H0f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0iv3dst0'=n2H0ov3dst0)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0iv3dst1'=n2H0ov3dst0)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0iv3dst0'=n2S2ov3dst0)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0iv3dst1'=n2S2ov3dst0)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0iv3dst0'=n2S1ov3dst0)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0iv3dst1'=n2S1ov3dst0)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=4); +[] n2S0pc=2 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=3); +[] n2S0pc=3 -> (n2S0pc'=19); +[] n2S0pc=4 & (n2S0ip0=2) -> (n2S0pc'=5); +[] n2S0pc=4 & !((n2S0ip0=2)) -> (n2S0pc'=10); +[] n2S0pc=5 & (n2S0iv3dst0=0) -> (n2S0pc'=6); +[] n2S0pc=5 & !((n2S0iv3dst0=0)) -> (n2S0pc'=8); +[] n2S0pc=6 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=7); +[] n2S0pc=7 -> (n2S0pc'=9); +[] n2S0pc=8 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=9); +[] n2S0pc=9 -> (n2S0pc'=19); +[] n2S0pc=10 & (n2S0ip0=3) -> (n2S0pc'=11); +[] n2S0pc=10 & !((n2S0ip0=3)) -> (n2S0pc'=19); +[] n2S0pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S0v6route1'=v7COST_01)&(n2S0pc'=12); +[] n2S0pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S0v6route2'=(v7COST_02+v7COST_21))&(n2S0pc'=13); +[] n2S0pc=13 -> 0.5:(n2S0t0'=0)&(n2S0pc'=14) + 0.5:(n2S0t0'=1)&(n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route1 (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route1 (n2S0pc'=17); +[] n2S0pc=15 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=16); +[] n2S0pc=16 -> (n2S0pc'=18); +[] n2S0pc=17 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=18); +[] n2S0pc=18 -> (n2S0pc'=19); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v6route1:[INTMIN..INTMAX] init 0; +n2S1v6route2:[INTMIN..INTMAX] init 0; +n2S1t0:[0..1]; +n2S1ip0:[1..3] init 1;n2S1iv3dst0:[INTMIN..INTMAX] init 0; +n2S1ip1:[1..3] init 1;n2S1iv3dst1:[INTMIN..INTMAX] init 0; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1;n2S1ov3dst0:[INTMIN..INTMAX] init 0; +n2S1op1:[1..3] init 1;n2S1ov3dst1:[INTMIN..INTMAX] init 0; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..19] init 0; n2S1ra:[-6..19] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1iv3dst0'=0)&(n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1iv3dst0'=n2S1iv3dst1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1ov3dst0'=n2S1iv3dst0)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1ov3dst1'=n2S1iv3dst0)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f3] n2S1is=0 -> (n2S1ip0'=3)&(n2S1iv3dst0'=n2S3ov3dst0)&(n2S1is'=1); +[n2S3f3] n2S1is=1 -> (n2S1ip1'=3)&(n2S1iv3dst1'=n2S3ov3dst0)&(n2S1is'=2); +[n2S3f3] n2S1is=2 -> true; +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1iv3dst0'=n2S2ov3dst0)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1iv3dst1'=n2S2ov3dst0)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f1] n2S1is=0 -> (n2S1ip0'=1)&(n2S1iv3dst0'=n2S0ov3dst0)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=1)&(n2S1iv3dst1'=n2S0ov3dst0)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=19); +[] n2S1pc=4 & (n2S1ip0=2) -> (n2S1pc'=5); +[] n2S1pc=4 & !((n2S1ip0=2)) -> (n2S1pc'=10); +[] n2S1pc=5 & (n2S1iv3dst0=1) -> (n2S1pc'=6); +[] n2S1pc=5 & !((n2S1iv3dst0=1)) -> (n2S1pc'=8); +[] n2S1pc=6 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=7); +[] n2S1pc=7 -> (n2S1pc'=9); +[] n2S1pc=8 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=9); +[] n2S1pc=9 -> (n2S1pc'=19); +[] n2S1pc=10 & (n2S1ip0=3) -> (n2S1pc'=11); +[] n2S1pc=10 & !((n2S1ip0=3)) -> (n2S1pc'=19); +[] n2S1pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S1v6route1'=v7COST_01)&(n2S1pc'=12); +[] n2S1pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S1v6route2'=(v7COST_02+v7COST_21))&(n2S1pc'=13); +[] n2S1pc=13 -> 0.5:(n2S1t0'=0)&(n2S1pc'=14) + 0.5:(n2S1t0'=1)&(n2S1pc'=14); +[] n2S1pc=14 & ((n2S1v6route1 (n2S1pc'=15); +[] n2S1pc=14 & !(((n2S1v6route1 (n2S1pc'=17); +[] n2S1pc=15 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=16); +[] n2S1pc=16 -> (n2S1pc'=18); +[] n2S1pc=17 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=18); +[] n2S1pc=18 -> (n2S1pc'=19); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1;n2H1iv3dst0:[INTMIN..INTMAX] init 0; +n2H1ip1:[1..2] init 1;n2H1iv3dst1:[INTMIN..INTMAX] init 0; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1;n2H1ov3dst0:[INTMIN..INTMAX] init 0; +n2H1op1:[1..2] init 1;n2H1ov3dst1:[INTMIN..INTMAX] init 0; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1iv3dst0'=0)&(n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1iv3dst0'=n2H1iv3dst1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1ov3dst0'=n2H1iv3dst0)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1ov3dst1'=n2H1iv3dst0)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S4f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1iv3dst0'=n2S4ov3dst0)&(n2H1is'=1); +[n2S4f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1iv3dst1'=n2S4ov3dst0)&(n2H1is'=2); +[n2S4f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1ov3dst0'=n2H1ov3dst1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3v6route1:[INTMIN..INTMAX] init 0; +n2S3v6route2:[INTMIN..INTMAX] init 0; +n2S3t0:[0..1]; +n2S3ip0:[1..3] init 1;n2S3iv3dst0:[INTMIN..INTMAX] init 0; +n2S3ip1:[1..3] init 1;n2S3iv3dst1:[INTMIN..INTMAX] init 0; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1;n2S3ov3dst0:[INTMIN..INTMAX] init 0; +n2S3op1:[1..3] init 1;n2S3ov3dst1:[INTMIN..INTMAX] init 0; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..19] init 0; n2S3ra:[-6..19] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3iv3dst0'=0)&(n2S3ip1'=n2S3ip0)&(n2S3iv3dst1'=n2S3iv3dst0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3iv3dst1'=n2S3iv3dst0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3iv3dst0'=n2S3iv3dst1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3ov3dst0'=n2S3iv3dst0)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3ov3dst1'=n2S3iv3dst0)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S1f3] n2S3is=0 -> (n2S3ip0'=3)&(n2S3iv3dst0'=n2S1ov3dst0)&(n2S3is'=1); +[n2S1f3] n2S3is=1 -> (n2S3ip1'=3)&(n2S3iv3dst1'=n2S1ov3dst0)&(n2S3is'=2); +[n2S1f3] n2S3is=2 -> true; +[n2S5f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3iv3dst0'=n2S5ov3dst0)&(n2S3is'=1); +[n2S5f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3iv3dst1'=n2S5ov3dst0)&(n2S3is'=2); +[n2S5f1] n2S3is=2 -> true; +[n2S4f1] n2S3is=0 -> (n2S3ip0'=1)&(n2S3iv3dst0'=n2S4ov3dst0)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=1)&(n2S3iv3dst1'=n2S4ov3dst0)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3ov3dst0'=n2S3ov3dst1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3ov3dst0'=n2S3ov3dst1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3ov3dst0'=n2S3ov3dst1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 & (n2S3ip0=1) -> (n2S3pc'=2); +[] n2S3pc=1 & !((n2S3ip0=1)) -> (n2S3pc'=4); +[] n2S3pc=2 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=3); +[] n2S3pc=3 -> (n2S3pc'=19); +[] n2S3pc=4 & (n2S3ip0=2) -> (n2S3pc'=5); +[] n2S3pc=4 & !((n2S3ip0=2)) -> (n2S3pc'=10); +[] n2S3pc=5 & (n2S3iv3dst0=0) -> (n2S3pc'=6); +[] n2S3pc=5 & !((n2S3iv3dst0=0)) -> (n2S3pc'=8); +[] n2S3pc=6 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=7); +[] n2S3pc=7 -> (n2S3pc'=9); +[] n2S3pc=8 -> (n2S3opt'=1)&(n2S3pc'=-4)&(n2S3ra'=9); +[] n2S3pc=9 -> (n2S3pc'=19); +[] n2S3pc=10 & (n2S3ip0=3) -> (n2S3pc'=11); +[] n2S3pc=10 & !((n2S3ip0=3)) -> (n2S3pc'=19); +[] n2S3pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S3v6route1'=v7COST_01)&(n2S3pc'=12); +[] n2S3pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S3v6route2'=(v7COST_02+v7COST_21))&(n2S3pc'=13); +[] n2S3pc=13 -> 0.5:(n2S3t0'=0)&(n2S3pc'=14) + 0.5:(n2S3t0'=1)&(n2S3pc'=14); +[] n2S3pc=14 & ((n2S3v6route1 (n2S3pc'=15); +[] n2S3pc=14 & !(((n2S3v6route1 (n2S3pc'=17); +[] n2S3pc=15 -> (n2S3opt'=1)&(n2S3pc'=-4)&(n2S3ra'=16); +[] n2S3pc=16 -> (n2S3pc'=18); +[] n2S3pc=17 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=18); +[] n2S3pc=18 -> (n2S3pc'=19); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1;n2S2iv3dst0:[INTMIN..INTMAX] init 0; +n2S2ip1:[1..2] init 1;n2S2iv3dst1:[INTMIN..INTMAX] init 0; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1;n2S2ov3dst0:[INTMIN..INTMAX] init 0; +n2S2op1:[1..2] init 1;n2S2ov3dst1:[INTMIN..INTMAX] init 0; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..5] init 0; n2S2ra:[-6..5] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2iv3dst0'=0)&(n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2iv3dst0'=n2S2iv3dst1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2ov3dst0'=n2S2iv3dst0)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2ov3dst1'=n2S2iv3dst0)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2iv3dst0'=n2S1ov3dst0)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2iv3dst1'=n2S1ov3dst0)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2iv3dst0'=n2S0ov3dst0)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2iv3dst1'=n2S0ov3dst0)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & (n2S2ip0=1) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2ip0=1)) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=5); +[] n2S2pc=4 -> (n2S2opt'=1)&(n2S2pc'=-4)&(n2S2ra'=5); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H0v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 8, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7; +NUM_PACKETS := 3, COST_01 := 2, COST_02 := 1, COST_21 := 1; +dat Packet{ + dst: ℝ; + def Packet(){ + dst = 0; + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + Q_in.pushFront((Packet(),0)); + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + Q_in.popFront(); + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + route1: ℝ, route2: ℝ; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + route1 = 0; + route2 = 0; + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if (Q_in.data[0][1]==2){ + if (Q_in.data[0][0].dst==H0){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } else { + if (Q_in.data[0][1]==3){ + route1 = COST_01; + route2 = (COST_02+COST_21); + if ((route10){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } + } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + route1: ℝ, route2: ℝ; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + route1 = 0; + route2 = 0; + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if (Q_in.data[0][1]==2){ + if (Q_in.data[0][0].dst==H1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } else { + if (Q_in.data[0][1]==3){ + route1 = COST_01; + route2 = (COST_02+COST_21); + if ((route10){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } + } + } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s0_ty, __S4 : __s1_ty, __S5 : __s2_ty; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s0_ty(), __S4 = __s1_ty(), __S5 = __s2_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else if i == 4 { __S2.Q_in } else if i == 5 { __S3.Q_in } else if i == 6 { __S4.Q_in } else { __S5.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else if i == 4 { __S2.Q_out } else if i == 5 { __S3.Q_out } else if i == 6 { __S4.Q_out } else { __S5.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 3)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 3)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S4.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size())); + q₁ := Expectation(((if H0 == 0 { __d.__H0.pkt_count } else if H0 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + q₂ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁, q₂); +} + diff --git a/keyur/congestion-8d.bayonet b/keyur/congestion-8d.bayonet new file mode 100644 index 0000000..775b6cd --- /dev/null +++ b/keyur/congestion-8d.bayonet @@ -0,0 +1,102 @@ + +parameters{ NUM_PACKETS(3), COST_01(2), COST_02(1), COST_21(1) } + +num_steps 50; + +query probability(pkt_count@H0 < NUM_PACKETS); +query probability(pkt_count@H1 < NUM_PACKETS); + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5 } + links{ + (H0,pt1) <-> (S0,pt3), + (S0,pt1) <-> (S1,pt1), + (S0,pt2) <-> (S2,pt1), + (S1,pt2) <-> (S2,pt2), + (S1,pt3) <-> (S3,pt3), + (S3,pt1) <-> (S4,pt1), + (S3,pt2) <-> (S5,pt1), + (S4,pt2) <-> (S5,pt2), + (S4,pt3) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ dst } + +programs{ H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s0, S4 -> s1, S5 -> s2 } + + +def h0(pkt, port) state pkt_count(0){ + new; + if pkt_count < NUM_PACKETS { + new; + pkt_count = pkt_count + 1; + pkt.dst = H1; + fwd(1); + } else { drop; drop; } +} + +def h1(pkt, port) state pkt_count(0){ pkt_count = pkt_count + 1; drop; } + + +def s0(pkt, port) state route1(0), route2(0){ + if port == 1{ + fwd(3); + }else if port == 2{ + if pkt.dst == H0{ + fwd(3); + }else{ + fwd(1); + } + }else if port == 3{ + route1 = COST_01; + route2 = COST_02 + COST_21; + if route1 < route2 or route1 == route2 and flip(1/2) == 1 { + fwd(1); + }else{ + fwd(2); + } + } +} + +def s1(pkt, port) state route1(0), route2(0){ + if port == 1 { + fwd(3); + }else if port == 2{ + if pkt.dst == H1{ + fwd(3); + }else{ + fwd(1); + } + }else if port == 3{ + route1 = COST_01; + route2 = COST_02 + COST_21; + if route1 < route2 or route1 == route2 and flip(1/2) == 1 { + fwd(1); + }else{ + fwd(2); + } + } +} + +def s2(pkt, port){ + if port == 1 { + fwd(2); + }else{ + fwd(1); + } +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/keyur/congestion-8d.prism b/keyur/congestion-8d.prism new file mode 100644 index 0000000..90b6b7f --- /dev/null +++ b/keyur/congestion-8d.prism @@ -0,0 +1,430 @@ +dtmc +global unlk:[-1..15] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 16; +global numSkips:[0..16] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 2; +const int v7COST_02 = 1; +const int v7COST_21 = 1; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1;n2H0iv3dst0:[INTMIN..INTMAX] init 0; +n2H0ip1:[1..2] init 1;n2H0iv3dst1:[INTMIN..INTMAX] init 0; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1;n2H0ov3dst0:[INTMIN..INTMAX] init 0; +n2H0op1:[1..2] init 1;n2H0ov3dst1:[INTMIN..INTMAX] init 0; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..10] init 0; n2H0ra:[-6..10] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0iv3dst0'=0)&(n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0iv3dst0'=n2H0iv3dst1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0ov3dst0'=n2H0iv3dst0)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0ov3dst1'=n2H0iv3dst0)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0iv3dst0'=n2S0ov3dst0)&(n2H0is'=1); +[n2S0f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0iv3dst1'=n2S0ov3dst0)&(n2H0is'=2); +[n2S0f3] n2H0is=2 -> true; +[] unlk=8 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0ov3dst0'=n2H0ov3dst1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=8); +[] n2H0pc=3 -> (n2H0pc'=-1)&(n2H0ra'=4); +[] n2H0pc=4 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=5); +[] n2H0pc=5 & 1>=INTMIN & 1<=INTMAX -> (n2H0iv3dst0'=1)&(n2H0pc'=6); +[] n2H0pc=6 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=7); +[] n2H0pc=7 -> (n2H0pc'=10); +[] n2H0pc=8 -> (n2H0pc'=-3)&(n2H0ra'=9); +[] n2H0pc=9 -> (n2H0pc'=-3)&(n2H0ra'=10); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4v6route1:[INTMIN..INTMAX] init 0; +n2S4v6route2:[INTMIN..INTMAX] init 0; +n2S4t0:[0..1]; +n2S4ip0:[1..3] init 1;n2S4iv3dst0:[INTMIN..INTMAX] init 0; +n2S4ip1:[1..3] init 1;n2S4iv3dst1:[INTMIN..INTMAX] init 0; +n2S4is:[0..2] init 0; +n2S4op0:[1..3] init 1;n2S4ov3dst0:[INTMIN..INTMAX] init 0; +n2S4op1:[1..3] init 1;n2S4ov3dst1:[INTMIN..INTMAX] init 0; +n2S4os:[0..2] init 0; +n2S4opt:[1..3] init 1; +n2S4pc:[-6..19] init 0; n2S4ra:[-6..19] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4iv3dst0'=0)&(n2S4ip1'=n2S4ip0)&(n2S4iv3dst1'=n2S4iv3dst0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4iv3dst1'=n2S4iv3dst0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4iv3dst0'=n2S4iv3dst1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4ov3dst0'=n2S4iv3dst0)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4ov3dst1'=n2S4iv3dst0)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2H1f1] n2S4is=0 -> (n2S4ip0'=3)&(n2S4iv3dst0'=n2H1ov3dst0)&(n2S4is'=1); +[n2H1f1] n2S4is=1 -> (n2S4ip1'=3)&(n2S4iv3dst1'=n2H1ov3dst0)&(n2S4is'=2); +[n2H1f1] n2S4is=2 -> true; +[n2S5f2] n2S4is=0 -> (n2S4ip0'=2)&(n2S4iv3dst0'=n2S5ov3dst0)&(n2S4is'=1); +[n2S5f2] n2S4is=1 -> (n2S4ip1'=2)&(n2S4iv3dst1'=n2S5ov3dst0)&(n2S4is'=2); +[n2S5f2] n2S4is=2 -> true; +[n2S3f1] n2S4is=0 -> (n2S4ip0'=1)&(n2S4iv3dst0'=n2S3ov3dst0)&(n2S4is'=1); +[n2S3f1] n2S4is=1 -> (n2S4ip1'=1)&(n2S4iv3dst1'=n2S3ov3dst0)&(n2S4is'=2); +[n2S3f1] n2S4is=2 -> true; +[] unlk=14 & numSteps0 -> (n2S4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[n2S4f3] n2S4pc=-5 & n2S4os>0 & n2S4op0=3 -> (n2S4op0'=n2S4op1)&(n2S4ov3dst0'=n2S4ov3dst1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4ov3dst0'=n2S4ov3dst1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4ov3dst0'=n2S4ov3dst1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2S4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2S4pc=1 & (n2S4ip0=1) -> (n2S4pc'=2); +[] n2S4pc=1 & !((n2S4ip0=1)) -> (n2S4pc'=4); +[] n2S4pc=2 -> (n2S4opt'=3)&(n2S4pc'=-4)&(n2S4ra'=3); +[] n2S4pc=3 -> (n2S4pc'=19); +[] n2S4pc=4 & (n2S4ip0=2) -> (n2S4pc'=5); +[] n2S4pc=4 & !((n2S4ip0=2)) -> (n2S4pc'=10); +[] n2S4pc=5 & (n2S4iv3dst0=1) -> (n2S4pc'=6); +[] n2S4pc=5 & !((n2S4iv3dst0=1)) -> (n2S4pc'=8); +[] n2S4pc=6 -> (n2S4opt'=3)&(n2S4pc'=-4)&(n2S4ra'=7); +[] n2S4pc=7 -> (n2S4pc'=9); +[] n2S4pc=8 -> (n2S4opt'=1)&(n2S4pc'=-4)&(n2S4ra'=9); +[] n2S4pc=9 -> (n2S4pc'=19); +[] n2S4pc=10 & (n2S4ip0=3) -> (n2S4pc'=11); +[] n2S4pc=10 & !((n2S4ip0=3)) -> (n2S4pc'=19); +[] n2S4pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S4v6route1'=v7COST_01)&(n2S4pc'=12); +[] n2S4pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S4v6route2'=(v7COST_02+v7COST_21))&(n2S4pc'=13); +[] n2S4pc=13 -> 0.5:(n2S4t0'=0)&(n2S4pc'=14) + 0.5:(n2S4t0'=1)&(n2S4pc'=14); +[] n2S4pc=14 & ((n2S4v6route1 (n2S4pc'=15); +[] n2S4pc=14 & !(((n2S4v6route1 (n2S4pc'=17); +[] n2S4pc=15 -> (n2S4opt'=1)&(n2S4pc'=-4)&(n2S4ra'=16); +[] n2S4pc=16 -> (n2S4pc'=18); +[] n2S4pc=17 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=18); +[] n2S4pc=18 -> (n2S4pc'=19); +[] numSteps (n2S4pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1;n2S5iv3dst0:[INTMIN..INTMAX] init 0; +n2S5ip1:[1..2] init 1;n2S5iv3dst1:[INTMIN..INTMAX] init 0; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1;n2S5ov3dst0:[INTMIN..INTMAX] init 0; +n2S5op1:[1..2] init 1;n2S5ov3dst1:[INTMIN..INTMAX] init 0; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..5] init 0; n2S5ra:[-6..5] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5iv3dst0'=0)&(n2S5ip1'=n2S5ip0)&(n2S5iv3dst1'=n2S5iv3dst0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5iv3dst1'=n2S5iv3dst0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5iv3dst0'=n2S5iv3dst1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5ov3dst0'=n2S5iv3dst0)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5ov3dst1'=n2S5iv3dst0)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S4f2] n2S5is=0 -> (n2S5ip0'=2)&(n2S5iv3dst0'=n2S4ov3dst0)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=2)&(n2S5iv3dst1'=n2S4ov3dst0)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[n2S3f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5iv3dst0'=n2S3ov3dst0)&(n2S5is'=1); +[n2S3f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5iv3dst1'=n2S3ov3dst0)&(n2S5is'=2); +[n2S3f2] n2S5is=2 -> true; +[] unlk=15 & numSteps0 -> (n2S5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5ov3dst0'=n2S5ov3dst1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5ov3dst0'=n2S5ov3dst1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2S5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2S5pc=1 & (n2S5ip0=1) -> (n2S5pc'=2); +[] n2S5pc=1 & !((n2S5ip0=1)) -> (n2S5pc'=4); +[] n2S5pc=2 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=3); +[] n2S5pc=3 -> (n2S5pc'=5); +[] n2S5pc=4 -> (n2S5opt'=1)&(n2S5pc'=-4)&(n2S5ra'=5); +[] numSteps (n2S5pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:[INTMIN..INTMAX] init 0; +n2S0v6route2:[INTMIN..INTMAX] init 0; +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1;n2S0iv3dst0:[INTMIN..INTMAX] init 0; +n2S0ip1:[1..3] init 1;n2S0iv3dst1:[INTMIN..INTMAX] init 0; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1;n2S0ov3dst0:[INTMIN..INTMAX] init 0; +n2S0op1:[1..3] init 1;n2S0ov3dst1:[INTMIN..INTMAX] init 0; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..19] init 0; n2S0ra:[-6..19] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0iv3dst0'=0)&(n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0iv3dst0'=n2S0iv3dst1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0ov3dst0'=n2S0iv3dst0)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0ov3dst1'=n2S0iv3dst0)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2H0f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0iv3dst0'=n2H0ov3dst0)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0iv3dst1'=n2H0ov3dst0)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0iv3dst0'=n2S2ov3dst0)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0iv3dst1'=n2S2ov3dst0)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0iv3dst0'=n2S1ov3dst0)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0iv3dst1'=n2S1ov3dst0)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[] unlk=10 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=4); +[] n2S0pc=2 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=3); +[] n2S0pc=3 -> (n2S0pc'=19); +[] n2S0pc=4 & (n2S0ip0=2) -> (n2S0pc'=5); +[] n2S0pc=4 & !((n2S0ip0=2)) -> (n2S0pc'=10); +[] n2S0pc=5 & (n2S0iv3dst0=0) -> (n2S0pc'=6); +[] n2S0pc=5 & !((n2S0iv3dst0=0)) -> (n2S0pc'=8); +[] n2S0pc=6 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=7); +[] n2S0pc=7 -> (n2S0pc'=9); +[] n2S0pc=8 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=9); +[] n2S0pc=9 -> (n2S0pc'=19); +[] n2S0pc=10 & (n2S0ip0=3) -> (n2S0pc'=11); +[] n2S0pc=10 & !((n2S0ip0=3)) -> (n2S0pc'=19); +[] n2S0pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S0v6route1'=v7COST_01)&(n2S0pc'=12); +[] n2S0pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S0v6route2'=(v7COST_02+v7COST_21))&(n2S0pc'=13); +[] n2S0pc=13 -> 0.5:(n2S0t0'=0)&(n2S0pc'=14) + 0.5:(n2S0t0'=1)&(n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route1 (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route1 (n2S0pc'=17); +[] n2S0pc=15 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=16); +[] n2S0pc=16 -> (n2S0pc'=18); +[] n2S0pc=17 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=18); +[] n2S0pc=18 -> (n2S0pc'=19); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v6route1:[INTMIN..INTMAX] init 0; +n2S1v6route2:[INTMIN..INTMAX] init 0; +n2S1t0:[0..1]; +n2S1ip0:[1..3] init 1;n2S1iv3dst0:[INTMIN..INTMAX] init 0; +n2S1ip1:[1..3] init 1;n2S1iv3dst1:[INTMIN..INTMAX] init 0; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1;n2S1ov3dst0:[INTMIN..INTMAX] init 0; +n2S1op1:[1..3] init 1;n2S1ov3dst1:[INTMIN..INTMAX] init 0; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..19] init 0; n2S1ra:[-6..19] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1iv3dst0'=0)&(n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1iv3dst0'=n2S1iv3dst1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1ov3dst0'=n2S1iv3dst0)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1ov3dst1'=n2S1iv3dst0)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f3] n2S1is=0 -> (n2S1ip0'=3)&(n2S1iv3dst0'=n2S3ov3dst0)&(n2S1is'=1); +[n2S3f3] n2S1is=1 -> (n2S1ip1'=3)&(n2S1iv3dst1'=n2S3ov3dst0)&(n2S1is'=2); +[n2S3f3] n2S1is=2 -> true; +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1iv3dst0'=n2S2ov3dst0)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1iv3dst1'=n2S2ov3dst0)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f1] n2S1is=0 -> (n2S1ip0'=1)&(n2S1iv3dst0'=n2S0ov3dst0)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=1)&(n2S1iv3dst1'=n2S0ov3dst0)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[] unlk=11 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=19); +[] n2S1pc=4 & (n2S1ip0=2) -> (n2S1pc'=5); +[] n2S1pc=4 & !((n2S1ip0=2)) -> (n2S1pc'=10); +[] n2S1pc=5 & (n2S1iv3dst0=1) -> (n2S1pc'=6); +[] n2S1pc=5 & !((n2S1iv3dst0=1)) -> (n2S1pc'=8); +[] n2S1pc=6 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=7); +[] n2S1pc=7 -> (n2S1pc'=9); +[] n2S1pc=8 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=9); +[] n2S1pc=9 -> (n2S1pc'=19); +[] n2S1pc=10 & (n2S1ip0=3) -> (n2S1pc'=11); +[] n2S1pc=10 & !((n2S1ip0=3)) -> (n2S1pc'=19); +[] n2S1pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S1v6route1'=v7COST_01)&(n2S1pc'=12); +[] n2S1pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S1v6route2'=(v7COST_02+v7COST_21))&(n2S1pc'=13); +[] n2S1pc=13 -> 0.5:(n2S1t0'=0)&(n2S1pc'=14) + 0.5:(n2S1t0'=1)&(n2S1pc'=14); +[] n2S1pc=14 & ((n2S1v6route1 (n2S1pc'=15); +[] n2S1pc=14 & !(((n2S1v6route1 (n2S1pc'=17); +[] n2S1pc=15 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=16); +[] n2S1pc=16 -> (n2S1pc'=18); +[] n2S1pc=17 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=18); +[] n2S1pc=18 -> (n2S1pc'=19); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1;n2H1iv3dst0:[INTMIN..INTMAX] init 0; +n2H1ip1:[1..2] init 1;n2H1iv3dst1:[INTMIN..INTMAX] init 0; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1;n2H1ov3dst0:[INTMIN..INTMAX] init 0; +n2H1op1:[1..2] init 1;n2H1ov3dst1:[INTMIN..INTMAX] init 0; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1iv3dst0'=0)&(n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1iv3dst0'=n2H1iv3dst1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1ov3dst0'=n2H1iv3dst0)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1ov3dst1'=n2H1iv3dst0)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S4f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1iv3dst0'=n2S4ov3dst0)&(n2H1is'=1); +[n2S4f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1iv3dst1'=n2S4ov3dst0)&(n2H1is'=2); +[n2S4f3] n2H1is=2 -> true; +[] unlk=9 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1ov3dst0'=n2H1ov3dst1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3v6route1:[INTMIN..INTMAX] init 0; +n2S3v6route2:[INTMIN..INTMAX] init 0; +n2S3t0:[0..1]; +n2S3ip0:[1..3] init 1;n2S3iv3dst0:[INTMIN..INTMAX] init 0; +n2S3ip1:[1..3] init 1;n2S3iv3dst1:[INTMIN..INTMAX] init 0; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1;n2S3ov3dst0:[INTMIN..INTMAX] init 0; +n2S3op1:[1..3] init 1;n2S3ov3dst1:[INTMIN..INTMAX] init 0; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..19] init 0; n2S3ra:[-6..19] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3iv3dst0'=0)&(n2S3ip1'=n2S3ip0)&(n2S3iv3dst1'=n2S3iv3dst0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3iv3dst1'=n2S3iv3dst0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3iv3dst0'=n2S3iv3dst1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3ov3dst0'=n2S3iv3dst0)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3ov3dst1'=n2S3iv3dst0)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S1f3] n2S3is=0 -> (n2S3ip0'=3)&(n2S3iv3dst0'=n2S1ov3dst0)&(n2S3is'=1); +[n2S1f3] n2S3is=1 -> (n2S3ip1'=3)&(n2S3iv3dst1'=n2S1ov3dst0)&(n2S3is'=2); +[n2S1f3] n2S3is=2 -> true; +[n2S5f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3iv3dst0'=n2S5ov3dst0)&(n2S3is'=1); +[n2S5f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3iv3dst1'=n2S5ov3dst0)&(n2S3is'=2); +[n2S5f1] n2S3is=2 -> true; +[n2S4f1] n2S3is=0 -> (n2S3ip0'=1)&(n2S3iv3dst0'=n2S4ov3dst0)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=1)&(n2S3iv3dst1'=n2S4ov3dst0)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[] unlk=13 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3ov3dst0'=n2S3ov3dst1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3ov3dst0'=n2S3ov3dst1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3ov3dst0'=n2S3ov3dst1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 & (n2S3ip0=1) -> (n2S3pc'=2); +[] n2S3pc=1 & !((n2S3ip0=1)) -> (n2S3pc'=4); +[] n2S3pc=2 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=3); +[] n2S3pc=3 -> (n2S3pc'=19); +[] n2S3pc=4 & (n2S3ip0=2) -> (n2S3pc'=5); +[] n2S3pc=4 & !((n2S3ip0=2)) -> (n2S3pc'=10); +[] n2S3pc=5 & (n2S3iv3dst0=0) -> (n2S3pc'=6); +[] n2S3pc=5 & !((n2S3iv3dst0=0)) -> (n2S3pc'=8); +[] n2S3pc=6 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=7); +[] n2S3pc=7 -> (n2S3pc'=9); +[] n2S3pc=8 -> (n2S3opt'=1)&(n2S3pc'=-4)&(n2S3ra'=9); +[] n2S3pc=9 -> (n2S3pc'=19); +[] n2S3pc=10 & (n2S3ip0=3) -> (n2S3pc'=11); +[] n2S3pc=10 & !((n2S3ip0=3)) -> (n2S3pc'=19); +[] n2S3pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S3v6route1'=v7COST_01)&(n2S3pc'=12); +[] n2S3pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S3v6route2'=(v7COST_02+v7COST_21))&(n2S3pc'=13); +[] n2S3pc=13 -> 0.5:(n2S3t0'=0)&(n2S3pc'=14) + 0.5:(n2S3t0'=1)&(n2S3pc'=14); +[] n2S3pc=14 & ((n2S3v6route1 (n2S3pc'=15); +[] n2S3pc=14 & !(((n2S3v6route1 (n2S3pc'=17); +[] n2S3pc=15 -> (n2S3opt'=1)&(n2S3pc'=-4)&(n2S3ra'=16); +[] n2S3pc=16 -> (n2S3pc'=18); +[] n2S3pc=17 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=18); +[] n2S3pc=18 -> (n2S3pc'=19); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1;n2S2iv3dst0:[INTMIN..INTMAX] init 0; +n2S2ip1:[1..2] init 1;n2S2iv3dst1:[INTMIN..INTMAX] init 0; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1;n2S2ov3dst0:[INTMIN..INTMAX] init 0; +n2S2op1:[1..2] init 1;n2S2ov3dst1:[INTMIN..INTMAX] init 0; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..5] init 0; n2S2ra:[-6..5] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2iv3dst0'=0)&(n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2iv3dst0'=n2S2iv3dst1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2ov3dst0'=n2S2iv3dst0)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2ov3dst1'=n2S2iv3dst0)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2iv3dst0'=n2S1ov3dst0)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2iv3dst1'=n2S1ov3dst0)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2iv3dst0'=n2S0ov3dst0)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2iv3dst1'=n2S0ov3dst0)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[] unlk=12 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 & (n2S2ip0=1) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2ip0=1)) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=5); +[] n2S2pc=4 -> (n2S2opt'=1)&(n2S2pc'=-4)&(n2S2ra'=5); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H0v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 8, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7; +NUM_PACKETS := 3, COST_01 := 2, COST_02 := 1, COST_21 := 1; +dat Packet{ + dst: ℝ; + def Packet(){ + dst = 0; + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + Q_in.pushFront((Packet(),0)); + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + Q_in.popFront(); + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + route1: ℝ, route2: ℝ; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + route1 = 0; + route2 = 0; + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if (Q_in.data[0][1]==2){ + if (Q_in.data[0][0].dst==H0){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } else { + if (Q_in.data[0][1]==3){ + route1 = COST_01; + route2 = (COST_02+COST_21); + if ((route10){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } + } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + route1: ℝ, route2: ℝ; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + route1 = 0; + route2 = 0; + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if (Q_in.data[0][1]==2){ + if (Q_in.data[0][0].dst==H1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } else { + if (Q_in.data[0][1]==3){ + route1 = COST_01; + route2 = (COST_02+COST_21); + if ((route10){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } + } + } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (Q_in.data[0][1]==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s0_ty, __S4 : __s1_ty, __S5 : __s2_ty; + next: ℝ; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s0_ty(), __S4 = __s1_ty(), __S5 = __s2_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else if current == 5 { __S3.Q_in } else if current == 6 { __S4.Q_in } else { __S5.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else if (current - k) == 5 { __S3.Q_out } else if (current - k) == 6 { __S4.Q_out } else { __S5.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 3)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 3)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S4.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size())); + q₁ := Expectation(((if H0 == 0 { __d.__H0.pkt_count } else if H0 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + q₂ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁, q₂); +} + diff --git a/keyur/congestion-8n.prism b/keyur/congestion-8n.prism new file mode 100644 index 0000000..fbb6851 --- /dev/null +++ b/keyur/congestion-8n.prism @@ -0,0 +1,412 @@ +mdp +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 2; +const int v7COST_02 = 1; +const int v7COST_21 = 1; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1;n2H0iv3dst0:[INTMIN..INTMAX] init 0; +n2H0ip1:[1..2] init 1;n2H0iv3dst1:[INTMIN..INTMAX] init 0; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1;n2H0ov3dst0:[INTMIN..INTMAX] init 0; +n2H0op1:[1..2] init 1;n2H0ov3dst1:[INTMIN..INTMAX] init 0; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..10] init 0; n2H0ra:[-6..10] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0iv3dst0'=0)&(n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0iv3dst0'=n2H0iv3dst1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0ov3dst0'=n2H0iv3dst0)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0ov3dst1'=n2H0iv3dst0)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0iv3dst0'=n2S0ov3dst0)&(n2H0is'=1); +[n2S0f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0iv3dst1'=n2S0ov3dst0)&(n2H0is'=2); +[n2S0f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0ov3dst0'=n2H0ov3dst1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=8); +[] n2H0pc=3 -> (n2H0pc'=-1)&(n2H0ra'=4); +[] n2H0pc=4 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=5); +[] n2H0pc=5 & 1>=INTMIN & 1<=INTMAX -> (n2H0iv3dst0'=1)&(n2H0pc'=6); +[] n2H0pc=6 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=7); +[] n2H0pc=7 -> (n2H0pc'=10); +[] n2H0pc=8 -> (n2H0pc'=-3)&(n2H0ra'=9); +[] n2H0pc=9 -> (n2H0pc'=-3)&(n2H0ra'=10); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4v6route1:[INTMIN..INTMAX] init 0; +n2S4v6route2:[INTMIN..INTMAX] init 0; +n2S4t0:[0..1]; +n2S4ip0:[1..3] init 1;n2S4iv3dst0:[INTMIN..INTMAX] init 0; +n2S4ip1:[1..3] init 1;n2S4iv3dst1:[INTMIN..INTMAX] init 0; +n2S4is:[0..2] init 0; +n2S4op0:[1..3] init 1;n2S4ov3dst0:[INTMIN..INTMAX] init 0; +n2S4op1:[1..3] init 1;n2S4ov3dst1:[INTMIN..INTMAX] init 0; +n2S4os:[0..2] init 0; +n2S4opt:[1..3] init 1; +n2S4pc:[-6..19] init 0; n2S4ra:[-6..19] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4iv3dst0'=0)&(n2S4ip1'=n2S4ip0)&(n2S4iv3dst1'=n2S4iv3dst0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4iv3dst1'=n2S4iv3dst0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4iv3dst0'=n2S4iv3dst1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4ov3dst0'=n2S4iv3dst0)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4ov3dst1'=n2S4iv3dst0)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2H1f1] n2S4is=0 -> (n2S4ip0'=3)&(n2S4iv3dst0'=n2H1ov3dst0)&(n2S4is'=1); +[n2H1f1] n2S4is=1 -> (n2S4ip1'=3)&(n2S4iv3dst1'=n2H1ov3dst0)&(n2S4is'=2); +[n2H1f1] n2S4is=2 -> true; +[n2S5f2] n2S4is=0 -> (n2S4ip0'=2)&(n2S4iv3dst0'=n2S5ov3dst0)&(n2S4is'=1); +[n2S5f2] n2S4is=1 -> (n2S4ip1'=2)&(n2S4iv3dst1'=n2S5ov3dst0)&(n2S4is'=2); +[n2S5f2] n2S4is=2 -> true; +[n2S3f1] n2S4is=0 -> (n2S4ip0'=1)&(n2S4iv3dst0'=n2S3ov3dst0)&(n2S4is'=1); +[n2S3f1] n2S4is=1 -> (n2S4ip1'=1)&(n2S4iv3dst1'=n2S3ov3dst0)&(n2S4is'=2); +[n2S3f1] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f3] n2S4pc=-5 & n2S4os>0 & n2S4op0=3 -> (n2S4op0'=n2S4op1)&(n2S4ov3dst0'=n2S4ov3dst1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4ov3dst0'=n2S4ov3dst1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4ov3dst0'=n2S4ov3dst1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 & (n2S4ip0=1) -> (n2S4pc'=2); +[] n2S4pc=1 & !((n2S4ip0=1)) -> (n2S4pc'=4); +[] n2S4pc=2 -> (n2S4opt'=3)&(n2S4pc'=-4)&(n2S4ra'=3); +[] n2S4pc=3 -> (n2S4pc'=19); +[] n2S4pc=4 & (n2S4ip0=2) -> (n2S4pc'=5); +[] n2S4pc=4 & !((n2S4ip0=2)) -> (n2S4pc'=10); +[] n2S4pc=5 & (n2S4iv3dst0=1) -> (n2S4pc'=6); +[] n2S4pc=5 & !((n2S4iv3dst0=1)) -> (n2S4pc'=8); +[] n2S4pc=6 -> (n2S4opt'=3)&(n2S4pc'=-4)&(n2S4ra'=7); +[] n2S4pc=7 -> (n2S4pc'=9); +[] n2S4pc=8 -> (n2S4opt'=1)&(n2S4pc'=-4)&(n2S4ra'=9); +[] n2S4pc=9 -> (n2S4pc'=19); +[] n2S4pc=10 & (n2S4ip0=3) -> (n2S4pc'=11); +[] n2S4pc=10 & !((n2S4ip0=3)) -> (n2S4pc'=19); +[] n2S4pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S4v6route1'=v7COST_01)&(n2S4pc'=12); +[] n2S4pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S4v6route2'=(v7COST_02+v7COST_21))&(n2S4pc'=13); +[] n2S4pc=13 -> 0.5:(n2S4t0'=0)&(n2S4pc'=14) + 0.5:(n2S4t0'=1)&(n2S4pc'=14); +[] n2S4pc=14 & ((n2S4v6route1 (n2S4pc'=15); +[] n2S4pc=14 & !(((n2S4v6route1 (n2S4pc'=17); +[] n2S4pc=15 -> (n2S4opt'=1)&(n2S4pc'=-4)&(n2S4ra'=16); +[] n2S4pc=16 -> (n2S4pc'=18); +[] n2S4pc=17 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=18); +[] n2S4pc=18 -> (n2S4pc'=19); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1;n2S5iv3dst0:[INTMIN..INTMAX] init 0; +n2S5ip1:[1..2] init 1;n2S5iv3dst1:[INTMIN..INTMAX] init 0; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1;n2S5ov3dst0:[INTMIN..INTMAX] init 0; +n2S5op1:[1..2] init 1;n2S5ov3dst1:[INTMIN..INTMAX] init 0; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..5] init 0; n2S5ra:[-6..5] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5iv3dst0'=0)&(n2S5ip1'=n2S5ip0)&(n2S5iv3dst1'=n2S5iv3dst0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5iv3dst1'=n2S5iv3dst0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5iv3dst0'=n2S5iv3dst1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5ov3dst0'=n2S5iv3dst0)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5ov3dst1'=n2S5iv3dst0)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S4f2] n2S5is=0 -> (n2S5ip0'=2)&(n2S5iv3dst0'=n2S4ov3dst0)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=2)&(n2S5iv3dst1'=n2S4ov3dst0)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[n2S3f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5iv3dst0'=n2S3ov3dst0)&(n2S5is'=1); +[n2S3f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5iv3dst1'=n2S3ov3dst0)&(n2S5is'=2); +[n2S3f2] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5ov3dst0'=n2S5ov3dst1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5ov3dst0'=n2S5ov3dst1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 & (n2S5ip0=1) -> (n2S5pc'=2); +[] n2S5pc=1 & !((n2S5ip0=1)) -> (n2S5pc'=4); +[] n2S5pc=2 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=3); +[] n2S5pc=3 -> (n2S5pc'=5); +[] n2S5pc=4 -> (n2S5opt'=1)&(n2S5pc'=-4)&(n2S5ra'=5); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:[INTMIN..INTMAX] init 0; +n2S0v6route2:[INTMIN..INTMAX] init 0; +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1;n2S0iv3dst0:[INTMIN..INTMAX] init 0; +n2S0ip1:[1..3] init 1;n2S0iv3dst1:[INTMIN..INTMAX] init 0; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1;n2S0ov3dst0:[INTMIN..INTMAX] init 0; +n2S0op1:[1..3] init 1;n2S0ov3dst1:[INTMIN..INTMAX] init 0; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..19] init 0; n2S0ra:[-6..19] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0iv3dst0'=0)&(n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0iv3dst0'=n2S0iv3dst1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0ov3dst0'=n2S0iv3dst0)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0ov3dst1'=n2S0iv3dst0)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2H0f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0iv3dst0'=n2H0ov3dst0)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0iv3dst1'=n2H0ov3dst0)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0iv3dst0'=n2S2ov3dst0)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0iv3dst1'=n2S2ov3dst0)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0iv3dst0'=n2S1ov3dst0)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0iv3dst1'=n2S1ov3dst0)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=4); +[] n2S0pc=2 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=3); +[] n2S0pc=3 -> (n2S0pc'=19); +[] n2S0pc=4 & (n2S0ip0=2) -> (n2S0pc'=5); +[] n2S0pc=4 & !((n2S0ip0=2)) -> (n2S0pc'=10); +[] n2S0pc=5 & (n2S0iv3dst0=0) -> (n2S0pc'=6); +[] n2S0pc=5 & !((n2S0iv3dst0=0)) -> (n2S0pc'=8); +[] n2S0pc=6 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=7); +[] n2S0pc=7 -> (n2S0pc'=9); +[] n2S0pc=8 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=9); +[] n2S0pc=9 -> (n2S0pc'=19); +[] n2S0pc=10 & (n2S0ip0=3) -> (n2S0pc'=11); +[] n2S0pc=10 & !((n2S0ip0=3)) -> (n2S0pc'=19); +[] n2S0pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S0v6route1'=v7COST_01)&(n2S0pc'=12); +[] n2S0pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S0v6route2'=(v7COST_02+v7COST_21))&(n2S0pc'=13); +[] n2S0pc=13 -> 0.5:(n2S0t0'=0)&(n2S0pc'=14) + 0.5:(n2S0t0'=1)&(n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route1 (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route1 (n2S0pc'=17); +[] n2S0pc=15 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=16); +[] n2S0pc=16 -> (n2S0pc'=18); +[] n2S0pc=17 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=18); +[] n2S0pc=18 -> (n2S0pc'=19); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v6route1:[INTMIN..INTMAX] init 0; +n2S1v6route2:[INTMIN..INTMAX] init 0; +n2S1t0:[0..1]; +n2S1ip0:[1..3] init 1;n2S1iv3dst0:[INTMIN..INTMAX] init 0; +n2S1ip1:[1..3] init 1;n2S1iv3dst1:[INTMIN..INTMAX] init 0; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1;n2S1ov3dst0:[INTMIN..INTMAX] init 0; +n2S1op1:[1..3] init 1;n2S1ov3dst1:[INTMIN..INTMAX] init 0; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..19] init 0; n2S1ra:[-6..19] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1iv3dst0'=0)&(n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1iv3dst0'=n2S1iv3dst1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1ov3dst0'=n2S1iv3dst0)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1ov3dst1'=n2S1iv3dst0)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f3] n2S1is=0 -> (n2S1ip0'=3)&(n2S1iv3dst0'=n2S3ov3dst0)&(n2S1is'=1); +[n2S3f3] n2S1is=1 -> (n2S1ip1'=3)&(n2S1iv3dst1'=n2S3ov3dst0)&(n2S1is'=2); +[n2S3f3] n2S1is=2 -> true; +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1iv3dst0'=n2S2ov3dst0)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1iv3dst1'=n2S2ov3dst0)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f1] n2S1is=0 -> (n2S1ip0'=1)&(n2S1iv3dst0'=n2S0ov3dst0)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=1)&(n2S1iv3dst1'=n2S0ov3dst0)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=19); +[] n2S1pc=4 & (n2S1ip0=2) -> (n2S1pc'=5); +[] n2S1pc=4 & !((n2S1ip0=2)) -> (n2S1pc'=10); +[] n2S1pc=5 & (n2S1iv3dst0=1) -> (n2S1pc'=6); +[] n2S1pc=5 & !((n2S1iv3dst0=1)) -> (n2S1pc'=8); +[] n2S1pc=6 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=7); +[] n2S1pc=7 -> (n2S1pc'=9); +[] n2S1pc=8 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=9); +[] n2S1pc=9 -> (n2S1pc'=19); +[] n2S1pc=10 & (n2S1ip0=3) -> (n2S1pc'=11); +[] n2S1pc=10 & !((n2S1ip0=3)) -> (n2S1pc'=19); +[] n2S1pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S1v6route1'=v7COST_01)&(n2S1pc'=12); +[] n2S1pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S1v6route2'=(v7COST_02+v7COST_21))&(n2S1pc'=13); +[] n2S1pc=13 -> 0.5:(n2S1t0'=0)&(n2S1pc'=14) + 0.5:(n2S1t0'=1)&(n2S1pc'=14); +[] n2S1pc=14 & ((n2S1v6route1 (n2S1pc'=15); +[] n2S1pc=14 & !(((n2S1v6route1 (n2S1pc'=17); +[] n2S1pc=15 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=16); +[] n2S1pc=16 -> (n2S1pc'=18); +[] n2S1pc=17 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=18); +[] n2S1pc=18 -> (n2S1pc'=19); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1;n2H1iv3dst0:[INTMIN..INTMAX] init 0; +n2H1ip1:[1..2] init 1;n2H1iv3dst1:[INTMIN..INTMAX] init 0; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1;n2H1ov3dst0:[INTMIN..INTMAX] init 0; +n2H1op1:[1..2] init 1;n2H1ov3dst1:[INTMIN..INTMAX] init 0; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1iv3dst0'=0)&(n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1iv3dst0'=n2H1iv3dst1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1ov3dst0'=n2H1iv3dst0)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1ov3dst1'=n2H1iv3dst0)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S4f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1iv3dst0'=n2S4ov3dst0)&(n2H1is'=1); +[n2S4f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1iv3dst1'=n2S4ov3dst0)&(n2H1is'=2); +[n2S4f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1ov3dst0'=n2H1ov3dst1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3v6route1:[INTMIN..INTMAX] init 0; +n2S3v6route2:[INTMIN..INTMAX] init 0; +n2S3t0:[0..1]; +n2S3ip0:[1..3] init 1;n2S3iv3dst0:[INTMIN..INTMAX] init 0; +n2S3ip1:[1..3] init 1;n2S3iv3dst1:[INTMIN..INTMAX] init 0; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1;n2S3ov3dst0:[INTMIN..INTMAX] init 0; +n2S3op1:[1..3] init 1;n2S3ov3dst1:[INTMIN..INTMAX] init 0; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..19] init 0; n2S3ra:[-6..19] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3iv3dst0'=0)&(n2S3ip1'=n2S3ip0)&(n2S3iv3dst1'=n2S3iv3dst0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3iv3dst1'=n2S3iv3dst0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3iv3dst0'=n2S3iv3dst1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3ov3dst0'=n2S3iv3dst0)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3ov3dst1'=n2S3iv3dst0)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S1f3] n2S3is=0 -> (n2S3ip0'=3)&(n2S3iv3dst0'=n2S1ov3dst0)&(n2S3is'=1); +[n2S1f3] n2S3is=1 -> (n2S3ip1'=3)&(n2S3iv3dst1'=n2S1ov3dst0)&(n2S3is'=2); +[n2S1f3] n2S3is=2 -> true; +[n2S5f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3iv3dst0'=n2S5ov3dst0)&(n2S3is'=1); +[n2S5f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3iv3dst1'=n2S5ov3dst0)&(n2S3is'=2); +[n2S5f1] n2S3is=2 -> true; +[n2S4f1] n2S3is=0 -> (n2S3ip0'=1)&(n2S3iv3dst0'=n2S4ov3dst0)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=1)&(n2S3iv3dst1'=n2S4ov3dst0)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3ov3dst0'=n2S3ov3dst1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3ov3dst0'=n2S3ov3dst1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3ov3dst0'=n2S3ov3dst1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 & (n2S3ip0=1) -> (n2S3pc'=2); +[] n2S3pc=1 & !((n2S3ip0=1)) -> (n2S3pc'=4); +[] n2S3pc=2 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=3); +[] n2S3pc=3 -> (n2S3pc'=19); +[] n2S3pc=4 & (n2S3ip0=2) -> (n2S3pc'=5); +[] n2S3pc=4 & !((n2S3ip0=2)) -> (n2S3pc'=10); +[] n2S3pc=5 & (n2S3iv3dst0=0) -> (n2S3pc'=6); +[] n2S3pc=5 & !((n2S3iv3dst0=0)) -> (n2S3pc'=8); +[] n2S3pc=6 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=7); +[] n2S3pc=7 -> (n2S3pc'=9); +[] n2S3pc=8 -> (n2S3opt'=1)&(n2S3pc'=-4)&(n2S3ra'=9); +[] n2S3pc=9 -> (n2S3pc'=19); +[] n2S3pc=10 & (n2S3ip0=3) -> (n2S3pc'=11); +[] n2S3pc=10 & !((n2S3ip0=3)) -> (n2S3pc'=19); +[] n2S3pc=11 & v7COST_01>=INTMIN & v7COST_01<=INTMAX -> (n2S3v6route1'=v7COST_01)&(n2S3pc'=12); +[] n2S3pc=12 & (v7COST_02+v7COST_21)>=INTMIN & (v7COST_02+v7COST_21)<=INTMAX -> (n2S3v6route2'=(v7COST_02+v7COST_21))&(n2S3pc'=13); +[] n2S3pc=13 -> 0.5:(n2S3t0'=0)&(n2S3pc'=14) + 0.5:(n2S3t0'=1)&(n2S3pc'=14); +[] n2S3pc=14 & ((n2S3v6route1 (n2S3pc'=15); +[] n2S3pc=14 & !(((n2S3v6route1 (n2S3pc'=17); +[] n2S3pc=15 -> (n2S3opt'=1)&(n2S3pc'=-4)&(n2S3ra'=16); +[] n2S3pc=16 -> (n2S3pc'=18); +[] n2S3pc=17 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=18); +[] n2S3pc=18 -> (n2S3pc'=19); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1;n2S2iv3dst0:[INTMIN..INTMAX] init 0; +n2S2ip1:[1..2] init 1;n2S2iv3dst1:[INTMIN..INTMAX] init 0; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1;n2S2ov3dst0:[INTMIN..INTMAX] init 0; +n2S2op1:[1..2] init 1;n2S2ov3dst1:[INTMIN..INTMAX] init 0; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..5] init 0; n2S2ra:[-6..5] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2iv3dst0'=0)&(n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2iv3dst0'=n2S2iv3dst1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2ov3dst0'=n2S2iv3dst0)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2ov3dst1'=n2S2iv3dst0)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2iv3dst0'=n2S1ov3dst0)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2iv3dst1'=n2S1ov3dst0)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2iv3dst0'=n2S0ov3dst0)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2iv3dst1'=n2S0ov3dst0)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & (n2S2ip0=1) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2ip0=1)) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=5); +[] n2S2pc=4 -> (n2S2opt'=1)&(n2S2pc'=-4)&(n2S2ra'=5); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H0v9pkt_count (S0,pt3), + (S0,pt1) <-> (S1,pt1), + (S0,pt2) <-> (S2,pt1), + (S1,pt2) <-> (S2,pt2), + (S1,pt3) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2 } + + +def h0(pkt, port) state pkt_count(0){ + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +def h1(pkt, port) state pkt_count(0){ pkt_count = pkt_count + 1; drop; } + + +def s0(pkt, port){ + if flip(1/2) == 1 { + fwd(1); + } else { + fwd(2); + } +} + +def s1(pkt, port){ + fwd(3); +} + +def s2(pkt, port){ + if flip(1/100) == 1 { + drop; + } else { + fwd(2); + } +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/congreli-5.prism b/keyur/congreli-5.prism new file mode 100644 index 0000000..7f9c7a5 --- /dev/null +++ b/keyur/congreli-5.prism @@ -0,0 +1,202 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 30; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2t0:[0..1]; +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..6] init 0; n2S2ra:[-6..6] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> 0.99:(n2S2t0'=0)&(n2S2pc'=2) + 0.01:(n2S2t0'=1)&(n2S2pc'=2); +[] n2S2pc=2 & (n2S2t0=1) -> (n2S2pc'=3); +[] n2S2pc=2 & !((n2S2t0=1)) -> (n2S2pc'=5); +[] n2S2pc=3 -> (n2S2pc'=-3)&(n2S2ra'=4); +[] n2S2pc=4 -> (n2S2pc'=6); +[] n2S2pc=5 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..3] init 1; +n2S1ip1:[1..3] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1; +n2S1op1:[1..3] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2H1f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2H1f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2H1f1] n2S1is=2 -> true; +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f1] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..6] init 0; n2S0ra:[-6..6] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2H0f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 & (n2S0t0=1) -> (n2S0pc'=3); +[] n2S0pc=2 & !((n2S0t0=1)) -> (n2S0pc'=5); +[] n2S0pc=3 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=4); +[] n2S0pc=4 -> (n2S0pc'=6); +[] n2S0pc=5 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S1f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S1f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S1f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 5, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + Q_in.pushFront((Packet(),0)); + } else { + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (flip((1/2))==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (flip((1/100))==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else { __S2.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else { __S2.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/keyur/congreli-5d.bayonet b/keyur/congreli-5d.bayonet new file mode 100644 index 0000000..3c7b378 --- /dev/null +++ b/keyur/congreli-5d.bayonet @@ -0,0 +1,68 @@ +parameters{ NUM_PACKETS(3) } + +num_steps 30; + +query probability(pkt_count@H1 < NUM_PACKETS); + +topology{ + nodes{ H0, H1, S0, S1, S2 } + links{ + (H0,pt1) <-> (S0,pt3), + (S0,pt1) <-> (S1,pt1), + (S0,pt2) <-> (S2,pt1), + (S1,pt2) <-> (S2,pt2), + (S1,pt3) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2 } + + +def h0(pkt, port) state pkt_count(0){ + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +def h1(pkt, port) state pkt_count(0){ pkt_count = pkt_count + 1; drop; } + + +def s0(pkt, port){ + if flip(1/2) == 1 { + fwd(1); + } else { + fwd(2); + } +} + +def s1(pkt, port){ + fwd(3); +} + +def s2(pkt, port){ + if flip(1/100) == 1 { + drop; + } else { + fwd(2); + } +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/keyur/congreli-5d.prism b/keyur/congreli-5d.prism new file mode 100644 index 0000000..1bbc38c --- /dev/null +++ b/keyur/congreli-5d.prism @@ -0,0 +1,214 @@ +dtmc +global unlk:[-1..9] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 30; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 10; +global numSkips:[0..10] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f3] n2H0is=2 -> true; +[] unlk=5 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2t0:[0..1]; +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..6] init 0; n2S2ra:[-6..6] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[] unlk=9 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> 0.99:(n2S2t0'=0)&(n2S2pc'=2) + 0.01:(n2S2t0'=1)&(n2S2pc'=2); +[] n2S2pc=2 & (n2S2t0=1) -> (n2S2pc'=3); +[] n2S2pc=2 & !((n2S2t0=1)) -> (n2S2pc'=5); +[] n2S2pc=3 -> (n2S2pc'=-3)&(n2S2ra'=4); +[] n2S2pc=4 -> (n2S2pc'=6); +[] n2S2pc=5 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=6); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..3] init 1; +n2S1ip1:[1..3] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1; +n2S1op1:[1..3] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2H1f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2H1f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2H1f1] n2S1is=2 -> true; +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f1] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[] unlk=8 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..6] init 0; n2S0ra:[-6..6] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2H0f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[] unlk=7 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 & (n2S0t0=1) -> (n2S0pc'=3); +[] n2S0pc=2 & !((n2S0t0=1)) -> (n2S0pc'=5); +[] n2S0pc=3 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=4); +[] n2S0pc=4 -> (n2S0pc'=6); +[] n2S0pc=5 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=6); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S1f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S1f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S1f3] n2H1is=2 -> true; +[] unlk=6 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 5, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + Q_in.pushFront((Packet(),0)); + } else { + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (flip((1/2))==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (flip((1/100))==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty; + next: ℝ; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else { __S2.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else { __S2.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/keyur/congreli-5n.prism b/keyur/congreli-5n.prism new file mode 100644 index 0000000..2dec7b1 --- /dev/null +++ b/keyur/congreli-5n.prism @@ -0,0 +1,202 @@ +mdp +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 30; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2t0:[0..1]; +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..6] init 0; n2S2ra:[-6..6] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> 0.99:(n2S2t0'=0)&(n2S2pc'=2) + 0.01:(n2S2t0'=1)&(n2S2pc'=2); +[] n2S2pc=2 & (n2S2t0=1) -> (n2S2pc'=3); +[] n2S2pc=2 & !((n2S2t0=1)) -> (n2S2pc'=5); +[] n2S2pc=3 -> (n2S2pc'=-3)&(n2S2ra'=4); +[] n2S2pc=4 -> (n2S2pc'=6); +[] n2S2pc=5 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..3] init 1; +n2S1ip1:[1..3] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1; +n2S1op1:[1..3] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2H1f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2H1f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2H1f1] n2S1is=2 -> true; +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f1] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..6] init 0; n2S0ra:[-6..6] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2H0f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 & (n2S0t0=1) -> (n2S0pc'=3); +[] n2S0pc=2 & !((n2S0t0=1)) -> (n2S0pc'=5); +[] n2S0pc=3 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=4); +[] n2S0pc=4 -> (n2S0pc'=6); +[] n2S0pc=5 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S1f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S1f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S1f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count (S0,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S3,pt1), + (S0,pt4) <-> (S2,pt1), + (S1,pt2) <-> (S2,pt2), + (S2,pt3) <-> (S3,pt2), + (S3,pt3) <-> (H1,pt1) + } +} + +packet_fields{} + +programs{ H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3 } + +def h0(pkt, port) state pkt_count(0){ + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +def h1(pkt, port) state pkt_count(0){ + pkt_count = pkt_count + 1; + drop; +} + +def s0(pkt, port) state which(0){ + which = uniformInt(2,4); + fwd(which); +} + +def s1(pkt,port){ + fwd(2); +} + +def s2(pkt,port){ + if flip(1/100) == 1 { + drop; + } else { + fwd(3); + } +} + +def s3(pkt,port){ + fwd(3); +} + + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/congreli-6.prism b/keyur/congreli-6.prism new file mode 100644 index 0000000..94e334f --- /dev/null +++ b/keyur/congreli-6.prism @@ -0,0 +1,241 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 40; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2H1f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2H1f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2H1f1] n2S3is=2 -> true; +[n2S2f3] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f3] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f3] n2S3is=2 -> true; +[n2S0f3] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S0f3] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S0f3] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2t0:[0..1]; +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..6] init 0; n2S2ra:[-6..6] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f4] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f4] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f4] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> 0.99:(n2S2t0'=0)&(n2S2pc'=2) + 0.01:(n2S2t0'=1)&(n2S2pc'=2); +[] n2S2pc=2 & (n2S2t0=1) -> (n2S2pc'=3); +[] n2S2pc=2 & !((n2S2t0=1)) -> (n2S2pc'=5); +[] n2S2pc=3 -> (n2S2pc'=-3)&(n2S2ra'=4); +[] n2S2pc=4 -> (n2S2pc'=6); +[] n2S2pc=5 -> (n2S2opt'=3)&(n2S2pc'=-4)&(n2S2ra'=6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v5which:[INTMIN..INTMAX] init 0; +n2S0t0:[2..4]; +n2S0ip0:[1..4] init 1; +n2S0ip1:[1..4] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..4] init 1; +n2S0op1:[1..4] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..4] init 1; +n2S0pc:[-6..4] init 0; n2S0ra:[-6..4] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=4)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=4)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S3f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S3f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S3f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f4] n2S0pc=-5 & n2S0os>0 & n2S0op0=4 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.333333:(n2S0t0'=2)&(n2S0pc'=2) + 0.333333:(n2S0t0'=3)&(n2S0pc'=2) + 0.333333:(n2S0t0'=4)&(n2S0pc'=2); +[] n2S0pc=2 & n2S0t0>=INTMIN & n2S0t0<=INTMAX -> (n2S0v5which'=n2S0t0)&(n2S0pc'=3); +[] n2S0pc=3 -> (n2S0opt'=n2S0v5which)&(n2S0pc'=-4)&(n2S0ra'=4); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S3f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S3f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S3f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 6, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + Q_in.pushFront((Packet(),0)); + } else { + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + which: ℝ; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + which = 0; + } + def __run(){ + which = uniformInt(2,4); + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],which)); } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (flip((1/100))==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } + } +} +dat __s3_ty{ + Q_in: Queue, Q_out: Queue; + def __s3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s3_ty; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s3_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else if i == 4 { __S2.Q_in } else { __S3.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else if i == 4 { __S2.Q_out } else { __S3.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 4)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/keyur/congreli-6d.bayonet b/keyur/congreli-6d.bayonet new file mode 100644 index 0000000..be47588 --- /dev/null +++ b/keyur/congreli-6d.bayonet @@ -0,0 +1,75 @@ + +parameters{ NUM_PACKETS(3) } + +num_steps 40; + +queue_capacity 2; + +query probability(pkt_count@H1 < NUM_PACKETS); + +topology{ + nodes{ H0, H1, S0, S1, S2, S3 } + links{ + (H0,pt1) <-> (S0,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S3,pt1), + (S0,pt4) <-> (S2,pt1), + (S1,pt2) <-> (S2,pt2), + (S2,pt3) <-> (S3,pt2), + (S3,pt3) <-> (H1,pt1) + } +} + +packet_fields{} + +programs{ H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3 } + +def h0(pkt, port) state pkt_count(0){ + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +def h1(pkt, port) state pkt_count(0){ + pkt_count = pkt_count + 1; + drop; +} + +def s0(pkt, port) state which(0){ + which = uniformInt(2,4); + fwd(which); +} + +def s1(pkt,port){ + fwd(2); +} + +def s2(pkt,port){ + if flip(1/100) == 1 { + drop; + } else { + fwd(3); + } +} + +def s3(pkt,port){ + fwd(3); +} + + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/keyur/congreli-6d.prism b/keyur/congreli-6d.prism new file mode 100644 index 0000000..7d6d1e2 --- /dev/null +++ b/keyur/congreli-6d.prism @@ -0,0 +1,255 @@ +dtmc +global unlk:[-1..11] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 40; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 12; +global numSkips:[0..12] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk=6 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2H1f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2H1f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2H1f1] n2S3is=2 -> true; +[n2S2f3] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f3] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f3] n2S3is=2 -> true; +[n2S0f3] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S0f3] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S0f3] n2S3is=2 -> true; +[] unlk=11 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2t0:[0..1]; +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..6] init 0; n2S2ra:[-6..6] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f4] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f4] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f4] n2S2is=2 -> true; +[] unlk=10 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> 0.99:(n2S2t0'=0)&(n2S2pc'=2) + 0.01:(n2S2t0'=1)&(n2S2pc'=2); +[] n2S2pc=2 & (n2S2t0=1) -> (n2S2pc'=3); +[] n2S2pc=2 & !((n2S2t0=1)) -> (n2S2pc'=5); +[] n2S2pc=3 -> (n2S2pc'=-3)&(n2S2ra'=4); +[] n2S2pc=4 -> (n2S2pc'=6); +[] n2S2pc=5 -> (n2S2opt'=3)&(n2S2pc'=-4)&(n2S2ra'=6); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=9 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v5which:[INTMIN..INTMAX] init 0; +n2S0t0:[2..4]; +n2S0ip0:[1..4] init 1; +n2S0ip1:[1..4] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..4] init 1; +n2S0op1:[1..4] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..4] init 1; +n2S0pc:[-6..4] init 0; n2S0ra:[-6..4] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=4)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=4)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S3f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S3f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S3f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk=8 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[n2S0f4] n2S0pc=-5 & n2S0os>0 & n2S0op0=4 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 -> 0.333333:(n2S0t0'=2)&(n2S0pc'=2) + 0.333333:(n2S0t0'=3)&(n2S0pc'=2) + 0.333333:(n2S0t0'=4)&(n2S0pc'=2); +[] n2S0pc=2 & n2S0t0>=INTMIN & n2S0t0<=INTMAX -> (n2S0v5which'=n2S0t0)&(n2S0pc'=3); +[] n2S0pc=3 -> (n2S0opt'=n2S0v5which)&(n2S0pc'=-4)&(n2S0ra'=4); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S3f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S3f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S3f3] n2H1is=2 -> true; +[] unlk=7 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 6, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + Q_in.pushFront((Packet(),0)); + } else { + Q_in.popFront(); + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + which: ℝ; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + which = 0; + } + def __run(){ + which = uniformInt(2,4); + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],which)); } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (flip((1/100))==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } + } +} +dat __s3_ty{ + Q_in: Queue, Q_out: Queue; + def __s3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s3_ty; + next: ℝ; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s3_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else { __S3.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else { __S3.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 4)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/keyur/congreli-6n.prism b/keyur/congreli-6n.prism new file mode 100644 index 0000000..8ac6b60 --- /dev/null +++ b/keyur/congreli-6n.prism @@ -0,0 +1,241 @@ +mdp +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 40; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2H1f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2H1f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2H1f1] n2S3is=2 -> true; +[n2S2f3] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f3] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f3] n2S3is=2 -> true; +[n2S0f3] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S0f3] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S0f3] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2t0:[0..1]; +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..6] init 0; n2S2ra:[-6..6] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f4] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f4] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f4] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> 0.99:(n2S2t0'=0)&(n2S2pc'=2) + 0.01:(n2S2t0'=1)&(n2S2pc'=2); +[] n2S2pc=2 & (n2S2t0=1) -> (n2S2pc'=3); +[] n2S2pc=2 & !((n2S2t0=1)) -> (n2S2pc'=5); +[] n2S2pc=3 -> (n2S2pc'=-3)&(n2S2ra'=4); +[] n2S2pc=4 -> (n2S2pc'=6); +[] n2S2pc=5 -> (n2S2opt'=3)&(n2S2pc'=-4)&(n2S2ra'=6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v5which:[INTMIN..INTMAX] init 0; +n2S0t0:[2..4]; +n2S0ip0:[1..4] init 1; +n2S0ip1:[1..4] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..4] init 1; +n2S0op1:[1..4] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..4] init 1; +n2S0pc:[-6..4] init 0; n2S0ra:[-6..4] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=4)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=4)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S3f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S3f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S3f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f4] n2S0pc=-5 & n2S0os>0 & n2S0op0=4 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.333333:(n2S0t0'=2)&(n2S0pc'=2) + 0.333333:(n2S0t0'=3)&(n2S0pc'=2) + 0.333333:(n2S0t0'=4)&(n2S0pc'=2); +[] n2S0pc=2 & n2S0t0>=INTMIN & n2S0t0<=INTMAX -> (n2S0v5which'=n2S0t0)&(n2S0pc'=3); +[] n2S0pc=3 -> (n2S0opt'=n2S0v5which)&(n2S0pc'=-4)&(n2S0ra'=4); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S3f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S3f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S3f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count0) + +def printLink(n1,p1,n2,p2,comma=True): + commaStr = "," if comma else "" + print(" (",n1,",pt",p1,") <-> (",n2,",pt",p2,")",commaStr,sep="") + +print("num_steps",(n+1)*18,";") + +print("topology {\n nodes { H0, H1", end="") +for i in range(n*3): + print(", S"+str(i), end="") +print(" }\n links {") +printLink("H0",1,"S0",1) +#print() +for i in range(n): + if i>0: + printLink("S"+str(3*i-2),3,"S"+str(3*i),1) + #print() + printLink("S"+str(3*i),2,"S"+str(3*i+1),1) + printLink("S"+str(3*i),3,"S"+str(3*i+2),1) + printLink("S"+str(3*i+2),2,"S"+str(3*i+1),2) + #print() +printLink("S"+str(3*n-2),3,"H1",1,False) +print(" }\n}\nprograms { H0 -> h0, H1 -> h1",end="") +for i in range(n): + print(", S",i*3," -> s0, S",i*3+1," -> s1, S",i*3+2," -> s2",sep="",end="") +print(" }") diff --git a/keyur/genNodes6.py b/keyur/genNodes6.py new file mode 100644 index 0000000..a9261b5 --- /dev/null +++ b/keyur/genNodes6.py @@ -0,0 +1,32 @@ +import sys + +n = int(sys.argv[1]) +assert(n>0) + +def printLink(n1,p1,n2,p2,comma=True): + commaStr = "," if comma else "" + print(" (",n1,",pt",p1,") <-> (",n2,",pt",p2,")",commaStr,sep="") + +print("num_steps",(n+1)*18,";") + +print("topology {\n nodes { H0, H1", end="") +for i in range(n*4): + print(", S"+str(i), end="") +print(" }\n links {") +printLink("H0",1,"S0",1) +print() +for i in range(n): + if i>0: + printLink("S"+str(4*i-1),3,"S"+str(4*i+0),1) + print() + printLink("S"+str(4*i+0),2,"S"+str(4*i+1),1) + printLink("S"+str(4*i+0),3,"S"+str(4*i+2),1) + printLink("S"+str(4*i+0),4,"S"+str(4*i+3),4) + printLink("S"+str(4*i+1),2,"S"+str(4*i+3),1) + printLink("S"+str(4*i+2),2,"S"+str(4*i+3),2) + print() +printLink("S"+str(4*n-1),3,"H1",1,False) +print(" }\n}\nprograms { H0 -> h0, H1 -> h1",end="") +for i in range(n): + print(", S",i*4," -> s0, S",i*4+1," -> s1, S",i*4+2," -> s2, S",i*4+3," -> s3",sep="",end="") +print(" }") diff --git a/keyur/generics.bayonet b/keyur/generics.bayonet new file mode 100644 index 0000000..5491528 --- /dev/null +++ b/keyur/generics.bayonet @@ -0,0 +1,68 @@ +#creates NUM_PACKETS packets and pushes them via port 1 + +def cngsrc(pkt, port) state pkt_count(0) { + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +#counts packets received + +def cngdst(pkt, port) state pkt_count(0) { + pkt_count = pkt_count + 1; + drop; +} + +#pushes 1 packet and stops + +def relsrc(pkt, port) { + fwd(1); +} + +#checks if packet was received + +def reldst(pkt, port) state arrived(0) { + arrived=1; + drop; +} + +#forwards packet via port 1 +#give it packets via all other ports + +def fwdr(pkt, port) { + fwd(1); +} + +#forwards packet via port 1 or 2 with 50% probability +#give it packets via all other ports +#can be extended to switch between more ports + +def switch(pkt, port) { + fwd(uniformInt(1,2)); +} + +def switch(pkt, port) { + if flip(1/2) == 0 { + fwd(1); + } else { + fwd(2); + } +} + +#forwards packet via port 1, but can fail with 1/1000 probability +#give it packets via all other ports + +def badfwdr(pkt, port) state failing(2) { + if failing == 2 { + failing = flip(1/1000); + } + if failing == 1 { + drop; + } else { + fwd(1); + } +} diff --git a/keyur/gossip-4.bayonet b/keyur/gossip-4.bayonet new file mode 100644 index 0000000..cee5c4d --- /dev/null +++ b/keyur/gossip-4.bayonet @@ -0,0 +1,49 @@ + +num_steps 20; + +topology{ + nodes { S0, S1, S2, S3 } + links{ + (S0,pt1) <-> (S1,pt3), + (S0,pt2) <-> (S2,pt2), + (S0,pt3) <-> (S3,pt1), + (S1,pt1) <-> (S2,pt3), + (S1,pt2) <-> (S3,pt2), + (S2,pt1) <-> (S3,pt3) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ S0 -> first, S1 -> node, S2 -> node, S3 -> node } + +query expectation(infected@S0 + infected@S1 + infected@S2 + infected@S3); + + +def first(pkt,port) state infected(0){ + if infected == 0 { + infected = 1; + new; + fwd(uniformInt(1,3)); + }else{ drop; } +} + + +def node(pkt,port) state infected(0){ + if infected == 0{ + infected = 1; + dup; + fwd(uniformInt(1,3)); + fwd(uniformInt(1,3)); + }else{ drop; } +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/gossip-4.prism b/keyur/gossip-4.prism new file mode 100644 index 0000000..2ed8318 --- /dev/null +++ b/keyur/gossip-4.prism @@ -0,0 +1,211 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +module n2S0 +n2S0v8infected:[INTMIN..INTMAX] init 0; +n2S0t0:[1..3]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 1; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..8] init 0; n2S0ra:[-6..8] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S3f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S3f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S3f1] n2S0is=2 -> true; +[n2S2f2] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S2f2] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S2f2] n2S0is=2 -> true; +[n2S1f3] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S1f3] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S1f3] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 & (n2S0v8infected=0) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0v8infected=0)) -> (n2S0pc'=7); +[] n2S0pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S0v8infected'=1)&(n2S0pc'=3); +[] n2S0pc=3 -> (n2S0pc'=-1)&(n2S0ra'=4); +[] n2S0pc=4 -> 0.333333:(n2S0t0'=1)&(n2S0pc'=5) + 0.333333:(n2S0t0'=2)&(n2S0pc'=5) + 0.333333:(n2S0t0'=3)&(n2S0pc'=5); +[] n2S0pc=5 -> (n2S0opt'=n2S0t0)&(n2S0pc'=-4)&(n2S0ra'=6); +[] n2S0pc=6 -> (n2S0pc'=8); +[] n2S0pc=7 -> (n2S0pc'=-3)&(n2S0ra'=8); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3v8infected:[INTMIN..INTMAX] init 0; +n2S3t0:[1..3]; +n2S3t1:[1..3]; +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..10] init 0; n2S3ra:[-6..10] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S2f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2S2f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2S2f1] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[n2S0f3] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S0f3] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S0f3] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 & (n2S3v8infected=0) -> (n2S3pc'=2); +[] n2S3pc=1 & !((n2S3v8infected=0)) -> (n2S3pc'=9); +[] n2S3pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S3v8infected'=1)&(n2S3pc'=3); +[] n2S3pc=3 -> (n2S3pc'=-2)&(n2S3ra'=4); +[] n2S3pc=4 -> 0.333333:(n2S3t0'=1)&(n2S3pc'=5) + 0.333333:(n2S3t0'=2)&(n2S3pc'=5) + 0.333333:(n2S3t0'=3)&(n2S3pc'=5); +[] n2S3pc=5 -> (n2S3opt'=n2S3t0)&(n2S3pc'=-4)&(n2S3ra'=6); +[] n2S3pc=6 -> 0.333333:(n2S3t1'=1)&(n2S3pc'=7) + 0.333333:(n2S3t1'=2)&(n2S3pc'=7) + 0.333333:(n2S3t1'=3)&(n2S3pc'=7); +[] n2S3pc=7 -> (n2S3opt'=n2S3t1)&(n2S3pc'=-4)&(n2S3ra'=8); +[] n2S3pc=8 -> (n2S3pc'=10); +[] n2S3pc=9 -> (n2S3pc'=-3)&(n2S3ra'=10); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2v8infected:[INTMIN..INTMAX] init 0; +n2S2t0:[1..3]; +n2S2t1:[1..3]; +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..10] init 0; n2S2ra:[-6..10] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S1f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S1f1] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[n2S3f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S3f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S3f3] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & (n2S2v8infected=0) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2v8infected=0)) -> (n2S2pc'=9); +[] n2S2pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S2v8infected'=1)&(n2S2pc'=3); +[] n2S2pc=3 -> (n2S2pc'=-2)&(n2S2ra'=4); +[] n2S2pc=4 -> 0.333333:(n2S2t0'=1)&(n2S2pc'=5) + 0.333333:(n2S2t0'=2)&(n2S2pc'=5) + 0.333333:(n2S2t0'=3)&(n2S2pc'=5); +[] n2S2pc=5 -> (n2S2opt'=n2S2t0)&(n2S2pc'=-4)&(n2S2ra'=6); +[] n2S2pc=6 -> 0.333333:(n2S2t1'=1)&(n2S2pc'=7) + 0.333333:(n2S2t1'=2)&(n2S2pc'=7) + 0.333333:(n2S2t1'=3)&(n2S2pc'=7); +[] n2S2pc=7 -> (n2S2opt'=n2S2t1)&(n2S2pc'=-4)&(n2S2ra'=8); +[] n2S2pc=8 -> (n2S2pc'=10); +[] n2S2pc=9 -> (n2S2pc'=-3)&(n2S2ra'=10); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v8infected:[INTMIN..INTMAX] init 0; +n2S1t0:[1..3]; +n2S1t1:[1..3]; +n2S1ip0:[1..3] init 1; +n2S1ip1:[1..3] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1; +n2S1op1:[1..3] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..10] init 0; n2S1ra:[-6..10] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S0f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[n2S3f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f2] n2S1is=2 -> true; +[n2S2f3] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S2f3] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S2f3] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 & (n2S1v8infected=0) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1v8infected=0)) -> (n2S1pc'=9); +[] n2S1pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S1v8infected'=1)&(n2S1pc'=3); +[] n2S1pc=3 -> (n2S1pc'=-2)&(n2S1ra'=4); +[] n2S1pc=4 -> 0.333333:(n2S1t0'=1)&(n2S1pc'=5) + 0.333333:(n2S1t0'=2)&(n2S1pc'=5) + 0.333333:(n2S1t0'=3)&(n2S1pc'=5); +[] n2S1pc=5 -> (n2S1opt'=n2S1t0)&(n2S1pc'=-4)&(n2S1ra'=6); +[] n2S1pc=6 -> 0.333333:(n2S1t1'=1)&(n2S1pc'=7) + 0.333333:(n2S1t1'=2)&(n2S1pc'=7) + 0.333333:(n2S1t1'=3)&(n2S1pc'=7); +[] n2S1pc=7 -> (n2S1opt'=n2S1t1)&(n2S1pc'=-4)&(n2S1ra'=8); +[] n2S1pc=8 -> (n2S1pc'=10); +[] n2S1pc=9 -> (n2S1pc'=-3)&(n2S1ra'=10); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 -> (finished'=true); +endmodule +rewards "exp0" +!finished & unlk & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 : (((n2S0v8infected+n2S1v8infected)+n2S2v8infected)+n2S3v8infected); +endrewards + +//Properties + +// R{"exp0"}=? [ F finished ] diff --git a/keyur/gossip-4.psi b/keyur/gossip-4.psi new file mode 100644 index 0000000..4a9ee80 --- /dev/null +++ b/keyur/gossip-4.psi @@ -0,0 +1,180 @@ +num_steps := 20; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 4, S0 := 0, S1 := 1, S2 := 2, S3 := 3; +dat Packet{ + def Packet(){ + } +} +dat __first_ty{ + Q_in: Queue, Q_out: Queue; + infected: ℝ; + def __first_ty(){ + Q_in = Queue(); + Q_out = Queue(); + infected = 0; + } + def __run(){ + if (infected==0){ + infected = 1; + Q_in.pushFront((Packet(),0)); + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],uniformInt(1,3))); } + } else { + Q_in.popFront(); + } + } +} +dat __node_ty{ + Q_in: Queue, Q_out: Queue; + infected: ℝ; + def __node_ty(){ + Q_in = Queue(); + Q_out = Queue(); + infected = 0; + } + def __run(){ + if (infected==0){ + infected = 1; + Q_in.dupFront(); + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],uniformInt(1,3))); } + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],uniformInt(1,3))); } + } else { + Q_in.popFront(); + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __S0 : __first_ty, __S1 : __node_ty, __S2 : __node_ty, __S3 : __node_ty; + def __D(){ + __S0 = __first_ty(), __S1 = __node_ty(), __S2 = __node_ty(), __S3 = __node_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __S0.Q_in } else if i == 1 { __S1.Q_in } else if i == 2 { __S2.Q_in } else { __S3.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __S0.Q_out } else if i == 1 { __S1.Q_out } else if i == 2 { __S2.Q_out } else { __S3.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 2 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 1 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 2 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 3 && __S3.Q_in.size() { + __S3.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__S0.Q_in.pushBack((Packet(),0)); + __d.__S0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size())); + q₁ := Expectation((if S0 == 0 { __d.__S0.infected } else if S0 == 1 { __d.__S1.infected } else if S0 == 2 { __d.__S2.infected } else if S0 == 3 { __d.__S3.infected } else { assert(0) }) + (if S1 == 0 { __d.__S0.infected } else if S1 == 1 { __d.__S1.infected } else if S1 == 2 { __d.__S2.infected } else if S1 == 3 { __d.__S3.infected } else { assert(0) }) + (if S2 == 0 { __d.__S0.infected } else if S2 == 1 { __d.__S1.infected } else if S2 == 2 { __d.__S2.infected } else if S2 == 3 { __d.__S3.infected } else { assert(0) }) + (if S3 == 0 { __d.__S0.infected } else if S3 == 1 { __d.__S1.infected } else if S3 == 2 { __d.__S2.infected } else if S3 == 3 { __d.__S3.infected } else { assert(0) })); + return (q₁); +} + diff --git a/keyur/gossip-4d.bayonet b/keyur/gossip-4d.bayonet new file mode 100644 index 0000000..f2ee0b6 --- /dev/null +++ b/keyur/gossip-4d.bayonet @@ -0,0 +1,54 @@ + +num_steps 20; + +topology{ + nodes { S0, S1, S2, S3 } + links{ + (S0,pt1) <-> (S1,pt3), + (S0,pt2) <-> (S2,pt2), + (S0,pt3) <-> (S3,pt1), + (S1,pt1) <-> (S2,pt3), + (S1,pt2) <-> (S3,pt2), + (S2,pt1) <-> (S3,pt3) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ S0 -> first, S1 -> node, S2 -> node, S3 -> node } + +query expectation(infected@S0 + infected@S1 + infected@S2 + infected@S3); + + +def first(pkt,port) state infected(0){ + if infected == 0 { + infected = 1; + new; + fwd(uniformInt(1,3)); + }else{ drop; } +} + + +def node(pkt,port) state infected(0){ + if infected == 0{ + infected = 1; + dup; + fwd(uniformInt(1,3)); + fwd(uniformInt(1,3)); + }else{ drop; } +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} + diff --git a/keyur/gossip-4d.prism b/keyur/gossip-4d.prism new file mode 100644 index 0000000..c96f22f --- /dev/null +++ b/keyur/gossip-4d.prism @@ -0,0 +1,221 @@ +dtmc +global unlk:[-1..7] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 8; +global numSkips:[0..8] init 0; +module n2S0 +n2S0v8infected:[INTMIN..INTMAX] init 0; +n2S0t0:[1..3]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 1; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..8] init 0; n2S0ra:[-6..8] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S3f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S3f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S3f1] n2S0is=2 -> true; +[n2S2f2] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S2f2] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S2f2] n2S0is=2 -> true; +[n2S1f3] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S1f3] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S1f3] n2S0is=2 -> true; +[] unlk=4 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2S0pc=1 & (n2S0v8infected=0) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0v8infected=0)) -> (n2S0pc'=7); +[] n2S0pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S0v8infected'=1)&(n2S0pc'=3); +[] n2S0pc=3 -> (n2S0pc'=-1)&(n2S0ra'=4); +[] n2S0pc=4 -> 0.333333:(n2S0t0'=1)&(n2S0pc'=5) + 0.333333:(n2S0t0'=2)&(n2S0pc'=5) + 0.333333:(n2S0t0'=3)&(n2S0pc'=5); +[] n2S0pc=5 -> (n2S0opt'=n2S0t0)&(n2S0pc'=-4)&(n2S0ra'=6); +[] n2S0pc=6 -> (n2S0pc'=8); +[] n2S0pc=7 -> (n2S0pc'=-3)&(n2S0ra'=8); +[] numSteps (n2S0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3v8infected:[INTMIN..INTMAX] init 0; +n2S3t0:[1..3]; +n2S3t1:[1..3]; +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..10] init 0; n2S3ra:[-6..10] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S2f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2S2f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2S2f1] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[n2S0f3] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S0f3] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S0f3] n2S3is=2 -> true; +[] unlk=7 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S3pc=1 & (n2S3v8infected=0) -> (n2S3pc'=2); +[] n2S3pc=1 & !((n2S3v8infected=0)) -> (n2S3pc'=9); +[] n2S3pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S3v8infected'=1)&(n2S3pc'=3); +[] n2S3pc=3 -> (n2S3pc'=-2)&(n2S3ra'=4); +[] n2S3pc=4 -> 0.333333:(n2S3t0'=1)&(n2S3pc'=5) + 0.333333:(n2S3t0'=2)&(n2S3pc'=5) + 0.333333:(n2S3t0'=3)&(n2S3pc'=5); +[] n2S3pc=5 -> (n2S3opt'=n2S3t0)&(n2S3pc'=-4)&(n2S3ra'=6); +[] n2S3pc=6 -> 0.333333:(n2S3t1'=1)&(n2S3pc'=7) + 0.333333:(n2S3t1'=2)&(n2S3pc'=7) + 0.333333:(n2S3t1'=3)&(n2S3pc'=7); +[] n2S3pc=7 -> (n2S3opt'=n2S3t1)&(n2S3pc'=-4)&(n2S3ra'=8); +[] n2S3pc=8 -> (n2S3pc'=10); +[] n2S3pc=9 -> (n2S3pc'=-3)&(n2S3ra'=10); +[] numSteps (n2S3pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2v8infected:[INTMIN..INTMAX] init 0; +n2S2t0:[1..3]; +n2S2t1:[1..3]; +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..10] init 0; n2S2ra:[-6..10] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S1f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S1f1] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[n2S3f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S3f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S3f3] n2S2is=2 -> true; +[] unlk=6 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S2pc=1 & (n2S2v8infected=0) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2v8infected=0)) -> (n2S2pc'=9); +[] n2S2pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S2v8infected'=1)&(n2S2pc'=3); +[] n2S2pc=3 -> (n2S2pc'=-2)&(n2S2ra'=4); +[] n2S2pc=4 -> 0.333333:(n2S2t0'=1)&(n2S2pc'=5) + 0.333333:(n2S2t0'=2)&(n2S2pc'=5) + 0.333333:(n2S2t0'=3)&(n2S2pc'=5); +[] n2S2pc=5 -> (n2S2opt'=n2S2t0)&(n2S2pc'=-4)&(n2S2ra'=6); +[] n2S2pc=6 -> 0.333333:(n2S2t1'=1)&(n2S2pc'=7) + 0.333333:(n2S2t1'=2)&(n2S2pc'=7) + 0.333333:(n2S2t1'=3)&(n2S2pc'=7); +[] n2S2pc=7 -> (n2S2opt'=n2S2t1)&(n2S2pc'=-4)&(n2S2ra'=8); +[] n2S2pc=8 -> (n2S2pc'=10); +[] n2S2pc=9 -> (n2S2pc'=-3)&(n2S2ra'=10); +[] numSteps (n2S2pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v8infected:[INTMIN..INTMAX] init 0; +n2S1t0:[1..3]; +n2S1t1:[1..3]; +n2S1ip0:[1..3] init 1; +n2S1ip1:[1..3] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1; +n2S1op1:[1..3] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..10] init 0; n2S1ra:[-6..10] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S0f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[n2S3f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f2] n2S1is=2 -> true; +[n2S2f3] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S2f3] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S2f3] n2S1is=2 -> true; +[] unlk=5 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2S1pc=1 & (n2S1v8infected=0) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1v8infected=0)) -> (n2S1pc'=9); +[] n2S1pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S1v8infected'=1)&(n2S1pc'=3); +[] n2S1pc=3 -> (n2S1pc'=-2)&(n2S1ra'=4); +[] n2S1pc=4 -> 0.333333:(n2S1t0'=1)&(n2S1pc'=5) + 0.333333:(n2S1t0'=2)&(n2S1pc'=5) + 0.333333:(n2S1t0'=3)&(n2S1pc'=5); +[] n2S1pc=5 -> (n2S1opt'=n2S1t0)&(n2S1pc'=-4)&(n2S1ra'=6); +[] n2S1pc=6 -> 0.333333:(n2S1t1'=1)&(n2S1pc'=7) + 0.333333:(n2S1t1'=2)&(n2S1pc'=7) + 0.333333:(n2S1t1'=3)&(n2S1pc'=7); +[] n2S1pc=7 -> (n2S1opt'=n2S1t1)&(n2S1pc'=-4)&(n2S1ra'=8); +[] n2S1pc=8 -> (n2S1pc'=10); +[] n2S1pc=9 -> (n2S1pc'=-3)&(n2S1ra'=10); +[] numSteps (n2S1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 -> (finished'=true); +endmodule +rewards "exp0" +!finished & numSkips=maxNumSkips & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 : (((n2S0v8infected+n2S1v8infected)+n2S2v8infected)+n2S3v8infected); +endrewards + +//Properties + +// R{"exp0"}=? [ F finished ] diff --git a/keyur/gossip-4d.psi b/keyur/gossip-4d.psi new file mode 100644 index 0000000..a58e81b --- /dev/null +++ b/keyur/gossip-4d.psi @@ -0,0 +1,182 @@ +num_steps := 20; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 4, S0 := 0, S1 := 1, S2 := 2, S3 := 3; +dat Packet{ + def Packet(){ + } +} +dat __first_ty{ + Q_in: Queue, Q_out: Queue; + infected: ℝ; + def __first_ty(){ + Q_in = Queue(); + Q_out = Queue(); + infected = 0; + } + def __run(){ + if (infected==0){ + infected = 1; + Q_in.pushFront((Packet(),0)); + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],uniformInt(1,3))); } + } else { + Q_in.popFront(); + } + } +} +dat __node_ty{ + Q_in: Queue, Q_out: Queue; + infected: ℝ; + def __node_ty(){ + Q_in = Queue(); + Q_out = Queue(); + infected = 0; + } + def __run(){ + if (infected==0){ + infected = 1; + Q_in.dupFront(); + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],uniformInt(1,3))); } + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],uniformInt(1,3))); } + } else { + Q_in.popFront(); + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __S0 : __first_ty, __S1 : __node_ty, __S2 : __node_ty, __S3 : __node_ty; + next: ℝ; + def __D(){ + __S0 = __first_ty(), __S1 = __node_ty(), __S2 = __node_ty(), __S3 = __node_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __S0.Q_in } else if current == 1 { __S1.Q_in } else if current == 2 { __S2.Q_in } else { __S3.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __S0.Q_out } else if (current - k) == 1 { __S1.Q_out } else if (current - k) == 2 { __S2.Q_out } else { __S3.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 2 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 1 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 2 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 3 && __S3.Q_in.size() { + __S3.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__S0.Q_in.pushBack((Packet(),0)); + __d.__S0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size())); + q₁ := Expectation((if S0 == 0 { __d.__S0.infected } else if S0 == 1 { __d.__S1.infected } else if S0 == 2 { __d.__S2.infected } else if S0 == 3 { __d.__S3.infected } else { assert(0) }) + (if S1 == 0 { __d.__S0.infected } else if S1 == 1 { __d.__S1.infected } else if S1 == 2 { __d.__S2.infected } else if S1 == 3 { __d.__S3.infected } else { assert(0) }) + (if S2 == 0 { __d.__S0.infected } else if S2 == 1 { __d.__S1.infected } else if S2 == 2 { __d.__S2.infected } else if S2 == 3 { __d.__S3.infected } else { assert(0) }) + (if S3 == 0 { __d.__S0.infected } else if S3 == 1 { __d.__S1.infected } else if S3 == 2 { __d.__S2.infected } else if S3 == 3 { __d.__S3.infected } else { assert(0) })); + return (q₁); +} + diff --git a/keyur/gossip-4n.prism b/keyur/gossip-4n.prism new file mode 100644 index 0000000..cc9dff1 --- /dev/null +++ b/keyur/gossip-4n.prism @@ -0,0 +1,211 @@ +mdp +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +module n2S0 +n2S0v8infected:[INTMIN..INTMAX] init 0; +n2S0t0:[1..3]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 1; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..8] init 0; n2S0ra:[-6..8] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S3f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S3f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S3f1] n2S0is=2 -> true; +[n2S2f2] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S2f2] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S2f2] n2S0is=2 -> true; +[n2S1f3] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S1f3] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S1f3] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 & (n2S0v8infected=0) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0v8infected=0)) -> (n2S0pc'=7); +[] n2S0pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S0v8infected'=1)&(n2S0pc'=3); +[] n2S0pc=3 -> (n2S0pc'=-1)&(n2S0ra'=4); +[] n2S0pc=4 -> 0.333333:(n2S0t0'=1)&(n2S0pc'=5) + 0.333333:(n2S0t0'=2)&(n2S0pc'=5) + 0.333333:(n2S0t0'=3)&(n2S0pc'=5); +[] n2S0pc=5 -> (n2S0opt'=n2S0t0)&(n2S0pc'=-4)&(n2S0ra'=6); +[] n2S0pc=6 -> (n2S0pc'=8); +[] n2S0pc=7 -> (n2S0pc'=-3)&(n2S0ra'=8); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3v8infected:[INTMIN..INTMAX] init 0; +n2S3t0:[1..3]; +n2S3t1:[1..3]; +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..10] init 0; n2S3ra:[-6..10] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S2f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2S2f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2S2f1] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[n2S0f3] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S0f3] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S0f3] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 & (n2S3v8infected=0) -> (n2S3pc'=2); +[] n2S3pc=1 & !((n2S3v8infected=0)) -> (n2S3pc'=9); +[] n2S3pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S3v8infected'=1)&(n2S3pc'=3); +[] n2S3pc=3 -> (n2S3pc'=-2)&(n2S3ra'=4); +[] n2S3pc=4 -> 0.333333:(n2S3t0'=1)&(n2S3pc'=5) + 0.333333:(n2S3t0'=2)&(n2S3pc'=5) + 0.333333:(n2S3t0'=3)&(n2S3pc'=5); +[] n2S3pc=5 -> (n2S3opt'=n2S3t0)&(n2S3pc'=-4)&(n2S3ra'=6); +[] n2S3pc=6 -> 0.333333:(n2S3t1'=1)&(n2S3pc'=7) + 0.333333:(n2S3t1'=2)&(n2S3pc'=7) + 0.333333:(n2S3t1'=3)&(n2S3pc'=7); +[] n2S3pc=7 -> (n2S3opt'=n2S3t1)&(n2S3pc'=-4)&(n2S3ra'=8); +[] n2S3pc=8 -> (n2S3pc'=10); +[] n2S3pc=9 -> (n2S3pc'=-3)&(n2S3ra'=10); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2v8infected:[INTMIN..INTMAX] init 0; +n2S2t0:[1..3]; +n2S2t1:[1..3]; +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..10] init 0; n2S2ra:[-6..10] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S1f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S1f1] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[n2S3f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S3f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S3f3] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & (n2S2v8infected=0) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2v8infected=0)) -> (n2S2pc'=9); +[] n2S2pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S2v8infected'=1)&(n2S2pc'=3); +[] n2S2pc=3 -> (n2S2pc'=-2)&(n2S2ra'=4); +[] n2S2pc=4 -> 0.333333:(n2S2t0'=1)&(n2S2pc'=5) + 0.333333:(n2S2t0'=2)&(n2S2pc'=5) + 0.333333:(n2S2t0'=3)&(n2S2pc'=5); +[] n2S2pc=5 -> (n2S2opt'=n2S2t0)&(n2S2pc'=-4)&(n2S2ra'=6); +[] n2S2pc=6 -> 0.333333:(n2S2t1'=1)&(n2S2pc'=7) + 0.333333:(n2S2t1'=2)&(n2S2pc'=7) + 0.333333:(n2S2t1'=3)&(n2S2pc'=7); +[] n2S2pc=7 -> (n2S2opt'=n2S2t1)&(n2S2pc'=-4)&(n2S2ra'=8); +[] n2S2pc=8 -> (n2S2pc'=10); +[] n2S2pc=9 -> (n2S2pc'=-3)&(n2S2ra'=10); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v8infected:[INTMIN..INTMAX] init 0; +n2S1t0:[1..3]; +n2S1t1:[1..3]; +n2S1ip0:[1..3] init 1; +n2S1ip1:[1..3] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1; +n2S1op1:[1..3] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..10] init 0; n2S1ra:[-6..10] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S0f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[n2S3f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f2] n2S1is=2 -> true; +[n2S2f3] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S2f3] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S2f3] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 & (n2S1v8infected=0) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1v8infected=0)) -> (n2S1pc'=9); +[] n2S1pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S1v8infected'=1)&(n2S1pc'=3); +[] n2S1pc=3 -> (n2S1pc'=-2)&(n2S1ra'=4); +[] n2S1pc=4 -> 0.333333:(n2S1t0'=1)&(n2S1pc'=5) + 0.333333:(n2S1t0'=2)&(n2S1pc'=5) + 0.333333:(n2S1t0'=3)&(n2S1pc'=5); +[] n2S1pc=5 -> (n2S1opt'=n2S1t0)&(n2S1pc'=-4)&(n2S1ra'=6); +[] n2S1pc=6 -> 0.333333:(n2S1t1'=1)&(n2S1pc'=7) + 0.333333:(n2S1t1'=2)&(n2S1pc'=7) + 0.333333:(n2S1t1'=3)&(n2S1pc'=7); +[] n2S1pc=7 -> (n2S1opt'=n2S1t1)&(n2S1pc'=-4)&(n2S1ra'=8); +[] n2S1pc=8 -> (n2S1pc'=10); +[] n2S1pc=9 -> (n2S1pc'=-3)&(n2S1ra'=10); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 -> (finished'=true); +endmodule +rewards "exp0" +!finished & unlk & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 : (((n2S0v8infected+n2S1v8infected)+n2S2v8infected)+n2S3v8infected); +endrewards + +//Properties + +// R{"exp0"}=? [ F finished ] diff --git a/keyur/gossip-5d.bayonet b/keyur/gossip-5d.bayonet new file mode 100644 index 0000000..17a59c5 --- /dev/null +++ b/keyur/gossip-5d.bayonet @@ -0,0 +1,63 @@ + +num_steps 50; + +topology{ + nodes { S0, S1, S2, S3, S4 } + links{ + (S0,pt1) <-> (S1,pt1), + (S0,pt2) <-> (S2,pt1), + (S0,pt3) <-> (S3,pt1), + (S0,pt4) <-> (S4,pt1), + (S1,pt2) <-> (S2,pt2), + (S1,pt3) <-> (S3,pt2), + (S1,pt4) <-> (S4,pt2), + (S2,pt3) <-> (S3,pt3), + (S2,pt4) <-> (S4,pt3), + (S3,pt4) <-> (S4,pt4), + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ S0 -> first, S1 -> node, S2 -> node, S3 -> node, S4 -> node } + +//query probability(infected@S0 + infected@S1 + infected@S2 + infected@S3 + infected@S4 == 1); +//query probability(infected@S0 + infected@S1 + infected@S2 + infected@S3 + infected@S4 == 2); +//query probability(infected@S0 + infected@S1 + infected@S2 + infected@S3 + infected@S4 == 3); +//query probability(infected@S0 + infected@S1 + infected@S2 + infected@S3 + infected@S4 == 4); +//query probability(infected@S0 + infected@S1 + infected@S2 + infected@S3 + infected@S4 == 5); + +query expectation(infected@S0 + infected@S1 + infected@S2 + infected@S3 + infected@S4); + + +def first(pkt,port) state infected(0){ + if infected == 0 { + infected = 1; + new; + fwd(uniformInt(1,4)); + }else{ drop; } +} + + +def node(pkt,port) state infected(0){ + if infected == 0{ + infected = 1; + dup; + fwd(uniformInt(1,4)); + fwd(uniformInt(1,4)); + }else{ drop; } +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/keyur/gossip-5d.prism b/keyur/gossip-5d.prism new file mode 100644 index 0000000..833a01d --- /dev/null +++ b/keyur/gossip-5d.prism @@ -0,0 +1,292 @@ +dtmc +global unlk:[-1..9] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 10; +global numSkips:[0..10] init 0; +module n2S0 +n2S0v8infected:[INTMIN..INTMAX] init 0; +n2S0t0:[1..4]; +n2S0ip0:[1..4] init 1; +n2S0ip1:[1..4] init 1; +n2S0is:[0..2] init 1; +n2S0op0:[1..4] init 1; +n2S0op1:[1..4] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..4] init 1; +n2S0pc:[-6..8] init 0; n2S0ra:[-6..8] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S4f1] n2S0is=0 -> (n2S0ip0'=4)&(n2S0is'=1); +[n2S4f1] n2S0is=1 -> (n2S0ip1'=4)&(n2S0is'=2); +[n2S4f1] n2S0is=2 -> true; +[n2S3f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S3f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S3f1] n2S0is=2 -> true; +[n2S2f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[] unlk=5 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[n2S0f4] n2S0pc=-5 & n2S0os>0 & n2S0op0=4 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2S0pc=1 & (n2S0v8infected=0) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0v8infected=0)) -> (n2S0pc'=7); +[] n2S0pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S0v8infected'=1)&(n2S0pc'=3); +[] n2S0pc=3 -> (n2S0pc'=-1)&(n2S0ra'=4); +[] n2S0pc=4 -> 0.25:(n2S0t0'=1)&(n2S0pc'=5) + 0.25:(n2S0t0'=2)&(n2S0pc'=5) + 0.25:(n2S0t0'=3)&(n2S0pc'=5) + 0.25:(n2S0t0'=4)&(n2S0pc'=5); +[] n2S0pc=5 -> (n2S0opt'=n2S0t0)&(n2S0pc'=-4)&(n2S0ra'=6); +[] n2S0pc=6 -> (n2S0pc'=8); +[] n2S0pc=7 -> (n2S0pc'=-3)&(n2S0ra'=8); +[] numSteps (n2S0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4v8infected:[INTMIN..INTMAX] init 0; +n2S4t0:[1..4]; +n2S4t1:[1..4]; +n2S4ip0:[1..4] init 1; +n2S4ip1:[1..4] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..4] init 1; +n2S4op1:[1..4] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..4] init 1; +n2S4pc:[-6..10] init 0; n2S4ra:[-6..10] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S3f4] n2S4is=0 -> (n2S4ip0'=4)&(n2S4is'=1); +[n2S3f4] n2S4is=1 -> (n2S4ip1'=4)&(n2S4is'=2); +[n2S3f4] n2S4is=2 -> true; +[n2S2f4] n2S4is=0 -> (n2S4ip0'=3)&(n2S4is'=1); +[n2S2f4] n2S4is=1 -> (n2S4ip1'=3)&(n2S4is'=2); +[n2S2f4] n2S4is=2 -> true; +[n2S1f4] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S1f4] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S1f4] n2S4is=2 -> true; +[n2S0f4] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S0f4] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S0f4] n2S4is=2 -> true; +[] unlk=9 & numSteps0 -> (n2S4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S4f4] n2S4pc=-5 & n2S4os>0 & n2S4op0=4 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f3] n2S4pc=-5 & n2S4os>0 & n2S4op0=3 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S4pc=1 & (n2S4v8infected=0) -> (n2S4pc'=2); +[] n2S4pc=1 & !((n2S4v8infected=0)) -> (n2S4pc'=9); +[] n2S4pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S4v8infected'=1)&(n2S4pc'=3); +[] n2S4pc=3 -> (n2S4pc'=-2)&(n2S4ra'=4); +[] n2S4pc=4 -> 0.25:(n2S4t0'=1)&(n2S4pc'=5) + 0.25:(n2S4t0'=2)&(n2S4pc'=5) + 0.25:(n2S4t0'=3)&(n2S4pc'=5) + 0.25:(n2S4t0'=4)&(n2S4pc'=5); +[] n2S4pc=5 -> (n2S4opt'=n2S4t0)&(n2S4pc'=-4)&(n2S4ra'=6); +[] n2S4pc=6 -> 0.25:(n2S4t1'=1)&(n2S4pc'=7) + 0.25:(n2S4t1'=2)&(n2S4pc'=7) + 0.25:(n2S4t1'=3)&(n2S4pc'=7) + 0.25:(n2S4t1'=4)&(n2S4pc'=7); +[] n2S4pc=7 -> (n2S4opt'=n2S4t1)&(n2S4pc'=-4)&(n2S4ra'=8); +[] n2S4pc=8 -> (n2S4pc'=10); +[] n2S4pc=9 -> (n2S4pc'=-3)&(n2S4ra'=10); +[] numSteps (n2S4pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3v8infected:[INTMIN..INTMAX] init 0; +n2S3t0:[1..4]; +n2S3t1:[1..4]; +n2S3ip0:[1..4] init 1; +n2S3ip1:[1..4] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..4] init 1; +n2S3op1:[1..4] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..4] init 1; +n2S3pc:[-6..10] init 0; n2S3ra:[-6..10] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f4] n2S3is=0 -> (n2S3ip0'=4)&(n2S3is'=1); +[n2S4f4] n2S3is=1 -> (n2S3ip1'=4)&(n2S3is'=2); +[n2S4f4] n2S3is=2 -> true; +[n2S2f3] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2S2f3] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2S2f3] n2S3is=2 -> true; +[n2S1f3] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S1f3] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S1f3] n2S3is=2 -> true; +[n2S0f3] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S0f3] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S0f3] n2S3is=2 -> true; +[] unlk=8 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[n2S3f4] n2S3pc=-5 & n2S3os>0 & n2S3op0=4 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S3pc=1 & (n2S3v8infected=0) -> (n2S3pc'=2); +[] n2S3pc=1 & !((n2S3v8infected=0)) -> (n2S3pc'=9); +[] n2S3pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S3v8infected'=1)&(n2S3pc'=3); +[] n2S3pc=3 -> (n2S3pc'=-2)&(n2S3ra'=4); +[] n2S3pc=4 -> 0.25:(n2S3t0'=1)&(n2S3pc'=5) + 0.25:(n2S3t0'=2)&(n2S3pc'=5) + 0.25:(n2S3t0'=3)&(n2S3pc'=5) + 0.25:(n2S3t0'=4)&(n2S3pc'=5); +[] n2S3pc=5 -> (n2S3opt'=n2S3t0)&(n2S3pc'=-4)&(n2S3ra'=6); +[] n2S3pc=6 -> 0.25:(n2S3t1'=1)&(n2S3pc'=7) + 0.25:(n2S3t1'=2)&(n2S3pc'=7) + 0.25:(n2S3t1'=3)&(n2S3pc'=7) + 0.25:(n2S3t1'=4)&(n2S3pc'=7); +[] n2S3pc=7 -> (n2S3opt'=n2S3t1)&(n2S3pc'=-4)&(n2S3ra'=8); +[] n2S3pc=8 -> (n2S3pc'=10); +[] n2S3pc=9 -> (n2S3pc'=-3)&(n2S3ra'=10); +[] numSteps (n2S3pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2v8infected:[INTMIN..INTMAX] init 0; +n2S2t0:[1..4]; +n2S2t1:[1..4]; +n2S2ip0:[1..4] init 1; +n2S2ip1:[1..4] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..4] init 1; +n2S2op1:[1..4] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..4] init 1; +n2S2pc:[-6..10] init 0; n2S2ra:[-6..10] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S4f3] n2S2is=0 -> (n2S2ip0'=4)&(n2S2is'=1); +[n2S4f3] n2S2is=1 -> (n2S2ip1'=4)&(n2S2is'=2); +[n2S4f3] n2S2is=2 -> true; +[n2S3f3] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S3f3] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S3f3] n2S2is=2 -> true; +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[] unlk=7 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[n2S2f4] n2S2pc=-5 & n2S2os>0 & n2S2op0=4 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S2pc=1 & (n2S2v8infected=0) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2v8infected=0)) -> (n2S2pc'=9); +[] n2S2pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S2v8infected'=1)&(n2S2pc'=3); +[] n2S2pc=3 -> (n2S2pc'=-2)&(n2S2ra'=4); +[] n2S2pc=4 -> 0.25:(n2S2t0'=1)&(n2S2pc'=5) + 0.25:(n2S2t0'=2)&(n2S2pc'=5) + 0.25:(n2S2t0'=3)&(n2S2pc'=5) + 0.25:(n2S2t0'=4)&(n2S2pc'=5); +[] n2S2pc=5 -> (n2S2opt'=n2S2t0)&(n2S2pc'=-4)&(n2S2ra'=6); +[] n2S2pc=6 -> 0.25:(n2S2t1'=1)&(n2S2pc'=7) + 0.25:(n2S2t1'=2)&(n2S2pc'=7) + 0.25:(n2S2t1'=3)&(n2S2pc'=7) + 0.25:(n2S2t1'=4)&(n2S2pc'=7); +[] n2S2pc=7 -> (n2S2opt'=n2S2t1)&(n2S2pc'=-4)&(n2S2ra'=8); +[] n2S2pc=8 -> (n2S2pc'=10); +[] n2S2pc=9 -> (n2S2pc'=-3)&(n2S2ra'=10); +[] numSteps (n2S2pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v8infected:[INTMIN..INTMAX] init 0; +n2S1t0:[1..4]; +n2S1t1:[1..4]; +n2S1ip0:[1..4] init 1; +n2S1ip1:[1..4] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..4] init 1; +n2S1op1:[1..4] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..4] init 1; +n2S1pc:[-6..10] init 0; n2S1ra:[-6..10] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S4f2] n2S1is=0 -> (n2S1ip0'=4)&(n2S1is'=1); +[n2S4f2] n2S1is=1 -> (n2S1ip1'=4)&(n2S1is'=2); +[n2S4f2] n2S1is=2 -> true; +[n2S3f2] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2S3f2] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2S3f2] n2S1is=2 -> true; +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f1] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[] unlk=6 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[n2S1f4] n2S1pc=-5 & n2S1os>0 & n2S1op0=4 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2S1pc=1 & (n2S1v8infected=0) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1v8infected=0)) -> (n2S1pc'=9); +[] n2S1pc=2 & 1>=INTMIN & 1<=INTMAX -> (n2S1v8infected'=1)&(n2S1pc'=3); +[] n2S1pc=3 -> (n2S1pc'=-2)&(n2S1ra'=4); +[] n2S1pc=4 -> 0.25:(n2S1t0'=1)&(n2S1pc'=5) + 0.25:(n2S1t0'=2)&(n2S1pc'=5) + 0.25:(n2S1t0'=3)&(n2S1pc'=5) + 0.25:(n2S1t0'=4)&(n2S1pc'=5); +[] n2S1pc=5 -> (n2S1opt'=n2S1t0)&(n2S1pc'=-4)&(n2S1ra'=6); +[] n2S1pc=6 -> 0.25:(n2S1t1'=1)&(n2S1pc'=7) + 0.25:(n2S1t1'=2)&(n2S1pc'=7) + 0.25:(n2S1t1'=3)&(n2S1pc'=7) + 0.25:(n2S1t1'=4)&(n2S1pc'=7); +[] n2S1pc=7 -> (n2S1opt'=n2S1t1)&(n2S1pc'=-4)&(n2S1ra'=8); +[] n2S1pc=8 -> (n2S1pc'=10); +[] n2S1pc=9 -> (n2S1pc'=-3)&(n2S1ra'=10); +[] numSteps (n2S1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 -> (finished'=true); +endmodule +rewards "exp0" +!finished & numSkips=maxNumSkips & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 : ((((n2S0v8infected+n2S1v8infected)+n2S2v8infected)+n2S3v8infected)+n2S4v8infected); +endrewards + +//Properties + +// R{"exp0"}=? [ F finished ] diff --git a/keyur/gossip-5d.psi b/keyur/gossip-5d.psi new file mode 100644 index 0000000..dc53d58 --- /dev/null +++ b/keyur/gossip-5d.psi @@ -0,0 +1,216 @@ +num_steps := 15; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 5, S0 := 0, S1 := 1, S2 := 2, S3 := 3, S4 := 4; +dat Packet{ + def Packet(){ + } +} +dat __first_ty{ + Q_in: Queue, Q_out: Queue; + infected: ℝ; + def __first_ty(){ + Q_in = Queue(); + Q_out = Queue(); + infected = 0; + } + def __run(){ + if (infected==0){ + infected = 1; + Q_in.pushFront((Packet(),0)); + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],uniformInt(1,4))); } + } else { + Q_in.popFront(); + } + } +} +dat __node_ty{ + Q_in: Queue, Q_out: Queue; + infected: ℝ; + def __node_ty(){ + Q_in = Queue(); + Q_out = Queue(); + infected = 0; + } + def __run(){ + if (infected==0){ + infected = 1; + Q_in.dupFront(); + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],uniformInt(1,4))); } + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],uniformInt(1,4))); } + } else { + Q_in.popFront(); + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __S0 : __first_ty, __S1 : __node_ty, __S2 : __node_ty, __S3 : __node_ty, __S4 : __node_ty; + next: ℝ; + def __D(){ + __S0 = __first_ty(), __S1 = __node_ty(), __S2 = __node_ty(), __S3 = __node_ty(), __S4 = __node_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __S0.Q_in } else if current == 1 { __S1.Q_in } else if current == 2 { __S2.Q_in } else if current == 3 { __S3.Q_in } else { __S4.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __S0.Q_out } else if (current - k) == 1 { __S1.Q_out } else if (current - k) == 2 { __S2.Q_out } else if (current - k) == 3 { __S3.Q_out } else { __S4.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 1)); + } + if port == 4 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 4 { + __S4.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S3.Q_in.pushBack((pkt, 3)); + } + if port == 4 { + __S4.Q_in.pushBack((pkt, 3)); + } + } + if node == 3 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 3)); + } + if port == 4 { + __S4.Q_in.pushBack((pkt, 4)); + } + } + if node == 4 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 4)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 4)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 4)); + } + if port == 4 { + __S3.Q_in.pushBack((pkt, 4)); + } + } + } else { + if node == 0 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 1 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 2 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 3 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 4 && __S4.Q_in.size() { + __S4.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__S0.Q_in.pushBack((Packet(),0)); + __d.__S0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size())); + q₁ := Expectation(((if S0 == 0 { __d.__S0.infected } else if S0 == 1 { __d.__S1.infected } else if S0 == 2 { __d.__S2.infected } else if S0 == 3 { __d.__S3.infected } else if S0 == 4 { __d.__S4.infected } else { assert(0) }) + (if S1 == 0 { __d.__S0.infected } else if S1 == 1 { __d.__S1.infected } else if S1 == 2 { __d.__S2.infected } else if S1 == 3 { __d.__S3.infected } else if S1 == 4 { __d.__S4.infected } else { assert(0) }) + (if S2 == 0 { __d.__S0.infected } else if S2 == 1 { __d.__S1.infected } else if S2 == 2 { __d.__S2.infected } else if S2 == 3 { __d.__S3.infected } else if S2 == 4 { __d.__S4.infected } else { assert(0) }) + (if S3 == 0 { __d.__S0.infected } else if S3 == 1 { __d.__S1.infected } else if S3 == 2 { __d.__S2.infected } else if S3 == 3 { __d.__S3.infected } else if S3 == 4 { __d.__S4.infected } else { assert(0) }) + (if S4 == 0 { __d.__S0.infected } else if S4 == 1 { __d.__S1.infected } else if S4 == 2 { __d.__S2.infected } else if S4 == 3 { __d.__S3.infected } else if S4 == 4 { __d.__S4.infected } else { assert(0) }) == 1) !=0); + q₂ := Expectation(((if S0 == 0 { __d.__S0.infected } else if S0 == 1 { __d.__S1.infected } else if S0 == 2 { __d.__S2.infected } else if S0 == 3 { __d.__S3.infected } else if S0 == 4 { __d.__S4.infected } else { assert(0) }) + (if S1 == 0 { __d.__S0.infected } else if S1 == 1 { __d.__S1.infected } else if S1 == 2 { __d.__S2.infected } else if S1 == 3 { __d.__S3.infected } else if S1 == 4 { __d.__S4.infected } else { assert(0) }) + (if S2 == 0 { __d.__S0.infected } else if S2 == 1 { __d.__S1.infected } else if S2 == 2 { __d.__S2.infected } else if S2 == 3 { __d.__S3.infected } else if S2 == 4 { __d.__S4.infected } else { assert(0) }) + (if S3 == 0 { __d.__S0.infected } else if S3 == 1 { __d.__S1.infected } else if S3 == 2 { __d.__S2.infected } else if S3 == 3 { __d.__S3.infected } else if S3 == 4 { __d.__S4.infected } else { assert(0) }) + (if S4 == 0 { __d.__S0.infected } else if S4 == 1 { __d.__S1.infected } else if S4 == 2 { __d.__S2.infected } else if S4 == 3 { __d.__S3.infected } else if S4 == 4 { __d.__S4.infected } else { assert(0) }) == 2) !=0); + q₃ := Expectation(((if S0 == 0 { __d.__S0.infected } else if S0 == 1 { __d.__S1.infected } else if S0 == 2 { __d.__S2.infected } else if S0 == 3 { __d.__S3.infected } else if S0 == 4 { __d.__S4.infected } else { assert(0) }) + (if S1 == 0 { __d.__S0.infected } else if S1 == 1 { __d.__S1.infected } else if S1 == 2 { __d.__S2.infected } else if S1 == 3 { __d.__S3.infected } else if S1 == 4 { __d.__S4.infected } else { assert(0) }) + (if S2 == 0 { __d.__S0.infected } else if S2 == 1 { __d.__S1.infected } else if S2 == 2 { __d.__S2.infected } else if S2 == 3 { __d.__S3.infected } else if S2 == 4 { __d.__S4.infected } else { assert(0) }) + (if S3 == 0 { __d.__S0.infected } else if S3 == 1 { __d.__S1.infected } else if S3 == 2 { __d.__S2.infected } else if S3 == 3 { __d.__S3.infected } else if S3 == 4 { __d.__S4.infected } else { assert(0) }) + (if S4 == 0 { __d.__S0.infected } else if S4 == 1 { __d.__S1.infected } else if S4 == 2 { __d.__S2.infected } else if S4 == 3 { __d.__S3.infected } else if S4 == 4 { __d.__S4.infected } else { assert(0) }) == 3) !=0); + q₄ := Expectation(((if S0 == 0 { __d.__S0.infected } else if S0 == 1 { __d.__S1.infected } else if S0 == 2 { __d.__S2.infected } else if S0 == 3 { __d.__S3.infected } else if S0 == 4 { __d.__S4.infected } else { assert(0) }) + (if S1 == 0 { __d.__S0.infected } else if S1 == 1 { __d.__S1.infected } else if S1 == 2 { __d.__S2.infected } else if S1 == 3 { __d.__S3.infected } else if S1 == 4 { __d.__S4.infected } else { assert(0) }) + (if S2 == 0 { __d.__S0.infected } else if S2 == 1 { __d.__S1.infected } else if S2 == 2 { __d.__S2.infected } else if S2 == 3 { __d.__S3.infected } else if S2 == 4 { __d.__S4.infected } else { assert(0) }) + (if S3 == 0 { __d.__S0.infected } else if S3 == 1 { __d.__S1.infected } else if S3 == 2 { __d.__S2.infected } else if S3 == 3 { __d.__S3.infected } else if S3 == 4 { __d.__S4.infected } else { assert(0) }) + (if S4 == 0 { __d.__S0.infected } else if S4 == 1 { __d.__S1.infected } else if S4 == 2 { __d.__S2.infected } else if S4 == 3 { __d.__S3.infected } else if S4 == 4 { __d.__S4.infected } else { assert(0) }) == 4) !=0); + q₅ := Expectation(((if S0 == 0 { __d.__S0.infected } else if S0 == 1 { __d.__S1.infected } else if S0 == 2 { __d.__S2.infected } else if S0 == 3 { __d.__S3.infected } else if S0 == 4 { __d.__S4.infected } else { assert(0) }) + (if S1 == 0 { __d.__S0.infected } else if S1 == 1 { __d.__S1.infected } else if S1 == 2 { __d.__S2.infected } else if S1 == 3 { __d.__S3.infected } else if S1 == 4 { __d.__S4.infected } else { assert(0) }) + (if S2 == 0 { __d.__S0.infected } else if S2 == 1 { __d.__S1.infected } else if S2 == 2 { __d.__S2.infected } else if S2 == 3 { __d.__S3.infected } else if S2 == 4 { __d.__S4.infected } else { assert(0) }) + (if S3 == 0 { __d.__S0.infected } else if S3 == 1 { __d.__S1.infected } else if S3 == 2 { __d.__S2.infected } else if S3 == 3 { __d.__S3.infected } else if S3 == 4 { __d.__S4.infected } else { assert(0) }) + (if S4 == 0 { __d.__S0.infected } else if S4 == 1 { __d.__S1.infected } else if S4 == 2 { __d.__S2.infected } else if S4 == 3 { __d.__S3.infected } else if S4 == 4 { __d.__S4.infected } else { assert(0) }) == 5) !=0); + return (q₁, q₂, q₃, q₄, q₅); +} + diff --git a/keyur/gossip-n.pctl b/keyur/gossip-n.pctl new file mode 100644 index 0000000..f4042b0 --- /dev/null +++ b/keyur/gossip-n.pctl @@ -0,0 +1,2 @@ +R{"exp0"}min=? [ F finished ] +R{"exp0"}max=? [ F finished ] diff --git a/keyur/gossip-s.pctl b/keyur/gossip-s.pctl new file mode 100644 index 0000000..08930c6 --- /dev/null +++ b/keyur/gossip-s.pctl @@ -0,0 +1 @@ +R{"exp0"}=? [ F finished ] diff --git a/keyur/gossip.pctl b/keyur/gossip.pctl new file mode 100644 index 0000000..08930c6 --- /dev/null +++ b/keyur/gossip.pctl @@ -0,0 +1 @@ +R{"exp0"}=? [ F finished ] diff --git a/keyur/non-uniform/congestion-30-deterministic.bayonet b/keyur/non-uniform/congestion-30-deterministic.bayonet new file mode 100644 index 0000000..8c197fa --- /dev/null +++ b/keyur/non-uniform/congestion-30-deterministic.bayonet @@ -0,0 +1,163 @@ + +parameters{ NUM_PACKETS(3), COST_01(1), COST_02(2), COST_03(3), COST_12(1), COST_23(1) } + +num_steps 60; + +queue_capacity 2; + +query probability(pkt_count@H1 < NUM_PACKETS); + + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5, S6, S7, + S8, S9, S10, S11, S12, S13, S14, S15, + S16, S17, S18, S19, S20, S21, S22, S23, + S24, S25, S26, S27 } + + links{ + (H0,pt1) <-> (S0,pt1), + + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (S3,pt1), + (S2,pt2) <-> (S3,pt2), + + (S3,pt3) <-> (S4,pt1), + + (S4,pt2) <-> (S5,pt1), + (S4,pt3) <-> (S6,pt1), + (S5,pt2) <-> (S7,pt1), + (S6,pt2) <-> (S7,pt2), + + (S7,pt3) <-> (S8,pt1), + + (S8,pt2) <-> (S9,pt1), + (S8,pt3) <-> (S10,pt1), + (S9,pt2) <-> (S11,pt1), + (S10,pt2) <-> (S11,pt2), + + (S11,pt3) <-> (S12,pt1), + + (S12,pt2) <-> (S13,pt1), + (S12,pt3) <-> (S14,pt1), + (S13,pt2) <-> (S15,pt1), + (S14,pt2) <-> (S15,pt2), + + + (S15,pt3) <-> (S16,pt1), + + (S16,pt2) <-> (S17,pt1), + (S16,pt3) <-> (S18,pt1), + (S17,pt2) <-> (S19,pt1), + (S18,pt2) <-> (S19,pt2), + + (S19,pt3) <-> (S20,pt1), + + (S20,pt2) <-> (S21,pt1), + (S20,pt3) <-> (S22,pt1), + (S21,pt2) <-> (S23,pt1), + (S22,pt2) <-> (S23,pt2), + + (S23,pt3) <-> (S24,pt1), + + (S24,pt2) <-> (S25,pt1), + (S24,pt3) <-> (S26,pt1), + (S25,pt2) <-> (S27,pt1), + (S26,pt2) <-> (S27,pt2), + + (S27,pt3) <-> (H1,pt1) + } +} + +programs{ H0 -> h0, H1 -> h1, + S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3, + S4 -> s0, S5 -> s1, S6 -> s2, S7 -> s3, + S8 -> s0, S9 -> s1, S10 -> s2, S11 -> s3, + S12 -> s0, S13 -> s1, S14 -> s2, S15 -> s3, + S16 -> s0, S17 -> s1, S18 -> s2, S19 -> s3, + S20 -> s0, S21 -> s1, S22 -> s2, S23 -> s3, + S24 -> s0, S25 -> s1, S26 -> s2, S27 -> s3 +} + + + +packet_fields{} + +def h0(pkt, port) state pkt_count(0){ + new; + if pkt_count < NUM_PACKETS{ + new; + pkt_count = pkt_count + 1; + fwd(1); + }else { drop; drop; } +} + +def h1(pkt, port) state pkt_count(0){ + pkt_count = pkt_count + 1; + drop; +} + +def s0(pkt, port) +state +route1(0), route2(0), route3(0), +shortest1(0), shortest2(0), shortest3(0), +nshortest(0), which(0) +{ + if port == 1{ + route1 = COST_01 + COST_12 + COST_23; + route2 = COST_03; + route3 = COST_02 + COST_23; + shortest1 = route1 <= route2 && route2 <= route3; + shortest2 = route2 <= route1 && route2 <= route3; + shortest3 = route3 <= route1 && route3 <= route2; + nshortest = shortest1 + shortest2 + shortest3; + which = uniformInt(1,nshortest); + if which == shortest1 { fwd(1); } + else if which == shortest1+shortest2 { fwd(2); } + else { fwd(3); } + } +} + +def s1(pkt,port){ + if port == 1{ + fwd(2); + } +} +def s2(pkt,port){ + if port == 1 || port == 2{ + fwd(3); + } +} +def s3(pkt,port){ + if port == 1 || port == 2{ + fwd(3); + } +} + + +def scheduler() state phase(0), cur_node(0){ // Phase 0: Execute RunSw, Phase 1: Exectue FwdQ + for p in [0..2){ + if phase == 0{ + for i in [0..k){ + if (Q_in@cur_node).size() > 0{ + return (RunSw,cur_node); + } + cur_node = (cur_node + 1) % k; + } + phase = 1; + cur_node = 0; + } + if phase == 1{ + for i in [0..k){ + if (Q_out@cur_node).size() > 0{ + return (FwdQ,cur_node); + } + cur_node = (cur_node + 1) % k; + } + phase = 0; + cur_node = 0; + } + } + assert(0); +} + diff --git a/keyur/non-uniform/congestion-5-deterministic.prism b/keyur/non-uniform/congestion-5-deterministic.prism new file mode 100644 index 0000000..3d84630 --- /dev/null +++ b/keyur/non-uniform/congestion-5-deterministic.prism @@ -0,0 +1,247 @@ +dtmc +global unlk:[1..10] init 1; +global assrtOK:bool init true; +global obsrvOK:bool init true; +global numSteps:[0..30] init 0; +const int v11NUM_PACKETS = 3; +const int v7COST_01 = 2; +const int v7COST_02 = 1; +const int v7COST_21 = 1; +module n2H0 +n2H0v9pkt_count:int init 0; +n2H0ip0:[1..2] init 1;n2H0iv3dst0:int init 0; +n2H0ip1:[1..2] init 1;n2H0iv3dst1:int init 0; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1;n2H0ov3dst0:int init 0; +n2H0op1:[1..2] init 1;n2H0ov3dst1:int init 0; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-4..10] init 0; n2H0ra:[-4..10] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0iv3dst0'=0)&(n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0iv3dst1'=n2H0iv3dst0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0iv3dst0'=n2H0iv3dst1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0ov3dst0'=n2H0iv3dst0)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0ov3dst1'=n2H0iv3dst0)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0iv3dst0'=n2S0ov3dst0)&(n2H0is'=1); +[n2S0f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0iv3dst1'=n2S0ov3dst0)&(n2H0is'=2); +[n2S0f3] n2H0is=2 -> true; +[n2H0f1] unlk=6 & numSteps<30 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0ov3dst0'=n2H0ov3dst1)&(n2H0os'=n2H0os-1); +[] unlk=1 & numSteps<30 & n2H0pc=0 & n2H0is>0 -> (n2H0pc'=1); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=8); +[] n2H0pc=3 -> (n2H0pc'=-1)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=5); +[] n2H0pc=5 -> (n2H0iv3dst0'=1)&(n2H0pc'=6); +[] n2H0pc=6 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=7); +[] n2H0pc=7 -> (n2H0pc'=10); +[] n2H0pc=8 -> (n2H0pc'=-3)&(n2H0ra'=9); +[] n2H0pc=9 -> (n2H0pc'=-3)&(n2H0ra'=10); +[] n2H0pc=10 -> (n2H0pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1;n2S2iv3dst0:int init 0; +n2S2ip1:[1..2] init 1;n2S2iv3dst1:int init 0; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1;n2S2ov3dst0:int init 0; +n2S2op1:[1..2] init 1;n2S2ov3dst1:int init 0; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-4..5] init 0; n2S2ra:[-4..5] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2iv3dst0'=0)&(n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2iv3dst0'=n2S2iv3dst1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2ov3dst0'=n2S2iv3dst0)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2ov3dst1'=n2S2iv3dst0)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2iv3dst0'=n2S1ov3dst0)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2iv3dst1'=n2S1ov3dst0)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S2f2] unlk=7 & numSteps<30 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1); +[n2S0f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2iv3dst0'=n2S0ov3dst0)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2iv3dst1'=n2S0ov3dst0)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[n2S2f1] unlk=7 & numSteps<30 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1); +[] unlk=2 & numSteps<30 & n2S2pc=0 & n2S2is>0 -> (n2S2pc'=1); +[] n2S2pc=1 & (n2S2ip0=1) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2ip0=1)) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=5); +[] n2S2pc=4 -> (n2S2opt'=1)&(n2S2pc'=-4)&(n2S2ra'=5); +[] n2S2pc=5 -> (n2S2pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v6route1:int init 0; +n2S1v6route2:int init 0; +n2S1t0:[0..1]; +n2S1ip0:[1..3] init 1;n2S1iv3dst0:int init 0; +n2S1ip1:[1..3] init 1;n2S1iv3dst1:int init 0; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1;n2S1ov3dst0:int init 0; +n2S1op1:[1..3] init 1;n2S1ov3dst1:int init 0; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-4..19] init 0; n2S1ra:[-4..19] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1iv3dst0'=0)&(n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1iv3dst0'=n2S1iv3dst1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1ov3dst0'=n2S1iv3dst0)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1ov3dst1'=n2S1iv3dst0)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2H1f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1iv3dst0'=n2H1ov3dst0)&(n2S1is'=1); +[n2H1f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1iv3dst1'=n2H1ov3dst0)&(n2S1is'=2); +[n2H1f1] n2S1is=2 -> true; +[n2S1f3] unlk=8 & numSteps<30 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1iv3dst0'=n2S2ov3dst0)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1iv3dst1'=n2S2ov3dst0)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S1f2] unlk=8 & numSteps<30 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1); +[n2S0f1] n2S1is=0 -> (n2S1ip0'=1)&(n2S1iv3dst0'=n2S0ov3dst0)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=1)&(n2S1iv3dst1'=n2S0ov3dst0)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[n2S1f1] unlk=8 & numSteps<30 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1); +[] unlk=3 & numSteps<30 & n2S1pc=0 & n2S1is>0 -> (n2S1pc'=1); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=19); +[] n2S1pc=4 & (n2S1ip0=2) -> (n2S1pc'=5); +[] n2S1pc=4 & !((n2S1ip0=2)) -> (n2S1pc'=10); +[] n2S1pc=5 & (n2S1iv3dst0=1) -> (n2S1pc'=6); +[] n2S1pc=5 & !((n2S1iv3dst0=1)) -> (n2S1pc'=8); +[] n2S1pc=6 -> (n2S1opt'=3)&(n2S1pc'=-4)&(n2S1ra'=7); +[] n2S1pc=7 -> (n2S1pc'=9); +[] n2S1pc=8 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=9); +[] n2S1pc=9 -> (n2S1pc'=19); +[] n2S1pc=10 & (n2S1ip0=3) -> (n2S1pc'=11); +[] n2S1pc=10 & !((n2S1ip0=3)) -> (n2S1pc'=19); +[] n2S1pc=11 -> (n2S1v6route1'=v7COST_01)&(n2S1pc'=12); +[] n2S1pc=12 -> (n2S1v6route2'=(v7COST_02+v7COST_21))&(n2S1pc'=13); +[] n2S1pc=13 -> 0.5:(n2S1t0'=0)&(n2S1pc'=14) + 0.5:(n2S1t0'=1)&(n2S1pc'=14); +[] n2S1pc=14 & ((n2S1v6route1 (n2S1pc'=15); +[] n2S1pc=14 & !(((n2S1v6route1 (n2S1pc'=17); +[] n2S1pc=15 -> (n2S1opt'=1)&(n2S1pc'=-4)&(n2S1ra'=16); +[] n2S1pc=16 -> (n2S1pc'=18); +[] n2S1pc=17 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=18); +[] n2S1pc=18 -> (n2S1pc'=19); +[] n2S1pc=19 -> (n2S1pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:int init 0; +n2S0v6route2:int init 0; +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1;n2S0iv3dst0:int init 0; +n2S0ip1:[1..3] init 1;n2S0iv3dst1:int init 0; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1;n2S0ov3dst0:int init 0; +n2S0op1:[1..3] init 1;n2S0ov3dst1:int init 0; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-4..19] init 0; n2S0ra:[-4..19] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0iv3dst0'=0)&(n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0iv3dst0'=n2S0iv3dst1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0ov3dst0'=n2S0iv3dst0)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0ov3dst1'=n2S0iv3dst0)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2H0f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0iv3dst0'=n2H0ov3dst0)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0iv3dst1'=n2H0ov3dst0)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[n2S0f3] unlk=9 & numSteps<30 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0iv3dst0'=n2S2ov3dst0)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0iv3dst1'=n2S2ov3dst0)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S0f2] unlk=9 & numSteps<30 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1); +[n2S1f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0iv3dst0'=n2S1ov3dst0)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0iv3dst1'=n2S1ov3dst0)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S0f1] unlk=9 & numSteps<30 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1); +[] unlk=4 & numSteps<30 & n2S0pc=0 & n2S0is>0 -> (n2S0pc'=1); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=4); +[] n2S0pc=2 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=3); +[] n2S0pc=3 -> (n2S0pc'=19); +[] n2S0pc=4 & (n2S0ip0=2) -> (n2S0pc'=5); +[] n2S0pc=4 & !((n2S0ip0=2)) -> (n2S0pc'=10); +[] n2S0pc=5 & (n2S0iv3dst0=0) -> (n2S0pc'=6); +[] n2S0pc=5 & !((n2S0iv3dst0=0)) -> (n2S0pc'=8); +[] n2S0pc=6 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=7); +[] n2S0pc=7 -> (n2S0pc'=9); +[] n2S0pc=8 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=9); +[] n2S0pc=9 -> (n2S0pc'=19); +[] n2S0pc=10 & (n2S0ip0=3) -> (n2S0pc'=11); +[] n2S0pc=10 & !((n2S0ip0=3)) -> (n2S0pc'=19); +[] n2S0pc=11 -> (n2S0v6route1'=v7COST_01)&(n2S0pc'=12); +[] n2S0pc=12 -> (n2S0v6route2'=(v7COST_02+v7COST_21))&(n2S0pc'=13); +[] n2S0pc=13 -> 0.5:(n2S0t0'=0)&(n2S0pc'=14) + 0.5:(n2S0t0'=1)&(n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route1 (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route1 (n2S0pc'=17); +[] n2S0pc=15 -> (n2S0opt'=1)&(n2S0pc'=-4)&(n2S0ra'=16); +[] n2S0pc=16 -> (n2S0pc'=18); +[] n2S0pc=17 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=18); +[] n2S0pc=18 -> (n2S0pc'=19); +[] n2S0pc=19 -> (n2S0pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:int init 0; +n2H1ip0:[1..2] init 1;n2H1iv3dst0:int init 0; +n2H1ip1:[1..2] init 1;n2H1iv3dst1:int init 0; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1;n2H1ov3dst0:int init 0; +n2H1op1:[1..2] init 1;n2H1ov3dst1:int init 0; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-4..3] init 0; n2H1ra:[-4..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1iv3dst0'=0)&(n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1iv3dst1'=n2H1iv3dst0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1iv3dst0'=n2H1iv3dst1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1ov3dst0'=n2H1iv3dst0)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1ov3dst1'=n2H1iv3dst0)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S1f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1iv3dst0'=n2S1ov3dst0)&(n2H1is'=1); +[n2S1f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1iv3dst1'=n2S1ov3dst0)&(n2H1is'=2); +[n2S1f3] n2H1is=2 -> true; +[n2H1f1] unlk=10 & numSteps<30 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1ov3dst0'=n2H1ov3dst1)&(n2H1os'=n2H1os-1); +[] unlk=5 & numSteps<30 & n2H1pc=0 & n2H1is>0 -> (n2H1pc'=1); +[] n2H1pc=1 -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] n2H1pc=3 -> (n2H1pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +endmodule +module scheduler +[] unlk=1 & numSteps<30 & n2H0pc=0 & n2H0is=0 -> (unlk'=2); +[] unlk=2 & numSteps<30 & n2S2pc=0 & n2S2is=0 -> (unlk'=3); +[] unlk=3 & numSteps<30 & n2S1pc=0 & n2S1is=0 -> (unlk'=4); +[] unlk=4 & numSteps<30 & n2S0pc=0 & n2S0is=0 -> (unlk'=5); +[] unlk=5 & numSteps<30 & n2H1pc=0 & n2H1is=0 -> (unlk'=6); +[] unlk=6 & numSteps<30 & n2H0os=0 -> (unlk'=7); +[] unlk=7 & numSteps<30 & n2S2os=0 -> (unlk'=8); +[] unlk=8 & numSteps<30 & n2S1os=0 -> (unlk'=9); +[] unlk=9 & numSteps<30 & n2S0os=0 -> (unlk'=10); +[] unlk=10 & numSteps<30 & n2H1os=0 -> (unlk'=1); +endmodule + + +//Properties +// P=? [ F "deadlock" & assrtOK & obsrvOK & (n2H0v9pkt_count (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk=7 & numSteps0 -> (n2H0pc'=-5); +[] unlk=7 & numSteps (unlk'=8); +[n2H0f1] n2H0pc=-5 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] n2H0pc=-6 -> (n2H0pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H0pc'=1); +[] unlk=1 & numSteps (unlk'=2); +[] n2H0pc=1 -> (n2H0pc'=-1)&(n2H0ra'=2); +[] n2H0pc=2 & (n2H0v9pkt_count (n2H0pc'=3); +[] n2H0pc=2 & !((n2H0v9pkt_count (n2H0pc'=7); +[] n2H0pc=3 -> (n2H0pc'=-1)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=5); +[] n2H0pc=5 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=6); +[] n2H0pc=6 -> (n2H0pc'=9); +[] n2H0pc=7 -> (n2H0pc'=-3)&(n2H0ra'=8); +[] n2H0pc=8 -> (n2H0pc'=-3)&(n2H0ra'=9); +[] n2H0pc=9 -> (n2H0pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..4] init 0; n2S3ra:[-6..4] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2H1f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2H1f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2H1f1] n2S3is=2 -> true; +[n2S2f3] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f3] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f3] n2S3is=2 -> true; +[n2S0f3] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S0f3] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S0f3] n2S3is=2 -> true; +[] unlk=8 & numSteps0 -> (n2S3pc'=-5); +[] unlk=8 & numSteps (unlk'=9); +[n2S3f3] n2S3pc=-5 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] n2S3pc=-6 -> (n2S3pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S3pc'=1); +[] unlk=2 & numSteps (unlk'=3); +[] n2S3pc=1 & ((n2S3ip0=1)|(n2S3ip0=2)) -> (n2S3pc'=2); +[] n2S3pc=1 & !(((n2S3ip0=1)|(n2S3ip0=2))) -> (n2S3pc'=4); +[] n2S3pc=2 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=3); +[] n2S3pc=3 -> (n2S3pc'=4); +[] n2S3pc=4 -> (n2S3pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..4] init 0; n2S2ra:[-6..4] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S1f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f2] n2S2is=2 -> true; +[n2S0f4] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f4] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f4] n2S2is=2 -> true; +[] unlk=9 & numSteps0 -> (n2S2pc'=-5); +[] unlk=9 & numSteps (unlk'=10); +[n2S2f3] n2S2pc=-5 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] n2S2pc=-6 -> (n2S2pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S2pc'=1); +[] unlk=3 & numSteps (unlk'=4); +[] n2S2pc=1 & ((n2S2ip0=1)|(n2S2ip0=2)) -> (n2S2pc'=2); +[] n2S2pc=1 & !(((n2S2ip0=1)|(n2S2ip0=2))) -> (n2S2pc'=4); +[] n2S2pc=2 -> (n2S2opt'=3)&(n2S2pc'=-4)&(n2S2ra'=3); +[] n2S2pc=3 -> (n2S2pc'=4); +[] n2S2pc=4 -> (n2S2pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..4] init 0; n2S1ra:[-6..4] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=10 & numSteps0 -> (n2S1pc'=-5); +[] unlk=10 & numSteps (unlk'=11); +[n2S1f2] n2S1pc=-5 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] n2S1pc=-6 -> (n2S1pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S1pc'=1); +[] unlk=4 & numSteps (unlk'=5); +[] n2S1pc=1 & (n2S1ip0=1) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1ip0=1)) -> (n2S1pc'=4); +[] n2S1pc=2 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=3); +[] n2S1pc=3 -> (n2S1pc'=4); +[] n2S1pc=4 -> (n2S1pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v6route1:int init 0; +n2S0v6route2:int init 0; +n2S0v6route3:int init 0; +n2S0v9shortest1:int init 0; +n2S0v9shortest2:int init 0; +n2S0v9shortest3:int init 0; +n2S0v9nshortest:int init 0; +n2S0v5which:int init 0; +n2S0t0:[1..2]; +n2S0t1:[1..3]; +n2S0ip0:[1..4] init 1; +n2S0ip1:[1..4] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..4] init 1; +n2S0op1:[1..4] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..4] init 1; +n2S0pc:[-6..35] init 0; n2S0ra:[-6..35] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=4)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=4)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S3f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S3f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S3f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk=11 & numSteps0 -> (n2S0pc'=-5); +[] unlk=11 & numSteps (unlk'=12); +[n2S0f4] n2S0pc=-5 & n2S0op0=4 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f3] n2S0pc=-5 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] n2S0pc=-6 -> (n2S0pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S0pc'=1); +[] unlk=5 & numSteps (unlk'=6); +[] n2S0pc=1 & (n2S0ip0=1) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0ip0=1)) -> (n2S0pc'=35); +[] n2S0pc=2 -> (n2S0v6route1'=((v7COST_01+v7COST_12)+v7COST_23))&(n2S0pc'=3); +[] n2S0pc=3 -> (n2S0v6route2'=v7COST_03)&(n2S0pc'=4); +[] n2S0pc=4 -> (n2S0v6route3'=(v7COST_02+v7COST_23))&(n2S0pc'=5); +[] n2S0pc=5 -> (n2S0v9shortest1'=0)&(n2S0pc'=6); +[] n2S0pc=6 -> (n2S0v9shortest2'=0)&(n2S0pc'=7); +[] n2S0pc=7 -> (n2S0v9shortest3'=0)&(n2S0pc'=8); +[] n2S0pc=8 & ((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=9); +[] n2S0pc=8 & !(((n2S0v6route1<=n2S0v6route2)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=11); +[] n2S0pc=9 -> (n2S0v9shortest1'=1)&(n2S0pc'=10); +[] n2S0pc=10 -> (n2S0pc'=11); +[] n2S0pc=11 & ((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3)) -> (n2S0pc'=12); +[] n2S0pc=11 & !(((n2S0v6route2<=n2S0v6route1)&(n2S0v6route2<=n2S0v6route3))) -> (n2S0pc'=14); +[] n2S0pc=12 -> (n2S0v9shortest2'=1)&(n2S0pc'=13); +[] n2S0pc=13 -> (n2S0pc'=14); +[] n2S0pc=14 & ((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2)) -> (n2S0pc'=15); +[] n2S0pc=14 & !(((n2S0v6route3<=n2S0v6route1)&(n2S0v6route3<=n2S0v6route2))) -> (n2S0pc'=17); +[] n2S0pc=15 -> (n2S0v9shortest3'=1)&(n2S0pc'=16); +[] n2S0pc=16 -> (n2S0pc'=17); +[] n2S0pc=17 -> (n2S0v9nshortest'=((n2S0v9shortest1+n2S0v9shortest2)+n2S0v9shortest3))&(n2S0pc'=18); +[] n2S0pc=18 & (n2S0v9nshortest=1) -> (n2S0pc'=19); +[] n2S0pc=18 & !((n2S0v9nshortest=1)) -> (n2S0pc'=21); +[] n2S0pc=19 -> (n2S0v5which'=1)&(n2S0pc'=20); +[] n2S0pc=20 -> (n2S0pc'=27); +[] n2S0pc=21 & (n2S0v9nshortest=2) -> (n2S0pc'=22); +[] n2S0pc=21 & !((n2S0v9nshortest=2)) -> (n2S0pc'=25); +[] n2S0pc=22 -> 0.5:(n2S0t0'=1)&(n2S0pc'=23) + 0.5:(n2S0t0'=2)&(n2S0pc'=23); +[] n2S0pc=23 -> (n2S0v5which'=n2S0t0)&(n2S0pc'=24); +[] n2S0pc=24 -> (n2S0pc'=27); +[] n2S0pc=25 -> 0.333333:(n2S0t1'=1)&(n2S0pc'=26) + 0.333333:(n2S0t1'=2)&(n2S0pc'=26) + 0.333333:(n2S0t1'=3)&(n2S0pc'=26); +[] n2S0pc=26 -> (n2S0v5which'=n2S0t1)&(n2S0pc'=27); +[] n2S0pc=27 & (n2S0v5which=n2S0v9shortest1) -> (n2S0pc'=28); +[] n2S0pc=27 & !((n2S0v5which=n2S0v9shortest1)) -> (n2S0pc'=30); +[] n2S0pc=28 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=29); +[] n2S0pc=29 -> (n2S0pc'=34); +[] n2S0pc=30 & (n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2)) -> (n2S0pc'=31); +[] n2S0pc=30 & !((n2S0v5which=(n2S0v9shortest1+n2S0v9shortest2))) -> (n2S0pc'=33); +[] n2S0pc=31 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=32); +[] n2S0pc=32 -> (n2S0pc'=34); +[] n2S0pc=33 -> (n2S0opt'=4)&(n2S0pc'=-4)&(n2S0ra'=34); +[] n2S0pc=34 -> (n2S0pc'=35); +[] n2S0pc=35 -> (n2S0pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:int init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S3f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S3f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S3f3] n2H1is=2 -> true; +[] unlk=12 & numSteps0 -> (n2H1pc'=-5); +[] unlk=12 & numSteps (unlk'=1); +[n2H1f1] n2H1pc=-5 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] n2H1pc=-6 -> (n2H1pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2H1pc'=1); +[] unlk=6 & numSteps (unlk'=7); +[] n2H1pc=1 -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] n2H1pc=3 -> (n2H1pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule + + +//Properties +// P=? [ F "deadlock" & assrtOK & obsrvOK & (n2H1v9pkt_count (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S3f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S3f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S3f1] n2S0is=2 -> true; +[n2S2f2] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S2f2] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S2f2] n2S0is=2 -> true; +[n2S1f3] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S1f3] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S1f3] n2S0is=2 -> true; +[] unlk=5 & numSteps0 -> (n2S0pc'=-5); +[] unlk=5 & numSteps (unlk'=6); +[n2S0f3] n2S0pc=-5 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] n2S0pc=-6 -> (n2S0pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2S0pc'=1); +[] unlk=1 & numSteps (unlk'=2); +[] n2S0pc=1 & (n2S0v8infected=0) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0v8infected=0)) -> (n2S0pc'=7); +[] n2S0pc=2 -> (n2S0v8infected'=1)&(n2S0pc'=3); +[] n2S0pc=3 -> (n2S0pc'=-1)&(n2S0ra'=4); +[] n2S0pc=4 -> 0.333333:(n2S0t0'=1)&(n2S0pc'=5) + 0.333333:(n2S0t0'=2)&(n2S0pc'=5) + 0.333333:(n2S0t0'=3)&(n2S0pc'=5); +[] n2S0pc=5 -> (n2S0opt'=n2S0t0)&(n2S0pc'=-4)&(n2S0ra'=6); +[] n2S0pc=6 -> (n2S0pc'=8); +[] n2S0pc=7 -> (n2S0pc'=-3)&(n2S0ra'=8); +[] n2S0pc=8 -> (n2S0pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3v8infected:int init 0; +n2S3t0:[1..3]; +n2S3t1:[1..3]; +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..10] init 0; n2S3ra:[-6..10] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S2f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2S2f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2S2f1] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[n2S0f3] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S0f3] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S0f3] n2S3is=2 -> true; +[] unlk=6 & numSteps0 -> (n2S3pc'=-5); +[] unlk=6 & numSteps (unlk'=7); +[n2S3f3] n2S3pc=-5 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] n2S3pc=-6 -> (n2S3pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S3pc'=1); +[] unlk=2 & numSteps (unlk'=3); +[] n2S3pc=1 & (n2S3v8infected=0) -> (n2S3pc'=2); +[] n2S3pc=1 & !((n2S3v8infected=0)) -> (n2S3pc'=9); +[] n2S3pc=2 -> (n2S3v8infected'=1)&(n2S3pc'=3); +[] n2S3pc=3 -> (n2S3pc'=-2)&(n2S3ra'=4); +[] n2S3pc=4 -> 0.333333:(n2S3t0'=1)&(n2S3pc'=5) + 0.333333:(n2S3t0'=2)&(n2S3pc'=5) + 0.333333:(n2S3t0'=3)&(n2S3pc'=5); +[] n2S3pc=5 -> (n2S3opt'=n2S3t0)&(n2S3pc'=-4)&(n2S3ra'=6); +[] n2S3pc=6 -> 0.333333:(n2S3t1'=1)&(n2S3pc'=7) + 0.333333:(n2S3t1'=2)&(n2S3pc'=7) + 0.333333:(n2S3t1'=3)&(n2S3pc'=7); +[] n2S3pc=7 -> (n2S3opt'=n2S3t1)&(n2S3pc'=-4)&(n2S3ra'=8); +[] n2S3pc=8 -> (n2S3pc'=10); +[] n2S3pc=9 -> (n2S3pc'=-3)&(n2S3ra'=10); +[] n2S3pc=10 -> (n2S3pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2v8infected:int init 0; +n2S2t0:[1..3]; +n2S2t1:[1..3]; +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..10] init 0; n2S2ra:[-6..10] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S1f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S1f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S1f1] n2S2is=2 -> true; +[n2S0f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S0f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S0f2] n2S2is=2 -> true; +[n2S3f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S3f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S3f3] n2S2is=2 -> true; +[] unlk=7 & numSteps0 -> (n2S2pc'=-5); +[] unlk=7 & numSteps (unlk'=8); +[n2S2f3] n2S2pc=-5 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] n2S2pc=-6 -> (n2S2pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S2pc'=1); +[] unlk=3 & numSteps (unlk'=4); +[] n2S2pc=1 & (n2S2v8infected=0) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2v8infected=0)) -> (n2S2pc'=9); +[] n2S2pc=2 -> (n2S2v8infected'=1)&(n2S2pc'=3); +[] n2S2pc=3 -> (n2S2pc'=-2)&(n2S2ra'=4); +[] n2S2pc=4 -> 0.333333:(n2S2t0'=1)&(n2S2pc'=5) + 0.333333:(n2S2t0'=2)&(n2S2pc'=5) + 0.333333:(n2S2t0'=3)&(n2S2pc'=5); +[] n2S2pc=5 -> (n2S2opt'=n2S2t0)&(n2S2pc'=-4)&(n2S2ra'=6); +[] n2S2pc=6 -> 0.333333:(n2S2t1'=1)&(n2S2pc'=7) + 0.333333:(n2S2t1'=2)&(n2S2pc'=7) + 0.333333:(n2S2t1'=3)&(n2S2pc'=7); +[] n2S2pc=7 -> (n2S2opt'=n2S2t1)&(n2S2pc'=-4)&(n2S2ra'=8); +[] n2S2pc=8 -> (n2S2pc'=10); +[] n2S2pc=9 -> (n2S2pc'=-3)&(n2S2ra'=10); +[] n2S2pc=10 -> (n2S2pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v8infected:int init 0; +n2S1t0:[1..3]; +n2S1t1:[1..3]; +n2S1ip0:[1..3] init 1; +n2S1ip1:[1..3] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..3] init 1; +n2S1op1:[1..3] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..3] init 1; +n2S1pc:[-6..10] init 0; n2S1ra:[-6..10] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S0f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2S0f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2S0f1] n2S1is=2 -> true; +[n2S3f2] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f2] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f2] n2S1is=2 -> true; +[n2S2f3] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S2f3] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S2f3] n2S1is=2 -> true; +[] unlk=8 & numSteps0 -> (n2S1pc'=-5); +[] unlk=8 & numSteps (unlk'=1); +[n2S1f3] n2S1pc=-5 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] n2S1pc=-6 -> (n2S1pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S1pc'=1); +[] unlk=4 & numSteps (unlk'=5); +[] n2S1pc=1 & (n2S1v8infected=0) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1v8infected=0)) -> (n2S1pc'=9); +[] n2S1pc=2 -> (n2S1v8infected'=1)&(n2S1pc'=3); +[] n2S1pc=3 -> (n2S1pc'=-2)&(n2S1ra'=4); +[] n2S1pc=4 -> 0.333333:(n2S1t0'=1)&(n2S1pc'=5) + 0.333333:(n2S1t0'=2)&(n2S1pc'=5) + 0.333333:(n2S1t0'=3)&(n2S1pc'=5); +[] n2S1pc=5 -> (n2S1opt'=n2S1t0)&(n2S1pc'=-4)&(n2S1ra'=6); +[] n2S1pc=6 -> 0.333333:(n2S1t1'=1)&(n2S1pc'=7) + 0.333333:(n2S1t1'=2)&(n2S1pc'=7) + 0.333333:(n2S1t1'=3)&(n2S1pc'=7); +[] n2S1pc=7 -> (n2S1opt'=n2S1t1)&(n2S1pc'=-4)&(n2S1ra'=8); +[] n2S1pc=8 -> (n2S1pc'=10); +[] n2S1pc=9 -> (n2S1pc'=-3)&(n2S1ra'=10); +[] n2S1pc=10 -> (n2S1pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule + + +//Properties +// P=? [ F "deadlock" & assrtOK & obsrvOK & ((((n2S0v8infected+n2S1v8infected)+n2S2v8infected)+n2S3v8infected)=1) ] / P=? [ F "deadlock" & obsrvOK ] +// P=? [ F "deadlock" & assrtOK & obsrvOK & ((((n2S0v8infected+n2S1v8infected)+n2S2v8infected)+n2S3v8infected)=2) ] / P=? [ F "deadlock" & obsrvOK ] +// P=? [ F "deadlock" & assrtOK & obsrvOK & ((((n2S0v8infected+n2S1v8infected)+n2S2v8infected)+n2S3v8infected)=3) ] / P=? [ F "deadlock" & obsrvOK ] +// P=? [ F "deadlock" & assrtOK & obsrvOK & ((((n2S0v8infected+n2S1v8infected)+n2S2v8infected)+n2S3v8infected)=4) ] / P=? [ F "deadlock" & obsrvOK ] diff --git a/keyur/old/assert.bayonet b/keyur/old/assert.bayonet new file mode 100644 index 0000000..2f133ba --- /dev/null +++ b/keyur/old/assert.bayonet @@ -0,0 +1,47 @@ + +parameters{ NUM_PACKETS(3) } + +num_steps 30; + +query probability(pkt_count@H1 < NUM_PACKETS); + +topology{ + nodes{ H0, S0, H1 } + links{ + (H0,pt1) <-> (S0,pt1), + (S0,pt2) <-> (H1,pt1) + } +} +queue_capacity 3; + +packet_fields{data} + +programs{ H0 -> h0, H1 -> h1, S0 -> s0 } + + +def h0(pkt, port) state pkt_count(0){ + new; + if pkt_count < NUM_PACKETS { + new; + pkt_count = pkt_count + 1; + pkt.data = uniformInt(1,2); + assert(pkt.data == 1); + fwd(1); + } else { drop; drop; } +} + +def h1(pkt, port) state pkt_count(0){ pkt_count = pkt_count + 1; drop; } + + +def s0(pkt, port){ + fwd(2); +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/old/droptest.bayonet b/keyur/old/droptest.bayonet new file mode 100644 index 0000000..7e79137 --- /dev/null +++ b/keyur/old/droptest.bayonet @@ -0,0 +1,37 @@ + +parameters{ NUM_PACKETS(2) } + +num_steps 10; + +query probability(dummy@H0 < 1); + +topology{ + nodes{ H0, H1 } + links{ + (H0,pt1) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> h0, H1 -> h1 } + + +def h0(pkt, port) state dummy(0){ + drop; + drop; +} + +def h1(pkt, port) { + drop; +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/old/droptest.psi b/keyur/old/droptest.psi new file mode 100644 index 0000000..851f742 --- /dev/null +++ b/keyur/old/droptest.psi @@ -0,0 +1,125 @@ +num_steps := 10; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 2, H0 := 0, H1 := 1; +NUM_PACKETS := 2; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + dummy: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + dummy = 0; + } + def __run(){ + Q_in.popFront(); + Q_in.popFront(); + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + Q_in.popFront(); + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else { __H1.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else { __H1.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size())); + q₁ := Expectation(((if H0 == 0 { __d.__H0.dummy } else { assert(0) }) < 1) !=0); + return (q₁); +} + diff --git a/keyur/old/duptest1.bayonet b/keyur/old/duptest1.bayonet new file mode 100644 index 0000000..a54cd47 --- /dev/null +++ b/keyur/old/duptest1.bayonet @@ -0,0 +1,44 @@ + +parameters{ NUM_PACKETS(2) } + +num_steps 10; + +query probability(sum@H1 < 3); //for a queue capacity 2, should be 1 + +topology{ + nodes{ H0, H1 } + links{ + (H0,pt1) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ num } + +programs{ H0 -> h0, H1 -> h1 } + + +def h0(pkt, port) state init(0){ + if init == 0 { + pkt.num = 1; + dup; + dup; + init = 1; + } else { + fwd(1); + } +} + +def h1(pkt, port) state sum(0){ + sum = sum + pkt.num; + drop; +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/old/duptest1.psi b/keyur/old/duptest1.psi new file mode 100644 index 0000000..0eb958e --- /dev/null +++ b/keyur/old/duptest1.psi @@ -0,0 +1,136 @@ +num_steps := 10; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 2, H0 := 0, H1 := 1; +NUM_PACKETS := 2; +dat Packet{ + num: ℝ; + def Packet(){ + num = 0; + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + init: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + init = 0; + } + def __run(){ + if (init==0){ + Q_in.data[0][0].num = 1; + Q_in.dupFront(); + Q_in.dupFront(); + init = 1; + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + sum: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + sum = 0; + } + def __run(){ + sum = (sum+Q_in.data[0][0].num); + Q_in.popFront(); + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else { __H1.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else { __H1.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size())); + q₁ := Expectation(((if H1 == 1 { __d.__H1.sum } else { assert(0) }) < 3) !=0); + return (q₁); +} + diff --git a/keyur/old/duptest2.bayonet b/keyur/old/duptest2.bayonet new file mode 100644 index 0000000..d6af8bb --- /dev/null +++ b/keyur/old/duptest2.bayonet @@ -0,0 +1,37 @@ + +parameters{ NUM_PACKETS(2) } + +num_steps 10; + +query probability(dummy@H0 < 1); + +topology{ + nodes{ H0, H1 } + links{ + (H0,pt1) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> h0, H1 -> h1 } + + +def h0(pkt, port) state dummy(0){ + drop; + dup; +} + +def h1(pkt, port) { + drop; +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/old/duptest2.psi b/keyur/old/duptest2.psi new file mode 100644 index 0000000..032a2b7 --- /dev/null +++ b/keyur/old/duptest2.psi @@ -0,0 +1,125 @@ +num_steps := 10; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 2, H0 := 0, H1 := 1; +NUM_PACKETS := 2; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + dummy: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + dummy = 0; + } + def __run(){ + Q_in.popFront(); + Q_in.dupFront(); + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + Q_in.popFront(); + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else { __H1.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else { __H1.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size())); + q₁ := Expectation(((if H0 == 0 { __d.__H0.dummy } else { assert(0) }) < 1) !=0); + return (q₁); +} + diff --git a/keyur/old/fwdtest.bayonet b/keyur/old/fwdtest.bayonet new file mode 100644 index 0000000..5dce4bb --- /dev/null +++ b/keyur/old/fwdtest.bayonet @@ -0,0 +1,37 @@ + +parameters{ NUM_PACKETS(2) } + +num_steps 10; + +query probability(dummy@H0 < 1); + +topology{ + nodes{ H0, H1 } + links{ + (H0,pt1) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ num } + +programs{ H0 -> h0, H1 -> h1 } + + +def h0(pkt, port) state dummy(0){ + drop; + fwd(1); +} + +def h1(pkt, port) { + drop; +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/old/fwdtest.psi b/keyur/old/fwdtest.psi new file mode 100644 index 0000000..c2c2ec9 --- /dev/null +++ b/keyur/old/fwdtest.psi @@ -0,0 +1,124 @@ +num_steps := 10; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + pushFront(front()); + } + def popFront(){ + data=data[1..size()]; + } +} +k := 2, H0 := 0, H1 := 1; +NUM_PACKETS := 2; +dat Packet{ + num: ℝ; + def Packet(){ + num = 0; + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + dummy: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + dummy = 0; + } + def __run(){ + Q_in.popFront(); + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + Q_in.popFront(); + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else { __H1.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else { __H1.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size())); + q₁ := Expectation(((if H0 == 0 { __d.__H0.dummy } else { assert(0) }) < 1) !=0); + return (q₁); +} + diff --git a/keyur/old/newtest.bayonet b/keyur/old/newtest.bayonet new file mode 100644 index 0000000..9049684 --- /dev/null +++ b/keyur/old/newtest.bayonet @@ -0,0 +1,46 @@ + +parameters{ NUM_PACKETS(2) } + +num_steps 10; + +query probability(sum@H1 < 7); //for a queue capacity 2, should be 1 + +topology{ + nodes{ H0, H1 } + links{ + (H0,pt1) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ num } + +programs{ H0 -> h0, H1 -> h1 } + + +def h0(pkt, port) state init(0){ + if init == 0 { + pkt.num = 1; + new; + pkt.num = 2; + new; + pkt.num = 4; + init = 1; + } else { + fwd(1); + } +} + +def h1(pkt, port) state sum(0){ + sum = sum + pkt.num; + drop; +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/old/newtest.psi b/keyur/old/newtest.psi new file mode 100644 index 0000000..539b3a1 --- /dev/null +++ b/keyur/old/newtest.psi @@ -0,0 +1,136 @@ +num_steps := 10; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + pushFront(front()); + } + def popFront(){ + data=data[1..size()]; + } +} +k := 2, H0 := 0, H1 := 1; +NUM_PACKETS := 2; +dat Packet{ + num: ℝ; + def Packet(){ + num = 0; + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + init: ℝ; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + init = 0; + } + def __run(){ + if (init==0){ + Q_in.data[0][0].num = 1; + Q_in.pushFront((Packet(),0)); + Q_in.data[0][0].num = 2; + Q_in.pushFront((Packet(),0)); + Q_in.data[0][0].num = 4; + init = 1; + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + sum: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + sum = 0; + } + def __run(){ + sum = (sum+Q_in.data[0][0].num); + Q_in.popFront(); + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else { __H1.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else { __H1.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size())); + q₁ := Expectation(((if H1 == 1 { __d.__H1.sum } else { assert(0) }) < 7) !=0); + return (q₁); +} + diff --git a/keyur/old/observe.bayonet b/keyur/old/observe.bayonet new file mode 100644 index 0000000..729dd3c --- /dev/null +++ b/keyur/old/observe.bayonet @@ -0,0 +1,47 @@ + +parameters{ NUM_PACKETS(3) } + +num_steps 30; + +query probability(pkt_count@H1 < NUM_PACKETS); + +topology{ + nodes{ H0, S0, H1 } + links{ + (H0,pt1) <-> (S0,pt1), + (S0,pt2) <-> (H1,pt1) + } +} +queue_capacity 3; + +packet_fields{data} + +programs{ H0 -> h0, H1 -> h1, S0 -> s0 } + + +def h0(pkt, port) state pkt_count(0){ + new; + if pkt_count < NUM_PACKETS { + new; + pkt_count = pkt_count + 1; + pkt.data = uniformInt(1,3); + observe(pkt.data == 1); + fwd(1); + } else { drop; drop; } +} + +def h1(pkt, port) state pkt_count(0){ pkt_count = pkt_count + 1; drop; } + + +def s0(pkt, port){ + fwd(2); +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/reliability-30.bayonet b/keyur/reliability-30.bayonet new file mode 100644 index 0000000..aa390a9 --- /dev/null +++ b/keyur/reliability-30.bayonet @@ -0,0 +1,115 @@ +num_steps 50; + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5, S6, S7, + S8, S9, S10, S11, S12, S13, S14, S15, + S16, S17, S18, S19, S20, S21, S22, S23, + S24, S25, S26, S27 } + + links{ + (H0,pt1) <-> (S0,pt1), + + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (S3,pt1), + (S2,pt2) <-> (S3,pt2), + + (S3,pt3) <-> (S4,pt1), + + (S4,pt2) <-> (S5,pt1), + (S4,pt3) <-> (S6,pt1), + (S5,pt2) <-> (S7,pt1), + (S6,pt2) <-> (S7,pt2), + + (S7,pt3) <-> (S8,pt1), + + (S8,pt2) <-> (S9,pt1), + (S8,pt3) <-> (S10,pt1), + (S9,pt2) <-> (S11,pt1), + (S10,pt2) <-> (S11,pt2), + + (S11,pt3) <-> (S12,pt1), + + (S12,pt2) <-> (S13,pt1), + (S12,pt3) <-> (S14,pt1), + (S13,pt2) <-> (S15,pt1), + (S14,pt2) <-> (S15,pt2), + + + (S15,pt3) <-> (S16,pt1), + + (S16,pt2) <-> (S17,pt1), + (S16,pt3) <-> (S18,pt1), + (S17,pt2) <-> (S19,pt1), + (S18,pt2) <-> (S19,pt2), + + (S19,pt3) <-> (S20,pt1), + + (S20,pt2) <-> (S21,pt1), + (S20,pt3) <-> (S22,pt1), + (S21,pt2) <-> (S23,pt1), + (S22,pt2) <-> (S23,pt2), + + (S23,pt3) <-> (S24,pt1), + + (S24,pt2) <-> (S25,pt1), + (S24,pt3) <-> (S26,pt1), + (S25,pt2) <-> (S27,pt1), + (S26,pt2) <-> (S27,pt2), + + (S27,pt3) <-> (H1,pt1) + } +} +queue_capacity 2; + +programs{ H0 -> h0, H1 -> h1, + S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3, + S4 -> s0, S5 -> s1, S6 -> s2, S7 -> s3, + S8 -> s0, S9 -> s1, S10 -> s2, S11 -> s3, + S12 -> s0, S13 -> s1, S14 -> s2, S15 -> s3, + S16 -> s0, S17 -> s1, S18 -> s2, S19 -> s3, + S20 -> s0, S21 -> s1, S22 -> s2, S23 -> s3, + S24 -> s0, S25 -> s1, S26 -> s2, S27 -> s3 +} + +query probability(arrived@H1 == 1); + +packet_fields{ } + +def h0(){ + fwd(1); +} +def h1() state arrived(0){ + arrived=1; + drop; +} +def s0(){ + if flip(1/2) == 1{ + fwd(2); + }else{ + fwd(3); + } +} +def s1(){ + fwd(2); +} +def s2()state failing(2){ + if failing == 2 { if(flip(1/1000) == 1) { failing = 1; } else { failing = 0; } } + if failing == 1 { drop } + else{ fwd(2); } +} +def s3(){ + fwd(3); +} + + +def scheduler() state num_actions(0){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + num_actions += 1; + return actions[uniformInt(0,actions.length-1)]; +} + diff --git a/keyur/reliability-30.prism b/keyur/reliability-30.prism new file mode 100644 index 0000000..e4efd90 --- /dev/null +++ b/keyur/reliability-30.prism @@ -0,0 +1,1202 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +module n2H0 +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..2] init 0; n2H0ra:[-6..2] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=2); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S24 +n3S24t0:[0..1]; +n3S24ip0:[1..3] init 1; +n3S24ip1:[1..3] init 1; +n3S24is:[0..2] init 0; +n3S24op0:[1..3] init 1; +n3S24op1:[1..3] init 1; +n3S24os:[0..2] init 0; +n3S24opt:[1..3] init 1; +n3S24pc:[-6..6] init 0; n3S24ra:[-6..6] init 0; +[] n3S24is<2 & n3S24pc=-1 -> (n3S24ip0'=1)&(n3S24ip1'=n3S24ip0)&(n3S24is'=n3S24is+1)&(n3S24pc'=n3S24ra); +[] n3S24is=2 & n3S24pc=-1 -> (n3S24pc'=n3S24ra); +[] n3S24is=0 & n3S24pc=-2 -> (n3S24pc'=n3S24ra); +[] n3S24is>0 & n3S24is<2 & n3S24pc=-2 -> (n3S24ip1'=n3S24ip0)&(n3S24is'=n3S24is+1)&(n3S24pc'=n3S24ra); +[] n3S24is=2 & n3S24pc=-2 -> (n3S24pc'=n3S24ra); +[] n3S24is=0 & n3S24pc=-3 -> (n3S24pc'=n3S24ra); +[] n3S24is>0 & n3S24pc=-3 -> (n3S24ip0'=n3S24ip1)&(n3S24is'=n3S24is-1)&(n3S24pc'=n3S24ra); +[] n3S24os=0 & n3S24pc=-4 -> (n3S24op0'=n3S24opt)&(n3S24os'=1)&(n3S24pc'=-3); +[] n3S24os=1 & n3S24pc=-4 -> (n3S24op1'=n3S24opt)&(n3S24os'=2)&(n3S24pc'=-3); +[] n3S24os=2 & n3S24pc=-4 -> (n3S24pc'=-3); +[n3S26f1] n3S24is=0 -> (n3S24ip0'=3)&(n3S24is'=1); +[n3S26f1] n3S24is=1 -> (n3S24ip1'=3)&(n3S24is'=2); +[n3S26f1] n3S24is=2 -> true; +[n3S25f1] n3S24is=0 -> (n3S24ip0'=2)&(n3S24is'=1); +[n3S25f1] n3S24is=1 -> (n3S24ip1'=2)&(n3S24is'=2); +[n3S25f1] n3S24is=2 -> true; +[n3S23f3] n3S24is=0 -> (n3S24ip0'=1)&(n3S24is'=1); +[n3S23f3] n3S24is=1 -> (n3S24ip1'=1)&(n3S24is'=2); +[n3S23f3] n3S24is=2 -> true; +[] unlk & numSteps0 -> (n3S24pc'=-5)&(unlk'=false); +[n3S24f3] n3S24pc=-5 & n3S24os>0 & n3S24op0=3 -> (n3S24op0'=n3S24op1)&(n3S24os'=n3S24os-1)&(n3S24pc'=-6); +[n3S24f2] n3S24pc=-5 & n3S24os>0 & n3S24op0=2 -> (n3S24op0'=n3S24op1)&(n3S24os'=n3S24os-1)&(n3S24pc'=-6); +[n3S24f1] n3S24pc=-5 & n3S24os>0 & n3S24op0=1 -> (n3S24op0'=n3S24op1)&(n3S24os'=n3S24os-1)&(n3S24pc'=-6); +[] numSteps (n3S24pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S24pc'=1)&(unlk'=false); +[] n3S24pc=1 -> 0.5:(n3S24t0'=0)&(n3S24pc'=2) + 0.5:(n3S24t0'=1)&(n3S24pc'=2); +[] n3S24pc=2 & (n3S24t0=1) -> (n3S24pc'=3); +[] n3S24pc=2 & !((n3S24t0=1)) -> (n3S24pc'=5); +[] n3S24pc=3 -> (n3S24opt'=2)&(n3S24pc'=-4)&(n3S24ra'=4); +[] n3S24pc=4 -> (n3S24pc'=6); +[] n3S24pc=5 -> (n3S24opt'=3)&(n3S24pc'=-4)&(n3S24ra'=6); +[] numSteps (n3S24pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S15 +n3S15ip0:[1..3] init 1; +n3S15ip1:[1..3] init 1; +n3S15is:[0..2] init 0; +n3S15op0:[1..3] init 1; +n3S15op1:[1..3] init 1; +n3S15os:[0..2] init 0; +n3S15opt:[1..3] init 1; +n3S15pc:[-6..2] init 0; n3S15ra:[-6..2] init 0; +[] n3S15is<2 & n3S15pc=-1 -> (n3S15ip0'=1)&(n3S15ip1'=n3S15ip0)&(n3S15is'=n3S15is+1)&(n3S15pc'=n3S15ra); +[] n3S15is=2 & n3S15pc=-1 -> (n3S15pc'=n3S15ra); +[] n3S15is=0 & n3S15pc=-2 -> (n3S15pc'=n3S15ra); +[] n3S15is>0 & n3S15is<2 & n3S15pc=-2 -> (n3S15ip1'=n3S15ip0)&(n3S15is'=n3S15is+1)&(n3S15pc'=n3S15ra); +[] n3S15is=2 & n3S15pc=-2 -> (n3S15pc'=n3S15ra); +[] n3S15is=0 & n3S15pc=-3 -> (n3S15pc'=n3S15ra); +[] n3S15is>0 & n3S15pc=-3 -> (n3S15ip0'=n3S15ip1)&(n3S15is'=n3S15is-1)&(n3S15pc'=n3S15ra); +[] n3S15os=0 & n3S15pc=-4 -> (n3S15op0'=n3S15opt)&(n3S15os'=1)&(n3S15pc'=-3); +[] n3S15os=1 & n3S15pc=-4 -> (n3S15op1'=n3S15opt)&(n3S15os'=2)&(n3S15pc'=-3); +[] n3S15os=2 & n3S15pc=-4 -> (n3S15pc'=-3); +[n3S16f1] n3S15is=0 -> (n3S15ip0'=3)&(n3S15is'=1); +[n3S16f1] n3S15is=1 -> (n3S15ip1'=3)&(n3S15is'=2); +[n3S16f1] n3S15is=2 -> true; +[n3S14f2] n3S15is=0 -> (n3S15ip0'=2)&(n3S15is'=1); +[n3S14f2] n3S15is=1 -> (n3S15ip1'=2)&(n3S15is'=2); +[n3S14f2] n3S15is=2 -> true; +[n3S13f2] n3S15is=0 -> (n3S15ip0'=1)&(n3S15is'=1); +[n3S13f2] n3S15is=1 -> (n3S15ip1'=1)&(n3S15is'=2); +[n3S13f2] n3S15is=2 -> true; +[] unlk & numSteps0 -> (n3S15pc'=-5)&(unlk'=false); +[n3S15f3] n3S15pc=-5 & n3S15os>0 & n3S15op0=3 -> (n3S15op0'=n3S15op1)&(n3S15os'=n3S15os-1)&(n3S15pc'=-6); +[n3S15f2] n3S15pc=-5 & n3S15os>0 & n3S15op0=2 -> (n3S15op0'=n3S15op1)&(n3S15os'=n3S15os-1)&(n3S15pc'=-6); +[n3S15f1] n3S15pc=-5 & n3S15os>0 & n3S15op0=1 -> (n3S15op0'=n3S15op1)&(n3S15os'=n3S15os-1)&(n3S15pc'=-6); +[] numSteps (n3S15pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S15pc'=1)&(unlk'=false); +[] n3S15pc=1 -> (n3S15opt'=3)&(n3S15pc'=-4)&(n3S15ra'=2); +[] numSteps (n3S15pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S13 +n3S13ip0:[1..2] init 1; +n3S13ip1:[1..2] init 1; +n3S13is:[0..2] init 0; +n3S13op0:[1..2] init 1; +n3S13op1:[1..2] init 1; +n3S13os:[0..2] init 0; +n3S13opt:[1..2] init 1; +n3S13pc:[-6..2] init 0; n3S13ra:[-6..2] init 0; +[] n3S13is<2 & n3S13pc=-1 -> (n3S13ip0'=1)&(n3S13ip1'=n3S13ip0)&(n3S13is'=n3S13is+1)&(n3S13pc'=n3S13ra); +[] n3S13is=2 & n3S13pc=-1 -> (n3S13pc'=n3S13ra); +[] n3S13is=0 & n3S13pc=-2 -> (n3S13pc'=n3S13ra); +[] n3S13is>0 & n3S13is<2 & n3S13pc=-2 -> (n3S13ip1'=n3S13ip0)&(n3S13is'=n3S13is+1)&(n3S13pc'=n3S13ra); +[] n3S13is=2 & n3S13pc=-2 -> (n3S13pc'=n3S13ra); +[] n3S13is=0 & n3S13pc=-3 -> (n3S13pc'=n3S13ra); +[] n3S13is>0 & n3S13pc=-3 -> (n3S13ip0'=n3S13ip1)&(n3S13is'=n3S13is-1)&(n3S13pc'=n3S13ra); +[] n3S13os=0 & n3S13pc=-4 -> (n3S13op0'=n3S13opt)&(n3S13os'=1)&(n3S13pc'=-3); +[] n3S13os=1 & n3S13pc=-4 -> (n3S13op1'=n3S13opt)&(n3S13os'=2)&(n3S13pc'=-3); +[] n3S13os=2 & n3S13pc=-4 -> (n3S13pc'=-3); +[n3S15f1] n3S13is=0 -> (n3S13ip0'=2)&(n3S13is'=1); +[n3S15f1] n3S13is=1 -> (n3S13ip1'=2)&(n3S13is'=2); +[n3S15f1] n3S13is=2 -> true; +[n3S12f2] n3S13is=0 -> (n3S13ip0'=1)&(n3S13is'=1); +[n3S12f2] n3S13is=1 -> (n3S13ip1'=1)&(n3S13is'=2); +[n3S12f2] n3S13is=2 -> true; +[] unlk & numSteps0 -> (n3S13pc'=-5)&(unlk'=false); +[n3S13f2] n3S13pc=-5 & n3S13os>0 & n3S13op0=2 -> (n3S13op0'=n3S13op1)&(n3S13os'=n3S13os-1)&(n3S13pc'=-6); +[n3S13f1] n3S13pc=-5 & n3S13os>0 & n3S13op0=1 -> (n3S13op0'=n3S13op1)&(n3S13os'=n3S13os-1)&(n3S13pc'=-6); +[] numSteps (n3S13pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S13pc'=1)&(unlk'=false); +[] n3S13pc=1 -> (n3S13opt'=2)&(n3S13pc'=-4)&(n3S13ra'=2); +[] numSteps (n3S13pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S22 +n3S22v7failing:[INTMIN..INTMAX] init 2; +n3S22t0:[0..1]; +n3S22ip0:[1..2] init 1; +n3S22ip1:[1..2] init 1; +n3S22is:[0..2] init 0; +n3S22op0:[1..2] init 1; +n3S22op1:[1..2] init 1; +n3S22os:[0..2] init 0; +n3S22opt:[1..2] init 1; +n3S22pc:[-6..12] init 0; n3S22ra:[-6..12] init 0; +[] n3S22is<2 & n3S22pc=-1 -> (n3S22ip0'=1)&(n3S22ip1'=n3S22ip0)&(n3S22is'=n3S22is+1)&(n3S22pc'=n3S22ra); +[] n3S22is=2 & n3S22pc=-1 -> (n3S22pc'=n3S22ra); +[] n3S22is=0 & n3S22pc=-2 -> (n3S22pc'=n3S22ra); +[] n3S22is>0 & n3S22is<2 & n3S22pc=-2 -> (n3S22ip1'=n3S22ip0)&(n3S22is'=n3S22is+1)&(n3S22pc'=n3S22ra); +[] n3S22is=2 & n3S22pc=-2 -> (n3S22pc'=n3S22ra); +[] n3S22is=0 & n3S22pc=-3 -> (n3S22pc'=n3S22ra); +[] n3S22is>0 & n3S22pc=-3 -> (n3S22ip0'=n3S22ip1)&(n3S22is'=n3S22is-1)&(n3S22pc'=n3S22ra); +[] n3S22os=0 & n3S22pc=-4 -> (n3S22op0'=n3S22opt)&(n3S22os'=1)&(n3S22pc'=-3); +[] n3S22os=1 & n3S22pc=-4 -> (n3S22op1'=n3S22opt)&(n3S22os'=2)&(n3S22pc'=-3); +[] n3S22os=2 & n3S22pc=-4 -> (n3S22pc'=-3); +[n3S23f2] n3S22is=0 -> (n3S22ip0'=2)&(n3S22is'=1); +[n3S23f2] n3S22is=1 -> (n3S22ip1'=2)&(n3S22is'=2); +[n3S23f2] n3S22is=2 -> true; +[n3S20f3] n3S22is=0 -> (n3S22ip0'=1)&(n3S22is'=1); +[n3S20f3] n3S22is=1 -> (n3S22ip1'=1)&(n3S22is'=2); +[n3S20f3] n3S22is=2 -> true; +[] unlk & numSteps0 -> (n3S22pc'=-5)&(unlk'=false); +[n3S22f2] n3S22pc=-5 & n3S22os>0 & n3S22op0=2 -> (n3S22op0'=n3S22op1)&(n3S22os'=n3S22os-1)&(n3S22pc'=-6); +[n3S22f1] n3S22pc=-5 & n3S22os>0 & n3S22op0=1 -> (n3S22op0'=n3S22op1)&(n3S22os'=n3S22os-1)&(n3S22pc'=-6); +[] numSteps (n3S22pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S22pc'=1)&(unlk'=false); +[] n3S22pc=1 & (n3S22v7failing=2) -> (n3S22pc'=2); +[] n3S22pc=1 & !((n3S22v7failing=2)) -> (n3S22pc'=8); +[] n3S22pc=2 -> 0.999:(n3S22t0'=0)&(n3S22pc'=3) + 0.001:(n3S22t0'=1)&(n3S22pc'=3); +[] n3S22pc=3 & (n3S22t0=1) -> (n3S22pc'=4); +[] n3S22pc=3 & !((n3S22t0=1)) -> (n3S22pc'=6); +[] n3S22pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S22v7failing'=1)&(n3S22pc'=5); +[] n3S22pc=5 -> (n3S22pc'=7); +[] n3S22pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S22v7failing'=0)&(n3S22pc'=7); +[] n3S22pc=7 -> (n3S22pc'=8); +[] n3S22pc=8 & (n3S22v7failing=1) -> (n3S22pc'=9); +[] n3S22pc=8 & !((n3S22v7failing=1)) -> (n3S22pc'=11); +[] n3S22pc=9 -> (n3S22pc'=-3)&(n3S22ra'=10); +[] n3S22pc=10 -> (n3S22pc'=12); +[] n3S22pc=11 -> (n3S22opt'=2)&(n3S22pc'=-4)&(n3S22ra'=12); +[] numSteps (n3S22pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S17 +n3S17ip0:[1..2] init 1; +n3S17ip1:[1..2] init 1; +n3S17is:[0..2] init 0; +n3S17op0:[1..2] init 1; +n3S17op1:[1..2] init 1; +n3S17os:[0..2] init 0; +n3S17opt:[1..2] init 1; +n3S17pc:[-6..2] init 0; n3S17ra:[-6..2] init 0; +[] n3S17is<2 & n3S17pc=-1 -> (n3S17ip0'=1)&(n3S17ip1'=n3S17ip0)&(n3S17is'=n3S17is+1)&(n3S17pc'=n3S17ra); +[] n3S17is=2 & n3S17pc=-1 -> (n3S17pc'=n3S17ra); +[] n3S17is=0 & n3S17pc=-2 -> (n3S17pc'=n3S17ra); +[] n3S17is>0 & n3S17is<2 & n3S17pc=-2 -> (n3S17ip1'=n3S17ip0)&(n3S17is'=n3S17is+1)&(n3S17pc'=n3S17ra); +[] n3S17is=2 & n3S17pc=-2 -> (n3S17pc'=n3S17ra); +[] n3S17is=0 & n3S17pc=-3 -> (n3S17pc'=n3S17ra); +[] n3S17is>0 & n3S17pc=-3 -> (n3S17ip0'=n3S17ip1)&(n3S17is'=n3S17is-1)&(n3S17pc'=n3S17ra); +[] n3S17os=0 & n3S17pc=-4 -> (n3S17op0'=n3S17opt)&(n3S17os'=1)&(n3S17pc'=-3); +[] n3S17os=1 & n3S17pc=-4 -> (n3S17op1'=n3S17opt)&(n3S17os'=2)&(n3S17pc'=-3); +[] n3S17os=2 & n3S17pc=-4 -> (n3S17pc'=-3); +[n3S19f1] n3S17is=0 -> (n3S17ip0'=2)&(n3S17is'=1); +[n3S19f1] n3S17is=1 -> (n3S17ip1'=2)&(n3S17is'=2); +[n3S19f1] n3S17is=2 -> true; +[n3S16f2] n3S17is=0 -> (n3S17ip0'=1)&(n3S17is'=1); +[n3S16f2] n3S17is=1 -> (n3S17ip1'=1)&(n3S17is'=2); +[n3S16f2] n3S17is=2 -> true; +[] unlk & numSteps0 -> (n3S17pc'=-5)&(unlk'=false); +[n3S17f2] n3S17pc=-5 & n3S17os>0 & n3S17op0=2 -> (n3S17op0'=n3S17op1)&(n3S17os'=n3S17os-1)&(n3S17pc'=-6); +[n3S17f1] n3S17pc=-5 & n3S17os>0 & n3S17op0=1 -> (n3S17op0'=n3S17op1)&(n3S17os'=n3S17os-1)&(n3S17pc'=-6); +[] numSteps (n3S17pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S17pc'=1)&(unlk'=false); +[] n3S17pc=1 -> (n3S17opt'=2)&(n3S17pc'=-4)&(n3S17ra'=2); +[] numSteps (n3S17pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4t0:[0..1]; +n2S4ip0:[1..3] init 1; +n2S4ip1:[1..3] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..3] init 1; +n2S4op1:[1..3] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..3] init 1; +n2S4pc:[-6..6] init 0; n2S4ra:[-6..6] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S6f1] n2S4is=0 -> (n2S4ip0'=3)&(n2S4is'=1); +[n2S6f1] n2S4is=1 -> (n2S4ip1'=3)&(n2S4is'=2); +[n2S6f1] n2S4is=2 -> true; +[n2S5f1] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S5f1] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S5f1] n2S4is=2 -> true; +[n2S3f3] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f3] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f3] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f3] n2S4pc=-5 & n2S4os>0 & n2S4op0=3 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 -> 0.5:(n2S4t0'=0)&(n2S4pc'=2) + 0.5:(n2S4t0'=1)&(n2S4pc'=2); +[] n2S4pc=2 & (n2S4t0=1) -> (n2S4pc'=3); +[] n2S4pc=2 & !((n2S4t0=1)) -> (n2S4pc'=5); +[] n2S4pc=3 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=4); +[] n2S4pc=4 -> (n2S4pc'=6); +[] n2S4pc=5 -> (n2S4opt'=3)&(n2S4pc'=-4)&(n2S4ra'=6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S26 +n3S26v7failing:[INTMIN..INTMAX] init 2; +n3S26t0:[0..1]; +n3S26ip0:[1..2] init 1; +n3S26ip1:[1..2] init 1; +n3S26is:[0..2] init 0; +n3S26op0:[1..2] init 1; +n3S26op1:[1..2] init 1; +n3S26os:[0..2] init 0; +n3S26opt:[1..2] init 1; +n3S26pc:[-6..12] init 0; n3S26ra:[-6..12] init 0; +[] n3S26is<2 & n3S26pc=-1 -> (n3S26ip0'=1)&(n3S26ip1'=n3S26ip0)&(n3S26is'=n3S26is+1)&(n3S26pc'=n3S26ra); +[] n3S26is=2 & n3S26pc=-1 -> (n3S26pc'=n3S26ra); +[] n3S26is=0 & n3S26pc=-2 -> (n3S26pc'=n3S26ra); +[] n3S26is>0 & n3S26is<2 & n3S26pc=-2 -> (n3S26ip1'=n3S26ip0)&(n3S26is'=n3S26is+1)&(n3S26pc'=n3S26ra); +[] n3S26is=2 & n3S26pc=-2 -> (n3S26pc'=n3S26ra); +[] n3S26is=0 & n3S26pc=-3 -> (n3S26pc'=n3S26ra); +[] n3S26is>0 & n3S26pc=-3 -> (n3S26ip0'=n3S26ip1)&(n3S26is'=n3S26is-1)&(n3S26pc'=n3S26ra); +[] n3S26os=0 & n3S26pc=-4 -> (n3S26op0'=n3S26opt)&(n3S26os'=1)&(n3S26pc'=-3); +[] n3S26os=1 & n3S26pc=-4 -> (n3S26op1'=n3S26opt)&(n3S26os'=2)&(n3S26pc'=-3); +[] n3S26os=2 & n3S26pc=-4 -> (n3S26pc'=-3); +[n3S27f2] n3S26is=0 -> (n3S26ip0'=2)&(n3S26is'=1); +[n3S27f2] n3S26is=1 -> (n3S26ip1'=2)&(n3S26is'=2); +[n3S27f2] n3S26is=2 -> true; +[n3S24f3] n3S26is=0 -> (n3S26ip0'=1)&(n3S26is'=1); +[n3S24f3] n3S26is=1 -> (n3S26ip1'=1)&(n3S26is'=2); +[n3S24f3] n3S26is=2 -> true; +[] unlk & numSteps0 -> (n3S26pc'=-5)&(unlk'=false); +[n3S26f2] n3S26pc=-5 & n3S26os>0 & n3S26op0=2 -> (n3S26op0'=n3S26op1)&(n3S26os'=n3S26os-1)&(n3S26pc'=-6); +[n3S26f1] n3S26pc=-5 & n3S26os>0 & n3S26op0=1 -> (n3S26op0'=n3S26op1)&(n3S26os'=n3S26os-1)&(n3S26pc'=-6); +[] numSteps (n3S26pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S26pc'=1)&(unlk'=false); +[] n3S26pc=1 & (n3S26v7failing=2) -> (n3S26pc'=2); +[] n3S26pc=1 & !((n3S26v7failing=2)) -> (n3S26pc'=8); +[] n3S26pc=2 -> 0.999:(n3S26t0'=0)&(n3S26pc'=3) + 0.001:(n3S26t0'=1)&(n3S26pc'=3); +[] n3S26pc=3 & (n3S26t0=1) -> (n3S26pc'=4); +[] n3S26pc=3 & !((n3S26t0=1)) -> (n3S26pc'=6); +[] n3S26pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S26v7failing'=1)&(n3S26pc'=5); +[] n3S26pc=5 -> (n3S26pc'=7); +[] n3S26pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S26v7failing'=0)&(n3S26pc'=7); +[] n3S26pc=7 -> (n3S26pc'=8); +[] n3S26pc=8 & (n3S26v7failing=1) -> (n3S26pc'=9); +[] n3S26pc=8 & !((n3S26v7failing=1)) -> (n3S26pc'=11); +[] n3S26pc=9 -> (n3S26pc'=-3)&(n3S26ra'=10); +[] n3S26pc=10 -> (n3S26pc'=12); +[] n3S26pc=11 -> (n3S26opt'=2)&(n3S26pc'=-4)&(n3S26ra'=12); +[] numSteps (n3S26pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8t0:[0..1]; +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..6] init 0; n2S8ra:[-6..6] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n3S10f1] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n3S10f1] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n3S10f1] n2S8is=2 -> true; +[n2S9f1] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n2S9f1] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n2S9f1] n2S8is=2 -> true; +[n2S7f3] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S7f3] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S7f3] n2S8is=2 -> true; +[] unlk & numSteps0 -> (n2S8pc'=-5)&(unlk'=false); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S8pc'=1)&(unlk'=false); +[] n2S8pc=1 -> 0.5:(n2S8t0'=0)&(n2S8pc'=2) + 0.5:(n2S8t0'=1)&(n2S8pc'=2); +[] n2S8pc=2 & (n2S8t0=1) -> (n2S8pc'=3); +[] n2S8pc=2 & !((n2S8t0=1)) -> (n2S8pc'=5); +[] n2S8pc=3 -> (n2S8opt'=2)&(n2S8pc'=-4)&(n2S8ra'=4); +[] n2S8pc=4 -> (n2S8pc'=6); +[] n2S8pc=5 -> (n2S8opt'=3)&(n2S8pc'=-4)&(n2S8ra'=6); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v7arrived:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n3S27f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n3S27f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n3S27f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & 1>=INTMIN & 1<=INTMAX -> (n2H1v7arrived'=1)&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6v7failing:[INTMIN..INTMAX] init 2; +n2S6t0:[0..1]; +n2S6ip0:[1..2] init 1; +n2S6ip1:[1..2] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..2] init 1; +n2S6op1:[1..2] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..2] init 1; +n2S6pc:[-6..12] init 0; n2S6ra:[-6..12] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S7f2] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2S7f2] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2S7f2] n2S6is=2 -> true; +[n2S4f3] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S4f3] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S4f3] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 & (n2S6v7failing=2) -> (n2S6pc'=2); +[] n2S6pc=1 & !((n2S6v7failing=2)) -> (n2S6pc'=8); +[] n2S6pc=2 -> 0.999:(n2S6t0'=0)&(n2S6pc'=3) + 0.001:(n2S6t0'=1)&(n2S6pc'=3); +[] n2S6pc=3 & (n2S6t0=1) -> (n2S6pc'=4); +[] n2S6pc=3 & !((n2S6t0=1)) -> (n2S6pc'=6); +[] n2S6pc=4 & 1>=INTMIN & 1<=INTMAX -> (n2S6v7failing'=1)&(n2S6pc'=5); +[] n2S6pc=5 -> (n2S6pc'=7); +[] n2S6pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S6v7failing'=0)&(n2S6pc'=7); +[] n2S6pc=7 -> (n2S6pc'=8); +[] n2S6pc=8 & (n2S6v7failing=1) -> (n2S6pc'=9); +[] n2S6pc=8 & !((n2S6v7failing=1)) -> (n2S6pc'=11); +[] n2S6pc=9 -> (n2S6pc'=-3)&(n2S6ra'=10); +[] n2S6pc=10 -> (n2S6pc'=12); +[] n2S6pc=11 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=12); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S11 +n3S11ip0:[1..3] init 1; +n3S11ip1:[1..3] init 1; +n3S11is:[0..2] init 0; +n3S11op0:[1..3] init 1; +n3S11op1:[1..3] init 1; +n3S11os:[0..2] init 0; +n3S11opt:[1..3] init 1; +n3S11pc:[-6..2] init 0; n3S11ra:[-6..2] init 0; +[] n3S11is<2 & n3S11pc=-1 -> (n3S11ip0'=1)&(n3S11ip1'=n3S11ip0)&(n3S11is'=n3S11is+1)&(n3S11pc'=n3S11ra); +[] n3S11is=2 & n3S11pc=-1 -> (n3S11pc'=n3S11ra); +[] n3S11is=0 & n3S11pc=-2 -> (n3S11pc'=n3S11ra); +[] n3S11is>0 & n3S11is<2 & n3S11pc=-2 -> (n3S11ip1'=n3S11ip0)&(n3S11is'=n3S11is+1)&(n3S11pc'=n3S11ra); +[] n3S11is=2 & n3S11pc=-2 -> (n3S11pc'=n3S11ra); +[] n3S11is=0 & n3S11pc=-3 -> (n3S11pc'=n3S11ra); +[] n3S11is>0 & n3S11pc=-3 -> (n3S11ip0'=n3S11ip1)&(n3S11is'=n3S11is-1)&(n3S11pc'=n3S11ra); +[] n3S11os=0 & n3S11pc=-4 -> (n3S11op0'=n3S11opt)&(n3S11os'=1)&(n3S11pc'=-3); +[] n3S11os=1 & n3S11pc=-4 -> (n3S11op1'=n3S11opt)&(n3S11os'=2)&(n3S11pc'=-3); +[] n3S11os=2 & n3S11pc=-4 -> (n3S11pc'=-3); +[n3S12f1] n3S11is=0 -> (n3S11ip0'=3)&(n3S11is'=1); +[n3S12f1] n3S11is=1 -> (n3S11ip1'=3)&(n3S11is'=2); +[n3S12f1] n3S11is=2 -> true; +[n3S10f2] n3S11is=0 -> (n3S11ip0'=2)&(n3S11is'=1); +[n3S10f2] n3S11is=1 -> (n3S11ip1'=2)&(n3S11is'=2); +[n3S10f2] n3S11is=2 -> true; +[n2S9f2] n3S11is=0 -> (n3S11ip0'=1)&(n3S11is'=1); +[n2S9f2] n3S11is=1 -> (n3S11ip1'=1)&(n3S11is'=2); +[n2S9f2] n3S11is=2 -> true; +[] unlk & numSteps0 -> (n3S11pc'=-5)&(unlk'=false); +[n3S11f3] n3S11pc=-5 & n3S11os>0 & n3S11op0=3 -> (n3S11op0'=n3S11op1)&(n3S11os'=n3S11os-1)&(n3S11pc'=-6); +[n3S11f2] n3S11pc=-5 & n3S11os>0 & n3S11op0=2 -> (n3S11op0'=n3S11op1)&(n3S11os'=n3S11os-1)&(n3S11pc'=-6); +[n3S11f1] n3S11pc=-5 & n3S11os>0 & n3S11op0=1 -> (n3S11op0'=n3S11op1)&(n3S11os'=n3S11os-1)&(n3S11pc'=-6); +[] numSteps (n3S11pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S11pc'=1)&(unlk'=false); +[] n3S11pc=1 -> (n3S11opt'=3)&(n3S11pc'=-4)&(n3S11ra'=2); +[] numSteps (n3S11pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S19 +n3S19ip0:[1..3] init 1; +n3S19ip1:[1..3] init 1; +n3S19is:[0..2] init 0; +n3S19op0:[1..3] init 1; +n3S19op1:[1..3] init 1; +n3S19os:[0..2] init 0; +n3S19opt:[1..3] init 1; +n3S19pc:[-6..2] init 0; n3S19ra:[-6..2] init 0; +[] n3S19is<2 & n3S19pc=-1 -> (n3S19ip0'=1)&(n3S19ip1'=n3S19ip0)&(n3S19is'=n3S19is+1)&(n3S19pc'=n3S19ra); +[] n3S19is=2 & n3S19pc=-1 -> (n3S19pc'=n3S19ra); +[] n3S19is=0 & n3S19pc=-2 -> (n3S19pc'=n3S19ra); +[] n3S19is>0 & n3S19is<2 & n3S19pc=-2 -> (n3S19ip1'=n3S19ip0)&(n3S19is'=n3S19is+1)&(n3S19pc'=n3S19ra); +[] n3S19is=2 & n3S19pc=-2 -> (n3S19pc'=n3S19ra); +[] n3S19is=0 & n3S19pc=-3 -> (n3S19pc'=n3S19ra); +[] n3S19is>0 & n3S19pc=-3 -> (n3S19ip0'=n3S19ip1)&(n3S19is'=n3S19is-1)&(n3S19pc'=n3S19ra); +[] n3S19os=0 & n3S19pc=-4 -> (n3S19op0'=n3S19opt)&(n3S19os'=1)&(n3S19pc'=-3); +[] n3S19os=1 & n3S19pc=-4 -> (n3S19op1'=n3S19opt)&(n3S19os'=2)&(n3S19pc'=-3); +[] n3S19os=2 & n3S19pc=-4 -> (n3S19pc'=-3); +[n3S20f1] n3S19is=0 -> (n3S19ip0'=3)&(n3S19is'=1); +[n3S20f1] n3S19is=1 -> (n3S19ip1'=3)&(n3S19is'=2); +[n3S20f1] n3S19is=2 -> true; +[n3S18f2] n3S19is=0 -> (n3S19ip0'=2)&(n3S19is'=1); +[n3S18f2] n3S19is=1 -> (n3S19ip1'=2)&(n3S19is'=2); +[n3S18f2] n3S19is=2 -> true; +[n3S17f2] n3S19is=0 -> (n3S19ip0'=1)&(n3S19is'=1); +[n3S17f2] n3S19is=1 -> (n3S19ip1'=1)&(n3S19is'=2); +[n3S17f2] n3S19is=2 -> true; +[] unlk & numSteps0 -> (n3S19pc'=-5)&(unlk'=false); +[n3S19f3] n3S19pc=-5 & n3S19os>0 & n3S19op0=3 -> (n3S19op0'=n3S19op1)&(n3S19os'=n3S19os-1)&(n3S19pc'=-6); +[n3S19f2] n3S19pc=-5 & n3S19os>0 & n3S19op0=2 -> (n3S19op0'=n3S19op1)&(n3S19os'=n3S19os-1)&(n3S19pc'=-6); +[n3S19f1] n3S19pc=-5 & n3S19os>0 & n3S19op0=1 -> (n3S19op0'=n3S19op1)&(n3S19os'=n3S19os-1)&(n3S19pc'=-6); +[] numSteps (n3S19pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S19pc'=1)&(unlk'=false); +[] n3S19pc=1 -> (n3S19opt'=3)&(n3S19pc'=-4)&(n3S19ra'=2); +[] numSteps (n3S19pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S10 +n3S10v7failing:[INTMIN..INTMAX] init 2; +n3S10t0:[0..1]; +n3S10ip0:[1..2] init 1; +n3S10ip1:[1..2] init 1; +n3S10is:[0..2] init 0; +n3S10op0:[1..2] init 1; +n3S10op1:[1..2] init 1; +n3S10os:[0..2] init 0; +n3S10opt:[1..2] init 1; +n3S10pc:[-6..12] init 0; n3S10ra:[-6..12] init 0; +[] n3S10is<2 & n3S10pc=-1 -> (n3S10ip0'=1)&(n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-1 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10is<2 & n3S10pc=-2 -> (n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-3 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10pc=-3 -> (n3S10ip0'=n3S10ip1)&(n3S10is'=n3S10is-1)&(n3S10pc'=n3S10ra); +[] n3S10os=0 & n3S10pc=-4 -> (n3S10op0'=n3S10opt)&(n3S10os'=1)&(n3S10pc'=-3); +[] n3S10os=1 & n3S10pc=-4 -> (n3S10op1'=n3S10opt)&(n3S10os'=2)&(n3S10pc'=-3); +[] n3S10os=2 & n3S10pc=-4 -> (n3S10pc'=-3); +[n3S11f2] n3S10is=0 -> (n3S10ip0'=2)&(n3S10is'=1); +[n3S11f2] n3S10is=1 -> (n3S10ip1'=2)&(n3S10is'=2); +[n3S11f2] n3S10is=2 -> true; +[n2S8f3] n3S10is=0 -> (n3S10ip0'=1)&(n3S10is'=1); +[n2S8f3] n3S10is=1 -> (n3S10ip1'=1)&(n3S10is'=2); +[n2S8f3] n3S10is=2 -> true; +[] unlk & numSteps0 -> (n3S10pc'=-5)&(unlk'=false); +[n3S10f2] n3S10pc=-5 & n3S10os>0 & n3S10op0=2 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f1] n3S10pc=-5 & n3S10os>0 & n3S10op0=1 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[] numSteps (n3S10pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S10pc'=1)&(unlk'=false); +[] n3S10pc=1 & (n3S10v7failing=2) -> (n3S10pc'=2); +[] n3S10pc=1 & !((n3S10v7failing=2)) -> (n3S10pc'=8); +[] n3S10pc=2 -> 0.999:(n3S10t0'=0)&(n3S10pc'=3) + 0.001:(n3S10t0'=1)&(n3S10pc'=3); +[] n3S10pc=3 & (n3S10t0=1) -> (n3S10pc'=4); +[] n3S10pc=3 & !((n3S10t0=1)) -> (n3S10pc'=6); +[] n3S10pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S10v7failing'=1)&(n3S10pc'=5); +[] n3S10pc=5 -> (n3S10pc'=7); +[] n3S10pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S10v7failing'=0)&(n3S10pc'=7); +[] n3S10pc=7 -> (n3S10pc'=8); +[] n3S10pc=8 & (n3S10v7failing=1) -> (n3S10pc'=9); +[] n3S10pc=8 & !((n3S10v7failing=1)) -> (n3S10pc'=11); +[] n3S10pc=9 -> (n3S10pc'=-3)&(n3S10ra'=10); +[] n3S10pc=10 -> (n3S10pc'=12); +[] n3S10pc=11 -> (n3S10opt'=2)&(n3S10pc'=-4)&(n3S10ra'=12); +[] numSteps (n3S10pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S12 +n3S12t0:[0..1]; +n3S12ip0:[1..3] init 1; +n3S12ip1:[1..3] init 1; +n3S12is:[0..2] init 0; +n3S12op0:[1..3] init 1; +n3S12op1:[1..3] init 1; +n3S12os:[0..2] init 0; +n3S12opt:[1..3] init 1; +n3S12pc:[-6..6] init 0; n3S12ra:[-6..6] init 0; +[] n3S12is<2 & n3S12pc=-1 -> (n3S12ip0'=1)&(n3S12ip1'=n3S12ip0)&(n3S12is'=n3S12is+1)&(n3S12pc'=n3S12ra); +[] n3S12is=2 & n3S12pc=-1 -> (n3S12pc'=n3S12ra); +[] n3S12is=0 & n3S12pc=-2 -> (n3S12pc'=n3S12ra); +[] n3S12is>0 & n3S12is<2 & n3S12pc=-2 -> (n3S12ip1'=n3S12ip0)&(n3S12is'=n3S12is+1)&(n3S12pc'=n3S12ra); +[] n3S12is=2 & n3S12pc=-2 -> (n3S12pc'=n3S12ra); +[] n3S12is=0 & n3S12pc=-3 -> (n3S12pc'=n3S12ra); +[] n3S12is>0 & n3S12pc=-3 -> (n3S12ip0'=n3S12ip1)&(n3S12is'=n3S12is-1)&(n3S12pc'=n3S12ra); +[] n3S12os=0 & n3S12pc=-4 -> (n3S12op0'=n3S12opt)&(n3S12os'=1)&(n3S12pc'=-3); +[] n3S12os=1 & n3S12pc=-4 -> (n3S12op1'=n3S12opt)&(n3S12os'=2)&(n3S12pc'=-3); +[] n3S12os=2 & n3S12pc=-4 -> (n3S12pc'=-3); +[n3S14f1] n3S12is=0 -> (n3S12ip0'=3)&(n3S12is'=1); +[n3S14f1] n3S12is=1 -> (n3S12ip1'=3)&(n3S12is'=2); +[n3S14f1] n3S12is=2 -> true; +[n3S13f1] n3S12is=0 -> (n3S12ip0'=2)&(n3S12is'=1); +[n3S13f1] n3S12is=1 -> (n3S12ip1'=2)&(n3S12is'=2); +[n3S13f1] n3S12is=2 -> true; +[n3S11f3] n3S12is=0 -> (n3S12ip0'=1)&(n3S12is'=1); +[n3S11f3] n3S12is=1 -> (n3S12ip1'=1)&(n3S12is'=2); +[n3S11f3] n3S12is=2 -> true; +[] unlk & numSteps0 -> (n3S12pc'=-5)&(unlk'=false); +[n3S12f3] n3S12pc=-5 & n3S12os>0 & n3S12op0=3 -> (n3S12op0'=n3S12op1)&(n3S12os'=n3S12os-1)&(n3S12pc'=-6); +[n3S12f2] n3S12pc=-5 & n3S12os>0 & n3S12op0=2 -> (n3S12op0'=n3S12op1)&(n3S12os'=n3S12os-1)&(n3S12pc'=-6); +[n3S12f1] n3S12pc=-5 & n3S12os>0 & n3S12op0=1 -> (n3S12op0'=n3S12op1)&(n3S12os'=n3S12os-1)&(n3S12pc'=-6); +[] numSteps (n3S12pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S12pc'=1)&(unlk'=false); +[] n3S12pc=1 -> 0.5:(n3S12t0'=0)&(n3S12pc'=2) + 0.5:(n3S12t0'=1)&(n3S12pc'=2); +[] n3S12pc=2 & (n3S12t0=1) -> (n3S12pc'=3); +[] n3S12pc=2 & !((n3S12t0=1)) -> (n3S12pc'=5); +[] n3S12pc=3 -> (n3S12opt'=2)&(n3S12pc'=-4)&(n3S12ra'=4); +[] n3S12pc=4 -> (n3S12pc'=6); +[] n3S12pc=5 -> (n3S12opt'=3)&(n3S12pc'=-4)&(n3S12ra'=6); +[] numSteps (n3S12pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S21 +n3S21ip0:[1..2] init 1; +n3S21ip1:[1..2] init 1; +n3S21is:[0..2] init 0; +n3S21op0:[1..2] init 1; +n3S21op1:[1..2] init 1; +n3S21os:[0..2] init 0; +n3S21opt:[1..2] init 1; +n3S21pc:[-6..2] init 0; n3S21ra:[-6..2] init 0; +[] n3S21is<2 & n3S21pc=-1 -> (n3S21ip0'=1)&(n3S21ip1'=n3S21ip0)&(n3S21is'=n3S21is+1)&(n3S21pc'=n3S21ra); +[] n3S21is=2 & n3S21pc=-1 -> (n3S21pc'=n3S21ra); +[] n3S21is=0 & n3S21pc=-2 -> (n3S21pc'=n3S21ra); +[] n3S21is>0 & n3S21is<2 & n3S21pc=-2 -> (n3S21ip1'=n3S21ip0)&(n3S21is'=n3S21is+1)&(n3S21pc'=n3S21ra); +[] n3S21is=2 & n3S21pc=-2 -> (n3S21pc'=n3S21ra); +[] n3S21is=0 & n3S21pc=-3 -> (n3S21pc'=n3S21ra); +[] n3S21is>0 & n3S21pc=-3 -> (n3S21ip0'=n3S21ip1)&(n3S21is'=n3S21is-1)&(n3S21pc'=n3S21ra); +[] n3S21os=0 & n3S21pc=-4 -> (n3S21op0'=n3S21opt)&(n3S21os'=1)&(n3S21pc'=-3); +[] n3S21os=1 & n3S21pc=-4 -> (n3S21op1'=n3S21opt)&(n3S21os'=2)&(n3S21pc'=-3); +[] n3S21os=2 & n3S21pc=-4 -> (n3S21pc'=-3); +[n3S23f1] n3S21is=0 -> (n3S21ip0'=2)&(n3S21is'=1); +[n3S23f1] n3S21is=1 -> (n3S21ip1'=2)&(n3S21is'=2); +[n3S23f1] n3S21is=2 -> true; +[n3S20f2] n3S21is=0 -> (n3S21ip0'=1)&(n3S21is'=1); +[n3S20f2] n3S21is=1 -> (n3S21ip1'=1)&(n3S21is'=2); +[n3S20f2] n3S21is=2 -> true; +[] unlk & numSteps0 -> (n3S21pc'=-5)&(unlk'=false); +[n3S21f2] n3S21pc=-5 & n3S21os>0 & n3S21op0=2 -> (n3S21op0'=n3S21op1)&(n3S21os'=n3S21os-1)&(n3S21pc'=-6); +[n3S21f1] n3S21pc=-5 & n3S21os>0 & n3S21op0=1 -> (n3S21op0'=n3S21op1)&(n3S21os'=n3S21os-1)&(n3S21pc'=-6); +[] numSteps (n3S21pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S21pc'=1)&(unlk'=false); +[] n3S21pc=1 -> (n3S21opt'=2)&(n3S21pc'=-4)&(n3S21ra'=2); +[] numSteps (n3S21pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2v7failing:[INTMIN..INTMAX] init 2; +n2S2t0:[0..1]; +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..12] init 0; n2S2ra:[-6..12] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & (n2S2v7failing=2) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2v7failing=2)) -> (n2S2pc'=8); +[] n2S2pc=2 -> 0.999:(n2S2t0'=0)&(n2S2pc'=3) + 0.001:(n2S2t0'=1)&(n2S2pc'=3); +[] n2S2pc=3 & (n2S2t0=1) -> (n2S2pc'=4); +[] n2S2pc=3 & !((n2S2t0=1)) -> (n2S2pc'=6); +[] n2S2pc=4 & 1>=INTMIN & 1<=INTMAX -> (n2S2v7failing'=1)&(n2S2pc'=5); +[] n2S2pc=5 -> (n2S2pc'=7); +[] n2S2pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S2v7failing'=0)&(n2S2pc'=7); +[] n2S2pc=7 -> (n2S2pc'=8); +[] n2S2pc=8 & (n2S2v7failing=1) -> (n2S2pc'=9); +[] n2S2pc=8 & !((n2S2v7failing=1)) -> (n2S2pc'=11); +[] n2S2pc=9 -> (n2S2pc'=-3)&(n2S2ra'=10); +[] n2S2pc=10 -> (n2S2pc'=12); +[] n2S2pc=11 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=12); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S20 +n3S20t0:[0..1]; +n3S20ip0:[1..3] init 1; +n3S20ip1:[1..3] init 1; +n3S20is:[0..2] init 0; +n3S20op0:[1..3] init 1; +n3S20op1:[1..3] init 1; +n3S20os:[0..2] init 0; +n3S20opt:[1..3] init 1; +n3S20pc:[-6..6] init 0; n3S20ra:[-6..6] init 0; +[] n3S20is<2 & n3S20pc=-1 -> (n3S20ip0'=1)&(n3S20ip1'=n3S20ip0)&(n3S20is'=n3S20is+1)&(n3S20pc'=n3S20ra); +[] n3S20is=2 & n3S20pc=-1 -> (n3S20pc'=n3S20ra); +[] n3S20is=0 & n3S20pc=-2 -> (n3S20pc'=n3S20ra); +[] n3S20is>0 & n3S20is<2 & n3S20pc=-2 -> (n3S20ip1'=n3S20ip0)&(n3S20is'=n3S20is+1)&(n3S20pc'=n3S20ra); +[] n3S20is=2 & n3S20pc=-2 -> (n3S20pc'=n3S20ra); +[] n3S20is=0 & n3S20pc=-3 -> (n3S20pc'=n3S20ra); +[] n3S20is>0 & n3S20pc=-3 -> (n3S20ip0'=n3S20ip1)&(n3S20is'=n3S20is-1)&(n3S20pc'=n3S20ra); +[] n3S20os=0 & n3S20pc=-4 -> (n3S20op0'=n3S20opt)&(n3S20os'=1)&(n3S20pc'=-3); +[] n3S20os=1 & n3S20pc=-4 -> (n3S20op1'=n3S20opt)&(n3S20os'=2)&(n3S20pc'=-3); +[] n3S20os=2 & n3S20pc=-4 -> (n3S20pc'=-3); +[n3S22f1] n3S20is=0 -> (n3S20ip0'=3)&(n3S20is'=1); +[n3S22f1] n3S20is=1 -> (n3S20ip1'=3)&(n3S20is'=2); +[n3S22f1] n3S20is=2 -> true; +[n3S21f1] n3S20is=0 -> (n3S20ip0'=2)&(n3S20is'=1); +[n3S21f1] n3S20is=1 -> (n3S20ip1'=2)&(n3S20is'=2); +[n3S21f1] n3S20is=2 -> true; +[n3S19f3] n3S20is=0 -> (n3S20ip0'=1)&(n3S20is'=1); +[n3S19f3] n3S20is=1 -> (n3S20ip1'=1)&(n3S20is'=2); +[n3S19f3] n3S20is=2 -> true; +[] unlk & numSteps0 -> (n3S20pc'=-5)&(unlk'=false); +[n3S20f3] n3S20pc=-5 & n3S20os>0 & n3S20op0=3 -> (n3S20op0'=n3S20op1)&(n3S20os'=n3S20os-1)&(n3S20pc'=-6); +[n3S20f2] n3S20pc=-5 & n3S20os>0 & n3S20op0=2 -> (n3S20op0'=n3S20op1)&(n3S20os'=n3S20os-1)&(n3S20pc'=-6); +[n3S20f1] n3S20pc=-5 & n3S20os>0 & n3S20op0=1 -> (n3S20op0'=n3S20op1)&(n3S20os'=n3S20os-1)&(n3S20pc'=-6); +[] numSteps (n3S20pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S20pc'=1)&(unlk'=false); +[] n3S20pc=1 -> 0.5:(n3S20t0'=0)&(n3S20pc'=2) + 0.5:(n3S20t0'=1)&(n3S20pc'=2); +[] n3S20pc=2 & (n3S20t0=1) -> (n3S20pc'=3); +[] n3S20pc=2 & !((n3S20t0=1)) -> (n3S20pc'=5); +[] n3S20pc=3 -> (n3S20opt'=2)&(n3S20pc'=-4)&(n3S20ra'=4); +[] n3S20pc=4 -> (n3S20pc'=6); +[] n3S20pc=5 -> (n3S20opt'=3)&(n3S20pc'=-4)&(n3S20ra'=6); +[] numSteps (n3S20pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S18 +n3S18v7failing:[INTMIN..INTMAX] init 2; +n3S18t0:[0..1]; +n3S18ip0:[1..2] init 1; +n3S18ip1:[1..2] init 1; +n3S18is:[0..2] init 0; +n3S18op0:[1..2] init 1; +n3S18op1:[1..2] init 1; +n3S18os:[0..2] init 0; +n3S18opt:[1..2] init 1; +n3S18pc:[-6..12] init 0; n3S18ra:[-6..12] init 0; +[] n3S18is<2 & n3S18pc=-1 -> (n3S18ip0'=1)&(n3S18ip1'=n3S18ip0)&(n3S18is'=n3S18is+1)&(n3S18pc'=n3S18ra); +[] n3S18is=2 & n3S18pc=-1 -> (n3S18pc'=n3S18ra); +[] n3S18is=0 & n3S18pc=-2 -> (n3S18pc'=n3S18ra); +[] n3S18is>0 & n3S18is<2 & n3S18pc=-2 -> (n3S18ip1'=n3S18ip0)&(n3S18is'=n3S18is+1)&(n3S18pc'=n3S18ra); +[] n3S18is=2 & n3S18pc=-2 -> (n3S18pc'=n3S18ra); +[] n3S18is=0 & n3S18pc=-3 -> (n3S18pc'=n3S18ra); +[] n3S18is>0 & n3S18pc=-3 -> (n3S18ip0'=n3S18ip1)&(n3S18is'=n3S18is-1)&(n3S18pc'=n3S18ra); +[] n3S18os=0 & n3S18pc=-4 -> (n3S18op0'=n3S18opt)&(n3S18os'=1)&(n3S18pc'=-3); +[] n3S18os=1 & n3S18pc=-4 -> (n3S18op1'=n3S18opt)&(n3S18os'=2)&(n3S18pc'=-3); +[] n3S18os=2 & n3S18pc=-4 -> (n3S18pc'=-3); +[n3S19f2] n3S18is=0 -> (n3S18ip0'=2)&(n3S18is'=1); +[n3S19f2] n3S18is=1 -> (n3S18ip1'=2)&(n3S18is'=2); +[n3S19f2] n3S18is=2 -> true; +[n3S16f3] n3S18is=0 -> (n3S18ip0'=1)&(n3S18is'=1); +[n3S16f3] n3S18is=1 -> (n3S18ip1'=1)&(n3S18is'=2); +[n3S16f3] n3S18is=2 -> true; +[] unlk & numSteps0 -> (n3S18pc'=-5)&(unlk'=false); +[n3S18f2] n3S18pc=-5 & n3S18os>0 & n3S18op0=2 -> (n3S18op0'=n3S18op1)&(n3S18os'=n3S18os-1)&(n3S18pc'=-6); +[n3S18f1] n3S18pc=-5 & n3S18os>0 & n3S18op0=1 -> (n3S18op0'=n3S18op1)&(n3S18os'=n3S18os-1)&(n3S18pc'=-6); +[] numSteps (n3S18pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S18pc'=1)&(unlk'=false); +[] n3S18pc=1 & (n3S18v7failing=2) -> (n3S18pc'=2); +[] n3S18pc=1 & !((n3S18v7failing=2)) -> (n3S18pc'=8); +[] n3S18pc=2 -> 0.999:(n3S18t0'=0)&(n3S18pc'=3) + 0.001:(n3S18t0'=1)&(n3S18pc'=3); +[] n3S18pc=3 & (n3S18t0=1) -> (n3S18pc'=4); +[] n3S18pc=3 & !((n3S18t0=1)) -> (n3S18pc'=6); +[] n3S18pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S18v7failing'=1)&(n3S18pc'=5); +[] n3S18pc=5 -> (n3S18pc'=7); +[] n3S18pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S18v7failing'=0)&(n3S18pc'=7); +[] n3S18pc=7 -> (n3S18pc'=8); +[] n3S18pc=8 & (n3S18v7failing=1) -> (n3S18pc'=9); +[] n3S18pc=8 & !((n3S18v7failing=1)) -> (n3S18pc'=11); +[] n3S18pc=9 -> (n3S18pc'=-3)&(n3S18ra'=10); +[] n3S18pc=10 -> (n3S18pc'=12); +[] n3S18pc=11 -> (n3S18opt'=2)&(n3S18pc'=-4)&(n3S18ra'=12); +[] numSteps (n3S18pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S7f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S7f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S7f1] n2S5is=2 -> true; +[n2S4f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..6] init 0; n2S0ra:[-6..6] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 & (n2S0t0=1) -> (n2S0pc'=3); +[] n2S0pc=2 & !((n2S0t0=1)) -> (n2S0pc'=5); +[] n2S0pc=3 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=4); +[] n2S0pc=4 -> (n2S0pc'=6); +[] n2S0pc=5 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9ip0:[1..2] init 1; +n2S9ip1:[1..2] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..2] init 1; +n2S9op1:[1..2] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..2] init 1; +n2S9pc:[-6..2] init 0; n2S9ra:[-6..2] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n3S11f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n3S11f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n3S11f1] n2S9is=2 -> true; +[n2S8f2] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S8f2] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S8f2] n2S9is=2 -> true; +[] unlk & numSteps0 -> (n2S9pc'=-5)&(unlk'=false); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S9pc'=1)&(unlk'=false); +[] n2S9pc=1 -> (n2S9opt'=2)&(n2S9pc'=-4)&(n2S9ra'=2); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S27 +n3S27ip0:[1..3] init 1; +n3S27ip1:[1..3] init 1; +n3S27is:[0..2] init 0; +n3S27op0:[1..3] init 1; +n3S27op1:[1..3] init 1; +n3S27os:[0..2] init 0; +n3S27opt:[1..3] init 1; +n3S27pc:[-6..2] init 0; n3S27ra:[-6..2] init 0; +[] n3S27is<2 & n3S27pc=-1 -> (n3S27ip0'=1)&(n3S27ip1'=n3S27ip0)&(n3S27is'=n3S27is+1)&(n3S27pc'=n3S27ra); +[] n3S27is=2 & n3S27pc=-1 -> (n3S27pc'=n3S27ra); +[] n3S27is=0 & n3S27pc=-2 -> (n3S27pc'=n3S27ra); +[] n3S27is>0 & n3S27is<2 & n3S27pc=-2 -> (n3S27ip1'=n3S27ip0)&(n3S27is'=n3S27is+1)&(n3S27pc'=n3S27ra); +[] n3S27is=2 & n3S27pc=-2 -> (n3S27pc'=n3S27ra); +[] n3S27is=0 & n3S27pc=-3 -> (n3S27pc'=n3S27ra); +[] n3S27is>0 & n3S27pc=-3 -> (n3S27ip0'=n3S27ip1)&(n3S27is'=n3S27is-1)&(n3S27pc'=n3S27ra); +[] n3S27os=0 & n3S27pc=-4 -> (n3S27op0'=n3S27opt)&(n3S27os'=1)&(n3S27pc'=-3); +[] n3S27os=1 & n3S27pc=-4 -> (n3S27op1'=n3S27opt)&(n3S27os'=2)&(n3S27pc'=-3); +[] n3S27os=2 & n3S27pc=-4 -> (n3S27pc'=-3); +[n2H1f1] n3S27is=0 -> (n3S27ip0'=3)&(n3S27is'=1); +[n2H1f1] n3S27is=1 -> (n3S27ip1'=3)&(n3S27is'=2); +[n2H1f1] n3S27is=2 -> true; +[n3S26f2] n3S27is=0 -> (n3S27ip0'=2)&(n3S27is'=1); +[n3S26f2] n3S27is=1 -> (n3S27ip1'=2)&(n3S27is'=2); +[n3S26f2] n3S27is=2 -> true; +[n3S25f2] n3S27is=0 -> (n3S27ip0'=1)&(n3S27is'=1); +[n3S25f2] n3S27is=1 -> (n3S27ip1'=1)&(n3S27is'=2); +[n3S25f2] n3S27is=2 -> true; +[] unlk & numSteps0 -> (n3S27pc'=-5)&(unlk'=false); +[n3S27f3] n3S27pc=-5 & n3S27os>0 & n3S27op0=3 -> (n3S27op0'=n3S27op1)&(n3S27os'=n3S27os-1)&(n3S27pc'=-6); +[n3S27f2] n3S27pc=-5 & n3S27os>0 & n3S27op0=2 -> (n3S27op0'=n3S27op1)&(n3S27os'=n3S27os-1)&(n3S27pc'=-6); +[n3S27f1] n3S27pc=-5 & n3S27os>0 & n3S27op0=1 -> (n3S27op0'=n3S27op1)&(n3S27os'=n3S27os-1)&(n3S27pc'=-6); +[] numSteps (n3S27pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S27pc'=1)&(unlk'=false); +[] n3S27pc=1 -> (n3S27opt'=3)&(n3S27pc'=-4)&(n3S27ra'=2); +[] numSteps (n3S27pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S14 +n3S14v7failing:[INTMIN..INTMAX] init 2; +n3S14t0:[0..1]; +n3S14ip0:[1..2] init 1; +n3S14ip1:[1..2] init 1; +n3S14is:[0..2] init 0; +n3S14op0:[1..2] init 1; +n3S14op1:[1..2] init 1; +n3S14os:[0..2] init 0; +n3S14opt:[1..2] init 1; +n3S14pc:[-6..12] init 0; n3S14ra:[-6..12] init 0; +[] n3S14is<2 & n3S14pc=-1 -> (n3S14ip0'=1)&(n3S14ip1'=n3S14ip0)&(n3S14is'=n3S14is+1)&(n3S14pc'=n3S14ra); +[] n3S14is=2 & n3S14pc=-1 -> (n3S14pc'=n3S14ra); +[] n3S14is=0 & n3S14pc=-2 -> (n3S14pc'=n3S14ra); +[] n3S14is>0 & n3S14is<2 & n3S14pc=-2 -> (n3S14ip1'=n3S14ip0)&(n3S14is'=n3S14is+1)&(n3S14pc'=n3S14ra); +[] n3S14is=2 & n3S14pc=-2 -> (n3S14pc'=n3S14ra); +[] n3S14is=0 & n3S14pc=-3 -> (n3S14pc'=n3S14ra); +[] n3S14is>0 & n3S14pc=-3 -> (n3S14ip0'=n3S14ip1)&(n3S14is'=n3S14is-1)&(n3S14pc'=n3S14ra); +[] n3S14os=0 & n3S14pc=-4 -> (n3S14op0'=n3S14opt)&(n3S14os'=1)&(n3S14pc'=-3); +[] n3S14os=1 & n3S14pc=-4 -> (n3S14op1'=n3S14opt)&(n3S14os'=2)&(n3S14pc'=-3); +[] n3S14os=2 & n3S14pc=-4 -> (n3S14pc'=-3); +[n3S15f2] n3S14is=0 -> (n3S14ip0'=2)&(n3S14is'=1); +[n3S15f2] n3S14is=1 -> (n3S14ip1'=2)&(n3S14is'=2); +[n3S15f2] n3S14is=2 -> true; +[n3S12f3] n3S14is=0 -> (n3S14ip0'=1)&(n3S14is'=1); +[n3S12f3] n3S14is=1 -> (n3S14ip1'=1)&(n3S14is'=2); +[n3S12f3] n3S14is=2 -> true; +[] unlk & numSteps0 -> (n3S14pc'=-5)&(unlk'=false); +[n3S14f2] n3S14pc=-5 & n3S14os>0 & n3S14op0=2 -> (n3S14op0'=n3S14op1)&(n3S14os'=n3S14os-1)&(n3S14pc'=-6); +[n3S14f1] n3S14pc=-5 & n3S14os>0 & n3S14op0=1 -> (n3S14op0'=n3S14op1)&(n3S14os'=n3S14os-1)&(n3S14pc'=-6); +[] numSteps (n3S14pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S14pc'=1)&(unlk'=false); +[] n3S14pc=1 & (n3S14v7failing=2) -> (n3S14pc'=2); +[] n3S14pc=1 & !((n3S14v7failing=2)) -> (n3S14pc'=8); +[] n3S14pc=2 -> 0.999:(n3S14t0'=0)&(n3S14pc'=3) + 0.001:(n3S14t0'=1)&(n3S14pc'=3); +[] n3S14pc=3 & (n3S14t0=1) -> (n3S14pc'=4); +[] n3S14pc=3 & !((n3S14t0=1)) -> (n3S14pc'=6); +[] n3S14pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S14v7failing'=1)&(n3S14pc'=5); +[] n3S14pc=5 -> (n3S14pc'=7); +[] n3S14pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S14v7failing'=0)&(n3S14pc'=7); +[] n3S14pc=7 -> (n3S14pc'=8); +[] n3S14pc=8 & (n3S14v7failing=1) -> (n3S14pc'=9); +[] n3S14pc=8 & !((n3S14v7failing=1)) -> (n3S14pc'=11); +[] n3S14pc=9 -> (n3S14pc'=-3)&(n3S14ra'=10); +[] n3S14pc=10 -> (n3S14pc'=12); +[] n3S14pc=11 -> (n3S14opt'=2)&(n3S14pc'=-4)&(n3S14ra'=12); +[] numSteps (n3S14pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S25 +n3S25ip0:[1..2] init 1; +n3S25ip1:[1..2] init 1; +n3S25is:[0..2] init 0; +n3S25op0:[1..2] init 1; +n3S25op1:[1..2] init 1; +n3S25os:[0..2] init 0; +n3S25opt:[1..2] init 1; +n3S25pc:[-6..2] init 0; n3S25ra:[-6..2] init 0; +[] n3S25is<2 & n3S25pc=-1 -> (n3S25ip0'=1)&(n3S25ip1'=n3S25ip0)&(n3S25is'=n3S25is+1)&(n3S25pc'=n3S25ra); +[] n3S25is=2 & n3S25pc=-1 -> (n3S25pc'=n3S25ra); +[] n3S25is=0 & n3S25pc=-2 -> (n3S25pc'=n3S25ra); +[] n3S25is>0 & n3S25is<2 & n3S25pc=-2 -> (n3S25ip1'=n3S25ip0)&(n3S25is'=n3S25is+1)&(n3S25pc'=n3S25ra); +[] n3S25is=2 & n3S25pc=-2 -> (n3S25pc'=n3S25ra); +[] n3S25is=0 & n3S25pc=-3 -> (n3S25pc'=n3S25ra); +[] n3S25is>0 & n3S25pc=-3 -> (n3S25ip0'=n3S25ip1)&(n3S25is'=n3S25is-1)&(n3S25pc'=n3S25ra); +[] n3S25os=0 & n3S25pc=-4 -> (n3S25op0'=n3S25opt)&(n3S25os'=1)&(n3S25pc'=-3); +[] n3S25os=1 & n3S25pc=-4 -> (n3S25op1'=n3S25opt)&(n3S25os'=2)&(n3S25pc'=-3); +[] n3S25os=2 & n3S25pc=-4 -> (n3S25pc'=-3); +[n3S27f1] n3S25is=0 -> (n3S25ip0'=2)&(n3S25is'=1); +[n3S27f1] n3S25is=1 -> (n3S25ip1'=2)&(n3S25is'=2); +[n3S27f1] n3S25is=2 -> true; +[n3S24f2] n3S25is=0 -> (n3S25ip0'=1)&(n3S25is'=1); +[n3S24f2] n3S25is=1 -> (n3S25ip1'=1)&(n3S25is'=2); +[n3S24f2] n3S25is=2 -> true; +[] unlk & numSteps0 -> (n3S25pc'=-5)&(unlk'=false); +[n3S25f2] n3S25pc=-5 & n3S25os>0 & n3S25op0=2 -> (n3S25op0'=n3S25op1)&(n3S25os'=n3S25os-1)&(n3S25pc'=-6); +[n3S25f1] n3S25pc=-5 & n3S25os>0 & n3S25op0=1 -> (n3S25op0'=n3S25op1)&(n3S25os'=n3S25os-1)&(n3S25pc'=-6); +[] numSteps (n3S25pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S25pc'=1)&(unlk'=false); +[] n3S25pc=1 -> (n3S25opt'=2)&(n3S25pc'=-4)&(n3S25ra'=2); +[] numSteps (n3S25pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S23 +n3S23ip0:[1..3] init 1; +n3S23ip1:[1..3] init 1; +n3S23is:[0..2] init 0; +n3S23op0:[1..3] init 1; +n3S23op1:[1..3] init 1; +n3S23os:[0..2] init 0; +n3S23opt:[1..3] init 1; +n3S23pc:[-6..2] init 0; n3S23ra:[-6..2] init 0; +[] n3S23is<2 & n3S23pc=-1 -> (n3S23ip0'=1)&(n3S23ip1'=n3S23ip0)&(n3S23is'=n3S23is+1)&(n3S23pc'=n3S23ra); +[] n3S23is=2 & n3S23pc=-1 -> (n3S23pc'=n3S23ra); +[] n3S23is=0 & n3S23pc=-2 -> (n3S23pc'=n3S23ra); +[] n3S23is>0 & n3S23is<2 & n3S23pc=-2 -> (n3S23ip1'=n3S23ip0)&(n3S23is'=n3S23is+1)&(n3S23pc'=n3S23ra); +[] n3S23is=2 & n3S23pc=-2 -> (n3S23pc'=n3S23ra); +[] n3S23is=0 & n3S23pc=-3 -> (n3S23pc'=n3S23ra); +[] n3S23is>0 & n3S23pc=-3 -> (n3S23ip0'=n3S23ip1)&(n3S23is'=n3S23is-1)&(n3S23pc'=n3S23ra); +[] n3S23os=0 & n3S23pc=-4 -> (n3S23op0'=n3S23opt)&(n3S23os'=1)&(n3S23pc'=-3); +[] n3S23os=1 & n3S23pc=-4 -> (n3S23op1'=n3S23opt)&(n3S23os'=2)&(n3S23pc'=-3); +[] n3S23os=2 & n3S23pc=-4 -> (n3S23pc'=-3); +[n3S24f1] n3S23is=0 -> (n3S23ip0'=3)&(n3S23is'=1); +[n3S24f1] n3S23is=1 -> (n3S23ip1'=3)&(n3S23is'=2); +[n3S24f1] n3S23is=2 -> true; +[n3S22f2] n3S23is=0 -> (n3S23ip0'=2)&(n3S23is'=1); +[n3S22f2] n3S23is=1 -> (n3S23ip1'=2)&(n3S23is'=2); +[n3S22f2] n3S23is=2 -> true; +[n3S21f2] n3S23is=0 -> (n3S23ip0'=1)&(n3S23is'=1); +[n3S21f2] n3S23is=1 -> (n3S23ip1'=1)&(n3S23is'=2); +[n3S21f2] n3S23is=2 -> true; +[] unlk & numSteps0 -> (n3S23pc'=-5)&(unlk'=false); +[n3S23f3] n3S23pc=-5 & n3S23os>0 & n3S23op0=3 -> (n3S23op0'=n3S23op1)&(n3S23os'=n3S23os-1)&(n3S23pc'=-6); +[n3S23f2] n3S23pc=-5 & n3S23os>0 & n3S23op0=2 -> (n3S23op0'=n3S23op1)&(n3S23os'=n3S23os-1)&(n3S23pc'=-6); +[n3S23f1] n3S23pc=-5 & n3S23os>0 & n3S23op0=1 -> (n3S23op0'=n3S23op1)&(n3S23os'=n3S23os-1)&(n3S23pc'=-6); +[] numSteps (n3S23pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S23pc'=1)&(unlk'=false); +[] n3S23pc=1 -> (n3S23opt'=3)&(n3S23pc'=-4)&(n3S23ra'=2); +[] numSteps (n3S23pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S16 +n3S16t0:[0..1]; +n3S16ip0:[1..3] init 1; +n3S16ip1:[1..3] init 1; +n3S16is:[0..2] init 0; +n3S16op0:[1..3] init 1; +n3S16op1:[1..3] init 1; +n3S16os:[0..2] init 0; +n3S16opt:[1..3] init 1; +n3S16pc:[-6..6] init 0; n3S16ra:[-6..6] init 0; +[] n3S16is<2 & n3S16pc=-1 -> (n3S16ip0'=1)&(n3S16ip1'=n3S16ip0)&(n3S16is'=n3S16is+1)&(n3S16pc'=n3S16ra); +[] n3S16is=2 & n3S16pc=-1 -> (n3S16pc'=n3S16ra); +[] n3S16is=0 & n3S16pc=-2 -> (n3S16pc'=n3S16ra); +[] n3S16is>0 & n3S16is<2 & n3S16pc=-2 -> (n3S16ip1'=n3S16ip0)&(n3S16is'=n3S16is+1)&(n3S16pc'=n3S16ra); +[] n3S16is=2 & n3S16pc=-2 -> (n3S16pc'=n3S16ra); +[] n3S16is=0 & n3S16pc=-3 -> (n3S16pc'=n3S16ra); +[] n3S16is>0 & n3S16pc=-3 -> (n3S16ip0'=n3S16ip1)&(n3S16is'=n3S16is-1)&(n3S16pc'=n3S16ra); +[] n3S16os=0 & n3S16pc=-4 -> (n3S16op0'=n3S16opt)&(n3S16os'=1)&(n3S16pc'=-3); +[] n3S16os=1 & n3S16pc=-4 -> (n3S16op1'=n3S16opt)&(n3S16os'=2)&(n3S16pc'=-3); +[] n3S16os=2 & n3S16pc=-4 -> (n3S16pc'=-3); +[n3S18f1] n3S16is=0 -> (n3S16ip0'=3)&(n3S16is'=1); +[n3S18f1] n3S16is=1 -> (n3S16ip1'=3)&(n3S16is'=2); +[n3S18f1] n3S16is=2 -> true; +[n3S17f1] n3S16is=0 -> (n3S16ip0'=2)&(n3S16is'=1); +[n3S17f1] n3S16is=1 -> (n3S16ip1'=2)&(n3S16is'=2); +[n3S17f1] n3S16is=2 -> true; +[n3S15f3] n3S16is=0 -> (n3S16ip0'=1)&(n3S16is'=1); +[n3S15f3] n3S16is=1 -> (n3S16ip1'=1)&(n3S16is'=2); +[n3S15f3] n3S16is=2 -> true; +[] unlk & numSteps0 -> (n3S16pc'=-5)&(unlk'=false); +[n3S16f3] n3S16pc=-5 & n3S16os>0 & n3S16op0=3 -> (n3S16op0'=n3S16op1)&(n3S16os'=n3S16os-1)&(n3S16pc'=-6); +[n3S16f2] n3S16pc=-5 & n3S16os>0 & n3S16op0=2 -> (n3S16op0'=n3S16op1)&(n3S16os'=n3S16os-1)&(n3S16pc'=-6); +[n3S16f1] n3S16pc=-5 & n3S16os>0 & n3S16op0=1 -> (n3S16op0'=n3S16op1)&(n3S16os'=n3S16os-1)&(n3S16pc'=-6); +[] numSteps (n3S16pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S16pc'=1)&(unlk'=false); +[] n3S16pc=1 -> 0.5:(n3S16t0'=0)&(n3S16pc'=2) + 0.5:(n3S16t0'=1)&(n3S16pc'=2); +[] n3S16pc=2 & (n3S16t0=1) -> (n3S16pc'=3); +[] n3S16pc=2 & !((n3S16t0=1)) -> (n3S16pc'=5); +[] n3S16pc=3 -> (n3S16opt'=2)&(n3S16pc'=-4)&(n3S16ra'=4); +[] n3S16pc=4 -> (n3S16pc'=6); +[] n3S16pc=5 -> (n3S16opt'=3)&(n3S16pc'=-4)&(n3S16ra'=6); +[] numSteps (n3S16pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..3] init 1; +n2S7ip1:[1..3] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..3] init 1; +n2S7op1:[1..3] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..3] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S8f1] n2S7is=0 -> (n2S7ip0'=3)&(n2S7is'=1); +[n2S8f1] n2S7is=1 -> (n2S7ip1'=3)&(n2S7is'=2); +[n2S8f1] n2S7is=2 -> true; +[n2S6f2] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S6f2] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S6f2] n2S7is=2 -> true; +[n2S5f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S5f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S5f2] n2S7is=2 -> true; +[] unlk & numSteps0 -> (n2S7pc'=-5)&(unlk'=false); +[n2S7f3] n2S7pc=-5 & n2S7os>0 & n2S7op0=3 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S7pc'=1)&(unlk'=false); +[] n2S7pc=1 -> (n2S7opt'=3)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 & n3S10is=0 & n3S10os=0 & n3S11is=0 & n3S11os=0 & n3S12is=0 & n3S12os=0 & n3S13is=0 & n3S13os=0 & n3S14is=0 & n3S14os=0 & n3S15is=0 & n3S15os=0 & n3S16is=0 & n3S16os=0 & n3S17is=0 & n3S17os=0 & n3S18is=0 & n3S18os=0 & n3S19is=0 & n3S19os=0 & n3S20is=0 & n3S20os=0 & n3S21is=0 & n3S21os=0 & n3S22is=0 & n3S22os=0 & n3S23is=0 & n3S23os=0 & n3S24is=0 & n3S24os=0 & n3S25is=0 & n3S25os=0 & n3S26is=0 & n3S26os=0 & n3S27is=0 & n3S27os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/keyur/reliability-30.psi b/keyur/reliability-30.psi new file mode 100644 index 0000000..0ca149c --- /dev/null +++ b/keyur/reliability-30.psi @@ -0,0 +1,562 @@ +num_steps := 50; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 30, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9, S8 := 10, S9 := 11, S10 := 12, S11 := 13, S12 := 14, S13 := 15, S14 := 16, S15 := 17, S16 := 18, S17 := 19, S18 := 20, S19 := 21, S20 := 22, S21 := 23, S22 := 24, S23 := 25, S24 := 26, S25 := 27, S26 := 28, S27 := 29; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + arrived: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + arrived = 0; + } + def __run(){ + arrived = 1; + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (flip((1/2))==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + failing: ℝ; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + failing = 2; + } + def __run(){ + if (failing==2){ + if (flip((1/1000))==1){ + failing = 1; + } else { + failing = 0; + } + } + if (failing==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __s3_ty{ + Q_in: Queue, Q_out: Queue; + def __s3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s3_ty, __S4 : __s0_ty, __S5 : __s1_ty, __S6 : __s2_ty, __S7 : __s3_ty, __S8 : __s0_ty, __S9 : __s1_ty, __S10 : __s2_ty, __S11 : __s3_ty, __S12 : __s0_ty, __S13 : __s1_ty, __S14 : __s2_ty, __S15 : __s3_ty, __S16 : __s0_ty, __S17 : __s1_ty, __S18 : __s2_ty, __S19 : __s3_ty, __S20 : __s0_ty, __S21 : __s1_ty, __S22 : __s2_ty, __S23 : __s3_ty, __S24 : __s0_ty, __S25 : __s1_ty, __S26 : __s2_ty, __S27 : __s3_ty; + num_actions: ℝ; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s3_ty(), __S4 = __s0_ty(), __S5 = __s1_ty(), __S6 = __s2_ty(), __S7 = __s3_ty(), __S8 = __s0_ty(), __S9 = __s1_ty(), __S10 = __s2_ty(), __S11 = __s3_ty(), __S12 = __s0_ty(), __S13 = __s1_ty(), __S14 = __s2_ty(), __S15 = __s3_ty(), __S16 = __s0_ty(), __S17 = __s1_ty(), __S18 = __s2_ty(), __S19 = __s3_ty(), __S20 = __s0_ty(), __S21 = __s1_ty(), __S22 = __s2_ty(), __S23 = __s3_ty(), __S24 = __s0_ty(), __S25 = __s1_ty(), __S26 = __s2_ty(), __S27 = __s3_ty(); + num_actions = 0; + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else if i == 4 { __S2.Q_in } else if i == 5 { __S3.Q_in } else if i == 6 { __S4.Q_in } else if i == 7 { __S5.Q_in } else if i == 8 { __S6.Q_in } else if i == 9 { __S7.Q_in } else if i == 10 { __S8.Q_in } else if i == 11 { __S9.Q_in } else if i == 12 { __S10.Q_in } else if i == 13 { __S11.Q_in } else if i == 14 { __S12.Q_in } else if i == 15 { __S13.Q_in } else if i == 16 { __S14.Q_in } else if i == 17 { __S15.Q_in } else if i == 18 { __S16.Q_in } else if i == 19 { __S17.Q_in } else if i == 20 { __S18.Q_in } else if i == 21 { __S19.Q_in } else if i == 22 { __S20.Q_in } else if i == 23 { __S21.Q_in } else if i == 24 { __S22.Q_in } else if i == 25 { __S23.Q_in } else if i == 26 { __S24.Q_in } else if i == 27 { __S25.Q_in } else if i == 28 { __S26.Q_in } else { __S27.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else if i == 4 { __S2.Q_out } else if i == 5 { __S3.Q_out } else if i == 6 { __S4.Q_out } else if i == 7 { __S5.Q_out } else if i == 8 { __S6.Q_out } else if i == 9 { __S7.Q_out } else if i == 10 { __S8.Q_out } else if i == 11 { __S9.Q_out } else if i == 12 { __S10.Q_out } else if i == 13 { __S11.Q_out } else if i == 14 { __S12.Q_out } else if i == 15 { __S13.Q_out } else if i == 16 { __S14.Q_out } else if i == 17 { __S15.Q_out } else if i == 18 { __S16.Q_out } else if i == 19 { __S17.Q_out } else if i == 20 { __S18.Q_out } else if i == 21 { __S19.Q_out } else if i == 22 { __S20.Q_out } else if i == 23 { __S21.Q_out } else if i == 24 { __S22.Q_out } else if i == 25 { __S23.Q_out } else if i == 26 { __S24.Q_out } else if i == 27 { __S25.Q_out } else if i == 28 { __S26.Q_out } else { __S27.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + num_actions += 1; + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() || __S8.Q_in.size() || __S8.Q_out.size() || __S9.Q_in.size() || __S9.Q_out.size() || __S10.Q_in.size() || __S10.Q_out.size() || __S11.Q_in.size() || __S11.Q_out.size() || __S12.Q_in.size() || __S12.Q_out.size() || __S13.Q_in.size() || __S13.Q_out.size() || __S14.Q_in.size() || __S14.Q_out.size() || __S15.Q_in.size() || __S15.Q_out.size() || __S16.Q_in.size() || __S16.Q_out.size() || __S17.Q_in.size() || __S17.Q_out.size() || __S18.Q_in.size() || __S18.Q_out.size() || __S19.Q_in.size() || __S19.Q_out.size() || __S20.Q_in.size() || __S20.Q_out.size() || __S21.Q_in.size() || __S21.Q_out.size() || __S22.Q_in.size() || __S22.Q_out.size() || __S23.Q_in.size() || __S23.Q_out.size() || __S24.Q_in.size() || __S24.Q_out.size() || __S25.Q_in.size() || __S25.Q_out.size() || __S26.Q_in.size() || __S26.Q_out.size() || __S27.Q_in.size() || __S27.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S27.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 2)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S8.Q_in.pushBack((pkt, 1)); + } + } + if node == 10 && __S8.Q_out.size() { + (pkt,port) := __S8.Q_out.takeFront(); + if port == 1 { + __S7.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S10.Q_in.pushBack((pkt, 1)); + } + } + if node == 11 && __S9.Q_out.size() { + (pkt,port) := __S9.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S11.Q_in.pushBack((pkt, 1)); + } + } + if node == 12 && __S10.Q_out.size() { + (pkt,port) := __S10.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S11.Q_in.pushBack((pkt, 2)); + } + } + if node == 13 && __S11.Q_out.size() { + (pkt,port) := __S11.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S10.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S12.Q_in.pushBack((pkt, 1)); + } + } + if node == 14 && __S12.Q_out.size() { + (pkt,port) := __S12.Q_out.takeFront(); + if port == 1 { + __S11.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S13.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S14.Q_in.pushBack((pkt, 1)); + } + } + if node == 15 && __S13.Q_out.size() { + (pkt,port) := __S13.Q_out.takeFront(); + if port == 1 { + __S12.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S15.Q_in.pushBack((pkt, 1)); + } + } + if node == 16 && __S14.Q_out.size() { + (pkt,port) := __S14.Q_out.takeFront(); + if port == 1 { + __S12.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S15.Q_in.pushBack((pkt, 2)); + } + } + if node == 17 && __S15.Q_out.size() { + (pkt,port) := __S15.Q_out.takeFront(); + if port == 1 { + __S13.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S14.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S16.Q_in.pushBack((pkt, 1)); + } + } + if node == 18 && __S16.Q_out.size() { + (pkt,port) := __S16.Q_out.takeFront(); + if port == 1 { + __S15.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S17.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S18.Q_in.pushBack((pkt, 1)); + } + } + if node == 19 && __S17.Q_out.size() { + (pkt,port) := __S17.Q_out.takeFront(); + if port == 1 { + __S16.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S19.Q_in.pushBack((pkt, 1)); + } + } + if node == 20 && __S18.Q_out.size() { + (pkt,port) := __S18.Q_out.takeFront(); + if port == 1 { + __S16.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S19.Q_in.pushBack((pkt, 2)); + } + } + if node == 21 && __S19.Q_out.size() { + (pkt,port) := __S19.Q_out.takeFront(); + if port == 1 { + __S17.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S18.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S20.Q_in.pushBack((pkt, 1)); + } + } + if node == 22 && __S20.Q_out.size() { + (pkt,port) := __S20.Q_out.takeFront(); + if port == 1 { + __S19.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S21.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S22.Q_in.pushBack((pkt, 1)); + } + } + if node == 23 && __S21.Q_out.size() { + (pkt,port) := __S21.Q_out.takeFront(); + if port == 1 { + __S20.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S23.Q_in.pushBack((pkt, 1)); + } + } + if node == 24 && __S22.Q_out.size() { + (pkt,port) := __S22.Q_out.takeFront(); + if port == 1 { + __S20.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S23.Q_in.pushBack((pkt, 2)); + } + } + if node == 25 && __S23.Q_out.size() { + (pkt,port) := __S23.Q_out.takeFront(); + if port == 1 { + __S21.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S22.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S24.Q_in.pushBack((pkt, 1)); + } + } + if node == 26 && __S24.Q_out.size() { + (pkt,port) := __S24.Q_out.takeFront(); + if port == 1 { + __S23.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S25.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S26.Q_in.pushBack((pkt, 1)); + } + } + if node == 27 && __S25.Q_out.size() { + (pkt,port) := __S25.Q_out.takeFront(); + if port == 1 { + __S24.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S27.Q_in.pushBack((pkt, 1)); + } + } + if node == 28 && __S26.Q_out.size() { + (pkt,port) := __S26.Q_out.takeFront(); + if port == 1 { + __S24.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S27.Q_in.pushBack((pkt, 2)); + } + } + if node == 29 && __S27.Q_out.size() { + (pkt,port) := __S27.Q_out.takeFront(); + if port == 1 { + __S25.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S26.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + if node == 10 && __S8.Q_in.size() { + __S8.__run(); + } + if node == 11 && __S9.Q_in.size() { + __S9.__run(); + } + if node == 12 && __S10.Q_in.size() { + __S10.__run(); + } + if node == 13 && __S11.Q_in.size() { + __S11.__run(); + } + if node == 14 && __S12.Q_in.size() { + __S12.__run(); + } + if node == 15 && __S13.Q_in.size() { + __S13.__run(); + } + if node == 16 && __S14.Q_in.size() { + __S14.__run(); + } + if node == 17 && __S15.Q_in.size() { + __S15.__run(); + } + if node == 18 && __S16.Q_in.size() { + __S16.__run(); + } + if node == 19 && __S17.Q_in.size() { + __S17.__run(); + } + if node == 20 && __S18.Q_in.size() { + __S18.__run(); + } + if node == 21 && __S19.Q_in.size() { + __S19.__run(); + } + if node == 22 && __S20.Q_in.size() { + __S20.__run(); + } + if node == 23 && __S21.Q_in.size() { + __S21.__run(); + } + if node == 24 && __S22.Q_in.size() { + __S22.__run(); + } + if node == 25 && __S23.Q_in.size() { + __S23.__run(); + } + if node == 26 && __S24.Q_in.size() { + __S24.__run(); + } + if node == 27 && __S25.Q_in.size() { + __S25.__run(); + } + if node == 28 && __S26.Q_in.size() { + __S26.__run(); + } + if node == 29 && __S27.Q_in.size() { + __S27.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size() || __d.__S8.Q_in.size() || __d.__S8.Q_out.size() || __d.__S9.Q_in.size() || __d.__S9.Q_out.size() || __d.__S10.Q_in.size() || __d.__S10.Q_out.size() || __d.__S11.Q_in.size() || __d.__S11.Q_out.size() || __d.__S12.Q_in.size() || __d.__S12.Q_out.size() || __d.__S13.Q_in.size() || __d.__S13.Q_out.size() || __d.__S14.Q_in.size() || __d.__S14.Q_out.size() || __d.__S15.Q_in.size() || __d.__S15.Q_out.size() || __d.__S16.Q_in.size() || __d.__S16.Q_out.size() || __d.__S17.Q_in.size() || __d.__S17.Q_out.size() || __d.__S18.Q_in.size() || __d.__S18.Q_out.size() || __d.__S19.Q_in.size() || __d.__S19.Q_out.size() || __d.__S20.Q_in.size() || __d.__S20.Q_out.size() || __d.__S21.Q_in.size() || __d.__S21.Q_out.size() || __d.__S22.Q_in.size() || __d.__S22.Q_out.size() || __d.__S23.Q_in.size() || __d.__S23.Q_out.size() || __d.__S24.Q_in.size() || __d.__S24.Q_out.size() || __d.__S25.Q_in.size() || __d.__S25.Q_out.size() || __d.__S26.Q_in.size() || __d.__S26.Q_out.size() || __d.__S27.Q_in.size() || __d.__S27.Q_out.size())); + q₁ := Expectation(((if H1 == 1 { __d.__H1.arrived } else { assert(0) }) == 1) !=0); + return (q₁); +} + diff --git a/keyur/reliability-30d.bayonet b/keyur/reliability-30d.bayonet new file mode 100644 index 0000000..7d63d2d --- /dev/null +++ b/keyur/reliability-30d.bayonet @@ -0,0 +1,117 @@ +num_steps 50; + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5, S6, S7, + S8, S9, S10, S11, S12, S13, S14, S15, + S16, S17, S18, S19, S20, S21, S22, S23, + S24, S25, S26, S27 } + + links{ + (H0,pt1) <-> (S0,pt1), + + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (S3,pt1), + (S2,pt2) <-> (S3,pt2), + + (S3,pt3) <-> (S4,pt1), + + (S4,pt2) <-> (S5,pt1), + (S4,pt3) <-> (S6,pt1), + (S5,pt2) <-> (S7,pt1), + (S6,pt2) <-> (S7,pt2), + + (S7,pt3) <-> (S8,pt1), + + (S8,pt2) <-> (S9,pt1), + (S8,pt3) <-> (S10,pt1), + (S9,pt2) <-> (S11,pt1), + (S10,pt2) <-> (S11,pt2), + + (S11,pt3) <-> (S12,pt1), + + (S12,pt2) <-> (S13,pt1), + (S12,pt3) <-> (S14,pt1), + (S13,pt2) <-> (S15,pt1), + (S14,pt2) <-> (S15,pt2), + + + (S15,pt3) <-> (S16,pt1), + + (S16,pt2) <-> (S17,pt1), + (S16,pt3) <-> (S18,pt1), + (S17,pt2) <-> (S19,pt1), + (S18,pt2) <-> (S19,pt2), + + (S19,pt3) <-> (S20,pt1), + + (S20,pt2) <-> (S21,pt1), + (S20,pt3) <-> (S22,pt1), + (S21,pt2) <-> (S23,pt1), + (S22,pt2) <-> (S23,pt2), + + (S23,pt3) <-> (S24,pt1), + + (S24,pt2) <-> (S25,pt1), + (S24,pt3) <-> (S26,pt1), + (S25,pt2) <-> (S27,pt1), + (S26,pt2) <-> (S27,pt2), + + (S27,pt3) <-> (H1,pt1) + } +} +queue_capacity 2; + +programs{ H0 -> h0, H1 -> h1, + S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3, + S4 -> s0, S5 -> s1, S6 -> s2, S7 -> s3, + S8 -> s0, S9 -> s1, S10 -> s2, S11 -> s3, + S12 -> s0, S13 -> s1, S14 -> s2, S15 -> s3, + S16 -> s0, S17 -> s1, S18 -> s2, S19 -> s3, + S20 -> s0, S21 -> s1, S22 -> s2, S23 -> s3, + S24 -> s0, S25 -> s1, S26 -> s2, S27 -> s3 +} + +query probability(arrived@H1 == 1); + +packet_fields{ } + +def h0(){ + fwd(1); +} +def h1() state arrived(0){ + arrived=1; + drop; +} +def s0(){ + if flip(1/2) == 1{ + fwd(2); + }else{ + fwd(3); + } +} +def s1(){ + fwd(2); +} +def s2()state failing(2){ + if failing == 2 { if(flip(1/1000) == 1) { failing = 1; } else { failing = 0; } } + if failing == 1 { drop } + else{ fwd(2); } +} +def s3(){ + fwd(3); +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} + diff --git a/keyur/reliability-30d.prism b/keyur/reliability-30d.prism new file mode 100644 index 0000000..40fe89d --- /dev/null +++ b/keyur/reliability-30d.prism @@ -0,0 +1,1264 @@ +dtmc +global unlk:[-1..59] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 60; +global numSkips:[0..60] init 0; +module n2H0 +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..2] init 0; n2H0ra:[-6..2] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk=30 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=30 & numSteps (unlk'=31)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=31)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=2); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n3S24 +n3S24t0:[0..1]; +n3S24ip0:[1..3] init 1; +n3S24ip1:[1..3] init 1; +n3S24is:[0..2] init 0; +n3S24op0:[1..3] init 1; +n3S24op1:[1..3] init 1; +n3S24os:[0..2] init 0; +n3S24opt:[1..3] init 1; +n3S24pc:[-6..6] init 0; n3S24ra:[-6..6] init 0; +[] n3S24is<2 & n3S24pc=-1 -> (n3S24ip0'=1)&(n3S24ip1'=n3S24ip0)&(n3S24is'=n3S24is+1)&(n3S24pc'=n3S24ra); +[] n3S24is=2 & n3S24pc=-1 -> (n3S24pc'=n3S24ra); +[] n3S24is=0 & n3S24pc=-2 -> (n3S24pc'=n3S24ra); +[] n3S24is>0 & n3S24is<2 & n3S24pc=-2 -> (n3S24ip1'=n3S24ip0)&(n3S24is'=n3S24is+1)&(n3S24pc'=n3S24ra); +[] n3S24is=2 & n3S24pc=-2 -> (n3S24pc'=n3S24ra); +[] n3S24is=0 & n3S24pc=-3 -> (n3S24pc'=n3S24ra); +[] n3S24is>0 & n3S24pc=-3 -> (n3S24ip0'=n3S24ip1)&(n3S24is'=n3S24is-1)&(n3S24pc'=n3S24ra); +[] n3S24os=0 & n3S24pc=-4 -> (n3S24op0'=n3S24opt)&(n3S24os'=1)&(n3S24pc'=-3); +[] n3S24os=1 & n3S24pc=-4 -> (n3S24op1'=n3S24opt)&(n3S24os'=2)&(n3S24pc'=-3); +[] n3S24os=2 & n3S24pc=-4 -> (n3S24pc'=-3); +[n3S26f1] n3S24is=0 -> (n3S24ip0'=3)&(n3S24is'=1); +[n3S26f1] n3S24is=1 -> (n3S24ip1'=3)&(n3S24is'=2); +[n3S26f1] n3S24is=2 -> true; +[n3S25f1] n3S24is=0 -> (n3S24ip0'=2)&(n3S24is'=1); +[n3S25f1] n3S24is=1 -> (n3S24ip1'=2)&(n3S24is'=2); +[n3S25f1] n3S24is=2 -> true; +[n3S23f3] n3S24is=0 -> (n3S24ip0'=1)&(n3S24is'=1); +[n3S23f3] n3S24is=1 -> (n3S24ip1'=1)&(n3S24is'=2); +[n3S23f3] n3S24is=2 -> true; +[] unlk=56 & numSteps0 -> (n3S24pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=56 & numSteps (unlk'=57)&(numSkips'=numSkips+1); +[n3S24f3] n3S24pc=-5 & n3S24os>0 & n3S24op0=3 -> (n3S24op0'=n3S24op1)&(n3S24os'=n3S24os-1)&(n3S24pc'=-6); +[n3S24f2] n3S24pc=-5 & n3S24os>0 & n3S24op0=2 -> (n3S24op0'=n3S24op1)&(n3S24os'=n3S24os-1)&(n3S24pc'=-6); +[n3S24f1] n3S24pc=-5 & n3S24os>0 & n3S24op0=1 -> (n3S24op0'=n3S24op1)&(n3S24os'=n3S24os-1)&(n3S24pc'=-6); +[] numSteps (n3S24pc'=0)&(unlk'=57)&(numSteps'=numSteps+1); +[] unlk=26 & numSteps0 -> (n3S24pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=26 & numSteps (unlk'=27)&(numSkips'=numSkips+1); +[] n3S24pc=1 -> 0.5:(n3S24t0'=0)&(n3S24pc'=2) + 0.5:(n3S24t0'=1)&(n3S24pc'=2); +[] n3S24pc=2 & (n3S24t0=1) -> (n3S24pc'=3); +[] n3S24pc=2 & !((n3S24t0=1)) -> (n3S24pc'=5); +[] n3S24pc=3 -> (n3S24opt'=2)&(n3S24pc'=-4)&(n3S24ra'=4); +[] n3S24pc=4 -> (n3S24pc'=6); +[] n3S24pc=5 -> (n3S24opt'=3)&(n3S24pc'=-4)&(n3S24ra'=6); +[] numSteps (n3S24pc'=0)&(unlk'=27)&(numSteps'=numSteps+1); +endmodule +module n3S15 +n3S15ip0:[1..3] init 1; +n3S15ip1:[1..3] init 1; +n3S15is:[0..2] init 0; +n3S15op0:[1..3] init 1; +n3S15op1:[1..3] init 1; +n3S15os:[0..2] init 0; +n3S15opt:[1..3] init 1; +n3S15pc:[-6..2] init 0; n3S15ra:[-6..2] init 0; +[] n3S15is<2 & n3S15pc=-1 -> (n3S15ip0'=1)&(n3S15ip1'=n3S15ip0)&(n3S15is'=n3S15is+1)&(n3S15pc'=n3S15ra); +[] n3S15is=2 & n3S15pc=-1 -> (n3S15pc'=n3S15ra); +[] n3S15is=0 & n3S15pc=-2 -> (n3S15pc'=n3S15ra); +[] n3S15is>0 & n3S15is<2 & n3S15pc=-2 -> (n3S15ip1'=n3S15ip0)&(n3S15is'=n3S15is+1)&(n3S15pc'=n3S15ra); +[] n3S15is=2 & n3S15pc=-2 -> (n3S15pc'=n3S15ra); +[] n3S15is=0 & n3S15pc=-3 -> (n3S15pc'=n3S15ra); +[] n3S15is>0 & n3S15pc=-3 -> (n3S15ip0'=n3S15ip1)&(n3S15is'=n3S15is-1)&(n3S15pc'=n3S15ra); +[] n3S15os=0 & n3S15pc=-4 -> (n3S15op0'=n3S15opt)&(n3S15os'=1)&(n3S15pc'=-3); +[] n3S15os=1 & n3S15pc=-4 -> (n3S15op1'=n3S15opt)&(n3S15os'=2)&(n3S15pc'=-3); +[] n3S15os=2 & n3S15pc=-4 -> (n3S15pc'=-3); +[n3S16f1] n3S15is=0 -> (n3S15ip0'=3)&(n3S15is'=1); +[n3S16f1] n3S15is=1 -> (n3S15ip1'=3)&(n3S15is'=2); +[n3S16f1] n3S15is=2 -> true; +[n3S14f2] n3S15is=0 -> (n3S15ip0'=2)&(n3S15is'=1); +[n3S14f2] n3S15is=1 -> (n3S15ip1'=2)&(n3S15is'=2); +[n3S14f2] n3S15is=2 -> true; +[n3S13f2] n3S15is=0 -> (n3S15ip0'=1)&(n3S15is'=1); +[n3S13f2] n3S15is=1 -> (n3S15ip1'=1)&(n3S15is'=2); +[n3S13f2] n3S15is=2 -> true; +[] unlk=47 & numSteps0 -> (n3S15pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=47 & numSteps (unlk'=48)&(numSkips'=numSkips+1); +[n3S15f3] n3S15pc=-5 & n3S15os>0 & n3S15op0=3 -> (n3S15op0'=n3S15op1)&(n3S15os'=n3S15os-1)&(n3S15pc'=-6); +[n3S15f2] n3S15pc=-5 & n3S15os>0 & n3S15op0=2 -> (n3S15op0'=n3S15op1)&(n3S15os'=n3S15os-1)&(n3S15pc'=-6); +[n3S15f1] n3S15pc=-5 & n3S15os>0 & n3S15op0=1 -> (n3S15op0'=n3S15op1)&(n3S15os'=n3S15os-1)&(n3S15pc'=-6); +[] numSteps (n3S15pc'=0)&(unlk'=48)&(numSteps'=numSteps+1); +[] unlk=17 & numSteps0 -> (n3S15pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=18)&(numSkips'=numSkips+1); +[] n3S15pc=1 -> (n3S15opt'=3)&(n3S15pc'=-4)&(n3S15ra'=2); +[] numSteps (n3S15pc'=0)&(unlk'=18)&(numSteps'=numSteps+1); +endmodule +module n3S13 +n3S13ip0:[1..2] init 1; +n3S13ip1:[1..2] init 1; +n3S13is:[0..2] init 0; +n3S13op0:[1..2] init 1; +n3S13op1:[1..2] init 1; +n3S13os:[0..2] init 0; +n3S13opt:[1..2] init 1; +n3S13pc:[-6..2] init 0; n3S13ra:[-6..2] init 0; +[] n3S13is<2 & n3S13pc=-1 -> (n3S13ip0'=1)&(n3S13ip1'=n3S13ip0)&(n3S13is'=n3S13is+1)&(n3S13pc'=n3S13ra); +[] n3S13is=2 & n3S13pc=-1 -> (n3S13pc'=n3S13ra); +[] n3S13is=0 & n3S13pc=-2 -> (n3S13pc'=n3S13ra); +[] n3S13is>0 & n3S13is<2 & n3S13pc=-2 -> (n3S13ip1'=n3S13ip0)&(n3S13is'=n3S13is+1)&(n3S13pc'=n3S13ra); +[] n3S13is=2 & n3S13pc=-2 -> (n3S13pc'=n3S13ra); +[] n3S13is=0 & n3S13pc=-3 -> (n3S13pc'=n3S13ra); +[] n3S13is>0 & n3S13pc=-3 -> (n3S13ip0'=n3S13ip1)&(n3S13is'=n3S13is-1)&(n3S13pc'=n3S13ra); +[] n3S13os=0 & n3S13pc=-4 -> (n3S13op0'=n3S13opt)&(n3S13os'=1)&(n3S13pc'=-3); +[] n3S13os=1 & n3S13pc=-4 -> (n3S13op1'=n3S13opt)&(n3S13os'=2)&(n3S13pc'=-3); +[] n3S13os=2 & n3S13pc=-4 -> (n3S13pc'=-3); +[n3S15f1] n3S13is=0 -> (n3S13ip0'=2)&(n3S13is'=1); +[n3S15f1] n3S13is=1 -> (n3S13ip1'=2)&(n3S13is'=2); +[n3S15f1] n3S13is=2 -> true; +[n3S12f2] n3S13is=0 -> (n3S13ip0'=1)&(n3S13is'=1); +[n3S12f2] n3S13is=1 -> (n3S13ip1'=1)&(n3S13is'=2); +[n3S12f2] n3S13is=2 -> true; +[] unlk=45 & numSteps0 -> (n3S13pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=45 & numSteps (unlk'=46)&(numSkips'=numSkips+1); +[n3S13f2] n3S13pc=-5 & n3S13os>0 & n3S13op0=2 -> (n3S13op0'=n3S13op1)&(n3S13os'=n3S13os-1)&(n3S13pc'=-6); +[n3S13f1] n3S13pc=-5 & n3S13os>0 & n3S13op0=1 -> (n3S13op0'=n3S13op1)&(n3S13os'=n3S13os-1)&(n3S13pc'=-6); +[] numSteps (n3S13pc'=0)&(unlk'=46)&(numSteps'=numSteps+1); +[] unlk=15 & numSteps0 -> (n3S13pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[] n3S13pc=1 -> (n3S13opt'=2)&(n3S13pc'=-4)&(n3S13ra'=2); +[] numSteps (n3S13pc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +endmodule +module n3S22 +n3S22v7failing:[INTMIN..INTMAX] init 2; +n3S22t0:[0..1]; +n3S22ip0:[1..2] init 1; +n3S22ip1:[1..2] init 1; +n3S22is:[0..2] init 0; +n3S22op0:[1..2] init 1; +n3S22op1:[1..2] init 1; +n3S22os:[0..2] init 0; +n3S22opt:[1..2] init 1; +n3S22pc:[-6..12] init 0; n3S22ra:[-6..12] init 0; +[] n3S22is<2 & n3S22pc=-1 -> (n3S22ip0'=1)&(n3S22ip1'=n3S22ip0)&(n3S22is'=n3S22is+1)&(n3S22pc'=n3S22ra); +[] n3S22is=2 & n3S22pc=-1 -> (n3S22pc'=n3S22ra); +[] n3S22is=0 & n3S22pc=-2 -> (n3S22pc'=n3S22ra); +[] n3S22is>0 & n3S22is<2 & n3S22pc=-2 -> (n3S22ip1'=n3S22ip0)&(n3S22is'=n3S22is+1)&(n3S22pc'=n3S22ra); +[] n3S22is=2 & n3S22pc=-2 -> (n3S22pc'=n3S22ra); +[] n3S22is=0 & n3S22pc=-3 -> (n3S22pc'=n3S22ra); +[] n3S22is>0 & n3S22pc=-3 -> (n3S22ip0'=n3S22ip1)&(n3S22is'=n3S22is-1)&(n3S22pc'=n3S22ra); +[] n3S22os=0 & n3S22pc=-4 -> (n3S22op0'=n3S22opt)&(n3S22os'=1)&(n3S22pc'=-3); +[] n3S22os=1 & n3S22pc=-4 -> (n3S22op1'=n3S22opt)&(n3S22os'=2)&(n3S22pc'=-3); +[] n3S22os=2 & n3S22pc=-4 -> (n3S22pc'=-3); +[n3S23f2] n3S22is=0 -> (n3S22ip0'=2)&(n3S22is'=1); +[n3S23f2] n3S22is=1 -> (n3S22ip1'=2)&(n3S22is'=2); +[n3S23f2] n3S22is=2 -> true; +[n3S20f3] n3S22is=0 -> (n3S22ip0'=1)&(n3S22is'=1); +[n3S20f3] n3S22is=1 -> (n3S22ip1'=1)&(n3S22is'=2); +[n3S20f3] n3S22is=2 -> true; +[] unlk=54 & numSteps0 -> (n3S22pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=54 & numSteps (unlk'=55)&(numSkips'=numSkips+1); +[n3S22f2] n3S22pc=-5 & n3S22os>0 & n3S22op0=2 -> (n3S22op0'=n3S22op1)&(n3S22os'=n3S22os-1)&(n3S22pc'=-6); +[n3S22f1] n3S22pc=-5 & n3S22os>0 & n3S22op0=1 -> (n3S22op0'=n3S22op1)&(n3S22os'=n3S22os-1)&(n3S22pc'=-6); +[] numSteps (n3S22pc'=0)&(unlk'=55)&(numSteps'=numSteps+1); +[] unlk=24 & numSteps0 -> (n3S22pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=24 & numSteps (unlk'=25)&(numSkips'=numSkips+1); +[] n3S22pc=1 & (n3S22v7failing=2) -> (n3S22pc'=2); +[] n3S22pc=1 & !((n3S22v7failing=2)) -> (n3S22pc'=8); +[] n3S22pc=2 -> 0.999:(n3S22t0'=0)&(n3S22pc'=3) + 0.001:(n3S22t0'=1)&(n3S22pc'=3); +[] n3S22pc=3 & (n3S22t0=1) -> (n3S22pc'=4); +[] n3S22pc=3 & !((n3S22t0=1)) -> (n3S22pc'=6); +[] n3S22pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S22v7failing'=1)&(n3S22pc'=5); +[] n3S22pc=5 -> (n3S22pc'=7); +[] n3S22pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S22v7failing'=0)&(n3S22pc'=7); +[] n3S22pc=7 -> (n3S22pc'=8); +[] n3S22pc=8 & (n3S22v7failing=1) -> (n3S22pc'=9); +[] n3S22pc=8 & !((n3S22v7failing=1)) -> (n3S22pc'=11); +[] n3S22pc=9 -> (n3S22pc'=-3)&(n3S22ra'=10); +[] n3S22pc=10 -> (n3S22pc'=12); +[] n3S22pc=11 -> (n3S22opt'=2)&(n3S22pc'=-4)&(n3S22ra'=12); +[] numSteps (n3S22pc'=0)&(unlk'=25)&(numSteps'=numSteps+1); +endmodule +module n3S17 +n3S17ip0:[1..2] init 1; +n3S17ip1:[1..2] init 1; +n3S17is:[0..2] init 0; +n3S17op0:[1..2] init 1; +n3S17op1:[1..2] init 1; +n3S17os:[0..2] init 0; +n3S17opt:[1..2] init 1; +n3S17pc:[-6..2] init 0; n3S17ra:[-6..2] init 0; +[] n3S17is<2 & n3S17pc=-1 -> (n3S17ip0'=1)&(n3S17ip1'=n3S17ip0)&(n3S17is'=n3S17is+1)&(n3S17pc'=n3S17ra); +[] n3S17is=2 & n3S17pc=-1 -> (n3S17pc'=n3S17ra); +[] n3S17is=0 & n3S17pc=-2 -> (n3S17pc'=n3S17ra); +[] n3S17is>0 & n3S17is<2 & n3S17pc=-2 -> (n3S17ip1'=n3S17ip0)&(n3S17is'=n3S17is+1)&(n3S17pc'=n3S17ra); +[] n3S17is=2 & n3S17pc=-2 -> (n3S17pc'=n3S17ra); +[] n3S17is=0 & n3S17pc=-3 -> (n3S17pc'=n3S17ra); +[] n3S17is>0 & n3S17pc=-3 -> (n3S17ip0'=n3S17ip1)&(n3S17is'=n3S17is-1)&(n3S17pc'=n3S17ra); +[] n3S17os=0 & n3S17pc=-4 -> (n3S17op0'=n3S17opt)&(n3S17os'=1)&(n3S17pc'=-3); +[] n3S17os=1 & n3S17pc=-4 -> (n3S17op1'=n3S17opt)&(n3S17os'=2)&(n3S17pc'=-3); +[] n3S17os=2 & n3S17pc=-4 -> (n3S17pc'=-3); +[n3S19f1] n3S17is=0 -> (n3S17ip0'=2)&(n3S17is'=1); +[n3S19f1] n3S17is=1 -> (n3S17ip1'=2)&(n3S17is'=2); +[n3S19f1] n3S17is=2 -> true; +[n3S16f2] n3S17is=0 -> (n3S17ip0'=1)&(n3S17is'=1); +[n3S16f2] n3S17is=1 -> (n3S17ip1'=1)&(n3S17is'=2); +[n3S16f2] n3S17is=2 -> true; +[] unlk=49 & numSteps0 -> (n3S17pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=49 & numSteps (unlk'=50)&(numSkips'=numSkips+1); +[n3S17f2] n3S17pc=-5 & n3S17os>0 & n3S17op0=2 -> (n3S17op0'=n3S17op1)&(n3S17os'=n3S17os-1)&(n3S17pc'=-6); +[n3S17f1] n3S17pc=-5 & n3S17os>0 & n3S17op0=1 -> (n3S17op0'=n3S17op1)&(n3S17os'=n3S17os-1)&(n3S17pc'=-6); +[] numSteps (n3S17pc'=0)&(unlk'=50)&(numSteps'=numSteps+1); +[] unlk=19 & numSteps0 -> (n3S17pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=19 & numSteps (unlk'=20)&(numSkips'=numSkips+1); +[] n3S17pc=1 -> (n3S17opt'=2)&(n3S17pc'=-4)&(n3S17ra'=2); +[] numSteps (n3S17pc'=0)&(unlk'=20)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4t0:[0..1]; +n2S4ip0:[1..3] init 1; +n2S4ip1:[1..3] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..3] init 1; +n2S4op1:[1..3] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..3] init 1; +n2S4pc:[-6..6] init 0; n2S4ra:[-6..6] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S6f1] n2S4is=0 -> (n2S4ip0'=3)&(n2S4is'=1); +[n2S6f1] n2S4is=1 -> (n2S4ip1'=3)&(n2S4is'=2); +[n2S6f1] n2S4is=2 -> true; +[n2S5f1] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S5f1] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S5f1] n2S4is=2 -> true; +[n2S3f3] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f3] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f3] n2S4is=2 -> true; +[] unlk=36 & numSteps0 -> (n2S4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=36 & numSteps (unlk'=37)&(numSkips'=numSkips+1); +[n2S4f3] n2S4pc=-5 & n2S4os>0 & n2S4op0=3 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=37)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2S4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2S4pc=1 -> 0.5:(n2S4t0'=0)&(n2S4pc'=2) + 0.5:(n2S4t0'=1)&(n2S4pc'=2); +[] n2S4pc=2 & (n2S4t0=1) -> (n2S4pc'=3); +[] n2S4pc=2 & !((n2S4t0=1)) -> (n2S4pc'=5); +[] n2S4pc=3 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=4); +[] n2S4pc=4 -> (n2S4pc'=6); +[] n2S4pc=5 -> (n2S4opt'=3)&(n2S4pc'=-4)&(n2S4ra'=6); +[] numSteps (n2S4pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n3S26 +n3S26v7failing:[INTMIN..INTMAX] init 2; +n3S26t0:[0..1]; +n3S26ip0:[1..2] init 1; +n3S26ip1:[1..2] init 1; +n3S26is:[0..2] init 0; +n3S26op0:[1..2] init 1; +n3S26op1:[1..2] init 1; +n3S26os:[0..2] init 0; +n3S26opt:[1..2] init 1; +n3S26pc:[-6..12] init 0; n3S26ra:[-6..12] init 0; +[] n3S26is<2 & n3S26pc=-1 -> (n3S26ip0'=1)&(n3S26ip1'=n3S26ip0)&(n3S26is'=n3S26is+1)&(n3S26pc'=n3S26ra); +[] n3S26is=2 & n3S26pc=-1 -> (n3S26pc'=n3S26ra); +[] n3S26is=0 & n3S26pc=-2 -> (n3S26pc'=n3S26ra); +[] n3S26is>0 & n3S26is<2 & n3S26pc=-2 -> (n3S26ip1'=n3S26ip0)&(n3S26is'=n3S26is+1)&(n3S26pc'=n3S26ra); +[] n3S26is=2 & n3S26pc=-2 -> (n3S26pc'=n3S26ra); +[] n3S26is=0 & n3S26pc=-3 -> (n3S26pc'=n3S26ra); +[] n3S26is>0 & n3S26pc=-3 -> (n3S26ip0'=n3S26ip1)&(n3S26is'=n3S26is-1)&(n3S26pc'=n3S26ra); +[] n3S26os=0 & n3S26pc=-4 -> (n3S26op0'=n3S26opt)&(n3S26os'=1)&(n3S26pc'=-3); +[] n3S26os=1 & n3S26pc=-4 -> (n3S26op1'=n3S26opt)&(n3S26os'=2)&(n3S26pc'=-3); +[] n3S26os=2 & n3S26pc=-4 -> (n3S26pc'=-3); +[n3S27f2] n3S26is=0 -> (n3S26ip0'=2)&(n3S26is'=1); +[n3S27f2] n3S26is=1 -> (n3S26ip1'=2)&(n3S26is'=2); +[n3S27f2] n3S26is=2 -> true; +[n3S24f3] n3S26is=0 -> (n3S26ip0'=1)&(n3S26is'=1); +[n3S24f3] n3S26is=1 -> (n3S26ip1'=1)&(n3S26is'=2); +[n3S24f3] n3S26is=2 -> true; +[] unlk=58 & numSteps0 -> (n3S26pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=58 & numSteps (unlk'=59)&(numSkips'=numSkips+1); +[n3S26f2] n3S26pc=-5 & n3S26os>0 & n3S26op0=2 -> (n3S26op0'=n3S26op1)&(n3S26os'=n3S26os-1)&(n3S26pc'=-6); +[n3S26f1] n3S26pc=-5 & n3S26os>0 & n3S26op0=1 -> (n3S26op0'=n3S26op1)&(n3S26os'=n3S26os-1)&(n3S26pc'=-6); +[] numSteps (n3S26pc'=0)&(unlk'=59)&(numSteps'=numSteps+1); +[] unlk=28 & numSteps0 -> (n3S26pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=28 & numSteps (unlk'=29)&(numSkips'=numSkips+1); +[] n3S26pc=1 & (n3S26v7failing=2) -> (n3S26pc'=2); +[] n3S26pc=1 & !((n3S26v7failing=2)) -> (n3S26pc'=8); +[] n3S26pc=2 -> 0.999:(n3S26t0'=0)&(n3S26pc'=3) + 0.001:(n3S26t0'=1)&(n3S26pc'=3); +[] n3S26pc=3 & (n3S26t0=1) -> (n3S26pc'=4); +[] n3S26pc=3 & !((n3S26t0=1)) -> (n3S26pc'=6); +[] n3S26pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S26v7failing'=1)&(n3S26pc'=5); +[] n3S26pc=5 -> (n3S26pc'=7); +[] n3S26pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S26v7failing'=0)&(n3S26pc'=7); +[] n3S26pc=7 -> (n3S26pc'=8); +[] n3S26pc=8 & (n3S26v7failing=1) -> (n3S26pc'=9); +[] n3S26pc=8 & !((n3S26v7failing=1)) -> (n3S26pc'=11); +[] n3S26pc=9 -> (n3S26pc'=-3)&(n3S26ra'=10); +[] n3S26pc=10 -> (n3S26pc'=12); +[] n3S26pc=11 -> (n3S26opt'=2)&(n3S26pc'=-4)&(n3S26ra'=12); +[] numSteps (n3S26pc'=0)&(unlk'=29)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8t0:[0..1]; +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..6] init 0; n2S8ra:[-6..6] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n3S10f1] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n3S10f1] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n3S10f1] n2S8is=2 -> true; +[n2S9f1] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n2S9f1] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n2S9f1] n2S8is=2 -> true; +[n2S7f3] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S7f3] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S7f3] n2S8is=2 -> true; +[] unlk=40 & numSteps0 -> (n2S8pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=40 & numSteps (unlk'=41)&(numSkips'=numSkips+1); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=41)&(numSteps'=numSteps+1); +[] unlk=10 & numSteps0 -> (n2S8pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[] n2S8pc=1 -> 0.5:(n2S8t0'=0)&(n2S8pc'=2) + 0.5:(n2S8t0'=1)&(n2S8pc'=2); +[] n2S8pc=2 & (n2S8t0=1) -> (n2S8pc'=3); +[] n2S8pc=2 & !((n2S8t0=1)) -> (n2S8pc'=5); +[] n2S8pc=3 -> (n2S8opt'=2)&(n2S8pc'=-4)&(n2S8ra'=4); +[] n2S8pc=4 -> (n2S8pc'=6); +[] n2S8pc=5 -> (n2S8opt'=3)&(n2S8pc'=-4)&(n2S8ra'=6); +[] numSteps (n2S8pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v7arrived:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n3S27f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n3S27f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n3S27f3] n2H1is=2 -> true; +[] unlk=31 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=31 & numSteps (unlk'=32)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=32)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & 1>=INTMIN & 1<=INTMAX -> (n2H1v7arrived'=1)&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6v7failing:[INTMIN..INTMAX] init 2; +n2S6t0:[0..1]; +n2S6ip0:[1..2] init 1; +n2S6ip1:[1..2] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..2] init 1; +n2S6op1:[1..2] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..2] init 1; +n2S6pc:[-6..12] init 0; n2S6ra:[-6..12] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S7f2] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2S7f2] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2S7f2] n2S6is=2 -> true; +[n2S4f3] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S4f3] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S4f3] n2S6is=2 -> true; +[] unlk=38 & numSteps0 -> (n2S6pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=38 & numSteps (unlk'=39)&(numSkips'=numSkips+1); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=39)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2S6pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2S6pc=1 & (n2S6v7failing=2) -> (n2S6pc'=2); +[] n2S6pc=1 & !((n2S6v7failing=2)) -> (n2S6pc'=8); +[] n2S6pc=2 -> 0.999:(n2S6t0'=0)&(n2S6pc'=3) + 0.001:(n2S6t0'=1)&(n2S6pc'=3); +[] n2S6pc=3 & (n2S6t0=1) -> (n2S6pc'=4); +[] n2S6pc=3 & !((n2S6t0=1)) -> (n2S6pc'=6); +[] n2S6pc=4 & 1>=INTMIN & 1<=INTMAX -> (n2S6v7failing'=1)&(n2S6pc'=5); +[] n2S6pc=5 -> (n2S6pc'=7); +[] n2S6pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S6v7failing'=0)&(n2S6pc'=7); +[] n2S6pc=7 -> (n2S6pc'=8); +[] n2S6pc=8 & (n2S6v7failing=1) -> (n2S6pc'=9); +[] n2S6pc=8 & !((n2S6v7failing=1)) -> (n2S6pc'=11); +[] n2S6pc=9 -> (n2S6pc'=-3)&(n2S6ra'=10); +[] n2S6pc=10 -> (n2S6pc'=12); +[] n2S6pc=11 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=12); +[] numSteps (n2S6pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n3S11 +n3S11ip0:[1..3] init 1; +n3S11ip1:[1..3] init 1; +n3S11is:[0..2] init 0; +n3S11op0:[1..3] init 1; +n3S11op1:[1..3] init 1; +n3S11os:[0..2] init 0; +n3S11opt:[1..3] init 1; +n3S11pc:[-6..2] init 0; n3S11ra:[-6..2] init 0; +[] n3S11is<2 & n3S11pc=-1 -> (n3S11ip0'=1)&(n3S11ip1'=n3S11ip0)&(n3S11is'=n3S11is+1)&(n3S11pc'=n3S11ra); +[] n3S11is=2 & n3S11pc=-1 -> (n3S11pc'=n3S11ra); +[] n3S11is=0 & n3S11pc=-2 -> (n3S11pc'=n3S11ra); +[] n3S11is>0 & n3S11is<2 & n3S11pc=-2 -> (n3S11ip1'=n3S11ip0)&(n3S11is'=n3S11is+1)&(n3S11pc'=n3S11ra); +[] n3S11is=2 & n3S11pc=-2 -> (n3S11pc'=n3S11ra); +[] n3S11is=0 & n3S11pc=-3 -> (n3S11pc'=n3S11ra); +[] n3S11is>0 & n3S11pc=-3 -> (n3S11ip0'=n3S11ip1)&(n3S11is'=n3S11is-1)&(n3S11pc'=n3S11ra); +[] n3S11os=0 & n3S11pc=-4 -> (n3S11op0'=n3S11opt)&(n3S11os'=1)&(n3S11pc'=-3); +[] n3S11os=1 & n3S11pc=-4 -> (n3S11op1'=n3S11opt)&(n3S11os'=2)&(n3S11pc'=-3); +[] n3S11os=2 & n3S11pc=-4 -> (n3S11pc'=-3); +[n3S12f1] n3S11is=0 -> (n3S11ip0'=3)&(n3S11is'=1); +[n3S12f1] n3S11is=1 -> (n3S11ip1'=3)&(n3S11is'=2); +[n3S12f1] n3S11is=2 -> true; +[n3S10f2] n3S11is=0 -> (n3S11ip0'=2)&(n3S11is'=1); +[n3S10f2] n3S11is=1 -> (n3S11ip1'=2)&(n3S11is'=2); +[n3S10f2] n3S11is=2 -> true; +[n2S9f2] n3S11is=0 -> (n3S11ip0'=1)&(n3S11is'=1); +[n2S9f2] n3S11is=1 -> (n3S11ip1'=1)&(n3S11is'=2); +[n2S9f2] n3S11is=2 -> true; +[] unlk=43 & numSteps0 -> (n3S11pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=43 & numSteps (unlk'=44)&(numSkips'=numSkips+1); +[n3S11f3] n3S11pc=-5 & n3S11os>0 & n3S11op0=3 -> (n3S11op0'=n3S11op1)&(n3S11os'=n3S11os-1)&(n3S11pc'=-6); +[n3S11f2] n3S11pc=-5 & n3S11os>0 & n3S11op0=2 -> (n3S11op0'=n3S11op1)&(n3S11os'=n3S11os-1)&(n3S11pc'=-6); +[n3S11f1] n3S11pc=-5 & n3S11os>0 & n3S11op0=1 -> (n3S11op0'=n3S11op1)&(n3S11os'=n3S11os-1)&(n3S11pc'=-6); +[] numSteps (n3S11pc'=0)&(unlk'=44)&(numSteps'=numSteps+1); +[] unlk=13 & numSteps0 -> (n3S11pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[] n3S11pc=1 -> (n3S11opt'=3)&(n3S11pc'=-4)&(n3S11ra'=2); +[] numSteps (n3S11pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +endmodule +module n3S19 +n3S19ip0:[1..3] init 1; +n3S19ip1:[1..3] init 1; +n3S19is:[0..2] init 0; +n3S19op0:[1..3] init 1; +n3S19op1:[1..3] init 1; +n3S19os:[0..2] init 0; +n3S19opt:[1..3] init 1; +n3S19pc:[-6..2] init 0; n3S19ra:[-6..2] init 0; +[] n3S19is<2 & n3S19pc=-1 -> (n3S19ip0'=1)&(n3S19ip1'=n3S19ip0)&(n3S19is'=n3S19is+1)&(n3S19pc'=n3S19ra); +[] n3S19is=2 & n3S19pc=-1 -> (n3S19pc'=n3S19ra); +[] n3S19is=0 & n3S19pc=-2 -> (n3S19pc'=n3S19ra); +[] n3S19is>0 & n3S19is<2 & n3S19pc=-2 -> (n3S19ip1'=n3S19ip0)&(n3S19is'=n3S19is+1)&(n3S19pc'=n3S19ra); +[] n3S19is=2 & n3S19pc=-2 -> (n3S19pc'=n3S19ra); +[] n3S19is=0 & n3S19pc=-3 -> (n3S19pc'=n3S19ra); +[] n3S19is>0 & n3S19pc=-3 -> (n3S19ip0'=n3S19ip1)&(n3S19is'=n3S19is-1)&(n3S19pc'=n3S19ra); +[] n3S19os=0 & n3S19pc=-4 -> (n3S19op0'=n3S19opt)&(n3S19os'=1)&(n3S19pc'=-3); +[] n3S19os=1 & n3S19pc=-4 -> (n3S19op1'=n3S19opt)&(n3S19os'=2)&(n3S19pc'=-3); +[] n3S19os=2 & n3S19pc=-4 -> (n3S19pc'=-3); +[n3S20f1] n3S19is=0 -> (n3S19ip0'=3)&(n3S19is'=1); +[n3S20f1] n3S19is=1 -> (n3S19ip1'=3)&(n3S19is'=2); +[n3S20f1] n3S19is=2 -> true; +[n3S18f2] n3S19is=0 -> (n3S19ip0'=2)&(n3S19is'=1); +[n3S18f2] n3S19is=1 -> (n3S19ip1'=2)&(n3S19is'=2); +[n3S18f2] n3S19is=2 -> true; +[n3S17f2] n3S19is=0 -> (n3S19ip0'=1)&(n3S19is'=1); +[n3S17f2] n3S19is=1 -> (n3S19ip1'=1)&(n3S19is'=2); +[n3S17f2] n3S19is=2 -> true; +[] unlk=51 & numSteps0 -> (n3S19pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=51 & numSteps (unlk'=52)&(numSkips'=numSkips+1); +[n3S19f3] n3S19pc=-5 & n3S19os>0 & n3S19op0=3 -> (n3S19op0'=n3S19op1)&(n3S19os'=n3S19os-1)&(n3S19pc'=-6); +[n3S19f2] n3S19pc=-5 & n3S19os>0 & n3S19op0=2 -> (n3S19op0'=n3S19op1)&(n3S19os'=n3S19os-1)&(n3S19pc'=-6); +[n3S19f1] n3S19pc=-5 & n3S19os>0 & n3S19op0=1 -> (n3S19op0'=n3S19op1)&(n3S19os'=n3S19os-1)&(n3S19pc'=-6); +[] numSteps (n3S19pc'=0)&(unlk'=52)&(numSteps'=numSteps+1); +[] unlk=21 & numSteps0 -> (n3S19pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=21 & numSteps (unlk'=22)&(numSkips'=numSkips+1); +[] n3S19pc=1 -> (n3S19opt'=3)&(n3S19pc'=-4)&(n3S19ra'=2); +[] numSteps (n3S19pc'=0)&(unlk'=22)&(numSteps'=numSteps+1); +endmodule +module n3S10 +n3S10v7failing:[INTMIN..INTMAX] init 2; +n3S10t0:[0..1]; +n3S10ip0:[1..2] init 1; +n3S10ip1:[1..2] init 1; +n3S10is:[0..2] init 0; +n3S10op0:[1..2] init 1; +n3S10op1:[1..2] init 1; +n3S10os:[0..2] init 0; +n3S10opt:[1..2] init 1; +n3S10pc:[-6..12] init 0; n3S10ra:[-6..12] init 0; +[] n3S10is<2 & n3S10pc=-1 -> (n3S10ip0'=1)&(n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-1 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10is<2 & n3S10pc=-2 -> (n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-3 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10pc=-3 -> (n3S10ip0'=n3S10ip1)&(n3S10is'=n3S10is-1)&(n3S10pc'=n3S10ra); +[] n3S10os=0 & n3S10pc=-4 -> (n3S10op0'=n3S10opt)&(n3S10os'=1)&(n3S10pc'=-3); +[] n3S10os=1 & n3S10pc=-4 -> (n3S10op1'=n3S10opt)&(n3S10os'=2)&(n3S10pc'=-3); +[] n3S10os=2 & n3S10pc=-4 -> (n3S10pc'=-3); +[n3S11f2] n3S10is=0 -> (n3S10ip0'=2)&(n3S10is'=1); +[n3S11f2] n3S10is=1 -> (n3S10ip1'=2)&(n3S10is'=2); +[n3S11f2] n3S10is=2 -> true; +[n2S8f3] n3S10is=0 -> (n3S10ip0'=1)&(n3S10is'=1); +[n2S8f3] n3S10is=1 -> (n3S10ip1'=1)&(n3S10is'=2); +[n2S8f3] n3S10is=2 -> true; +[] unlk=42 & numSteps0 -> (n3S10pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=42 & numSteps (unlk'=43)&(numSkips'=numSkips+1); +[n3S10f2] n3S10pc=-5 & n3S10os>0 & n3S10op0=2 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f1] n3S10pc=-5 & n3S10os>0 & n3S10op0=1 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[] numSteps (n3S10pc'=0)&(unlk'=43)&(numSteps'=numSteps+1); +[] unlk=12 & numSteps0 -> (n3S10pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[] n3S10pc=1 & (n3S10v7failing=2) -> (n3S10pc'=2); +[] n3S10pc=1 & !((n3S10v7failing=2)) -> (n3S10pc'=8); +[] n3S10pc=2 -> 0.999:(n3S10t0'=0)&(n3S10pc'=3) + 0.001:(n3S10t0'=1)&(n3S10pc'=3); +[] n3S10pc=3 & (n3S10t0=1) -> (n3S10pc'=4); +[] n3S10pc=3 & !((n3S10t0=1)) -> (n3S10pc'=6); +[] n3S10pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S10v7failing'=1)&(n3S10pc'=5); +[] n3S10pc=5 -> (n3S10pc'=7); +[] n3S10pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S10v7failing'=0)&(n3S10pc'=7); +[] n3S10pc=7 -> (n3S10pc'=8); +[] n3S10pc=8 & (n3S10v7failing=1) -> (n3S10pc'=9); +[] n3S10pc=8 & !((n3S10v7failing=1)) -> (n3S10pc'=11); +[] n3S10pc=9 -> (n3S10pc'=-3)&(n3S10ra'=10); +[] n3S10pc=10 -> (n3S10pc'=12); +[] n3S10pc=11 -> (n3S10opt'=2)&(n3S10pc'=-4)&(n3S10ra'=12); +[] numSteps (n3S10pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +endmodule +module n3S12 +n3S12t0:[0..1]; +n3S12ip0:[1..3] init 1; +n3S12ip1:[1..3] init 1; +n3S12is:[0..2] init 0; +n3S12op0:[1..3] init 1; +n3S12op1:[1..3] init 1; +n3S12os:[0..2] init 0; +n3S12opt:[1..3] init 1; +n3S12pc:[-6..6] init 0; n3S12ra:[-6..6] init 0; +[] n3S12is<2 & n3S12pc=-1 -> (n3S12ip0'=1)&(n3S12ip1'=n3S12ip0)&(n3S12is'=n3S12is+1)&(n3S12pc'=n3S12ra); +[] n3S12is=2 & n3S12pc=-1 -> (n3S12pc'=n3S12ra); +[] n3S12is=0 & n3S12pc=-2 -> (n3S12pc'=n3S12ra); +[] n3S12is>0 & n3S12is<2 & n3S12pc=-2 -> (n3S12ip1'=n3S12ip0)&(n3S12is'=n3S12is+1)&(n3S12pc'=n3S12ra); +[] n3S12is=2 & n3S12pc=-2 -> (n3S12pc'=n3S12ra); +[] n3S12is=0 & n3S12pc=-3 -> (n3S12pc'=n3S12ra); +[] n3S12is>0 & n3S12pc=-3 -> (n3S12ip0'=n3S12ip1)&(n3S12is'=n3S12is-1)&(n3S12pc'=n3S12ra); +[] n3S12os=0 & n3S12pc=-4 -> (n3S12op0'=n3S12opt)&(n3S12os'=1)&(n3S12pc'=-3); +[] n3S12os=1 & n3S12pc=-4 -> (n3S12op1'=n3S12opt)&(n3S12os'=2)&(n3S12pc'=-3); +[] n3S12os=2 & n3S12pc=-4 -> (n3S12pc'=-3); +[n3S14f1] n3S12is=0 -> (n3S12ip0'=3)&(n3S12is'=1); +[n3S14f1] n3S12is=1 -> (n3S12ip1'=3)&(n3S12is'=2); +[n3S14f1] n3S12is=2 -> true; +[n3S13f1] n3S12is=0 -> (n3S12ip0'=2)&(n3S12is'=1); +[n3S13f1] n3S12is=1 -> (n3S12ip1'=2)&(n3S12is'=2); +[n3S13f1] n3S12is=2 -> true; +[n3S11f3] n3S12is=0 -> (n3S12ip0'=1)&(n3S12is'=1); +[n3S11f3] n3S12is=1 -> (n3S12ip1'=1)&(n3S12is'=2); +[n3S11f3] n3S12is=2 -> true; +[] unlk=44 & numSteps0 -> (n3S12pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=44 & numSteps (unlk'=45)&(numSkips'=numSkips+1); +[n3S12f3] n3S12pc=-5 & n3S12os>0 & n3S12op0=3 -> (n3S12op0'=n3S12op1)&(n3S12os'=n3S12os-1)&(n3S12pc'=-6); +[n3S12f2] n3S12pc=-5 & n3S12os>0 & n3S12op0=2 -> (n3S12op0'=n3S12op1)&(n3S12os'=n3S12os-1)&(n3S12pc'=-6); +[n3S12f1] n3S12pc=-5 & n3S12os>0 & n3S12op0=1 -> (n3S12op0'=n3S12op1)&(n3S12os'=n3S12os-1)&(n3S12pc'=-6); +[] numSteps (n3S12pc'=0)&(unlk'=45)&(numSteps'=numSteps+1); +[] unlk=14 & numSteps0 -> (n3S12pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[] n3S12pc=1 -> 0.5:(n3S12t0'=0)&(n3S12pc'=2) + 0.5:(n3S12t0'=1)&(n3S12pc'=2); +[] n3S12pc=2 & (n3S12t0=1) -> (n3S12pc'=3); +[] n3S12pc=2 & !((n3S12t0=1)) -> (n3S12pc'=5); +[] n3S12pc=3 -> (n3S12opt'=2)&(n3S12pc'=-4)&(n3S12ra'=4); +[] n3S12pc=4 -> (n3S12pc'=6); +[] n3S12pc=5 -> (n3S12opt'=3)&(n3S12pc'=-4)&(n3S12ra'=6); +[] numSteps (n3S12pc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +endmodule +module n3S21 +n3S21ip0:[1..2] init 1; +n3S21ip1:[1..2] init 1; +n3S21is:[0..2] init 0; +n3S21op0:[1..2] init 1; +n3S21op1:[1..2] init 1; +n3S21os:[0..2] init 0; +n3S21opt:[1..2] init 1; +n3S21pc:[-6..2] init 0; n3S21ra:[-6..2] init 0; +[] n3S21is<2 & n3S21pc=-1 -> (n3S21ip0'=1)&(n3S21ip1'=n3S21ip0)&(n3S21is'=n3S21is+1)&(n3S21pc'=n3S21ra); +[] n3S21is=2 & n3S21pc=-1 -> (n3S21pc'=n3S21ra); +[] n3S21is=0 & n3S21pc=-2 -> (n3S21pc'=n3S21ra); +[] n3S21is>0 & n3S21is<2 & n3S21pc=-2 -> (n3S21ip1'=n3S21ip0)&(n3S21is'=n3S21is+1)&(n3S21pc'=n3S21ra); +[] n3S21is=2 & n3S21pc=-2 -> (n3S21pc'=n3S21ra); +[] n3S21is=0 & n3S21pc=-3 -> (n3S21pc'=n3S21ra); +[] n3S21is>0 & n3S21pc=-3 -> (n3S21ip0'=n3S21ip1)&(n3S21is'=n3S21is-1)&(n3S21pc'=n3S21ra); +[] n3S21os=0 & n3S21pc=-4 -> (n3S21op0'=n3S21opt)&(n3S21os'=1)&(n3S21pc'=-3); +[] n3S21os=1 & n3S21pc=-4 -> (n3S21op1'=n3S21opt)&(n3S21os'=2)&(n3S21pc'=-3); +[] n3S21os=2 & n3S21pc=-4 -> (n3S21pc'=-3); +[n3S23f1] n3S21is=0 -> (n3S21ip0'=2)&(n3S21is'=1); +[n3S23f1] n3S21is=1 -> (n3S21ip1'=2)&(n3S21is'=2); +[n3S23f1] n3S21is=2 -> true; +[n3S20f2] n3S21is=0 -> (n3S21ip0'=1)&(n3S21is'=1); +[n3S20f2] n3S21is=1 -> (n3S21ip1'=1)&(n3S21is'=2); +[n3S20f2] n3S21is=2 -> true; +[] unlk=53 & numSteps0 -> (n3S21pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=53 & numSteps (unlk'=54)&(numSkips'=numSkips+1); +[n3S21f2] n3S21pc=-5 & n3S21os>0 & n3S21op0=2 -> (n3S21op0'=n3S21op1)&(n3S21os'=n3S21os-1)&(n3S21pc'=-6); +[n3S21f1] n3S21pc=-5 & n3S21os>0 & n3S21op0=1 -> (n3S21op0'=n3S21op1)&(n3S21os'=n3S21os-1)&(n3S21pc'=-6); +[] numSteps (n3S21pc'=0)&(unlk'=54)&(numSteps'=numSteps+1); +[] unlk=23 & numSteps0 -> (n3S21pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=23 & numSteps (unlk'=24)&(numSkips'=numSkips+1); +[] n3S21pc=1 -> (n3S21opt'=2)&(n3S21pc'=-4)&(n3S21ra'=2); +[] numSteps (n3S21pc'=0)&(unlk'=24)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=33 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=33 & numSteps (unlk'=34)&(numSkips'=numSkips+1); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=34)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[] unlk=35 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=35 & numSteps (unlk'=36)&(numSkips'=numSkips+1); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=36)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2v7failing:[INTMIN..INTMAX] init 2; +n2S2t0:[0..1]; +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..12] init 0; n2S2ra:[-6..12] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk=34 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=34 & numSteps (unlk'=35)&(numSkips'=numSkips+1); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=35)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 & (n2S2v7failing=2) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2v7failing=2)) -> (n2S2pc'=8); +[] n2S2pc=2 -> 0.999:(n2S2t0'=0)&(n2S2pc'=3) + 0.001:(n2S2t0'=1)&(n2S2pc'=3); +[] n2S2pc=3 & (n2S2t0=1) -> (n2S2pc'=4); +[] n2S2pc=3 & !((n2S2t0=1)) -> (n2S2pc'=6); +[] n2S2pc=4 & 1>=INTMIN & 1<=INTMAX -> (n2S2v7failing'=1)&(n2S2pc'=5); +[] n2S2pc=5 -> (n2S2pc'=7); +[] n2S2pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S2v7failing'=0)&(n2S2pc'=7); +[] n2S2pc=7 -> (n2S2pc'=8); +[] n2S2pc=8 & (n2S2v7failing=1) -> (n2S2pc'=9); +[] n2S2pc=8 & !((n2S2v7failing=1)) -> (n2S2pc'=11); +[] n2S2pc=9 -> (n2S2pc'=-3)&(n2S2ra'=10); +[] n2S2pc=10 -> (n2S2pc'=12); +[] n2S2pc=11 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=12); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n3S20 +n3S20t0:[0..1]; +n3S20ip0:[1..3] init 1; +n3S20ip1:[1..3] init 1; +n3S20is:[0..2] init 0; +n3S20op0:[1..3] init 1; +n3S20op1:[1..3] init 1; +n3S20os:[0..2] init 0; +n3S20opt:[1..3] init 1; +n3S20pc:[-6..6] init 0; n3S20ra:[-6..6] init 0; +[] n3S20is<2 & n3S20pc=-1 -> (n3S20ip0'=1)&(n3S20ip1'=n3S20ip0)&(n3S20is'=n3S20is+1)&(n3S20pc'=n3S20ra); +[] n3S20is=2 & n3S20pc=-1 -> (n3S20pc'=n3S20ra); +[] n3S20is=0 & n3S20pc=-2 -> (n3S20pc'=n3S20ra); +[] n3S20is>0 & n3S20is<2 & n3S20pc=-2 -> (n3S20ip1'=n3S20ip0)&(n3S20is'=n3S20is+1)&(n3S20pc'=n3S20ra); +[] n3S20is=2 & n3S20pc=-2 -> (n3S20pc'=n3S20ra); +[] n3S20is=0 & n3S20pc=-3 -> (n3S20pc'=n3S20ra); +[] n3S20is>0 & n3S20pc=-3 -> (n3S20ip0'=n3S20ip1)&(n3S20is'=n3S20is-1)&(n3S20pc'=n3S20ra); +[] n3S20os=0 & n3S20pc=-4 -> (n3S20op0'=n3S20opt)&(n3S20os'=1)&(n3S20pc'=-3); +[] n3S20os=1 & n3S20pc=-4 -> (n3S20op1'=n3S20opt)&(n3S20os'=2)&(n3S20pc'=-3); +[] n3S20os=2 & n3S20pc=-4 -> (n3S20pc'=-3); +[n3S22f1] n3S20is=0 -> (n3S20ip0'=3)&(n3S20is'=1); +[n3S22f1] n3S20is=1 -> (n3S20ip1'=3)&(n3S20is'=2); +[n3S22f1] n3S20is=2 -> true; +[n3S21f1] n3S20is=0 -> (n3S20ip0'=2)&(n3S20is'=1); +[n3S21f1] n3S20is=1 -> (n3S20ip1'=2)&(n3S20is'=2); +[n3S21f1] n3S20is=2 -> true; +[n3S19f3] n3S20is=0 -> (n3S20ip0'=1)&(n3S20is'=1); +[n3S19f3] n3S20is=1 -> (n3S20ip1'=1)&(n3S20is'=2); +[n3S19f3] n3S20is=2 -> true; +[] unlk=52 & numSteps0 -> (n3S20pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=52 & numSteps (unlk'=53)&(numSkips'=numSkips+1); +[n3S20f3] n3S20pc=-5 & n3S20os>0 & n3S20op0=3 -> (n3S20op0'=n3S20op1)&(n3S20os'=n3S20os-1)&(n3S20pc'=-6); +[n3S20f2] n3S20pc=-5 & n3S20os>0 & n3S20op0=2 -> (n3S20op0'=n3S20op1)&(n3S20os'=n3S20os-1)&(n3S20pc'=-6); +[n3S20f1] n3S20pc=-5 & n3S20os>0 & n3S20op0=1 -> (n3S20op0'=n3S20op1)&(n3S20os'=n3S20os-1)&(n3S20pc'=-6); +[] numSteps (n3S20pc'=0)&(unlk'=53)&(numSteps'=numSteps+1); +[] unlk=22 & numSteps0 -> (n3S20pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=22 & numSteps (unlk'=23)&(numSkips'=numSkips+1); +[] n3S20pc=1 -> 0.5:(n3S20t0'=0)&(n3S20pc'=2) + 0.5:(n3S20t0'=1)&(n3S20pc'=2); +[] n3S20pc=2 & (n3S20t0=1) -> (n3S20pc'=3); +[] n3S20pc=2 & !((n3S20t0=1)) -> (n3S20pc'=5); +[] n3S20pc=3 -> (n3S20opt'=2)&(n3S20pc'=-4)&(n3S20ra'=4); +[] n3S20pc=4 -> (n3S20pc'=6); +[] n3S20pc=5 -> (n3S20opt'=3)&(n3S20pc'=-4)&(n3S20ra'=6); +[] numSteps (n3S20pc'=0)&(unlk'=23)&(numSteps'=numSteps+1); +endmodule +module n3S18 +n3S18v7failing:[INTMIN..INTMAX] init 2; +n3S18t0:[0..1]; +n3S18ip0:[1..2] init 1; +n3S18ip1:[1..2] init 1; +n3S18is:[0..2] init 0; +n3S18op0:[1..2] init 1; +n3S18op1:[1..2] init 1; +n3S18os:[0..2] init 0; +n3S18opt:[1..2] init 1; +n3S18pc:[-6..12] init 0; n3S18ra:[-6..12] init 0; +[] n3S18is<2 & n3S18pc=-1 -> (n3S18ip0'=1)&(n3S18ip1'=n3S18ip0)&(n3S18is'=n3S18is+1)&(n3S18pc'=n3S18ra); +[] n3S18is=2 & n3S18pc=-1 -> (n3S18pc'=n3S18ra); +[] n3S18is=0 & n3S18pc=-2 -> (n3S18pc'=n3S18ra); +[] n3S18is>0 & n3S18is<2 & n3S18pc=-2 -> (n3S18ip1'=n3S18ip0)&(n3S18is'=n3S18is+1)&(n3S18pc'=n3S18ra); +[] n3S18is=2 & n3S18pc=-2 -> (n3S18pc'=n3S18ra); +[] n3S18is=0 & n3S18pc=-3 -> (n3S18pc'=n3S18ra); +[] n3S18is>0 & n3S18pc=-3 -> (n3S18ip0'=n3S18ip1)&(n3S18is'=n3S18is-1)&(n3S18pc'=n3S18ra); +[] n3S18os=0 & n3S18pc=-4 -> (n3S18op0'=n3S18opt)&(n3S18os'=1)&(n3S18pc'=-3); +[] n3S18os=1 & n3S18pc=-4 -> (n3S18op1'=n3S18opt)&(n3S18os'=2)&(n3S18pc'=-3); +[] n3S18os=2 & n3S18pc=-4 -> (n3S18pc'=-3); +[n3S19f2] n3S18is=0 -> (n3S18ip0'=2)&(n3S18is'=1); +[n3S19f2] n3S18is=1 -> (n3S18ip1'=2)&(n3S18is'=2); +[n3S19f2] n3S18is=2 -> true; +[n3S16f3] n3S18is=0 -> (n3S18ip0'=1)&(n3S18is'=1); +[n3S16f3] n3S18is=1 -> (n3S18ip1'=1)&(n3S18is'=2); +[n3S16f3] n3S18is=2 -> true; +[] unlk=50 & numSteps0 -> (n3S18pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=50 & numSteps (unlk'=51)&(numSkips'=numSkips+1); +[n3S18f2] n3S18pc=-5 & n3S18os>0 & n3S18op0=2 -> (n3S18op0'=n3S18op1)&(n3S18os'=n3S18os-1)&(n3S18pc'=-6); +[n3S18f1] n3S18pc=-5 & n3S18os>0 & n3S18op0=1 -> (n3S18op0'=n3S18op1)&(n3S18os'=n3S18os-1)&(n3S18pc'=-6); +[] numSteps (n3S18pc'=0)&(unlk'=51)&(numSteps'=numSteps+1); +[] unlk=20 & numSteps0 -> (n3S18pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=20 & numSteps (unlk'=21)&(numSkips'=numSkips+1); +[] n3S18pc=1 & (n3S18v7failing=2) -> (n3S18pc'=2); +[] n3S18pc=1 & !((n3S18v7failing=2)) -> (n3S18pc'=8); +[] n3S18pc=2 -> 0.999:(n3S18t0'=0)&(n3S18pc'=3) + 0.001:(n3S18t0'=1)&(n3S18pc'=3); +[] n3S18pc=3 & (n3S18t0=1) -> (n3S18pc'=4); +[] n3S18pc=3 & !((n3S18t0=1)) -> (n3S18pc'=6); +[] n3S18pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S18v7failing'=1)&(n3S18pc'=5); +[] n3S18pc=5 -> (n3S18pc'=7); +[] n3S18pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S18v7failing'=0)&(n3S18pc'=7); +[] n3S18pc=7 -> (n3S18pc'=8); +[] n3S18pc=8 & (n3S18v7failing=1) -> (n3S18pc'=9); +[] n3S18pc=8 & !((n3S18v7failing=1)) -> (n3S18pc'=11); +[] n3S18pc=9 -> (n3S18pc'=-3)&(n3S18ra'=10); +[] n3S18pc=10 -> (n3S18pc'=12); +[] n3S18pc=11 -> (n3S18opt'=2)&(n3S18pc'=-4)&(n3S18ra'=12); +[] numSteps (n3S18pc'=0)&(unlk'=21)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S7f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S7f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S7f1] n2S5is=2 -> true; +[n2S4f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[] unlk=37 & numSteps0 -> (n2S5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=37 & numSteps (unlk'=38)&(numSkips'=numSkips+1); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=38)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2S5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..6] init 0; n2S0ra:[-6..6] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk=32 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=32 & numSteps (unlk'=33)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=33)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 & (n2S0t0=1) -> (n2S0pc'=3); +[] n2S0pc=2 & !((n2S0t0=1)) -> (n2S0pc'=5); +[] n2S0pc=3 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=4); +[] n2S0pc=4 -> (n2S0pc'=6); +[] n2S0pc=5 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=6); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9ip0:[1..2] init 1; +n2S9ip1:[1..2] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..2] init 1; +n2S9op1:[1..2] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..2] init 1; +n2S9pc:[-6..2] init 0; n2S9ra:[-6..2] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n3S11f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n3S11f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n3S11f1] n2S9is=2 -> true; +[n2S8f2] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S8f2] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S8f2] n2S9is=2 -> true; +[] unlk=41 & numSteps0 -> (n2S9pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=41 & numSteps (unlk'=42)&(numSkips'=numSkips+1); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=42)&(numSteps'=numSteps+1); +[] unlk=11 & numSteps0 -> (n2S9pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[] n2S9pc=1 -> (n2S9opt'=2)&(n2S9pc'=-4)&(n2S9ra'=2); +[] numSteps (n2S9pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +endmodule +module n3S27 +n3S27ip0:[1..3] init 1; +n3S27ip1:[1..3] init 1; +n3S27is:[0..2] init 0; +n3S27op0:[1..3] init 1; +n3S27op1:[1..3] init 1; +n3S27os:[0..2] init 0; +n3S27opt:[1..3] init 1; +n3S27pc:[-6..2] init 0; n3S27ra:[-6..2] init 0; +[] n3S27is<2 & n3S27pc=-1 -> (n3S27ip0'=1)&(n3S27ip1'=n3S27ip0)&(n3S27is'=n3S27is+1)&(n3S27pc'=n3S27ra); +[] n3S27is=2 & n3S27pc=-1 -> (n3S27pc'=n3S27ra); +[] n3S27is=0 & n3S27pc=-2 -> (n3S27pc'=n3S27ra); +[] n3S27is>0 & n3S27is<2 & n3S27pc=-2 -> (n3S27ip1'=n3S27ip0)&(n3S27is'=n3S27is+1)&(n3S27pc'=n3S27ra); +[] n3S27is=2 & n3S27pc=-2 -> (n3S27pc'=n3S27ra); +[] n3S27is=0 & n3S27pc=-3 -> (n3S27pc'=n3S27ra); +[] n3S27is>0 & n3S27pc=-3 -> (n3S27ip0'=n3S27ip1)&(n3S27is'=n3S27is-1)&(n3S27pc'=n3S27ra); +[] n3S27os=0 & n3S27pc=-4 -> (n3S27op0'=n3S27opt)&(n3S27os'=1)&(n3S27pc'=-3); +[] n3S27os=1 & n3S27pc=-4 -> (n3S27op1'=n3S27opt)&(n3S27os'=2)&(n3S27pc'=-3); +[] n3S27os=2 & n3S27pc=-4 -> (n3S27pc'=-3); +[n2H1f1] n3S27is=0 -> (n3S27ip0'=3)&(n3S27is'=1); +[n2H1f1] n3S27is=1 -> (n3S27ip1'=3)&(n3S27is'=2); +[n2H1f1] n3S27is=2 -> true; +[n3S26f2] n3S27is=0 -> (n3S27ip0'=2)&(n3S27is'=1); +[n3S26f2] n3S27is=1 -> (n3S27ip1'=2)&(n3S27is'=2); +[n3S26f2] n3S27is=2 -> true; +[n3S25f2] n3S27is=0 -> (n3S27ip0'=1)&(n3S27is'=1); +[n3S25f2] n3S27is=1 -> (n3S27ip1'=1)&(n3S27is'=2); +[n3S25f2] n3S27is=2 -> true; +[] unlk=59 & numSteps0 -> (n3S27pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=59 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n3S27f3] n3S27pc=-5 & n3S27os>0 & n3S27op0=3 -> (n3S27op0'=n3S27op1)&(n3S27os'=n3S27os-1)&(n3S27pc'=-6); +[n3S27f2] n3S27pc=-5 & n3S27os>0 & n3S27op0=2 -> (n3S27op0'=n3S27op1)&(n3S27os'=n3S27os-1)&(n3S27pc'=-6); +[n3S27f1] n3S27pc=-5 & n3S27os>0 & n3S27op0=1 -> (n3S27op0'=n3S27op1)&(n3S27os'=n3S27os-1)&(n3S27pc'=-6); +[] numSteps (n3S27pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=29 & numSteps0 -> (n3S27pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=29 & numSteps (unlk'=30)&(numSkips'=numSkips+1); +[] n3S27pc=1 -> (n3S27opt'=3)&(n3S27pc'=-4)&(n3S27ra'=2); +[] numSteps (n3S27pc'=0)&(unlk'=30)&(numSteps'=numSteps+1); +endmodule +module n3S14 +n3S14v7failing:[INTMIN..INTMAX] init 2; +n3S14t0:[0..1]; +n3S14ip0:[1..2] init 1; +n3S14ip1:[1..2] init 1; +n3S14is:[0..2] init 0; +n3S14op0:[1..2] init 1; +n3S14op1:[1..2] init 1; +n3S14os:[0..2] init 0; +n3S14opt:[1..2] init 1; +n3S14pc:[-6..12] init 0; n3S14ra:[-6..12] init 0; +[] n3S14is<2 & n3S14pc=-1 -> (n3S14ip0'=1)&(n3S14ip1'=n3S14ip0)&(n3S14is'=n3S14is+1)&(n3S14pc'=n3S14ra); +[] n3S14is=2 & n3S14pc=-1 -> (n3S14pc'=n3S14ra); +[] n3S14is=0 & n3S14pc=-2 -> (n3S14pc'=n3S14ra); +[] n3S14is>0 & n3S14is<2 & n3S14pc=-2 -> (n3S14ip1'=n3S14ip0)&(n3S14is'=n3S14is+1)&(n3S14pc'=n3S14ra); +[] n3S14is=2 & n3S14pc=-2 -> (n3S14pc'=n3S14ra); +[] n3S14is=0 & n3S14pc=-3 -> (n3S14pc'=n3S14ra); +[] n3S14is>0 & n3S14pc=-3 -> (n3S14ip0'=n3S14ip1)&(n3S14is'=n3S14is-1)&(n3S14pc'=n3S14ra); +[] n3S14os=0 & n3S14pc=-4 -> (n3S14op0'=n3S14opt)&(n3S14os'=1)&(n3S14pc'=-3); +[] n3S14os=1 & n3S14pc=-4 -> (n3S14op1'=n3S14opt)&(n3S14os'=2)&(n3S14pc'=-3); +[] n3S14os=2 & n3S14pc=-4 -> (n3S14pc'=-3); +[n3S15f2] n3S14is=0 -> (n3S14ip0'=2)&(n3S14is'=1); +[n3S15f2] n3S14is=1 -> (n3S14ip1'=2)&(n3S14is'=2); +[n3S15f2] n3S14is=2 -> true; +[n3S12f3] n3S14is=0 -> (n3S14ip0'=1)&(n3S14is'=1); +[n3S12f3] n3S14is=1 -> (n3S14ip1'=1)&(n3S14is'=2); +[n3S12f3] n3S14is=2 -> true; +[] unlk=46 & numSteps0 -> (n3S14pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=46 & numSteps (unlk'=47)&(numSkips'=numSkips+1); +[n3S14f2] n3S14pc=-5 & n3S14os>0 & n3S14op0=2 -> (n3S14op0'=n3S14op1)&(n3S14os'=n3S14os-1)&(n3S14pc'=-6); +[n3S14f1] n3S14pc=-5 & n3S14os>0 & n3S14op0=1 -> (n3S14op0'=n3S14op1)&(n3S14os'=n3S14os-1)&(n3S14pc'=-6); +[] numSteps (n3S14pc'=0)&(unlk'=47)&(numSteps'=numSteps+1); +[] unlk=16 & numSteps0 -> (n3S14pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[] n3S14pc=1 & (n3S14v7failing=2) -> (n3S14pc'=2); +[] n3S14pc=1 & !((n3S14v7failing=2)) -> (n3S14pc'=8); +[] n3S14pc=2 -> 0.999:(n3S14t0'=0)&(n3S14pc'=3) + 0.001:(n3S14t0'=1)&(n3S14pc'=3); +[] n3S14pc=3 & (n3S14t0=1) -> (n3S14pc'=4); +[] n3S14pc=3 & !((n3S14t0=1)) -> (n3S14pc'=6); +[] n3S14pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S14v7failing'=1)&(n3S14pc'=5); +[] n3S14pc=5 -> (n3S14pc'=7); +[] n3S14pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S14v7failing'=0)&(n3S14pc'=7); +[] n3S14pc=7 -> (n3S14pc'=8); +[] n3S14pc=8 & (n3S14v7failing=1) -> (n3S14pc'=9); +[] n3S14pc=8 & !((n3S14v7failing=1)) -> (n3S14pc'=11); +[] n3S14pc=9 -> (n3S14pc'=-3)&(n3S14ra'=10); +[] n3S14pc=10 -> (n3S14pc'=12); +[] n3S14pc=11 -> (n3S14opt'=2)&(n3S14pc'=-4)&(n3S14ra'=12); +[] numSteps (n3S14pc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +endmodule +module n3S25 +n3S25ip0:[1..2] init 1; +n3S25ip1:[1..2] init 1; +n3S25is:[0..2] init 0; +n3S25op0:[1..2] init 1; +n3S25op1:[1..2] init 1; +n3S25os:[0..2] init 0; +n3S25opt:[1..2] init 1; +n3S25pc:[-6..2] init 0; n3S25ra:[-6..2] init 0; +[] n3S25is<2 & n3S25pc=-1 -> (n3S25ip0'=1)&(n3S25ip1'=n3S25ip0)&(n3S25is'=n3S25is+1)&(n3S25pc'=n3S25ra); +[] n3S25is=2 & n3S25pc=-1 -> (n3S25pc'=n3S25ra); +[] n3S25is=0 & n3S25pc=-2 -> (n3S25pc'=n3S25ra); +[] n3S25is>0 & n3S25is<2 & n3S25pc=-2 -> (n3S25ip1'=n3S25ip0)&(n3S25is'=n3S25is+1)&(n3S25pc'=n3S25ra); +[] n3S25is=2 & n3S25pc=-2 -> (n3S25pc'=n3S25ra); +[] n3S25is=0 & n3S25pc=-3 -> (n3S25pc'=n3S25ra); +[] n3S25is>0 & n3S25pc=-3 -> (n3S25ip0'=n3S25ip1)&(n3S25is'=n3S25is-1)&(n3S25pc'=n3S25ra); +[] n3S25os=0 & n3S25pc=-4 -> (n3S25op0'=n3S25opt)&(n3S25os'=1)&(n3S25pc'=-3); +[] n3S25os=1 & n3S25pc=-4 -> (n3S25op1'=n3S25opt)&(n3S25os'=2)&(n3S25pc'=-3); +[] n3S25os=2 & n3S25pc=-4 -> (n3S25pc'=-3); +[n3S27f1] n3S25is=0 -> (n3S25ip0'=2)&(n3S25is'=1); +[n3S27f1] n3S25is=1 -> (n3S25ip1'=2)&(n3S25is'=2); +[n3S27f1] n3S25is=2 -> true; +[n3S24f2] n3S25is=0 -> (n3S25ip0'=1)&(n3S25is'=1); +[n3S24f2] n3S25is=1 -> (n3S25ip1'=1)&(n3S25is'=2); +[n3S24f2] n3S25is=2 -> true; +[] unlk=57 & numSteps0 -> (n3S25pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=57 & numSteps (unlk'=58)&(numSkips'=numSkips+1); +[n3S25f2] n3S25pc=-5 & n3S25os>0 & n3S25op0=2 -> (n3S25op0'=n3S25op1)&(n3S25os'=n3S25os-1)&(n3S25pc'=-6); +[n3S25f1] n3S25pc=-5 & n3S25os>0 & n3S25op0=1 -> (n3S25op0'=n3S25op1)&(n3S25os'=n3S25os-1)&(n3S25pc'=-6); +[] numSteps (n3S25pc'=0)&(unlk'=58)&(numSteps'=numSteps+1); +[] unlk=27 & numSteps0 -> (n3S25pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=27 & numSteps (unlk'=28)&(numSkips'=numSkips+1); +[] n3S25pc=1 -> (n3S25opt'=2)&(n3S25pc'=-4)&(n3S25ra'=2); +[] numSteps (n3S25pc'=0)&(unlk'=28)&(numSteps'=numSteps+1); +endmodule +module n3S23 +n3S23ip0:[1..3] init 1; +n3S23ip1:[1..3] init 1; +n3S23is:[0..2] init 0; +n3S23op0:[1..3] init 1; +n3S23op1:[1..3] init 1; +n3S23os:[0..2] init 0; +n3S23opt:[1..3] init 1; +n3S23pc:[-6..2] init 0; n3S23ra:[-6..2] init 0; +[] n3S23is<2 & n3S23pc=-1 -> (n3S23ip0'=1)&(n3S23ip1'=n3S23ip0)&(n3S23is'=n3S23is+1)&(n3S23pc'=n3S23ra); +[] n3S23is=2 & n3S23pc=-1 -> (n3S23pc'=n3S23ra); +[] n3S23is=0 & n3S23pc=-2 -> (n3S23pc'=n3S23ra); +[] n3S23is>0 & n3S23is<2 & n3S23pc=-2 -> (n3S23ip1'=n3S23ip0)&(n3S23is'=n3S23is+1)&(n3S23pc'=n3S23ra); +[] n3S23is=2 & n3S23pc=-2 -> (n3S23pc'=n3S23ra); +[] n3S23is=0 & n3S23pc=-3 -> (n3S23pc'=n3S23ra); +[] n3S23is>0 & n3S23pc=-3 -> (n3S23ip0'=n3S23ip1)&(n3S23is'=n3S23is-1)&(n3S23pc'=n3S23ra); +[] n3S23os=0 & n3S23pc=-4 -> (n3S23op0'=n3S23opt)&(n3S23os'=1)&(n3S23pc'=-3); +[] n3S23os=1 & n3S23pc=-4 -> (n3S23op1'=n3S23opt)&(n3S23os'=2)&(n3S23pc'=-3); +[] n3S23os=2 & n3S23pc=-4 -> (n3S23pc'=-3); +[n3S24f1] n3S23is=0 -> (n3S23ip0'=3)&(n3S23is'=1); +[n3S24f1] n3S23is=1 -> (n3S23ip1'=3)&(n3S23is'=2); +[n3S24f1] n3S23is=2 -> true; +[n3S22f2] n3S23is=0 -> (n3S23ip0'=2)&(n3S23is'=1); +[n3S22f2] n3S23is=1 -> (n3S23ip1'=2)&(n3S23is'=2); +[n3S22f2] n3S23is=2 -> true; +[n3S21f2] n3S23is=0 -> (n3S23ip0'=1)&(n3S23is'=1); +[n3S21f2] n3S23is=1 -> (n3S23ip1'=1)&(n3S23is'=2); +[n3S21f2] n3S23is=2 -> true; +[] unlk=55 & numSteps0 -> (n3S23pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=55 & numSteps (unlk'=56)&(numSkips'=numSkips+1); +[n3S23f3] n3S23pc=-5 & n3S23os>0 & n3S23op0=3 -> (n3S23op0'=n3S23op1)&(n3S23os'=n3S23os-1)&(n3S23pc'=-6); +[n3S23f2] n3S23pc=-5 & n3S23os>0 & n3S23op0=2 -> (n3S23op0'=n3S23op1)&(n3S23os'=n3S23os-1)&(n3S23pc'=-6); +[n3S23f1] n3S23pc=-5 & n3S23os>0 & n3S23op0=1 -> (n3S23op0'=n3S23op1)&(n3S23os'=n3S23os-1)&(n3S23pc'=-6); +[] numSteps (n3S23pc'=0)&(unlk'=56)&(numSteps'=numSteps+1); +[] unlk=25 & numSteps0 -> (n3S23pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=25 & numSteps (unlk'=26)&(numSkips'=numSkips+1); +[] n3S23pc=1 -> (n3S23opt'=3)&(n3S23pc'=-4)&(n3S23ra'=2); +[] numSteps (n3S23pc'=0)&(unlk'=26)&(numSteps'=numSteps+1); +endmodule +module n3S16 +n3S16t0:[0..1]; +n3S16ip0:[1..3] init 1; +n3S16ip1:[1..3] init 1; +n3S16is:[0..2] init 0; +n3S16op0:[1..3] init 1; +n3S16op1:[1..3] init 1; +n3S16os:[0..2] init 0; +n3S16opt:[1..3] init 1; +n3S16pc:[-6..6] init 0; n3S16ra:[-6..6] init 0; +[] n3S16is<2 & n3S16pc=-1 -> (n3S16ip0'=1)&(n3S16ip1'=n3S16ip0)&(n3S16is'=n3S16is+1)&(n3S16pc'=n3S16ra); +[] n3S16is=2 & n3S16pc=-1 -> (n3S16pc'=n3S16ra); +[] n3S16is=0 & n3S16pc=-2 -> (n3S16pc'=n3S16ra); +[] n3S16is>0 & n3S16is<2 & n3S16pc=-2 -> (n3S16ip1'=n3S16ip0)&(n3S16is'=n3S16is+1)&(n3S16pc'=n3S16ra); +[] n3S16is=2 & n3S16pc=-2 -> (n3S16pc'=n3S16ra); +[] n3S16is=0 & n3S16pc=-3 -> (n3S16pc'=n3S16ra); +[] n3S16is>0 & n3S16pc=-3 -> (n3S16ip0'=n3S16ip1)&(n3S16is'=n3S16is-1)&(n3S16pc'=n3S16ra); +[] n3S16os=0 & n3S16pc=-4 -> (n3S16op0'=n3S16opt)&(n3S16os'=1)&(n3S16pc'=-3); +[] n3S16os=1 & n3S16pc=-4 -> (n3S16op1'=n3S16opt)&(n3S16os'=2)&(n3S16pc'=-3); +[] n3S16os=2 & n3S16pc=-4 -> (n3S16pc'=-3); +[n3S18f1] n3S16is=0 -> (n3S16ip0'=3)&(n3S16is'=1); +[n3S18f1] n3S16is=1 -> (n3S16ip1'=3)&(n3S16is'=2); +[n3S18f1] n3S16is=2 -> true; +[n3S17f1] n3S16is=0 -> (n3S16ip0'=2)&(n3S16is'=1); +[n3S17f1] n3S16is=1 -> (n3S16ip1'=2)&(n3S16is'=2); +[n3S17f1] n3S16is=2 -> true; +[n3S15f3] n3S16is=0 -> (n3S16ip0'=1)&(n3S16is'=1); +[n3S15f3] n3S16is=1 -> (n3S16ip1'=1)&(n3S16is'=2); +[n3S15f3] n3S16is=2 -> true; +[] unlk=48 & numSteps0 -> (n3S16pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=48 & numSteps (unlk'=49)&(numSkips'=numSkips+1); +[n3S16f3] n3S16pc=-5 & n3S16os>0 & n3S16op0=3 -> (n3S16op0'=n3S16op1)&(n3S16os'=n3S16os-1)&(n3S16pc'=-6); +[n3S16f2] n3S16pc=-5 & n3S16os>0 & n3S16op0=2 -> (n3S16op0'=n3S16op1)&(n3S16os'=n3S16os-1)&(n3S16pc'=-6); +[n3S16f1] n3S16pc=-5 & n3S16os>0 & n3S16op0=1 -> (n3S16op0'=n3S16op1)&(n3S16os'=n3S16os-1)&(n3S16pc'=-6); +[] numSteps (n3S16pc'=0)&(unlk'=49)&(numSteps'=numSteps+1); +[] unlk=18 & numSteps0 -> (n3S16pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=18 & numSteps (unlk'=19)&(numSkips'=numSkips+1); +[] n3S16pc=1 -> 0.5:(n3S16t0'=0)&(n3S16pc'=2) + 0.5:(n3S16t0'=1)&(n3S16pc'=2); +[] n3S16pc=2 & (n3S16t0=1) -> (n3S16pc'=3); +[] n3S16pc=2 & !((n3S16t0=1)) -> (n3S16pc'=5); +[] n3S16pc=3 -> (n3S16opt'=2)&(n3S16pc'=-4)&(n3S16ra'=4); +[] n3S16pc=4 -> (n3S16pc'=6); +[] n3S16pc=5 -> (n3S16opt'=3)&(n3S16pc'=-4)&(n3S16ra'=6); +[] numSteps (n3S16pc'=0)&(unlk'=19)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..3] init 1; +n2S7ip1:[1..3] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..3] init 1; +n2S7op1:[1..3] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..3] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S8f1] n2S7is=0 -> (n2S7ip0'=3)&(n2S7is'=1); +[n2S8f1] n2S7is=1 -> (n2S7ip1'=3)&(n2S7is'=2); +[n2S8f1] n2S7is=2 -> true; +[n2S6f2] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S6f2] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S6f2] n2S7is=2 -> true; +[n2S5f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S5f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S5f2] n2S7is=2 -> true; +[] unlk=39 & numSteps0 -> (n2S7pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=39 & numSteps (unlk'=40)&(numSkips'=numSkips+1); +[n2S7f3] n2S7pc=-5 & n2S7os>0 & n2S7op0=3 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=40)&(numSteps'=numSteps+1); +[] unlk=9 & numSteps0 -> (n2S7pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[] n2S7pc=1 -> (n2S7opt'=3)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 & n3S10is=0 & n3S10os=0 & n3S11is=0 & n3S11os=0 & n3S12is=0 & n3S12os=0 & n3S13is=0 & n3S13os=0 & n3S14is=0 & n3S14os=0 & n3S15is=0 & n3S15os=0 & n3S16is=0 & n3S16os=0 & n3S17is=0 & n3S17os=0 & n3S18is=0 & n3S18os=0 & n3S19is=0 & n3S19os=0 & n3S20is=0 & n3S20os=0 & n3S21is=0 & n3S21os=0 & n3S22is=0 & n3S22os=0 & n3S23is=0 & n3S23os=0 & n3S24is=0 & n3S24os=0 & n3S25is=0 & n3S25os=0 & n3S26is=0 & n3S26os=0 & n3S27is=0 & n3S27os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/keyur/reliability-30d.psi b/keyur/reliability-30d.psi new file mode 100644 index 0000000..9c3a593 --- /dev/null +++ b/keyur/reliability-30d.psi @@ -0,0 +1,561 @@ +num_steps := 50; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 30, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9, S8 := 10, S9 := 11, S10 := 12, S11 := 13, S12 := 14, S13 := 15, S14 := 16, S15 := 17, S16 := 18, S17 := 19, S18 := 20, S19 := 21, S20 := 22, S21 := 23, S22 := 24, S23 := 25, S24 := 26, S25 := 27, S26 := 28, S27 := 29; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + arrived: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + arrived = 0; + } + def __run(){ + arrived = 1; + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (flip((1/2))==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + failing: ℝ; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + failing = 2; + } + def __run(){ + if (failing==2){ + if (flip((1/1000))==1){ + failing = 1; + } else { + failing = 0; + } + } + if (failing==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __s3_ty{ + Q_in: Queue, Q_out: Queue; + def __s3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s3_ty, __S4 : __s0_ty, __S5 : __s1_ty, __S6 : __s2_ty, __S7 : __s3_ty, __S8 : __s0_ty, __S9 : __s1_ty, __S10 : __s2_ty, __S11 : __s3_ty, __S12 : __s0_ty, __S13 : __s1_ty, __S14 : __s2_ty, __S15 : __s3_ty, __S16 : __s0_ty, __S17 : __s1_ty, __S18 : __s2_ty, __S19 : __s3_ty, __S20 : __s0_ty, __S21 : __s1_ty, __S22 : __s2_ty, __S23 : __s3_ty, __S24 : __s0_ty, __S25 : __s1_ty, __S26 : __s2_ty, __S27 : __s3_ty; + next: ℝ; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s3_ty(), __S4 = __s0_ty(), __S5 = __s1_ty(), __S6 = __s2_ty(), __S7 = __s3_ty(), __S8 = __s0_ty(), __S9 = __s1_ty(), __S10 = __s2_ty(), __S11 = __s3_ty(), __S12 = __s0_ty(), __S13 = __s1_ty(), __S14 = __s2_ty(), __S15 = __s3_ty(), __S16 = __s0_ty(), __S17 = __s1_ty(), __S18 = __s2_ty(), __S19 = __s3_ty(), __S20 = __s0_ty(), __S21 = __s1_ty(), __S22 = __s2_ty(), __S23 = __s3_ty(), __S24 = __s0_ty(), __S25 = __s1_ty(), __S26 = __s2_ty(), __S27 = __s3_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else if current == 5 { __S3.Q_in } else if current == 6 { __S4.Q_in } else if current == 7 { __S5.Q_in } else if current == 8 { __S6.Q_in } else if current == 9 { __S7.Q_in } else if current == 10 { __S8.Q_in } else if current == 11 { __S9.Q_in } else if current == 12 { __S10.Q_in } else if current == 13 { __S11.Q_in } else if current == 14 { __S12.Q_in } else if current == 15 { __S13.Q_in } else if current == 16 { __S14.Q_in } else if current == 17 { __S15.Q_in } else if current == 18 { __S16.Q_in } else if current == 19 { __S17.Q_in } else if current == 20 { __S18.Q_in } else if current == 21 { __S19.Q_in } else if current == 22 { __S20.Q_in } else if current == 23 { __S21.Q_in } else if current == 24 { __S22.Q_in } else if current == 25 { __S23.Q_in } else if current == 26 { __S24.Q_in } else if current == 27 { __S25.Q_in } else if current == 28 { __S26.Q_in } else { __S27.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else if (current - k) == 5 { __S3.Q_out } else if (current - k) == 6 { __S4.Q_out } else if (current - k) == 7 { __S5.Q_out } else if (current - k) == 8 { __S6.Q_out } else if (current - k) == 9 { __S7.Q_out } else if (current - k) == 10 { __S8.Q_out } else if (current - k) == 11 { __S9.Q_out } else if (current - k) == 12 { __S10.Q_out } else if (current - k) == 13 { __S11.Q_out } else if (current - k) == 14 { __S12.Q_out } else if (current - k) == 15 { __S13.Q_out } else if (current - k) == 16 { __S14.Q_out } else if (current - k) == 17 { __S15.Q_out } else if (current - k) == 18 { __S16.Q_out } else if (current - k) == 19 { __S17.Q_out } else if (current - k) == 20 { __S18.Q_out } else if (current - k) == 21 { __S19.Q_out } else if (current - k) == 22 { __S20.Q_out } else if (current - k) == 23 { __S21.Q_out } else if (current - k) == 24 { __S22.Q_out } else if (current - k) == 25 { __S23.Q_out } else if (current - k) == 26 { __S24.Q_out } else if (current - k) == 27 { __S25.Q_out } else if (current - k) == 28 { __S26.Q_out } else { __S27.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() || __S8.Q_in.size() || __S8.Q_out.size() || __S9.Q_in.size() || __S9.Q_out.size() || __S10.Q_in.size() || __S10.Q_out.size() || __S11.Q_in.size() || __S11.Q_out.size() || __S12.Q_in.size() || __S12.Q_out.size() || __S13.Q_in.size() || __S13.Q_out.size() || __S14.Q_in.size() || __S14.Q_out.size() || __S15.Q_in.size() || __S15.Q_out.size() || __S16.Q_in.size() || __S16.Q_out.size() || __S17.Q_in.size() || __S17.Q_out.size() || __S18.Q_in.size() || __S18.Q_out.size() || __S19.Q_in.size() || __S19.Q_out.size() || __S20.Q_in.size() || __S20.Q_out.size() || __S21.Q_in.size() || __S21.Q_out.size() || __S22.Q_in.size() || __S22.Q_out.size() || __S23.Q_in.size() || __S23.Q_out.size() || __S24.Q_in.size() || __S24.Q_out.size() || __S25.Q_in.size() || __S25.Q_out.size() || __S26.Q_in.size() || __S26.Q_out.size() || __S27.Q_in.size() || __S27.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S27.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 2)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S8.Q_in.pushBack((pkt, 1)); + } + } + if node == 10 && __S8.Q_out.size() { + (pkt,port) := __S8.Q_out.takeFront(); + if port == 1 { + __S7.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S10.Q_in.pushBack((pkt, 1)); + } + } + if node == 11 && __S9.Q_out.size() { + (pkt,port) := __S9.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S11.Q_in.pushBack((pkt, 1)); + } + } + if node == 12 && __S10.Q_out.size() { + (pkt,port) := __S10.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S11.Q_in.pushBack((pkt, 2)); + } + } + if node == 13 && __S11.Q_out.size() { + (pkt,port) := __S11.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S10.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S12.Q_in.pushBack((pkt, 1)); + } + } + if node == 14 && __S12.Q_out.size() { + (pkt,port) := __S12.Q_out.takeFront(); + if port == 1 { + __S11.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S13.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S14.Q_in.pushBack((pkt, 1)); + } + } + if node == 15 && __S13.Q_out.size() { + (pkt,port) := __S13.Q_out.takeFront(); + if port == 1 { + __S12.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S15.Q_in.pushBack((pkt, 1)); + } + } + if node == 16 && __S14.Q_out.size() { + (pkt,port) := __S14.Q_out.takeFront(); + if port == 1 { + __S12.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S15.Q_in.pushBack((pkt, 2)); + } + } + if node == 17 && __S15.Q_out.size() { + (pkt,port) := __S15.Q_out.takeFront(); + if port == 1 { + __S13.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S14.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S16.Q_in.pushBack((pkt, 1)); + } + } + if node == 18 && __S16.Q_out.size() { + (pkt,port) := __S16.Q_out.takeFront(); + if port == 1 { + __S15.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S17.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S18.Q_in.pushBack((pkt, 1)); + } + } + if node == 19 && __S17.Q_out.size() { + (pkt,port) := __S17.Q_out.takeFront(); + if port == 1 { + __S16.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S19.Q_in.pushBack((pkt, 1)); + } + } + if node == 20 && __S18.Q_out.size() { + (pkt,port) := __S18.Q_out.takeFront(); + if port == 1 { + __S16.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S19.Q_in.pushBack((pkt, 2)); + } + } + if node == 21 && __S19.Q_out.size() { + (pkt,port) := __S19.Q_out.takeFront(); + if port == 1 { + __S17.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S18.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S20.Q_in.pushBack((pkt, 1)); + } + } + if node == 22 && __S20.Q_out.size() { + (pkt,port) := __S20.Q_out.takeFront(); + if port == 1 { + __S19.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S21.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S22.Q_in.pushBack((pkt, 1)); + } + } + if node == 23 && __S21.Q_out.size() { + (pkt,port) := __S21.Q_out.takeFront(); + if port == 1 { + __S20.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S23.Q_in.pushBack((pkt, 1)); + } + } + if node == 24 && __S22.Q_out.size() { + (pkt,port) := __S22.Q_out.takeFront(); + if port == 1 { + __S20.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S23.Q_in.pushBack((pkt, 2)); + } + } + if node == 25 && __S23.Q_out.size() { + (pkt,port) := __S23.Q_out.takeFront(); + if port == 1 { + __S21.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S22.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __S24.Q_in.pushBack((pkt, 1)); + } + } + if node == 26 && __S24.Q_out.size() { + (pkt,port) := __S24.Q_out.takeFront(); + if port == 1 { + __S23.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S25.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S26.Q_in.pushBack((pkt, 1)); + } + } + if node == 27 && __S25.Q_out.size() { + (pkt,port) := __S25.Q_out.takeFront(); + if port == 1 { + __S24.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S27.Q_in.pushBack((pkt, 1)); + } + } + if node == 28 && __S26.Q_out.size() { + (pkt,port) := __S26.Q_out.takeFront(); + if port == 1 { + __S24.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S27.Q_in.pushBack((pkt, 2)); + } + } + if node == 29 && __S27.Q_out.size() { + (pkt,port) := __S27.Q_out.takeFront(); + if port == 1 { + __S25.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S26.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + if node == 10 && __S8.Q_in.size() { + __S8.__run(); + } + if node == 11 && __S9.Q_in.size() { + __S9.__run(); + } + if node == 12 && __S10.Q_in.size() { + __S10.__run(); + } + if node == 13 && __S11.Q_in.size() { + __S11.__run(); + } + if node == 14 && __S12.Q_in.size() { + __S12.__run(); + } + if node == 15 && __S13.Q_in.size() { + __S13.__run(); + } + if node == 16 && __S14.Q_in.size() { + __S14.__run(); + } + if node == 17 && __S15.Q_in.size() { + __S15.__run(); + } + if node == 18 && __S16.Q_in.size() { + __S16.__run(); + } + if node == 19 && __S17.Q_in.size() { + __S17.__run(); + } + if node == 20 && __S18.Q_in.size() { + __S18.__run(); + } + if node == 21 && __S19.Q_in.size() { + __S19.__run(); + } + if node == 22 && __S20.Q_in.size() { + __S20.__run(); + } + if node == 23 && __S21.Q_in.size() { + __S21.__run(); + } + if node == 24 && __S22.Q_in.size() { + __S22.__run(); + } + if node == 25 && __S23.Q_in.size() { + __S23.__run(); + } + if node == 26 && __S24.Q_in.size() { + __S24.__run(); + } + if node == 27 && __S25.Q_in.size() { + __S25.__run(); + } + if node == 28 && __S26.Q_in.size() { + __S26.__run(); + } + if node == 29 && __S27.Q_in.size() { + __S27.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size() || __d.__S8.Q_in.size() || __d.__S8.Q_out.size() || __d.__S9.Q_in.size() || __d.__S9.Q_out.size() || __d.__S10.Q_in.size() || __d.__S10.Q_out.size() || __d.__S11.Q_in.size() || __d.__S11.Q_out.size() || __d.__S12.Q_in.size() || __d.__S12.Q_out.size() || __d.__S13.Q_in.size() || __d.__S13.Q_out.size() || __d.__S14.Q_in.size() || __d.__S14.Q_out.size() || __d.__S15.Q_in.size() || __d.__S15.Q_out.size() || __d.__S16.Q_in.size() || __d.__S16.Q_out.size() || __d.__S17.Q_in.size() || __d.__S17.Q_out.size() || __d.__S18.Q_in.size() || __d.__S18.Q_out.size() || __d.__S19.Q_in.size() || __d.__S19.Q_out.size() || __d.__S20.Q_in.size() || __d.__S20.Q_out.size() || __d.__S21.Q_in.size() || __d.__S21.Q_out.size() || __d.__S22.Q_in.size() || __d.__S22.Q_out.size() || __d.__S23.Q_in.size() || __d.__S23.Q_out.size() || __d.__S24.Q_in.size() || __d.__S24.Q_out.size() || __d.__S25.Q_in.size() || __d.__S25.Q_out.size() || __d.__S26.Q_in.size() || __d.__S26.Q_out.size() || __d.__S27.Q_in.size() || __d.__S27.Q_out.size())); + q₁ := Expectation(((if H1 == 1 { __d.__H1.arrived } else { assert(0) }) == 1) !=0); + return (q₁); +} + diff --git a/keyur/reliability-30n.prism b/keyur/reliability-30n.prism new file mode 100644 index 0000000..8a18290 --- /dev/null +++ b/keyur/reliability-30n.prism @@ -0,0 +1,1202 @@ +mdp +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +module n2H0 +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..2] init 0; n2H0ra:[-6..2] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=2); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S24 +n3S24t0:[0..1]; +n3S24ip0:[1..3] init 1; +n3S24ip1:[1..3] init 1; +n3S24is:[0..2] init 0; +n3S24op0:[1..3] init 1; +n3S24op1:[1..3] init 1; +n3S24os:[0..2] init 0; +n3S24opt:[1..3] init 1; +n3S24pc:[-6..6] init 0; n3S24ra:[-6..6] init 0; +[] n3S24is<2 & n3S24pc=-1 -> (n3S24ip0'=1)&(n3S24ip1'=n3S24ip0)&(n3S24is'=n3S24is+1)&(n3S24pc'=n3S24ra); +[] n3S24is=2 & n3S24pc=-1 -> (n3S24pc'=n3S24ra); +[] n3S24is=0 & n3S24pc=-2 -> (n3S24pc'=n3S24ra); +[] n3S24is>0 & n3S24is<2 & n3S24pc=-2 -> (n3S24ip1'=n3S24ip0)&(n3S24is'=n3S24is+1)&(n3S24pc'=n3S24ra); +[] n3S24is=2 & n3S24pc=-2 -> (n3S24pc'=n3S24ra); +[] n3S24is=0 & n3S24pc=-3 -> (n3S24pc'=n3S24ra); +[] n3S24is>0 & n3S24pc=-3 -> (n3S24ip0'=n3S24ip1)&(n3S24is'=n3S24is-1)&(n3S24pc'=n3S24ra); +[] n3S24os=0 & n3S24pc=-4 -> (n3S24op0'=n3S24opt)&(n3S24os'=1)&(n3S24pc'=-3); +[] n3S24os=1 & n3S24pc=-4 -> (n3S24op1'=n3S24opt)&(n3S24os'=2)&(n3S24pc'=-3); +[] n3S24os=2 & n3S24pc=-4 -> (n3S24pc'=-3); +[n3S26f1] n3S24is=0 -> (n3S24ip0'=3)&(n3S24is'=1); +[n3S26f1] n3S24is=1 -> (n3S24ip1'=3)&(n3S24is'=2); +[n3S26f1] n3S24is=2 -> true; +[n3S25f1] n3S24is=0 -> (n3S24ip0'=2)&(n3S24is'=1); +[n3S25f1] n3S24is=1 -> (n3S24ip1'=2)&(n3S24is'=2); +[n3S25f1] n3S24is=2 -> true; +[n3S23f3] n3S24is=0 -> (n3S24ip0'=1)&(n3S24is'=1); +[n3S23f3] n3S24is=1 -> (n3S24ip1'=1)&(n3S24is'=2); +[n3S23f3] n3S24is=2 -> true; +[] unlk & numSteps0 -> (n3S24pc'=-5)&(unlk'=false); +[n3S24f3] n3S24pc=-5 & n3S24os>0 & n3S24op0=3 -> (n3S24op0'=n3S24op1)&(n3S24os'=n3S24os-1)&(n3S24pc'=-6); +[n3S24f2] n3S24pc=-5 & n3S24os>0 & n3S24op0=2 -> (n3S24op0'=n3S24op1)&(n3S24os'=n3S24os-1)&(n3S24pc'=-6); +[n3S24f1] n3S24pc=-5 & n3S24os>0 & n3S24op0=1 -> (n3S24op0'=n3S24op1)&(n3S24os'=n3S24os-1)&(n3S24pc'=-6); +[] numSteps (n3S24pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S24pc'=1)&(unlk'=false); +[] n3S24pc=1 -> 0.5:(n3S24t0'=0)&(n3S24pc'=2) + 0.5:(n3S24t0'=1)&(n3S24pc'=2); +[] n3S24pc=2 & (n3S24t0=1) -> (n3S24pc'=3); +[] n3S24pc=2 & !((n3S24t0=1)) -> (n3S24pc'=5); +[] n3S24pc=3 -> (n3S24opt'=2)&(n3S24pc'=-4)&(n3S24ra'=4); +[] n3S24pc=4 -> (n3S24pc'=6); +[] n3S24pc=5 -> (n3S24opt'=3)&(n3S24pc'=-4)&(n3S24ra'=6); +[] numSteps (n3S24pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S15 +n3S15ip0:[1..3] init 1; +n3S15ip1:[1..3] init 1; +n3S15is:[0..2] init 0; +n3S15op0:[1..3] init 1; +n3S15op1:[1..3] init 1; +n3S15os:[0..2] init 0; +n3S15opt:[1..3] init 1; +n3S15pc:[-6..2] init 0; n3S15ra:[-6..2] init 0; +[] n3S15is<2 & n3S15pc=-1 -> (n3S15ip0'=1)&(n3S15ip1'=n3S15ip0)&(n3S15is'=n3S15is+1)&(n3S15pc'=n3S15ra); +[] n3S15is=2 & n3S15pc=-1 -> (n3S15pc'=n3S15ra); +[] n3S15is=0 & n3S15pc=-2 -> (n3S15pc'=n3S15ra); +[] n3S15is>0 & n3S15is<2 & n3S15pc=-2 -> (n3S15ip1'=n3S15ip0)&(n3S15is'=n3S15is+1)&(n3S15pc'=n3S15ra); +[] n3S15is=2 & n3S15pc=-2 -> (n3S15pc'=n3S15ra); +[] n3S15is=0 & n3S15pc=-3 -> (n3S15pc'=n3S15ra); +[] n3S15is>0 & n3S15pc=-3 -> (n3S15ip0'=n3S15ip1)&(n3S15is'=n3S15is-1)&(n3S15pc'=n3S15ra); +[] n3S15os=0 & n3S15pc=-4 -> (n3S15op0'=n3S15opt)&(n3S15os'=1)&(n3S15pc'=-3); +[] n3S15os=1 & n3S15pc=-4 -> (n3S15op1'=n3S15opt)&(n3S15os'=2)&(n3S15pc'=-3); +[] n3S15os=2 & n3S15pc=-4 -> (n3S15pc'=-3); +[n3S16f1] n3S15is=0 -> (n3S15ip0'=3)&(n3S15is'=1); +[n3S16f1] n3S15is=1 -> (n3S15ip1'=3)&(n3S15is'=2); +[n3S16f1] n3S15is=2 -> true; +[n3S14f2] n3S15is=0 -> (n3S15ip0'=2)&(n3S15is'=1); +[n3S14f2] n3S15is=1 -> (n3S15ip1'=2)&(n3S15is'=2); +[n3S14f2] n3S15is=2 -> true; +[n3S13f2] n3S15is=0 -> (n3S15ip0'=1)&(n3S15is'=1); +[n3S13f2] n3S15is=1 -> (n3S15ip1'=1)&(n3S15is'=2); +[n3S13f2] n3S15is=2 -> true; +[] unlk & numSteps0 -> (n3S15pc'=-5)&(unlk'=false); +[n3S15f3] n3S15pc=-5 & n3S15os>0 & n3S15op0=3 -> (n3S15op0'=n3S15op1)&(n3S15os'=n3S15os-1)&(n3S15pc'=-6); +[n3S15f2] n3S15pc=-5 & n3S15os>0 & n3S15op0=2 -> (n3S15op0'=n3S15op1)&(n3S15os'=n3S15os-1)&(n3S15pc'=-6); +[n3S15f1] n3S15pc=-5 & n3S15os>0 & n3S15op0=1 -> (n3S15op0'=n3S15op1)&(n3S15os'=n3S15os-1)&(n3S15pc'=-6); +[] numSteps (n3S15pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S15pc'=1)&(unlk'=false); +[] n3S15pc=1 -> (n3S15opt'=3)&(n3S15pc'=-4)&(n3S15ra'=2); +[] numSteps (n3S15pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S13 +n3S13ip0:[1..2] init 1; +n3S13ip1:[1..2] init 1; +n3S13is:[0..2] init 0; +n3S13op0:[1..2] init 1; +n3S13op1:[1..2] init 1; +n3S13os:[0..2] init 0; +n3S13opt:[1..2] init 1; +n3S13pc:[-6..2] init 0; n3S13ra:[-6..2] init 0; +[] n3S13is<2 & n3S13pc=-1 -> (n3S13ip0'=1)&(n3S13ip1'=n3S13ip0)&(n3S13is'=n3S13is+1)&(n3S13pc'=n3S13ra); +[] n3S13is=2 & n3S13pc=-1 -> (n3S13pc'=n3S13ra); +[] n3S13is=0 & n3S13pc=-2 -> (n3S13pc'=n3S13ra); +[] n3S13is>0 & n3S13is<2 & n3S13pc=-2 -> (n3S13ip1'=n3S13ip0)&(n3S13is'=n3S13is+1)&(n3S13pc'=n3S13ra); +[] n3S13is=2 & n3S13pc=-2 -> (n3S13pc'=n3S13ra); +[] n3S13is=0 & n3S13pc=-3 -> (n3S13pc'=n3S13ra); +[] n3S13is>0 & n3S13pc=-3 -> (n3S13ip0'=n3S13ip1)&(n3S13is'=n3S13is-1)&(n3S13pc'=n3S13ra); +[] n3S13os=0 & n3S13pc=-4 -> (n3S13op0'=n3S13opt)&(n3S13os'=1)&(n3S13pc'=-3); +[] n3S13os=1 & n3S13pc=-4 -> (n3S13op1'=n3S13opt)&(n3S13os'=2)&(n3S13pc'=-3); +[] n3S13os=2 & n3S13pc=-4 -> (n3S13pc'=-3); +[n3S15f1] n3S13is=0 -> (n3S13ip0'=2)&(n3S13is'=1); +[n3S15f1] n3S13is=1 -> (n3S13ip1'=2)&(n3S13is'=2); +[n3S15f1] n3S13is=2 -> true; +[n3S12f2] n3S13is=0 -> (n3S13ip0'=1)&(n3S13is'=1); +[n3S12f2] n3S13is=1 -> (n3S13ip1'=1)&(n3S13is'=2); +[n3S12f2] n3S13is=2 -> true; +[] unlk & numSteps0 -> (n3S13pc'=-5)&(unlk'=false); +[n3S13f2] n3S13pc=-5 & n3S13os>0 & n3S13op0=2 -> (n3S13op0'=n3S13op1)&(n3S13os'=n3S13os-1)&(n3S13pc'=-6); +[n3S13f1] n3S13pc=-5 & n3S13os>0 & n3S13op0=1 -> (n3S13op0'=n3S13op1)&(n3S13os'=n3S13os-1)&(n3S13pc'=-6); +[] numSteps (n3S13pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S13pc'=1)&(unlk'=false); +[] n3S13pc=1 -> (n3S13opt'=2)&(n3S13pc'=-4)&(n3S13ra'=2); +[] numSteps (n3S13pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S22 +n3S22v7failing:[INTMIN..INTMAX] init 2; +n3S22t0:[0..1]; +n3S22ip0:[1..2] init 1; +n3S22ip1:[1..2] init 1; +n3S22is:[0..2] init 0; +n3S22op0:[1..2] init 1; +n3S22op1:[1..2] init 1; +n3S22os:[0..2] init 0; +n3S22opt:[1..2] init 1; +n3S22pc:[-6..12] init 0; n3S22ra:[-6..12] init 0; +[] n3S22is<2 & n3S22pc=-1 -> (n3S22ip0'=1)&(n3S22ip1'=n3S22ip0)&(n3S22is'=n3S22is+1)&(n3S22pc'=n3S22ra); +[] n3S22is=2 & n3S22pc=-1 -> (n3S22pc'=n3S22ra); +[] n3S22is=0 & n3S22pc=-2 -> (n3S22pc'=n3S22ra); +[] n3S22is>0 & n3S22is<2 & n3S22pc=-2 -> (n3S22ip1'=n3S22ip0)&(n3S22is'=n3S22is+1)&(n3S22pc'=n3S22ra); +[] n3S22is=2 & n3S22pc=-2 -> (n3S22pc'=n3S22ra); +[] n3S22is=0 & n3S22pc=-3 -> (n3S22pc'=n3S22ra); +[] n3S22is>0 & n3S22pc=-3 -> (n3S22ip0'=n3S22ip1)&(n3S22is'=n3S22is-1)&(n3S22pc'=n3S22ra); +[] n3S22os=0 & n3S22pc=-4 -> (n3S22op0'=n3S22opt)&(n3S22os'=1)&(n3S22pc'=-3); +[] n3S22os=1 & n3S22pc=-4 -> (n3S22op1'=n3S22opt)&(n3S22os'=2)&(n3S22pc'=-3); +[] n3S22os=2 & n3S22pc=-4 -> (n3S22pc'=-3); +[n3S23f2] n3S22is=0 -> (n3S22ip0'=2)&(n3S22is'=1); +[n3S23f2] n3S22is=1 -> (n3S22ip1'=2)&(n3S22is'=2); +[n3S23f2] n3S22is=2 -> true; +[n3S20f3] n3S22is=0 -> (n3S22ip0'=1)&(n3S22is'=1); +[n3S20f3] n3S22is=1 -> (n3S22ip1'=1)&(n3S22is'=2); +[n3S20f3] n3S22is=2 -> true; +[] unlk & numSteps0 -> (n3S22pc'=-5)&(unlk'=false); +[n3S22f2] n3S22pc=-5 & n3S22os>0 & n3S22op0=2 -> (n3S22op0'=n3S22op1)&(n3S22os'=n3S22os-1)&(n3S22pc'=-6); +[n3S22f1] n3S22pc=-5 & n3S22os>0 & n3S22op0=1 -> (n3S22op0'=n3S22op1)&(n3S22os'=n3S22os-1)&(n3S22pc'=-6); +[] numSteps (n3S22pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S22pc'=1)&(unlk'=false); +[] n3S22pc=1 & (n3S22v7failing=2) -> (n3S22pc'=2); +[] n3S22pc=1 & !((n3S22v7failing=2)) -> (n3S22pc'=8); +[] n3S22pc=2 -> 0.999:(n3S22t0'=0)&(n3S22pc'=3) + 0.001:(n3S22t0'=1)&(n3S22pc'=3); +[] n3S22pc=3 & (n3S22t0=1) -> (n3S22pc'=4); +[] n3S22pc=3 & !((n3S22t0=1)) -> (n3S22pc'=6); +[] n3S22pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S22v7failing'=1)&(n3S22pc'=5); +[] n3S22pc=5 -> (n3S22pc'=7); +[] n3S22pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S22v7failing'=0)&(n3S22pc'=7); +[] n3S22pc=7 -> (n3S22pc'=8); +[] n3S22pc=8 & (n3S22v7failing=1) -> (n3S22pc'=9); +[] n3S22pc=8 & !((n3S22v7failing=1)) -> (n3S22pc'=11); +[] n3S22pc=9 -> (n3S22pc'=-3)&(n3S22ra'=10); +[] n3S22pc=10 -> (n3S22pc'=12); +[] n3S22pc=11 -> (n3S22opt'=2)&(n3S22pc'=-4)&(n3S22ra'=12); +[] numSteps (n3S22pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S17 +n3S17ip0:[1..2] init 1; +n3S17ip1:[1..2] init 1; +n3S17is:[0..2] init 0; +n3S17op0:[1..2] init 1; +n3S17op1:[1..2] init 1; +n3S17os:[0..2] init 0; +n3S17opt:[1..2] init 1; +n3S17pc:[-6..2] init 0; n3S17ra:[-6..2] init 0; +[] n3S17is<2 & n3S17pc=-1 -> (n3S17ip0'=1)&(n3S17ip1'=n3S17ip0)&(n3S17is'=n3S17is+1)&(n3S17pc'=n3S17ra); +[] n3S17is=2 & n3S17pc=-1 -> (n3S17pc'=n3S17ra); +[] n3S17is=0 & n3S17pc=-2 -> (n3S17pc'=n3S17ra); +[] n3S17is>0 & n3S17is<2 & n3S17pc=-2 -> (n3S17ip1'=n3S17ip0)&(n3S17is'=n3S17is+1)&(n3S17pc'=n3S17ra); +[] n3S17is=2 & n3S17pc=-2 -> (n3S17pc'=n3S17ra); +[] n3S17is=0 & n3S17pc=-3 -> (n3S17pc'=n3S17ra); +[] n3S17is>0 & n3S17pc=-3 -> (n3S17ip0'=n3S17ip1)&(n3S17is'=n3S17is-1)&(n3S17pc'=n3S17ra); +[] n3S17os=0 & n3S17pc=-4 -> (n3S17op0'=n3S17opt)&(n3S17os'=1)&(n3S17pc'=-3); +[] n3S17os=1 & n3S17pc=-4 -> (n3S17op1'=n3S17opt)&(n3S17os'=2)&(n3S17pc'=-3); +[] n3S17os=2 & n3S17pc=-4 -> (n3S17pc'=-3); +[n3S19f1] n3S17is=0 -> (n3S17ip0'=2)&(n3S17is'=1); +[n3S19f1] n3S17is=1 -> (n3S17ip1'=2)&(n3S17is'=2); +[n3S19f1] n3S17is=2 -> true; +[n3S16f2] n3S17is=0 -> (n3S17ip0'=1)&(n3S17is'=1); +[n3S16f2] n3S17is=1 -> (n3S17ip1'=1)&(n3S17is'=2); +[n3S16f2] n3S17is=2 -> true; +[] unlk & numSteps0 -> (n3S17pc'=-5)&(unlk'=false); +[n3S17f2] n3S17pc=-5 & n3S17os>0 & n3S17op0=2 -> (n3S17op0'=n3S17op1)&(n3S17os'=n3S17os-1)&(n3S17pc'=-6); +[n3S17f1] n3S17pc=-5 & n3S17os>0 & n3S17op0=1 -> (n3S17op0'=n3S17op1)&(n3S17os'=n3S17os-1)&(n3S17pc'=-6); +[] numSteps (n3S17pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S17pc'=1)&(unlk'=false); +[] n3S17pc=1 -> (n3S17opt'=2)&(n3S17pc'=-4)&(n3S17ra'=2); +[] numSteps (n3S17pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4t0:[0..1]; +n2S4ip0:[1..3] init 1; +n2S4ip1:[1..3] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..3] init 1; +n2S4op1:[1..3] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..3] init 1; +n2S4pc:[-6..6] init 0; n2S4ra:[-6..6] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S6f1] n2S4is=0 -> (n2S4ip0'=3)&(n2S4is'=1); +[n2S6f1] n2S4is=1 -> (n2S4ip1'=3)&(n2S4is'=2); +[n2S6f1] n2S4is=2 -> true; +[n2S5f1] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S5f1] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S5f1] n2S4is=2 -> true; +[n2S3f3] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f3] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f3] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f3] n2S4pc=-5 & n2S4os>0 & n2S4op0=3 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 -> 0.5:(n2S4t0'=0)&(n2S4pc'=2) + 0.5:(n2S4t0'=1)&(n2S4pc'=2); +[] n2S4pc=2 & (n2S4t0=1) -> (n2S4pc'=3); +[] n2S4pc=2 & !((n2S4t0=1)) -> (n2S4pc'=5); +[] n2S4pc=3 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=4); +[] n2S4pc=4 -> (n2S4pc'=6); +[] n2S4pc=5 -> (n2S4opt'=3)&(n2S4pc'=-4)&(n2S4ra'=6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S26 +n3S26v7failing:[INTMIN..INTMAX] init 2; +n3S26t0:[0..1]; +n3S26ip0:[1..2] init 1; +n3S26ip1:[1..2] init 1; +n3S26is:[0..2] init 0; +n3S26op0:[1..2] init 1; +n3S26op1:[1..2] init 1; +n3S26os:[0..2] init 0; +n3S26opt:[1..2] init 1; +n3S26pc:[-6..12] init 0; n3S26ra:[-6..12] init 0; +[] n3S26is<2 & n3S26pc=-1 -> (n3S26ip0'=1)&(n3S26ip1'=n3S26ip0)&(n3S26is'=n3S26is+1)&(n3S26pc'=n3S26ra); +[] n3S26is=2 & n3S26pc=-1 -> (n3S26pc'=n3S26ra); +[] n3S26is=0 & n3S26pc=-2 -> (n3S26pc'=n3S26ra); +[] n3S26is>0 & n3S26is<2 & n3S26pc=-2 -> (n3S26ip1'=n3S26ip0)&(n3S26is'=n3S26is+1)&(n3S26pc'=n3S26ra); +[] n3S26is=2 & n3S26pc=-2 -> (n3S26pc'=n3S26ra); +[] n3S26is=0 & n3S26pc=-3 -> (n3S26pc'=n3S26ra); +[] n3S26is>0 & n3S26pc=-3 -> (n3S26ip0'=n3S26ip1)&(n3S26is'=n3S26is-1)&(n3S26pc'=n3S26ra); +[] n3S26os=0 & n3S26pc=-4 -> (n3S26op0'=n3S26opt)&(n3S26os'=1)&(n3S26pc'=-3); +[] n3S26os=1 & n3S26pc=-4 -> (n3S26op1'=n3S26opt)&(n3S26os'=2)&(n3S26pc'=-3); +[] n3S26os=2 & n3S26pc=-4 -> (n3S26pc'=-3); +[n3S27f2] n3S26is=0 -> (n3S26ip0'=2)&(n3S26is'=1); +[n3S27f2] n3S26is=1 -> (n3S26ip1'=2)&(n3S26is'=2); +[n3S27f2] n3S26is=2 -> true; +[n3S24f3] n3S26is=0 -> (n3S26ip0'=1)&(n3S26is'=1); +[n3S24f3] n3S26is=1 -> (n3S26ip1'=1)&(n3S26is'=2); +[n3S24f3] n3S26is=2 -> true; +[] unlk & numSteps0 -> (n3S26pc'=-5)&(unlk'=false); +[n3S26f2] n3S26pc=-5 & n3S26os>0 & n3S26op0=2 -> (n3S26op0'=n3S26op1)&(n3S26os'=n3S26os-1)&(n3S26pc'=-6); +[n3S26f1] n3S26pc=-5 & n3S26os>0 & n3S26op0=1 -> (n3S26op0'=n3S26op1)&(n3S26os'=n3S26os-1)&(n3S26pc'=-6); +[] numSteps (n3S26pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S26pc'=1)&(unlk'=false); +[] n3S26pc=1 & (n3S26v7failing=2) -> (n3S26pc'=2); +[] n3S26pc=1 & !((n3S26v7failing=2)) -> (n3S26pc'=8); +[] n3S26pc=2 -> 0.999:(n3S26t0'=0)&(n3S26pc'=3) + 0.001:(n3S26t0'=1)&(n3S26pc'=3); +[] n3S26pc=3 & (n3S26t0=1) -> (n3S26pc'=4); +[] n3S26pc=3 & !((n3S26t0=1)) -> (n3S26pc'=6); +[] n3S26pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S26v7failing'=1)&(n3S26pc'=5); +[] n3S26pc=5 -> (n3S26pc'=7); +[] n3S26pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S26v7failing'=0)&(n3S26pc'=7); +[] n3S26pc=7 -> (n3S26pc'=8); +[] n3S26pc=8 & (n3S26v7failing=1) -> (n3S26pc'=9); +[] n3S26pc=8 & !((n3S26v7failing=1)) -> (n3S26pc'=11); +[] n3S26pc=9 -> (n3S26pc'=-3)&(n3S26ra'=10); +[] n3S26pc=10 -> (n3S26pc'=12); +[] n3S26pc=11 -> (n3S26opt'=2)&(n3S26pc'=-4)&(n3S26ra'=12); +[] numSteps (n3S26pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8t0:[0..1]; +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..6] init 0; n2S8ra:[-6..6] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n3S10f1] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n3S10f1] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n3S10f1] n2S8is=2 -> true; +[n2S9f1] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n2S9f1] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n2S9f1] n2S8is=2 -> true; +[n2S7f3] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S7f3] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S7f3] n2S8is=2 -> true; +[] unlk & numSteps0 -> (n2S8pc'=-5)&(unlk'=false); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S8pc'=1)&(unlk'=false); +[] n2S8pc=1 -> 0.5:(n2S8t0'=0)&(n2S8pc'=2) + 0.5:(n2S8t0'=1)&(n2S8pc'=2); +[] n2S8pc=2 & (n2S8t0=1) -> (n2S8pc'=3); +[] n2S8pc=2 & !((n2S8t0=1)) -> (n2S8pc'=5); +[] n2S8pc=3 -> (n2S8opt'=2)&(n2S8pc'=-4)&(n2S8ra'=4); +[] n2S8pc=4 -> (n2S8pc'=6); +[] n2S8pc=5 -> (n2S8opt'=3)&(n2S8pc'=-4)&(n2S8ra'=6); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v7arrived:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n3S27f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n3S27f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n3S27f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & 1>=INTMIN & 1<=INTMAX -> (n2H1v7arrived'=1)&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6v7failing:[INTMIN..INTMAX] init 2; +n2S6t0:[0..1]; +n2S6ip0:[1..2] init 1; +n2S6ip1:[1..2] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..2] init 1; +n2S6op1:[1..2] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..2] init 1; +n2S6pc:[-6..12] init 0; n2S6ra:[-6..12] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S7f2] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2S7f2] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2S7f2] n2S6is=2 -> true; +[n2S4f3] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S4f3] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S4f3] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 & (n2S6v7failing=2) -> (n2S6pc'=2); +[] n2S6pc=1 & !((n2S6v7failing=2)) -> (n2S6pc'=8); +[] n2S6pc=2 -> 0.999:(n2S6t0'=0)&(n2S6pc'=3) + 0.001:(n2S6t0'=1)&(n2S6pc'=3); +[] n2S6pc=3 & (n2S6t0=1) -> (n2S6pc'=4); +[] n2S6pc=3 & !((n2S6t0=1)) -> (n2S6pc'=6); +[] n2S6pc=4 & 1>=INTMIN & 1<=INTMAX -> (n2S6v7failing'=1)&(n2S6pc'=5); +[] n2S6pc=5 -> (n2S6pc'=7); +[] n2S6pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S6v7failing'=0)&(n2S6pc'=7); +[] n2S6pc=7 -> (n2S6pc'=8); +[] n2S6pc=8 & (n2S6v7failing=1) -> (n2S6pc'=9); +[] n2S6pc=8 & !((n2S6v7failing=1)) -> (n2S6pc'=11); +[] n2S6pc=9 -> (n2S6pc'=-3)&(n2S6ra'=10); +[] n2S6pc=10 -> (n2S6pc'=12); +[] n2S6pc=11 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=12); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S11 +n3S11ip0:[1..3] init 1; +n3S11ip1:[1..3] init 1; +n3S11is:[0..2] init 0; +n3S11op0:[1..3] init 1; +n3S11op1:[1..3] init 1; +n3S11os:[0..2] init 0; +n3S11opt:[1..3] init 1; +n3S11pc:[-6..2] init 0; n3S11ra:[-6..2] init 0; +[] n3S11is<2 & n3S11pc=-1 -> (n3S11ip0'=1)&(n3S11ip1'=n3S11ip0)&(n3S11is'=n3S11is+1)&(n3S11pc'=n3S11ra); +[] n3S11is=2 & n3S11pc=-1 -> (n3S11pc'=n3S11ra); +[] n3S11is=0 & n3S11pc=-2 -> (n3S11pc'=n3S11ra); +[] n3S11is>0 & n3S11is<2 & n3S11pc=-2 -> (n3S11ip1'=n3S11ip0)&(n3S11is'=n3S11is+1)&(n3S11pc'=n3S11ra); +[] n3S11is=2 & n3S11pc=-2 -> (n3S11pc'=n3S11ra); +[] n3S11is=0 & n3S11pc=-3 -> (n3S11pc'=n3S11ra); +[] n3S11is>0 & n3S11pc=-3 -> (n3S11ip0'=n3S11ip1)&(n3S11is'=n3S11is-1)&(n3S11pc'=n3S11ra); +[] n3S11os=0 & n3S11pc=-4 -> (n3S11op0'=n3S11opt)&(n3S11os'=1)&(n3S11pc'=-3); +[] n3S11os=1 & n3S11pc=-4 -> (n3S11op1'=n3S11opt)&(n3S11os'=2)&(n3S11pc'=-3); +[] n3S11os=2 & n3S11pc=-4 -> (n3S11pc'=-3); +[n3S12f1] n3S11is=0 -> (n3S11ip0'=3)&(n3S11is'=1); +[n3S12f1] n3S11is=1 -> (n3S11ip1'=3)&(n3S11is'=2); +[n3S12f1] n3S11is=2 -> true; +[n3S10f2] n3S11is=0 -> (n3S11ip0'=2)&(n3S11is'=1); +[n3S10f2] n3S11is=1 -> (n3S11ip1'=2)&(n3S11is'=2); +[n3S10f2] n3S11is=2 -> true; +[n2S9f2] n3S11is=0 -> (n3S11ip0'=1)&(n3S11is'=1); +[n2S9f2] n3S11is=1 -> (n3S11ip1'=1)&(n3S11is'=2); +[n2S9f2] n3S11is=2 -> true; +[] unlk & numSteps0 -> (n3S11pc'=-5)&(unlk'=false); +[n3S11f3] n3S11pc=-5 & n3S11os>0 & n3S11op0=3 -> (n3S11op0'=n3S11op1)&(n3S11os'=n3S11os-1)&(n3S11pc'=-6); +[n3S11f2] n3S11pc=-5 & n3S11os>0 & n3S11op0=2 -> (n3S11op0'=n3S11op1)&(n3S11os'=n3S11os-1)&(n3S11pc'=-6); +[n3S11f1] n3S11pc=-5 & n3S11os>0 & n3S11op0=1 -> (n3S11op0'=n3S11op1)&(n3S11os'=n3S11os-1)&(n3S11pc'=-6); +[] numSteps (n3S11pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S11pc'=1)&(unlk'=false); +[] n3S11pc=1 -> (n3S11opt'=3)&(n3S11pc'=-4)&(n3S11ra'=2); +[] numSteps (n3S11pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S19 +n3S19ip0:[1..3] init 1; +n3S19ip1:[1..3] init 1; +n3S19is:[0..2] init 0; +n3S19op0:[1..3] init 1; +n3S19op1:[1..3] init 1; +n3S19os:[0..2] init 0; +n3S19opt:[1..3] init 1; +n3S19pc:[-6..2] init 0; n3S19ra:[-6..2] init 0; +[] n3S19is<2 & n3S19pc=-1 -> (n3S19ip0'=1)&(n3S19ip1'=n3S19ip0)&(n3S19is'=n3S19is+1)&(n3S19pc'=n3S19ra); +[] n3S19is=2 & n3S19pc=-1 -> (n3S19pc'=n3S19ra); +[] n3S19is=0 & n3S19pc=-2 -> (n3S19pc'=n3S19ra); +[] n3S19is>0 & n3S19is<2 & n3S19pc=-2 -> (n3S19ip1'=n3S19ip0)&(n3S19is'=n3S19is+1)&(n3S19pc'=n3S19ra); +[] n3S19is=2 & n3S19pc=-2 -> (n3S19pc'=n3S19ra); +[] n3S19is=0 & n3S19pc=-3 -> (n3S19pc'=n3S19ra); +[] n3S19is>0 & n3S19pc=-3 -> (n3S19ip0'=n3S19ip1)&(n3S19is'=n3S19is-1)&(n3S19pc'=n3S19ra); +[] n3S19os=0 & n3S19pc=-4 -> (n3S19op0'=n3S19opt)&(n3S19os'=1)&(n3S19pc'=-3); +[] n3S19os=1 & n3S19pc=-4 -> (n3S19op1'=n3S19opt)&(n3S19os'=2)&(n3S19pc'=-3); +[] n3S19os=2 & n3S19pc=-4 -> (n3S19pc'=-3); +[n3S20f1] n3S19is=0 -> (n3S19ip0'=3)&(n3S19is'=1); +[n3S20f1] n3S19is=1 -> (n3S19ip1'=3)&(n3S19is'=2); +[n3S20f1] n3S19is=2 -> true; +[n3S18f2] n3S19is=0 -> (n3S19ip0'=2)&(n3S19is'=1); +[n3S18f2] n3S19is=1 -> (n3S19ip1'=2)&(n3S19is'=2); +[n3S18f2] n3S19is=2 -> true; +[n3S17f2] n3S19is=0 -> (n3S19ip0'=1)&(n3S19is'=1); +[n3S17f2] n3S19is=1 -> (n3S19ip1'=1)&(n3S19is'=2); +[n3S17f2] n3S19is=2 -> true; +[] unlk & numSteps0 -> (n3S19pc'=-5)&(unlk'=false); +[n3S19f3] n3S19pc=-5 & n3S19os>0 & n3S19op0=3 -> (n3S19op0'=n3S19op1)&(n3S19os'=n3S19os-1)&(n3S19pc'=-6); +[n3S19f2] n3S19pc=-5 & n3S19os>0 & n3S19op0=2 -> (n3S19op0'=n3S19op1)&(n3S19os'=n3S19os-1)&(n3S19pc'=-6); +[n3S19f1] n3S19pc=-5 & n3S19os>0 & n3S19op0=1 -> (n3S19op0'=n3S19op1)&(n3S19os'=n3S19os-1)&(n3S19pc'=-6); +[] numSteps (n3S19pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S19pc'=1)&(unlk'=false); +[] n3S19pc=1 -> (n3S19opt'=3)&(n3S19pc'=-4)&(n3S19ra'=2); +[] numSteps (n3S19pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S10 +n3S10v7failing:[INTMIN..INTMAX] init 2; +n3S10t0:[0..1]; +n3S10ip0:[1..2] init 1; +n3S10ip1:[1..2] init 1; +n3S10is:[0..2] init 0; +n3S10op0:[1..2] init 1; +n3S10op1:[1..2] init 1; +n3S10os:[0..2] init 0; +n3S10opt:[1..2] init 1; +n3S10pc:[-6..12] init 0; n3S10ra:[-6..12] init 0; +[] n3S10is<2 & n3S10pc=-1 -> (n3S10ip0'=1)&(n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-1 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10is<2 & n3S10pc=-2 -> (n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-3 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10pc=-3 -> (n3S10ip0'=n3S10ip1)&(n3S10is'=n3S10is-1)&(n3S10pc'=n3S10ra); +[] n3S10os=0 & n3S10pc=-4 -> (n3S10op0'=n3S10opt)&(n3S10os'=1)&(n3S10pc'=-3); +[] n3S10os=1 & n3S10pc=-4 -> (n3S10op1'=n3S10opt)&(n3S10os'=2)&(n3S10pc'=-3); +[] n3S10os=2 & n3S10pc=-4 -> (n3S10pc'=-3); +[n3S11f2] n3S10is=0 -> (n3S10ip0'=2)&(n3S10is'=1); +[n3S11f2] n3S10is=1 -> (n3S10ip1'=2)&(n3S10is'=2); +[n3S11f2] n3S10is=2 -> true; +[n2S8f3] n3S10is=0 -> (n3S10ip0'=1)&(n3S10is'=1); +[n2S8f3] n3S10is=1 -> (n3S10ip1'=1)&(n3S10is'=2); +[n2S8f3] n3S10is=2 -> true; +[] unlk & numSteps0 -> (n3S10pc'=-5)&(unlk'=false); +[n3S10f2] n3S10pc=-5 & n3S10os>0 & n3S10op0=2 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f1] n3S10pc=-5 & n3S10os>0 & n3S10op0=1 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[] numSteps (n3S10pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S10pc'=1)&(unlk'=false); +[] n3S10pc=1 & (n3S10v7failing=2) -> (n3S10pc'=2); +[] n3S10pc=1 & !((n3S10v7failing=2)) -> (n3S10pc'=8); +[] n3S10pc=2 -> 0.999:(n3S10t0'=0)&(n3S10pc'=3) + 0.001:(n3S10t0'=1)&(n3S10pc'=3); +[] n3S10pc=3 & (n3S10t0=1) -> (n3S10pc'=4); +[] n3S10pc=3 & !((n3S10t0=1)) -> (n3S10pc'=6); +[] n3S10pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S10v7failing'=1)&(n3S10pc'=5); +[] n3S10pc=5 -> (n3S10pc'=7); +[] n3S10pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S10v7failing'=0)&(n3S10pc'=7); +[] n3S10pc=7 -> (n3S10pc'=8); +[] n3S10pc=8 & (n3S10v7failing=1) -> (n3S10pc'=9); +[] n3S10pc=8 & !((n3S10v7failing=1)) -> (n3S10pc'=11); +[] n3S10pc=9 -> (n3S10pc'=-3)&(n3S10ra'=10); +[] n3S10pc=10 -> (n3S10pc'=12); +[] n3S10pc=11 -> (n3S10opt'=2)&(n3S10pc'=-4)&(n3S10ra'=12); +[] numSteps (n3S10pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S12 +n3S12t0:[0..1]; +n3S12ip0:[1..3] init 1; +n3S12ip1:[1..3] init 1; +n3S12is:[0..2] init 0; +n3S12op0:[1..3] init 1; +n3S12op1:[1..3] init 1; +n3S12os:[0..2] init 0; +n3S12opt:[1..3] init 1; +n3S12pc:[-6..6] init 0; n3S12ra:[-6..6] init 0; +[] n3S12is<2 & n3S12pc=-1 -> (n3S12ip0'=1)&(n3S12ip1'=n3S12ip0)&(n3S12is'=n3S12is+1)&(n3S12pc'=n3S12ra); +[] n3S12is=2 & n3S12pc=-1 -> (n3S12pc'=n3S12ra); +[] n3S12is=0 & n3S12pc=-2 -> (n3S12pc'=n3S12ra); +[] n3S12is>0 & n3S12is<2 & n3S12pc=-2 -> (n3S12ip1'=n3S12ip0)&(n3S12is'=n3S12is+1)&(n3S12pc'=n3S12ra); +[] n3S12is=2 & n3S12pc=-2 -> (n3S12pc'=n3S12ra); +[] n3S12is=0 & n3S12pc=-3 -> (n3S12pc'=n3S12ra); +[] n3S12is>0 & n3S12pc=-3 -> (n3S12ip0'=n3S12ip1)&(n3S12is'=n3S12is-1)&(n3S12pc'=n3S12ra); +[] n3S12os=0 & n3S12pc=-4 -> (n3S12op0'=n3S12opt)&(n3S12os'=1)&(n3S12pc'=-3); +[] n3S12os=1 & n3S12pc=-4 -> (n3S12op1'=n3S12opt)&(n3S12os'=2)&(n3S12pc'=-3); +[] n3S12os=2 & n3S12pc=-4 -> (n3S12pc'=-3); +[n3S14f1] n3S12is=0 -> (n3S12ip0'=3)&(n3S12is'=1); +[n3S14f1] n3S12is=1 -> (n3S12ip1'=3)&(n3S12is'=2); +[n3S14f1] n3S12is=2 -> true; +[n3S13f1] n3S12is=0 -> (n3S12ip0'=2)&(n3S12is'=1); +[n3S13f1] n3S12is=1 -> (n3S12ip1'=2)&(n3S12is'=2); +[n3S13f1] n3S12is=2 -> true; +[n3S11f3] n3S12is=0 -> (n3S12ip0'=1)&(n3S12is'=1); +[n3S11f3] n3S12is=1 -> (n3S12ip1'=1)&(n3S12is'=2); +[n3S11f3] n3S12is=2 -> true; +[] unlk & numSteps0 -> (n3S12pc'=-5)&(unlk'=false); +[n3S12f3] n3S12pc=-5 & n3S12os>0 & n3S12op0=3 -> (n3S12op0'=n3S12op1)&(n3S12os'=n3S12os-1)&(n3S12pc'=-6); +[n3S12f2] n3S12pc=-5 & n3S12os>0 & n3S12op0=2 -> (n3S12op0'=n3S12op1)&(n3S12os'=n3S12os-1)&(n3S12pc'=-6); +[n3S12f1] n3S12pc=-5 & n3S12os>0 & n3S12op0=1 -> (n3S12op0'=n3S12op1)&(n3S12os'=n3S12os-1)&(n3S12pc'=-6); +[] numSteps (n3S12pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S12pc'=1)&(unlk'=false); +[] n3S12pc=1 -> 0.5:(n3S12t0'=0)&(n3S12pc'=2) + 0.5:(n3S12t0'=1)&(n3S12pc'=2); +[] n3S12pc=2 & (n3S12t0=1) -> (n3S12pc'=3); +[] n3S12pc=2 & !((n3S12t0=1)) -> (n3S12pc'=5); +[] n3S12pc=3 -> (n3S12opt'=2)&(n3S12pc'=-4)&(n3S12ra'=4); +[] n3S12pc=4 -> (n3S12pc'=6); +[] n3S12pc=5 -> (n3S12opt'=3)&(n3S12pc'=-4)&(n3S12ra'=6); +[] numSteps (n3S12pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S21 +n3S21ip0:[1..2] init 1; +n3S21ip1:[1..2] init 1; +n3S21is:[0..2] init 0; +n3S21op0:[1..2] init 1; +n3S21op1:[1..2] init 1; +n3S21os:[0..2] init 0; +n3S21opt:[1..2] init 1; +n3S21pc:[-6..2] init 0; n3S21ra:[-6..2] init 0; +[] n3S21is<2 & n3S21pc=-1 -> (n3S21ip0'=1)&(n3S21ip1'=n3S21ip0)&(n3S21is'=n3S21is+1)&(n3S21pc'=n3S21ra); +[] n3S21is=2 & n3S21pc=-1 -> (n3S21pc'=n3S21ra); +[] n3S21is=0 & n3S21pc=-2 -> (n3S21pc'=n3S21ra); +[] n3S21is>0 & n3S21is<2 & n3S21pc=-2 -> (n3S21ip1'=n3S21ip0)&(n3S21is'=n3S21is+1)&(n3S21pc'=n3S21ra); +[] n3S21is=2 & n3S21pc=-2 -> (n3S21pc'=n3S21ra); +[] n3S21is=0 & n3S21pc=-3 -> (n3S21pc'=n3S21ra); +[] n3S21is>0 & n3S21pc=-3 -> (n3S21ip0'=n3S21ip1)&(n3S21is'=n3S21is-1)&(n3S21pc'=n3S21ra); +[] n3S21os=0 & n3S21pc=-4 -> (n3S21op0'=n3S21opt)&(n3S21os'=1)&(n3S21pc'=-3); +[] n3S21os=1 & n3S21pc=-4 -> (n3S21op1'=n3S21opt)&(n3S21os'=2)&(n3S21pc'=-3); +[] n3S21os=2 & n3S21pc=-4 -> (n3S21pc'=-3); +[n3S23f1] n3S21is=0 -> (n3S21ip0'=2)&(n3S21is'=1); +[n3S23f1] n3S21is=1 -> (n3S21ip1'=2)&(n3S21is'=2); +[n3S23f1] n3S21is=2 -> true; +[n3S20f2] n3S21is=0 -> (n3S21ip0'=1)&(n3S21is'=1); +[n3S20f2] n3S21is=1 -> (n3S21ip1'=1)&(n3S21is'=2); +[n3S20f2] n3S21is=2 -> true; +[] unlk & numSteps0 -> (n3S21pc'=-5)&(unlk'=false); +[n3S21f2] n3S21pc=-5 & n3S21os>0 & n3S21op0=2 -> (n3S21op0'=n3S21op1)&(n3S21os'=n3S21os-1)&(n3S21pc'=-6); +[n3S21f1] n3S21pc=-5 & n3S21os>0 & n3S21op0=1 -> (n3S21op0'=n3S21op1)&(n3S21os'=n3S21os-1)&(n3S21pc'=-6); +[] numSteps (n3S21pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S21pc'=1)&(unlk'=false); +[] n3S21pc=1 -> (n3S21opt'=2)&(n3S21pc'=-4)&(n3S21ra'=2); +[] numSteps (n3S21pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2v7failing:[INTMIN..INTMAX] init 2; +n2S2t0:[0..1]; +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..12] init 0; n2S2ra:[-6..12] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & (n2S2v7failing=2) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2v7failing=2)) -> (n2S2pc'=8); +[] n2S2pc=2 -> 0.999:(n2S2t0'=0)&(n2S2pc'=3) + 0.001:(n2S2t0'=1)&(n2S2pc'=3); +[] n2S2pc=3 & (n2S2t0=1) -> (n2S2pc'=4); +[] n2S2pc=3 & !((n2S2t0=1)) -> (n2S2pc'=6); +[] n2S2pc=4 & 1>=INTMIN & 1<=INTMAX -> (n2S2v7failing'=1)&(n2S2pc'=5); +[] n2S2pc=5 -> (n2S2pc'=7); +[] n2S2pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S2v7failing'=0)&(n2S2pc'=7); +[] n2S2pc=7 -> (n2S2pc'=8); +[] n2S2pc=8 & (n2S2v7failing=1) -> (n2S2pc'=9); +[] n2S2pc=8 & !((n2S2v7failing=1)) -> (n2S2pc'=11); +[] n2S2pc=9 -> (n2S2pc'=-3)&(n2S2ra'=10); +[] n2S2pc=10 -> (n2S2pc'=12); +[] n2S2pc=11 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=12); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S20 +n3S20t0:[0..1]; +n3S20ip0:[1..3] init 1; +n3S20ip1:[1..3] init 1; +n3S20is:[0..2] init 0; +n3S20op0:[1..3] init 1; +n3S20op1:[1..3] init 1; +n3S20os:[0..2] init 0; +n3S20opt:[1..3] init 1; +n3S20pc:[-6..6] init 0; n3S20ra:[-6..6] init 0; +[] n3S20is<2 & n3S20pc=-1 -> (n3S20ip0'=1)&(n3S20ip1'=n3S20ip0)&(n3S20is'=n3S20is+1)&(n3S20pc'=n3S20ra); +[] n3S20is=2 & n3S20pc=-1 -> (n3S20pc'=n3S20ra); +[] n3S20is=0 & n3S20pc=-2 -> (n3S20pc'=n3S20ra); +[] n3S20is>0 & n3S20is<2 & n3S20pc=-2 -> (n3S20ip1'=n3S20ip0)&(n3S20is'=n3S20is+1)&(n3S20pc'=n3S20ra); +[] n3S20is=2 & n3S20pc=-2 -> (n3S20pc'=n3S20ra); +[] n3S20is=0 & n3S20pc=-3 -> (n3S20pc'=n3S20ra); +[] n3S20is>0 & n3S20pc=-3 -> (n3S20ip0'=n3S20ip1)&(n3S20is'=n3S20is-1)&(n3S20pc'=n3S20ra); +[] n3S20os=0 & n3S20pc=-4 -> (n3S20op0'=n3S20opt)&(n3S20os'=1)&(n3S20pc'=-3); +[] n3S20os=1 & n3S20pc=-4 -> (n3S20op1'=n3S20opt)&(n3S20os'=2)&(n3S20pc'=-3); +[] n3S20os=2 & n3S20pc=-4 -> (n3S20pc'=-3); +[n3S22f1] n3S20is=0 -> (n3S20ip0'=3)&(n3S20is'=1); +[n3S22f1] n3S20is=1 -> (n3S20ip1'=3)&(n3S20is'=2); +[n3S22f1] n3S20is=2 -> true; +[n3S21f1] n3S20is=0 -> (n3S20ip0'=2)&(n3S20is'=1); +[n3S21f1] n3S20is=1 -> (n3S20ip1'=2)&(n3S20is'=2); +[n3S21f1] n3S20is=2 -> true; +[n3S19f3] n3S20is=0 -> (n3S20ip0'=1)&(n3S20is'=1); +[n3S19f3] n3S20is=1 -> (n3S20ip1'=1)&(n3S20is'=2); +[n3S19f3] n3S20is=2 -> true; +[] unlk & numSteps0 -> (n3S20pc'=-5)&(unlk'=false); +[n3S20f3] n3S20pc=-5 & n3S20os>0 & n3S20op0=3 -> (n3S20op0'=n3S20op1)&(n3S20os'=n3S20os-1)&(n3S20pc'=-6); +[n3S20f2] n3S20pc=-5 & n3S20os>0 & n3S20op0=2 -> (n3S20op0'=n3S20op1)&(n3S20os'=n3S20os-1)&(n3S20pc'=-6); +[n3S20f1] n3S20pc=-5 & n3S20os>0 & n3S20op0=1 -> (n3S20op0'=n3S20op1)&(n3S20os'=n3S20os-1)&(n3S20pc'=-6); +[] numSteps (n3S20pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S20pc'=1)&(unlk'=false); +[] n3S20pc=1 -> 0.5:(n3S20t0'=0)&(n3S20pc'=2) + 0.5:(n3S20t0'=1)&(n3S20pc'=2); +[] n3S20pc=2 & (n3S20t0=1) -> (n3S20pc'=3); +[] n3S20pc=2 & !((n3S20t0=1)) -> (n3S20pc'=5); +[] n3S20pc=3 -> (n3S20opt'=2)&(n3S20pc'=-4)&(n3S20ra'=4); +[] n3S20pc=4 -> (n3S20pc'=6); +[] n3S20pc=5 -> (n3S20opt'=3)&(n3S20pc'=-4)&(n3S20ra'=6); +[] numSteps (n3S20pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S18 +n3S18v7failing:[INTMIN..INTMAX] init 2; +n3S18t0:[0..1]; +n3S18ip0:[1..2] init 1; +n3S18ip1:[1..2] init 1; +n3S18is:[0..2] init 0; +n3S18op0:[1..2] init 1; +n3S18op1:[1..2] init 1; +n3S18os:[0..2] init 0; +n3S18opt:[1..2] init 1; +n3S18pc:[-6..12] init 0; n3S18ra:[-6..12] init 0; +[] n3S18is<2 & n3S18pc=-1 -> (n3S18ip0'=1)&(n3S18ip1'=n3S18ip0)&(n3S18is'=n3S18is+1)&(n3S18pc'=n3S18ra); +[] n3S18is=2 & n3S18pc=-1 -> (n3S18pc'=n3S18ra); +[] n3S18is=0 & n3S18pc=-2 -> (n3S18pc'=n3S18ra); +[] n3S18is>0 & n3S18is<2 & n3S18pc=-2 -> (n3S18ip1'=n3S18ip0)&(n3S18is'=n3S18is+1)&(n3S18pc'=n3S18ra); +[] n3S18is=2 & n3S18pc=-2 -> (n3S18pc'=n3S18ra); +[] n3S18is=0 & n3S18pc=-3 -> (n3S18pc'=n3S18ra); +[] n3S18is>0 & n3S18pc=-3 -> (n3S18ip0'=n3S18ip1)&(n3S18is'=n3S18is-1)&(n3S18pc'=n3S18ra); +[] n3S18os=0 & n3S18pc=-4 -> (n3S18op0'=n3S18opt)&(n3S18os'=1)&(n3S18pc'=-3); +[] n3S18os=1 & n3S18pc=-4 -> (n3S18op1'=n3S18opt)&(n3S18os'=2)&(n3S18pc'=-3); +[] n3S18os=2 & n3S18pc=-4 -> (n3S18pc'=-3); +[n3S19f2] n3S18is=0 -> (n3S18ip0'=2)&(n3S18is'=1); +[n3S19f2] n3S18is=1 -> (n3S18ip1'=2)&(n3S18is'=2); +[n3S19f2] n3S18is=2 -> true; +[n3S16f3] n3S18is=0 -> (n3S18ip0'=1)&(n3S18is'=1); +[n3S16f3] n3S18is=1 -> (n3S18ip1'=1)&(n3S18is'=2); +[n3S16f3] n3S18is=2 -> true; +[] unlk & numSteps0 -> (n3S18pc'=-5)&(unlk'=false); +[n3S18f2] n3S18pc=-5 & n3S18os>0 & n3S18op0=2 -> (n3S18op0'=n3S18op1)&(n3S18os'=n3S18os-1)&(n3S18pc'=-6); +[n3S18f1] n3S18pc=-5 & n3S18os>0 & n3S18op0=1 -> (n3S18op0'=n3S18op1)&(n3S18os'=n3S18os-1)&(n3S18pc'=-6); +[] numSteps (n3S18pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S18pc'=1)&(unlk'=false); +[] n3S18pc=1 & (n3S18v7failing=2) -> (n3S18pc'=2); +[] n3S18pc=1 & !((n3S18v7failing=2)) -> (n3S18pc'=8); +[] n3S18pc=2 -> 0.999:(n3S18t0'=0)&(n3S18pc'=3) + 0.001:(n3S18t0'=1)&(n3S18pc'=3); +[] n3S18pc=3 & (n3S18t0=1) -> (n3S18pc'=4); +[] n3S18pc=3 & !((n3S18t0=1)) -> (n3S18pc'=6); +[] n3S18pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S18v7failing'=1)&(n3S18pc'=5); +[] n3S18pc=5 -> (n3S18pc'=7); +[] n3S18pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S18v7failing'=0)&(n3S18pc'=7); +[] n3S18pc=7 -> (n3S18pc'=8); +[] n3S18pc=8 & (n3S18v7failing=1) -> (n3S18pc'=9); +[] n3S18pc=8 & !((n3S18v7failing=1)) -> (n3S18pc'=11); +[] n3S18pc=9 -> (n3S18pc'=-3)&(n3S18ra'=10); +[] n3S18pc=10 -> (n3S18pc'=12); +[] n3S18pc=11 -> (n3S18opt'=2)&(n3S18pc'=-4)&(n3S18ra'=12); +[] numSteps (n3S18pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S7f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S7f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S7f1] n2S5is=2 -> true; +[n2S4f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..6] init 0; n2S0ra:[-6..6] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 & (n2S0t0=1) -> (n2S0pc'=3); +[] n2S0pc=2 & !((n2S0t0=1)) -> (n2S0pc'=5); +[] n2S0pc=3 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=4); +[] n2S0pc=4 -> (n2S0pc'=6); +[] n2S0pc=5 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9ip0:[1..2] init 1; +n2S9ip1:[1..2] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..2] init 1; +n2S9op1:[1..2] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..2] init 1; +n2S9pc:[-6..2] init 0; n2S9ra:[-6..2] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n3S11f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n3S11f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n3S11f1] n2S9is=2 -> true; +[n2S8f2] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S8f2] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S8f2] n2S9is=2 -> true; +[] unlk & numSteps0 -> (n2S9pc'=-5)&(unlk'=false); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S9pc'=1)&(unlk'=false); +[] n2S9pc=1 -> (n2S9opt'=2)&(n2S9pc'=-4)&(n2S9ra'=2); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S27 +n3S27ip0:[1..3] init 1; +n3S27ip1:[1..3] init 1; +n3S27is:[0..2] init 0; +n3S27op0:[1..3] init 1; +n3S27op1:[1..3] init 1; +n3S27os:[0..2] init 0; +n3S27opt:[1..3] init 1; +n3S27pc:[-6..2] init 0; n3S27ra:[-6..2] init 0; +[] n3S27is<2 & n3S27pc=-1 -> (n3S27ip0'=1)&(n3S27ip1'=n3S27ip0)&(n3S27is'=n3S27is+1)&(n3S27pc'=n3S27ra); +[] n3S27is=2 & n3S27pc=-1 -> (n3S27pc'=n3S27ra); +[] n3S27is=0 & n3S27pc=-2 -> (n3S27pc'=n3S27ra); +[] n3S27is>0 & n3S27is<2 & n3S27pc=-2 -> (n3S27ip1'=n3S27ip0)&(n3S27is'=n3S27is+1)&(n3S27pc'=n3S27ra); +[] n3S27is=2 & n3S27pc=-2 -> (n3S27pc'=n3S27ra); +[] n3S27is=0 & n3S27pc=-3 -> (n3S27pc'=n3S27ra); +[] n3S27is>0 & n3S27pc=-3 -> (n3S27ip0'=n3S27ip1)&(n3S27is'=n3S27is-1)&(n3S27pc'=n3S27ra); +[] n3S27os=0 & n3S27pc=-4 -> (n3S27op0'=n3S27opt)&(n3S27os'=1)&(n3S27pc'=-3); +[] n3S27os=1 & n3S27pc=-4 -> (n3S27op1'=n3S27opt)&(n3S27os'=2)&(n3S27pc'=-3); +[] n3S27os=2 & n3S27pc=-4 -> (n3S27pc'=-3); +[n2H1f1] n3S27is=0 -> (n3S27ip0'=3)&(n3S27is'=1); +[n2H1f1] n3S27is=1 -> (n3S27ip1'=3)&(n3S27is'=2); +[n2H1f1] n3S27is=2 -> true; +[n3S26f2] n3S27is=0 -> (n3S27ip0'=2)&(n3S27is'=1); +[n3S26f2] n3S27is=1 -> (n3S27ip1'=2)&(n3S27is'=2); +[n3S26f2] n3S27is=2 -> true; +[n3S25f2] n3S27is=0 -> (n3S27ip0'=1)&(n3S27is'=1); +[n3S25f2] n3S27is=1 -> (n3S27ip1'=1)&(n3S27is'=2); +[n3S25f2] n3S27is=2 -> true; +[] unlk & numSteps0 -> (n3S27pc'=-5)&(unlk'=false); +[n3S27f3] n3S27pc=-5 & n3S27os>0 & n3S27op0=3 -> (n3S27op0'=n3S27op1)&(n3S27os'=n3S27os-1)&(n3S27pc'=-6); +[n3S27f2] n3S27pc=-5 & n3S27os>0 & n3S27op0=2 -> (n3S27op0'=n3S27op1)&(n3S27os'=n3S27os-1)&(n3S27pc'=-6); +[n3S27f1] n3S27pc=-5 & n3S27os>0 & n3S27op0=1 -> (n3S27op0'=n3S27op1)&(n3S27os'=n3S27os-1)&(n3S27pc'=-6); +[] numSteps (n3S27pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S27pc'=1)&(unlk'=false); +[] n3S27pc=1 -> (n3S27opt'=3)&(n3S27pc'=-4)&(n3S27ra'=2); +[] numSteps (n3S27pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S14 +n3S14v7failing:[INTMIN..INTMAX] init 2; +n3S14t0:[0..1]; +n3S14ip0:[1..2] init 1; +n3S14ip1:[1..2] init 1; +n3S14is:[0..2] init 0; +n3S14op0:[1..2] init 1; +n3S14op1:[1..2] init 1; +n3S14os:[0..2] init 0; +n3S14opt:[1..2] init 1; +n3S14pc:[-6..12] init 0; n3S14ra:[-6..12] init 0; +[] n3S14is<2 & n3S14pc=-1 -> (n3S14ip0'=1)&(n3S14ip1'=n3S14ip0)&(n3S14is'=n3S14is+1)&(n3S14pc'=n3S14ra); +[] n3S14is=2 & n3S14pc=-1 -> (n3S14pc'=n3S14ra); +[] n3S14is=0 & n3S14pc=-2 -> (n3S14pc'=n3S14ra); +[] n3S14is>0 & n3S14is<2 & n3S14pc=-2 -> (n3S14ip1'=n3S14ip0)&(n3S14is'=n3S14is+1)&(n3S14pc'=n3S14ra); +[] n3S14is=2 & n3S14pc=-2 -> (n3S14pc'=n3S14ra); +[] n3S14is=0 & n3S14pc=-3 -> (n3S14pc'=n3S14ra); +[] n3S14is>0 & n3S14pc=-3 -> (n3S14ip0'=n3S14ip1)&(n3S14is'=n3S14is-1)&(n3S14pc'=n3S14ra); +[] n3S14os=0 & n3S14pc=-4 -> (n3S14op0'=n3S14opt)&(n3S14os'=1)&(n3S14pc'=-3); +[] n3S14os=1 & n3S14pc=-4 -> (n3S14op1'=n3S14opt)&(n3S14os'=2)&(n3S14pc'=-3); +[] n3S14os=2 & n3S14pc=-4 -> (n3S14pc'=-3); +[n3S15f2] n3S14is=0 -> (n3S14ip0'=2)&(n3S14is'=1); +[n3S15f2] n3S14is=1 -> (n3S14ip1'=2)&(n3S14is'=2); +[n3S15f2] n3S14is=2 -> true; +[n3S12f3] n3S14is=0 -> (n3S14ip0'=1)&(n3S14is'=1); +[n3S12f3] n3S14is=1 -> (n3S14ip1'=1)&(n3S14is'=2); +[n3S12f3] n3S14is=2 -> true; +[] unlk & numSteps0 -> (n3S14pc'=-5)&(unlk'=false); +[n3S14f2] n3S14pc=-5 & n3S14os>0 & n3S14op0=2 -> (n3S14op0'=n3S14op1)&(n3S14os'=n3S14os-1)&(n3S14pc'=-6); +[n3S14f1] n3S14pc=-5 & n3S14os>0 & n3S14op0=1 -> (n3S14op0'=n3S14op1)&(n3S14os'=n3S14os-1)&(n3S14pc'=-6); +[] numSteps (n3S14pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S14pc'=1)&(unlk'=false); +[] n3S14pc=1 & (n3S14v7failing=2) -> (n3S14pc'=2); +[] n3S14pc=1 & !((n3S14v7failing=2)) -> (n3S14pc'=8); +[] n3S14pc=2 -> 0.999:(n3S14t0'=0)&(n3S14pc'=3) + 0.001:(n3S14t0'=1)&(n3S14pc'=3); +[] n3S14pc=3 & (n3S14t0=1) -> (n3S14pc'=4); +[] n3S14pc=3 & !((n3S14t0=1)) -> (n3S14pc'=6); +[] n3S14pc=4 & 1>=INTMIN & 1<=INTMAX -> (n3S14v7failing'=1)&(n3S14pc'=5); +[] n3S14pc=5 -> (n3S14pc'=7); +[] n3S14pc=6 & 0>=INTMIN & 0<=INTMAX -> (n3S14v7failing'=0)&(n3S14pc'=7); +[] n3S14pc=7 -> (n3S14pc'=8); +[] n3S14pc=8 & (n3S14v7failing=1) -> (n3S14pc'=9); +[] n3S14pc=8 & !((n3S14v7failing=1)) -> (n3S14pc'=11); +[] n3S14pc=9 -> (n3S14pc'=-3)&(n3S14ra'=10); +[] n3S14pc=10 -> (n3S14pc'=12); +[] n3S14pc=11 -> (n3S14opt'=2)&(n3S14pc'=-4)&(n3S14ra'=12); +[] numSteps (n3S14pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S25 +n3S25ip0:[1..2] init 1; +n3S25ip1:[1..2] init 1; +n3S25is:[0..2] init 0; +n3S25op0:[1..2] init 1; +n3S25op1:[1..2] init 1; +n3S25os:[0..2] init 0; +n3S25opt:[1..2] init 1; +n3S25pc:[-6..2] init 0; n3S25ra:[-6..2] init 0; +[] n3S25is<2 & n3S25pc=-1 -> (n3S25ip0'=1)&(n3S25ip1'=n3S25ip0)&(n3S25is'=n3S25is+1)&(n3S25pc'=n3S25ra); +[] n3S25is=2 & n3S25pc=-1 -> (n3S25pc'=n3S25ra); +[] n3S25is=0 & n3S25pc=-2 -> (n3S25pc'=n3S25ra); +[] n3S25is>0 & n3S25is<2 & n3S25pc=-2 -> (n3S25ip1'=n3S25ip0)&(n3S25is'=n3S25is+1)&(n3S25pc'=n3S25ra); +[] n3S25is=2 & n3S25pc=-2 -> (n3S25pc'=n3S25ra); +[] n3S25is=0 & n3S25pc=-3 -> (n3S25pc'=n3S25ra); +[] n3S25is>0 & n3S25pc=-3 -> (n3S25ip0'=n3S25ip1)&(n3S25is'=n3S25is-1)&(n3S25pc'=n3S25ra); +[] n3S25os=0 & n3S25pc=-4 -> (n3S25op0'=n3S25opt)&(n3S25os'=1)&(n3S25pc'=-3); +[] n3S25os=1 & n3S25pc=-4 -> (n3S25op1'=n3S25opt)&(n3S25os'=2)&(n3S25pc'=-3); +[] n3S25os=2 & n3S25pc=-4 -> (n3S25pc'=-3); +[n3S27f1] n3S25is=0 -> (n3S25ip0'=2)&(n3S25is'=1); +[n3S27f1] n3S25is=1 -> (n3S25ip1'=2)&(n3S25is'=2); +[n3S27f1] n3S25is=2 -> true; +[n3S24f2] n3S25is=0 -> (n3S25ip0'=1)&(n3S25is'=1); +[n3S24f2] n3S25is=1 -> (n3S25ip1'=1)&(n3S25is'=2); +[n3S24f2] n3S25is=2 -> true; +[] unlk & numSteps0 -> (n3S25pc'=-5)&(unlk'=false); +[n3S25f2] n3S25pc=-5 & n3S25os>0 & n3S25op0=2 -> (n3S25op0'=n3S25op1)&(n3S25os'=n3S25os-1)&(n3S25pc'=-6); +[n3S25f1] n3S25pc=-5 & n3S25os>0 & n3S25op0=1 -> (n3S25op0'=n3S25op1)&(n3S25os'=n3S25os-1)&(n3S25pc'=-6); +[] numSteps (n3S25pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S25pc'=1)&(unlk'=false); +[] n3S25pc=1 -> (n3S25opt'=2)&(n3S25pc'=-4)&(n3S25ra'=2); +[] numSteps (n3S25pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S23 +n3S23ip0:[1..3] init 1; +n3S23ip1:[1..3] init 1; +n3S23is:[0..2] init 0; +n3S23op0:[1..3] init 1; +n3S23op1:[1..3] init 1; +n3S23os:[0..2] init 0; +n3S23opt:[1..3] init 1; +n3S23pc:[-6..2] init 0; n3S23ra:[-6..2] init 0; +[] n3S23is<2 & n3S23pc=-1 -> (n3S23ip0'=1)&(n3S23ip1'=n3S23ip0)&(n3S23is'=n3S23is+1)&(n3S23pc'=n3S23ra); +[] n3S23is=2 & n3S23pc=-1 -> (n3S23pc'=n3S23ra); +[] n3S23is=0 & n3S23pc=-2 -> (n3S23pc'=n3S23ra); +[] n3S23is>0 & n3S23is<2 & n3S23pc=-2 -> (n3S23ip1'=n3S23ip0)&(n3S23is'=n3S23is+1)&(n3S23pc'=n3S23ra); +[] n3S23is=2 & n3S23pc=-2 -> (n3S23pc'=n3S23ra); +[] n3S23is=0 & n3S23pc=-3 -> (n3S23pc'=n3S23ra); +[] n3S23is>0 & n3S23pc=-3 -> (n3S23ip0'=n3S23ip1)&(n3S23is'=n3S23is-1)&(n3S23pc'=n3S23ra); +[] n3S23os=0 & n3S23pc=-4 -> (n3S23op0'=n3S23opt)&(n3S23os'=1)&(n3S23pc'=-3); +[] n3S23os=1 & n3S23pc=-4 -> (n3S23op1'=n3S23opt)&(n3S23os'=2)&(n3S23pc'=-3); +[] n3S23os=2 & n3S23pc=-4 -> (n3S23pc'=-3); +[n3S24f1] n3S23is=0 -> (n3S23ip0'=3)&(n3S23is'=1); +[n3S24f1] n3S23is=1 -> (n3S23ip1'=3)&(n3S23is'=2); +[n3S24f1] n3S23is=2 -> true; +[n3S22f2] n3S23is=0 -> (n3S23ip0'=2)&(n3S23is'=1); +[n3S22f2] n3S23is=1 -> (n3S23ip1'=2)&(n3S23is'=2); +[n3S22f2] n3S23is=2 -> true; +[n3S21f2] n3S23is=0 -> (n3S23ip0'=1)&(n3S23is'=1); +[n3S21f2] n3S23is=1 -> (n3S23ip1'=1)&(n3S23is'=2); +[n3S21f2] n3S23is=2 -> true; +[] unlk & numSteps0 -> (n3S23pc'=-5)&(unlk'=false); +[n3S23f3] n3S23pc=-5 & n3S23os>0 & n3S23op0=3 -> (n3S23op0'=n3S23op1)&(n3S23os'=n3S23os-1)&(n3S23pc'=-6); +[n3S23f2] n3S23pc=-5 & n3S23os>0 & n3S23op0=2 -> (n3S23op0'=n3S23op1)&(n3S23os'=n3S23os-1)&(n3S23pc'=-6); +[n3S23f1] n3S23pc=-5 & n3S23os>0 & n3S23op0=1 -> (n3S23op0'=n3S23op1)&(n3S23os'=n3S23os-1)&(n3S23pc'=-6); +[] numSteps (n3S23pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S23pc'=1)&(unlk'=false); +[] n3S23pc=1 -> (n3S23opt'=3)&(n3S23pc'=-4)&(n3S23ra'=2); +[] numSteps (n3S23pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S16 +n3S16t0:[0..1]; +n3S16ip0:[1..3] init 1; +n3S16ip1:[1..3] init 1; +n3S16is:[0..2] init 0; +n3S16op0:[1..3] init 1; +n3S16op1:[1..3] init 1; +n3S16os:[0..2] init 0; +n3S16opt:[1..3] init 1; +n3S16pc:[-6..6] init 0; n3S16ra:[-6..6] init 0; +[] n3S16is<2 & n3S16pc=-1 -> (n3S16ip0'=1)&(n3S16ip1'=n3S16ip0)&(n3S16is'=n3S16is+1)&(n3S16pc'=n3S16ra); +[] n3S16is=2 & n3S16pc=-1 -> (n3S16pc'=n3S16ra); +[] n3S16is=0 & n3S16pc=-2 -> (n3S16pc'=n3S16ra); +[] n3S16is>0 & n3S16is<2 & n3S16pc=-2 -> (n3S16ip1'=n3S16ip0)&(n3S16is'=n3S16is+1)&(n3S16pc'=n3S16ra); +[] n3S16is=2 & n3S16pc=-2 -> (n3S16pc'=n3S16ra); +[] n3S16is=0 & n3S16pc=-3 -> (n3S16pc'=n3S16ra); +[] n3S16is>0 & n3S16pc=-3 -> (n3S16ip0'=n3S16ip1)&(n3S16is'=n3S16is-1)&(n3S16pc'=n3S16ra); +[] n3S16os=0 & n3S16pc=-4 -> (n3S16op0'=n3S16opt)&(n3S16os'=1)&(n3S16pc'=-3); +[] n3S16os=1 & n3S16pc=-4 -> (n3S16op1'=n3S16opt)&(n3S16os'=2)&(n3S16pc'=-3); +[] n3S16os=2 & n3S16pc=-4 -> (n3S16pc'=-3); +[n3S18f1] n3S16is=0 -> (n3S16ip0'=3)&(n3S16is'=1); +[n3S18f1] n3S16is=1 -> (n3S16ip1'=3)&(n3S16is'=2); +[n3S18f1] n3S16is=2 -> true; +[n3S17f1] n3S16is=0 -> (n3S16ip0'=2)&(n3S16is'=1); +[n3S17f1] n3S16is=1 -> (n3S16ip1'=2)&(n3S16is'=2); +[n3S17f1] n3S16is=2 -> true; +[n3S15f3] n3S16is=0 -> (n3S16ip0'=1)&(n3S16is'=1); +[n3S15f3] n3S16is=1 -> (n3S16ip1'=1)&(n3S16is'=2); +[n3S15f3] n3S16is=2 -> true; +[] unlk & numSteps0 -> (n3S16pc'=-5)&(unlk'=false); +[n3S16f3] n3S16pc=-5 & n3S16os>0 & n3S16op0=3 -> (n3S16op0'=n3S16op1)&(n3S16os'=n3S16os-1)&(n3S16pc'=-6); +[n3S16f2] n3S16pc=-5 & n3S16os>0 & n3S16op0=2 -> (n3S16op0'=n3S16op1)&(n3S16os'=n3S16os-1)&(n3S16pc'=-6); +[n3S16f1] n3S16pc=-5 & n3S16os>0 & n3S16op0=1 -> (n3S16op0'=n3S16op1)&(n3S16os'=n3S16os-1)&(n3S16pc'=-6); +[] numSteps (n3S16pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S16pc'=1)&(unlk'=false); +[] n3S16pc=1 -> 0.5:(n3S16t0'=0)&(n3S16pc'=2) + 0.5:(n3S16t0'=1)&(n3S16pc'=2); +[] n3S16pc=2 & (n3S16t0=1) -> (n3S16pc'=3); +[] n3S16pc=2 & !((n3S16t0=1)) -> (n3S16pc'=5); +[] n3S16pc=3 -> (n3S16opt'=2)&(n3S16pc'=-4)&(n3S16ra'=4); +[] n3S16pc=4 -> (n3S16pc'=6); +[] n3S16pc=5 -> (n3S16opt'=3)&(n3S16pc'=-4)&(n3S16ra'=6); +[] numSteps (n3S16pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..3] init 1; +n2S7ip1:[1..3] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..3] init 1; +n2S7op1:[1..3] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..3] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S8f1] n2S7is=0 -> (n2S7ip0'=3)&(n2S7is'=1); +[n2S8f1] n2S7is=1 -> (n2S7ip1'=3)&(n2S7is'=2); +[n2S8f1] n2S7is=2 -> true; +[n2S6f2] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S6f2] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S6f2] n2S7is=2 -> true; +[n2S5f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S5f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S5f2] n2S7is=2 -> true; +[] unlk & numSteps0 -> (n2S7pc'=-5)&(unlk'=false); +[n2S7f3] n2S7pc=-5 & n2S7os>0 & n2S7op0=3 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S7pc'=1)&(unlk'=false); +[] n2S7pc=1 -> (n2S7opt'=3)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 & n3S10is=0 & n3S10os=0 & n3S11is=0 & n3S11os=0 & n3S12is=0 & n3S12os=0 & n3S13is=0 & n3S13os=0 & n3S14is=0 & n3S14os=0 & n3S15is=0 & n3S15os=0 & n3S16is=0 & n3S16os=0 & n3S17is=0 & n3S17os=0 & n3S18is=0 & n3S18os=0 & n3S19is=0 & n3S19os=0 & n3S20is=0 & n3S20os=0 & n3S21is=0 & n3S21os=0 & n3S22is=0 & n3S22os=0 & n3S23is=0 & n3S23os=0 & n3S24is=0 & n3S24os=0 & n3S25is=0 & n3S25os=0 & n3S26is=0 & n3S26os=0 & n3S27is=0 & n3S27os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/keyur/reliability-6.bayonet b/keyur/reliability-6.bayonet new file mode 100644 index 0000000..33c9563 --- /dev/null +++ b/keyur/reliability-6.bayonet @@ -0,0 +1,56 @@ +num_steps 10; + +topology{ + nodes{ H0, H1, S0, S1, S2, S3 } + links{ + (H0,pt1) <-> (S0,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (S3,pt1), + (S2,pt2) <-> (S3,pt2), + (S3,pt3) <-> (H1,pt1) + } +} +queue_capacity 2; + +programs{ H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3 } + +query probability(arrived@H1==1); + +packet_fields{ } + +def h0(){ + fwd(1); +} +def h1() state arrived(0){ + arrived=1; + drop; +} +def s0(){ + if flip(1/2) == 1{ + fwd(2); + }else{ + fwd(3); + } +} +def s1(){ + fwd(2); +} +def s2()state failing(2){ + if failing == 2 { if(flip(1/1000) == 1) { failing = 1; } else { failing = 0; } } + if failing == 1 { drop } + else{ fwd(2); } +} +def s3(){ + fwd(3); +} + +def scheduler() state num_actions(0){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + num_actions += 1; + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/keyur/reliability-6.prism b/keyur/reliability-6.prism new file mode 100644 index 0000000..9a68e57 --- /dev/null +++ b/keyur/reliability-6.prism @@ -0,0 +1,236 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 10; +global numSteps:[0..maxNumSteps] init 0; +module n2H0 +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..2] init 0; n2H0ra:[-6..2] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=2); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2H1f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2H1f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2H1f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2v7failing:[INTMIN..INTMAX] init 2; +n2S2t0:[0..1]; +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..12] init 0; n2S2ra:[-6..12] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & (n2S2v7failing=2) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2v7failing=2)) -> (n2S2pc'=8); +[] n2S2pc=2 -> 0.999:(n2S2t0'=0)&(n2S2pc'=3) + 0.001:(n2S2t0'=1)&(n2S2pc'=3); +[] n2S2pc=3 & (n2S2t0=1) -> (n2S2pc'=4); +[] n2S2pc=3 & !((n2S2t0=1)) -> (n2S2pc'=6); +[] n2S2pc=4 & 1>=INTMIN & 1<=INTMAX -> (n2S2v7failing'=1)&(n2S2pc'=5); +[] n2S2pc=5 -> (n2S2pc'=7); +[] n2S2pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S2v7failing'=0)&(n2S2pc'=7); +[] n2S2pc=7 -> (n2S2pc'=8); +[] n2S2pc=8 & (n2S2v7failing=1) -> (n2S2pc'=9); +[] n2S2pc=8 & !((n2S2v7failing=1)) -> (n2S2pc'=11); +[] n2S2pc=9 -> (n2S2pc'=-3)&(n2S2ra'=10); +[] n2S2pc=10 -> (n2S2pc'=12); +[] n2S2pc=11 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=12); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..6] init 0; n2S0ra:[-6..6] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 & (n2S0t0=1) -> (n2S0pc'=3); +[] n2S0pc=2 & !((n2S0t0=1)) -> (n2S0pc'=5); +[] n2S0pc=3 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=4); +[] n2S0pc=4 -> (n2S0pc'=6); +[] n2S0pc=5 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v7arrived:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S3f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S3f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S3f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & 1>=INTMIN & 1<=INTMAX -> (n2H1v7arrived'=1)&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/keyur/reliability-6.psi b/keyur/reliability-6.psi new file mode 100644 index 0000000..d126b64 --- /dev/null +++ b/keyur/reliability-6.psi @@ -0,0 +1,238 @@ +num_steps := 10; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 6, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + arrived: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + arrived = 0; + } + def __run(){ + arrived = 1; + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (flip((1/2))==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + failing: ℝ; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + failing = 2; + } + def __run(){ + if (failing==2){ + if (flip((1/1000))==1){ + failing = 1; + } else { + failing = 0; + } + } + if (failing==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __s3_ty{ + Q_in: Queue, Q_out: Queue; + def __s3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s3_ty; + num_actions: ℝ; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s3_ty(); + num_actions = 0; + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else if i == 4 { __S2.Q_in } else { __S3.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else if i == 4 { __S2.Q_out } else { __S3.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + num_actions += 1; + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size())); + q₁ := Expectation(((if H1 == 1 { __d.__H1.arrived } else { assert(0) }) == 1) !=0); + return (q₁); +} + diff --git a/keyur/reliability-6d.bayonet b/keyur/reliability-6d.bayonet new file mode 100644 index 0000000..9085d89 --- /dev/null +++ b/keyur/reliability-6d.bayonet @@ -0,0 +1,59 @@ +num_steps 10; + +topology{ + nodes{ H0, H1, S0, S1, S2, S3 } + links{ + (H0,pt1) <-> (S0,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (S3,pt1), + (S2,pt2) <-> (S3,pt2), + (S3,pt3) <-> (H1,pt1) + } +} +queue_capacity 2; + +programs{ H0 -> h0, H1 -> h1, S0 -> s0, S1 -> s1, S2 -> s2, S3 -> s3 } + +query probability(arrived@H1==1); + +packet_fields{ } + +def h0(){ + fwd(1); +} +def h1() state arrived(0){ + arrived=1; + drop; +} +def s0(){ + if flip(1/2) == 1{ + fwd(2); + }else{ + fwd(3); + } +} +def s1(){ + fwd(2); +} +def s2()state failing(2){ + if failing == 2 { if(flip(1/1000) == 1) { failing = 1; } else { failing = 0; } } + if failing == 1 { drop } + else{ fwd(2); } +} +def s3(){ + fwd(3); +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/keyur/reliability-6d.prism b/keyur/reliability-6d.prism new file mode 100644 index 0000000..6f784a6 --- /dev/null +++ b/keyur/reliability-6d.prism @@ -0,0 +1,250 @@ +dtmc +global unlk:[-1..11] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 10; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 12; +global numSkips:[0..12] init 0; +module n2H0 +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..2] init 0; n2H0ra:[-6..2] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk=6 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=2); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2H1f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2H1f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2H1f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[] unlk=11 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2v7failing:[INTMIN..INTMAX] init 2; +n2S2t0:[0..1]; +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..12] init 0; n2S2ra:[-6..12] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk=10 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 & (n2S2v7failing=2) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2v7failing=2)) -> (n2S2pc'=8); +[] n2S2pc=2 -> 0.999:(n2S2t0'=0)&(n2S2pc'=3) + 0.001:(n2S2t0'=1)&(n2S2pc'=3); +[] n2S2pc=3 & (n2S2t0=1) -> (n2S2pc'=4); +[] n2S2pc=3 & !((n2S2t0=1)) -> (n2S2pc'=6); +[] n2S2pc=4 & 1>=INTMIN & 1<=INTMAX -> (n2S2v7failing'=1)&(n2S2pc'=5); +[] n2S2pc=5 -> (n2S2pc'=7); +[] n2S2pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S2v7failing'=0)&(n2S2pc'=7); +[] n2S2pc=7 -> (n2S2pc'=8); +[] n2S2pc=8 & (n2S2v7failing=1) -> (n2S2pc'=9); +[] n2S2pc=8 & !((n2S2v7failing=1)) -> (n2S2pc'=11); +[] n2S2pc=9 -> (n2S2pc'=-3)&(n2S2ra'=10); +[] n2S2pc=10 -> (n2S2pc'=12); +[] n2S2pc=11 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=12); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=9 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..6] init 0; n2S0ra:[-6..6] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk=8 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 & (n2S0t0=1) -> (n2S0pc'=3); +[] n2S0pc=2 & !((n2S0t0=1)) -> (n2S0pc'=5); +[] n2S0pc=3 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=4); +[] n2S0pc=4 -> (n2S0pc'=6); +[] n2S0pc=5 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=6); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v7arrived:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S3f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S3f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S3f3] n2H1is=2 -> true; +[] unlk=7 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & 1>=INTMIN & 1<=INTMAX -> (n2H1v7arrived'=1)&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/keyur/reliability-6d.psi b/keyur/reliability-6d.psi new file mode 100644 index 0000000..8553884 --- /dev/null +++ b/keyur/reliability-6d.psi @@ -0,0 +1,237 @@ +num_steps := 10; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 6, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5; +dat Packet{ + def Packet(){ + } +} +dat __h0_ty{ + Q_in: Queue, Q_out: Queue; + def __h0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } +} +dat __h1_ty{ + Q_in: Queue, Q_out: Queue; + arrived: ℝ; + def __h1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + arrived = 0; + } + def __run(){ + arrived = 1; + Q_in.popFront(); + } +} +dat __s0_ty{ + Q_in: Queue, Q_out: Queue; + def __s0_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if (flip((1/2))==1){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } + } +} +dat __s1_ty{ + Q_in: Queue, Q_out: Queue; + def __s1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __s2_ty{ + Q_in: Queue, Q_out: Queue; + failing: ℝ; + def __s2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + failing = 2; + } + def __run(){ + if (failing==2){ + if (flip((1/1000))==1){ + failing = 1; + } else { + failing = 0; + } + } + if (failing==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __s3_ty{ + Q_in: Queue, Q_out: Queue; + def __s3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],3)); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __h0_ty, __H1 : __h1_ty, __S0 : __s0_ty, __S1 : __s1_ty, __S2 : __s2_ty, __S3 : __s3_ty; + next: ℝ; + def __D(){ + __H0 = __h0_ty(), __H1 = __h1_ty(), __S0 = __s0_ty(), __S1 = __s1_ty(), __S2 = __s2_ty(), __S3 = __s3_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else { __S3.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else { __S3.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 3)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __H0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 2)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 3 { + __H1.Q_in.pushBack((pkt, 1)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size())); + q₁ := Expectation(((if H1 == 1 { __d.__H1.arrived } else { assert(0) }) == 1) !=0); + return (q₁); +} + diff --git a/keyur/reliability-6n.prism b/keyur/reliability-6n.prism new file mode 100644 index 0000000..c9c07e6 --- /dev/null +++ b/keyur/reliability-6n.prism @@ -0,0 +1,236 @@ +mdp +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 10; +global numSteps:[0..maxNumSteps] init 0; +module n2H0 +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..2] init 0; n2H0ra:[-6..2] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S0f1] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S0f1] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S0f1] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=2); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..3] init 1; +n2S3ip1:[1..3] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..3] init 1; +n2S3op1:[1..3] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..3] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2H1f1] n2S3is=0 -> (n2S3ip0'=3)&(n2S3is'=1); +[n2H1f1] n2S3is=1 -> (n2S3ip1'=3)&(n2S3is'=2); +[n2H1f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[n2S1f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S1f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S1f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f3] n2S3pc=-5 & n2S3os>0 & n2S3op0=3 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=3)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2v7failing:[INTMIN..INTMAX] init 2; +n2S2t0:[0..1]; +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..12] init 0; n2S2ra:[-6..12] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f2] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 & (n2S2v7failing=2) -> (n2S2pc'=2); +[] n2S2pc=1 & !((n2S2v7failing=2)) -> (n2S2pc'=8); +[] n2S2pc=2 -> 0.999:(n2S2t0'=0)&(n2S2pc'=3) + 0.001:(n2S2t0'=1)&(n2S2pc'=3); +[] n2S2pc=3 & (n2S2t0=1) -> (n2S2pc'=4); +[] n2S2pc=3 & !((n2S2t0=1)) -> (n2S2pc'=6); +[] n2S2pc=4 & 1>=INTMIN & 1<=INTMAX -> (n2S2v7failing'=1)&(n2S2pc'=5); +[] n2S2pc=5 -> (n2S2pc'=7); +[] n2S2pc=6 & 0>=INTMIN & 0<=INTMAX -> (n2S2v7failing'=0)&(n2S2pc'=7); +[] n2S2pc=7 -> (n2S2pc'=8); +[] n2S2pc=8 & (n2S2v7failing=1) -> (n2S2pc'=9); +[] n2S2pc=8 & !((n2S2v7failing=1)) -> (n2S2pc'=11); +[] n2S2pc=9 -> (n2S2pc'=-3)&(n2S2ra'=10); +[] n2S2pc=10 -> (n2S2pc'=12); +[] n2S2pc=11 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=12); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S3f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S3f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S3f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..6] init 0; n2S0ra:[-6..6] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2H0f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2H0f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2H0f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 & (n2S0t0=1) -> (n2S0pc'=3); +[] n2S0pc=2 & !((n2S0t0=1)) -> (n2S0pc'=5); +[] n2S0pc=3 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=4); +[] n2S0pc=4 -> (n2S0pc'=6); +[] n2S0pc=5 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v7arrived:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S3f3] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S3f3] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S3f3] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & 1>=INTMIN & 1<=INTMAX -> (n2H1v7arrived'=1)&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/keyur/reliability-n.pctl b/keyur/reliability-n.pctl new file mode 100644 index 0000000..02f08f3 --- /dev/null +++ b/keyur/reliability-n.pctl @@ -0,0 +1,2 @@ +Pmin=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / Pmax=? [ F finished & obsrvOK ] +Pmax=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / Pmin=? [ F finished & obsrvOK ] diff --git a/keyur/reliability-s.pctl b/keyur/reliability-s.pctl new file mode 100644 index 0000000..cd28a6a --- /dev/null +++ b/keyur/reliability-s.pctl @@ -0,0 +1 @@ +P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] diff --git a/keyur/reliability.pctl b/keyur/reliability.pctl new file mode 100644 index 0000000..b4a4f14 --- /dev/null +++ b/keyur/reliability.pctl @@ -0,0 +1 @@ +P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/realcong/ComSer-d.bayonet b/realcong/ComSer-d.bayonet new file mode 100644 index 0000000..8904e4d --- /dev/null +++ b/realcong/ComSer-d.bayonet @@ -0,0 +1,76 @@ +parameters{ NUM_PACKETS(3) } + +num_steps 60; + +query probability(pkt_count@H1 < NUM_PACKETS); + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, S10 } + links{ + (H0,pt1) <-> (S9,pt3), + (S9,pt1) <-> (S0,pt1), + (S9,pt2) <-> (S3,pt1), + (S0,pt2) <-> (S7,pt1), + (S0,pt3) <-> (S1,pt1), + (S1,pt4) <-> (S2,pt2), + (S1,pt2) <-> (S6,pt3), + (S1,pt3) <-> (S8,pt3), + (S2,pt1) <-> (S3,pt2), + (S2,pt3) <-> (S4,pt1), + (S4,pt2) <-> (S5,pt1), + (S5,pt2) <-> (S6,pt1), + (S6,pt2) <-> (S10,pt1), + (S7,pt2) <-> (S8,pt1), + (S8,pt2) <-> (S10,pt3), + (S10,pt2) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> cngsrc, H1 -> cngdst, S0 -> swch1, S1 -> swch1, S2 -> swch2, S3 -> fwdr, S4 -> fwdr, S5 -> fwdr, S6 -> fwdr, S7 -> fwdr, S8 -> fwdr, S9 -> swch3, S10 -> fwdr } + +def cngsrc(pkt, port) state pkt_count(0) { + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +def cngdst(pkt, port) state pkt_count(0) { + pkt_count = pkt_count + 1; + drop; +} + +def fwdr(pkt, port) { + fwd(2); +} + +def swch1(pkt, port) { + fwd(flip(1/2)+2); +} + +def swch2(pkt, port) { + fwd(flip(3/7)+2); +} + +def swch3(pkt, port) { + fwd(flip(4/9)+1); +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/realcong/ComSer-d.prism b/realcong/ComSer-d.prism new file mode 100644 index 0000000..77167a1 --- /dev/null +++ b/realcong/ComSer-d.prism @@ -0,0 +1,514 @@ +dtmc +global unlk:[-1..25] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 60; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 26; +global numSkips:[0..26] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S9f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S9f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S9f3] n2H0is=2 -> true; +[] unlk=13 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S5f1] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S5f1] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S5f1] n2S4is=2 -> true; +[n2S2f3] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S2f3] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S2f3] n2S4is=2 -> true; +[] unlk=19 & numSteps0 -> (n2S4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=19 & numSteps (unlk'=20)&(numSkips'=numSkips+1); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=20)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2S4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S6f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S6f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S6f1] n2S5is=2 -> true; +[n2S4f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[] unlk=20 & numSteps0 -> (n2S5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=20 & numSteps (unlk'=21)&(numSkips'=numSkips+1); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=21)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2S5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..3] init 0; n2S0ra:[-6..3] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S1f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S7f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S7f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S7f1] n2S0is=2 -> true; +[n2S9f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S9f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S9f1] n2S0is=2 -> true; +[] unlk=15 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 -> (n2S0opt'=(n2S0t0+2))&(n2S0pc'=-4)&(n2S0ra'=3); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9t0:[0..1]; +n2S9ip0:[1..3] init 1; +n2S9ip1:[1..3] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..3] init 1; +n2S9op1:[1..3] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..3] init 1; +n2S9pc:[-6..3] init 0; n2S9ra:[-6..3] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n2H0f1] n2S9is=0 -> (n2S9ip0'=3)&(n2S9is'=1); +[n2H0f1] n2S9is=1 -> (n2S9ip1'=3)&(n2S9is'=2); +[n2H0f1] n2S9is=2 -> true; +[n2S3f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n2S3f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n2S3f1] n2S9is=2 -> true; +[n2S0f1] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S0f1] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S0f1] n2S9is=2 -> true; +[] unlk=24 & numSteps0 -> (n2S9pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=24 & numSteps (unlk'=25)&(numSkips'=numSkips+1); +[n2S9f3] n2S9pc=-5 & n2S9os>0 & n2S9op0=3 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=25)&(numSteps'=numSteps+1); +[] unlk=11 & numSteps0 -> (n2S9pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[] n2S9pc=1 -> 0.555556:(n2S9t0'=0)&(n2S9pc'=2) + 0.444444:(n2S9t0'=1)&(n2S9pc'=2); +[] n2S9pc=2 -> (n2S9opt'=(n2S9t0+1))&(n2S9pc'=-4)&(n2S9ra'=3); +[] numSteps (n2S9pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +endmodule +module n3S10 +n3S10ip0:[1..3] init 1; +n3S10ip1:[1..3] init 1; +n3S10is:[0..2] init 0; +n3S10op0:[1..3] init 1; +n3S10op1:[1..3] init 1; +n3S10os:[0..2] init 0; +n3S10opt:[1..3] init 1; +n3S10pc:[-6..2] init 0; n3S10ra:[-6..2] init 0; +[] n3S10is<2 & n3S10pc=-1 -> (n3S10ip0'=1)&(n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-1 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10is<2 & n3S10pc=-2 -> (n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-3 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10pc=-3 -> (n3S10ip0'=n3S10ip1)&(n3S10is'=n3S10is-1)&(n3S10pc'=n3S10ra); +[] n3S10os=0 & n3S10pc=-4 -> (n3S10op0'=n3S10opt)&(n3S10os'=1)&(n3S10pc'=-3); +[] n3S10os=1 & n3S10pc=-4 -> (n3S10op1'=n3S10opt)&(n3S10os'=2)&(n3S10pc'=-3); +[] n3S10os=2 & n3S10pc=-4 -> (n3S10pc'=-3); +[n2S8f2] n3S10is=0 -> (n3S10ip0'=3)&(n3S10is'=1); +[n2S8f2] n3S10is=1 -> (n3S10ip1'=3)&(n3S10is'=2); +[n2S8f2] n3S10is=2 -> true; +[n2H1f1] n3S10is=0 -> (n3S10ip0'=2)&(n3S10is'=1); +[n2H1f1] n3S10is=1 -> (n3S10ip1'=2)&(n3S10is'=2); +[n2H1f1] n3S10is=2 -> true; +[n2S6f2] n3S10is=0 -> (n3S10ip0'=1)&(n3S10is'=1); +[n2S6f2] n3S10is=1 -> (n3S10ip1'=1)&(n3S10is'=2); +[n2S6f2] n3S10is=2 -> true; +[] unlk=25 & numSteps0 -> (n3S10pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=25 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n3S10f3] n3S10pc=-5 & n3S10os>0 & n3S10op0=3 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f2] n3S10pc=-5 & n3S10os>0 & n3S10op0=2 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f1] n3S10pc=-5 & n3S10os>0 & n3S10op0=1 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[] numSteps (n3S10pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=12 & numSteps0 -> (n3S10pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[] n3S10pc=1 -> (n3S10opt'=2)&(n3S10pc'=-4)&(n3S10ra'=2); +[] numSteps (n3S10pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1t0:[0..1]; +n2S1ip0:[1..4] init 1; +n2S1ip1:[1..4] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..4] init 1; +n2S1op1:[1..4] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..4] init 1; +n2S1pc:[-6..3] init 0; n2S1ra:[-6..3] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=4)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=4)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S8f3] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2S8f3] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2S8f3] n2S1is=2 -> true; +[n2S6f3] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S6f3] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S6f3] n2S1is=2 -> true; +[n2S0f3] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f3] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f3] n2S1is=2 -> true; +[] unlk=16 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[n2S1f4] n2S1pc=-5 & n2S1os>0 & n2S1op0=4 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> 0.5:(n2S1t0'=0)&(n2S1pc'=2) + 0.5:(n2S1t0'=1)&(n2S1pc'=2); +[] n2S1pc=2 -> (n2S1opt'=(n2S1t0+2))&(n2S1pc'=-4)&(n2S1ra'=3); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..2] init 0; n2S8ra:[-6..2] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n2S1f3] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n2S1f3] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n2S1f3] n2S8is=2 -> true; +[n3S10f3] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n3S10f3] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n3S10f3] n2S8is=2 -> true; +[n2S7f2] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S7f2] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S7f2] n2S8is=2 -> true; +[] unlk=23 & numSteps0 -> (n2S8pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=23 & numSteps (unlk'=24)&(numSkips'=numSkips+1); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=24)&(numSteps'=numSteps+1); +[] unlk=10 & numSteps0 -> (n2S8pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[] n2S8pc=1 -> (n2S8opt'=2)&(n2S8pc'=-4)&(n2S8ra'=2); +[] numSteps (n2S8pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n3S10f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n3S10f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n3S10f2] n2H1is=2 -> true; +[] unlk=14 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..3] init 1; +n2S6ip1:[1..3] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..3] init 1; +n2S6op1:[1..3] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..3] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S1f2] n2S6is=0 -> (n2S6ip0'=3)&(n2S6is'=1); +[n2S1f2] n2S6is=1 -> (n2S6ip1'=3)&(n2S6is'=2); +[n2S1f2] n2S6is=2 -> true; +[n3S10f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n3S10f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n3S10f1] n2S6is=2 -> true; +[n2S5f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S5f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S5f2] n2S6is=2 -> true; +[] unlk=21 & numSteps0 -> (n2S6pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=21 & numSteps (unlk'=22)&(numSkips'=numSkips+1); +[n2S6f3] n2S6pc=-5 & n2S6os>0 & n2S6op0=3 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=22)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2S6pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S2f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f1] n2S3is=2 -> true; +[n2S9f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S9f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S9f2] n2S3is=2 -> true; +[] unlk=18 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=18 & numSteps (unlk'=19)&(numSkips'=numSkips+1); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=19)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2t0:[0..1]; +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..3] init 0; n2S2ra:[-6..3] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S4f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S4f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S4f1] n2S2is=2 -> true; +[n2S1f4] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f4] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f4] n2S2is=2 -> true; +[n2S3f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[] unlk=17 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=18)&(numSkips'=numSkips+1); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=18)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> 0.571429:(n2S2t0'=0)&(n2S2pc'=2) + 0.428571:(n2S2t0'=1)&(n2S2pc'=2); +[] n2S2pc=2 -> (n2S2opt'=(n2S2t0+2))&(n2S2pc'=-4)&(n2S2ra'=3); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..2] init 1; +n2S7ip1:[1..2] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..2] init 1; +n2S7op1:[1..2] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..2] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S8f1] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S8f1] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S8f1] n2S7is=2 -> true; +[n2S0f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S0f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S0f2] n2S7is=2 -> true; +[] unlk=22 & numSteps0 -> (n2S7pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=22 & numSteps (unlk'=23)&(numSkips'=numSkips+1); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=23)&(numSteps'=numSteps+1); +[] unlk=9 & numSteps0 -> (n2S7pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[] n2S7pc=1 -> (n2S7opt'=2)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 & n3S10is=0 & n3S10os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 13, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9, S8 := 10, S9 := 11, S10 := 12; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __cngsrc_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __cngsrc_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + Q_in.pushFront((Packet(),0)); + } else { + Q_in.popFront(); + } + } +} +dat __cngdst_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __cngdst_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __fwdr_ty{ + Q_in: Queue, Q_out: Queue; + def __fwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __swch1_ty{ + Q_in: Queue, Q_out: Queue; + def __swch1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((1/2))+2))); } + } +} +dat __swch2_ty{ + Q_in: Queue, Q_out: Queue; + def __swch2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((3/7))+2))); } + } +} +dat __swch3_ty{ + Q_in: Queue, Q_out: Queue; + def __swch3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((4/9))+1))); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __cngsrc_ty, __H1 : __cngdst_ty, __S0 : __swch1_ty, __S1 : __swch1_ty, __S2 : __swch2_ty, __S3 : __fwdr_ty, __S4 : __fwdr_ty, __S5 : __fwdr_ty, __S6 : __fwdr_ty, __S7 : __fwdr_ty, __S8 : __fwdr_ty, __S9 : __swch3_ty, __S10 : __fwdr_ty; + next: ℝ; + def __D(){ + __H0 = __cngsrc_ty(), __H1 = __cngdst_ty(), __S0 = __swch1_ty(), __S1 = __swch1_ty(), __S2 = __swch2_ty(), __S3 = __fwdr_ty(), __S4 = __fwdr_ty(), __S5 = __fwdr_ty(), __S6 = __fwdr_ty(), __S7 = __fwdr_ty(), __S8 = __fwdr_ty(), __S9 = __swch3_ty(), __S10 = __fwdr_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else if current == 5 { __S3.Q_in } else if current == 6 { __S4.Q_in } else if current == 7 { __S5.Q_in } else if current == 8 { __S6.Q_in } else if current == 9 { __S7.Q_in } else if current == 10 { __S8.Q_in } else if current == 11 { __S9.Q_in } else { __S10.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else if (current - k) == 5 { __S3.Q_out } else if (current - k) == 6 { __S4.Q_out } else if (current - k) == 7 { __S5.Q_out } else if (current - k) == 8 { __S6.Q_out } else if (current - k) == 9 { __S7.Q_out } else if (current - k) == 10 { __S8.Q_out } else if (current - k) == 11 { __S9.Q_out } else { __S10.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() || __S8.Q_in.size() || __S8.Q_out.size() || __S9.Q_in.size() || __S9.Q_out.size() || __S10.Q_in.size() || __S10.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S10.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __S8.Q_in.pushBack((pkt, 3)); + } + if port == 4 { + __S2.Q_in.pushBack((pkt, 2)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 4)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S10.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 2)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S8.Q_in.pushBack((pkt, 1)); + } + } + if node == 10 && __S8.Q_out.size() { + (pkt,port) := __S8.Q_out.takeFront(); + if port == 1 { + __S7.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S10.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 3)); + } + } + if node == 11 && __S9.Q_out.size() { + (pkt,port) := __S9.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 12 && __S10.Q_out.size() { + (pkt,port) := __S10.Q_out.takeFront(); + if port == 1 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S8.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + if node == 10 && __S8.Q_in.size() { + __S8.__run(); + } + if node == 11 && __S9.Q_in.size() { + __S9.__run(); + } + if node == 12 && __S10.Q_in.size() { + __S10.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size() || __d.__S8.Q_in.size() || __d.__S8.Q_out.size() || __d.__S9.Q_in.size() || __d.__S9.Q_out.size() || __d.__S10.Q_in.size() || __d.__S10.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/realcong/ComSer-n.prism b/realcong/ComSer-n.prism new file mode 100644 index 0000000..0bf0dc9 --- /dev/null +++ b/realcong/ComSer-n.prism @@ -0,0 +1,486 @@ +mdp +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 60; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S9f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S9f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S9f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S5f1] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S5f1] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S5f1] n2S4is=2 -> true; +[n2S2f3] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S2f3] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S2f3] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S6f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S6f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S6f1] n2S5is=2 -> true; +[n2S4f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..3] init 0; n2S0ra:[-6..3] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S1f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S7f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S7f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S7f1] n2S0is=2 -> true; +[n2S9f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S9f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S9f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 -> (n2S0opt'=(n2S0t0+2))&(n2S0pc'=-4)&(n2S0ra'=3); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9t0:[0..1]; +n2S9ip0:[1..3] init 1; +n2S9ip1:[1..3] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..3] init 1; +n2S9op1:[1..3] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..3] init 1; +n2S9pc:[-6..3] init 0; n2S9ra:[-6..3] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n2H0f1] n2S9is=0 -> (n2S9ip0'=3)&(n2S9is'=1); +[n2H0f1] n2S9is=1 -> (n2S9ip1'=3)&(n2S9is'=2); +[n2H0f1] n2S9is=2 -> true; +[n2S3f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n2S3f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n2S3f1] n2S9is=2 -> true; +[n2S0f1] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S0f1] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S0f1] n2S9is=2 -> true; +[] unlk & numSteps0 -> (n2S9pc'=-5)&(unlk'=false); +[n2S9f3] n2S9pc=-5 & n2S9os>0 & n2S9op0=3 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S9pc'=1)&(unlk'=false); +[] n2S9pc=1 -> 0.555556:(n2S9t0'=0)&(n2S9pc'=2) + 0.444444:(n2S9t0'=1)&(n2S9pc'=2); +[] n2S9pc=2 -> (n2S9opt'=(n2S9t0+1))&(n2S9pc'=-4)&(n2S9ra'=3); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S10 +n3S10ip0:[1..3] init 1; +n3S10ip1:[1..3] init 1; +n3S10is:[0..2] init 0; +n3S10op0:[1..3] init 1; +n3S10op1:[1..3] init 1; +n3S10os:[0..2] init 0; +n3S10opt:[1..3] init 1; +n3S10pc:[-6..2] init 0; n3S10ra:[-6..2] init 0; +[] n3S10is<2 & n3S10pc=-1 -> (n3S10ip0'=1)&(n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-1 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10is<2 & n3S10pc=-2 -> (n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-3 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10pc=-3 -> (n3S10ip0'=n3S10ip1)&(n3S10is'=n3S10is-1)&(n3S10pc'=n3S10ra); +[] n3S10os=0 & n3S10pc=-4 -> (n3S10op0'=n3S10opt)&(n3S10os'=1)&(n3S10pc'=-3); +[] n3S10os=1 & n3S10pc=-4 -> (n3S10op1'=n3S10opt)&(n3S10os'=2)&(n3S10pc'=-3); +[] n3S10os=2 & n3S10pc=-4 -> (n3S10pc'=-3); +[n2S8f2] n3S10is=0 -> (n3S10ip0'=3)&(n3S10is'=1); +[n2S8f2] n3S10is=1 -> (n3S10ip1'=3)&(n3S10is'=2); +[n2S8f2] n3S10is=2 -> true; +[n2H1f1] n3S10is=0 -> (n3S10ip0'=2)&(n3S10is'=1); +[n2H1f1] n3S10is=1 -> (n3S10ip1'=2)&(n3S10is'=2); +[n2H1f1] n3S10is=2 -> true; +[n2S6f2] n3S10is=0 -> (n3S10ip0'=1)&(n3S10is'=1); +[n2S6f2] n3S10is=1 -> (n3S10ip1'=1)&(n3S10is'=2); +[n2S6f2] n3S10is=2 -> true; +[] unlk & numSteps0 -> (n3S10pc'=-5)&(unlk'=false); +[n3S10f3] n3S10pc=-5 & n3S10os>0 & n3S10op0=3 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f2] n3S10pc=-5 & n3S10os>0 & n3S10op0=2 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f1] n3S10pc=-5 & n3S10os>0 & n3S10op0=1 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[] numSteps (n3S10pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S10pc'=1)&(unlk'=false); +[] n3S10pc=1 -> (n3S10opt'=2)&(n3S10pc'=-4)&(n3S10ra'=2); +[] numSteps (n3S10pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1t0:[0..1]; +n2S1ip0:[1..4] init 1; +n2S1ip1:[1..4] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..4] init 1; +n2S1op1:[1..4] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..4] init 1; +n2S1pc:[-6..3] init 0; n2S1ra:[-6..3] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=4)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=4)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S8f3] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2S8f3] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2S8f3] n2S1is=2 -> true; +[n2S6f3] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S6f3] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S6f3] n2S1is=2 -> true; +[n2S0f3] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f3] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f3] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f4] n2S1pc=-5 & n2S1os>0 & n2S1op0=4 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> 0.5:(n2S1t0'=0)&(n2S1pc'=2) + 0.5:(n2S1t0'=1)&(n2S1pc'=2); +[] n2S1pc=2 -> (n2S1opt'=(n2S1t0+2))&(n2S1pc'=-4)&(n2S1ra'=3); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..2] init 0; n2S8ra:[-6..2] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n2S1f3] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n2S1f3] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n2S1f3] n2S8is=2 -> true; +[n3S10f3] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n3S10f3] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n3S10f3] n2S8is=2 -> true; +[n2S7f2] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S7f2] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S7f2] n2S8is=2 -> true; +[] unlk & numSteps0 -> (n2S8pc'=-5)&(unlk'=false); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S8pc'=1)&(unlk'=false); +[] n2S8pc=1 -> (n2S8opt'=2)&(n2S8pc'=-4)&(n2S8ra'=2); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n3S10f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n3S10f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n3S10f2] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..3] init 1; +n2S6ip1:[1..3] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..3] init 1; +n2S6op1:[1..3] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..3] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S1f2] n2S6is=0 -> (n2S6ip0'=3)&(n2S6is'=1); +[n2S1f2] n2S6is=1 -> (n2S6ip1'=3)&(n2S6is'=2); +[n2S1f2] n2S6is=2 -> true; +[n3S10f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n3S10f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n3S10f1] n2S6is=2 -> true; +[n2S5f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S5f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S5f2] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f3] n2S6pc=-5 & n2S6os>0 & n2S6op0=3 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S2f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f1] n2S3is=2 -> true; +[n2S9f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S9f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S9f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2t0:[0..1]; +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..3] init 0; n2S2ra:[-6..3] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S4f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S4f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S4f1] n2S2is=2 -> true; +[n2S1f4] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f4] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f4] n2S2is=2 -> true; +[n2S3f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> 0.571429:(n2S2t0'=0)&(n2S2pc'=2) + 0.428571:(n2S2t0'=1)&(n2S2pc'=2); +[] n2S2pc=2 -> (n2S2opt'=(n2S2t0+2))&(n2S2pc'=-4)&(n2S2ra'=3); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..2] init 1; +n2S7ip1:[1..2] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..2] init 1; +n2S7op1:[1..2] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..2] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S8f1] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S8f1] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S8f1] n2S7is=2 -> true; +[n2S0f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S0f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S0f2] n2S7is=2 -> true; +[] unlk & numSteps0 -> (n2S7pc'=-5)&(unlk'=false); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S7pc'=1)&(unlk'=false); +[] n2S7pc=1 -> (n2S7opt'=2)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 & n3S10is=0 & n3S10os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count (S9,pt3), + (S9,pt1) <-> (S0,pt1), + (S9,pt2) <-> (S3,pt1), + (S0,pt2) <-> (S7,pt1), + (S0,pt3) <-> (S1,pt1), + (S1,pt4) <-> (S2,pt2), + (S1,pt2) <-> (S6,pt3), + (S1,pt3) <-> (S8,pt3), + (S2,pt1) <-> (S3,pt2), + (S2,pt3) <-> (S4,pt1), + (S4,pt2) <-> (S5,pt1), + (S5,pt2) <-> (S6,pt1), + (S6,pt2) <-> (S10,pt1), + (S7,pt2) <-> (S8,pt1), + (S8,pt2) <-> (S10,pt3), + (S10,pt2) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> cngsrc, H1 -> cngdst, S0 -> swch1, S1 -> swch1, S2 -> swch2, S3 -> fwdr, S4 -> fwdr, S5 -> fwdr, S6 -> fwdr, S7 -> fwdr, S8 -> fwdr, S9 -> swch3, S10 -> fwdr } + +def cngsrc(pkt, port) state pkt_count(0) { + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +def cngdst(pkt, port) state pkt_count(0) { + pkt_count = pkt_count + 1; + drop; +} + +def fwdr(pkt, port) { + fwd(2); +} + +def swch1(pkt, port) { + fwd(flip(1/2)+2); +} + +def swch2(pkt, port) { + fwd(flip(3/7)+2); +} + +def swch3(pkt, port) { + fwd(flip(4/9)+1); +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/realcong/ComSer.prism b/realcong/ComSer.prism new file mode 100644 index 0000000..dd99985 --- /dev/null +++ b/realcong/ComSer.prism @@ -0,0 +1,486 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 60; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S9f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S9f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S9f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S5f1] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S5f1] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S5f1] n2S4is=2 -> true; +[n2S2f3] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S2f3] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S2f3] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S6f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S6f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S6f1] n2S5is=2 -> true; +[n2S4f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..3] init 0; n2S0ra:[-6..3] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S1f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S7f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S7f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S7f1] n2S0is=2 -> true; +[n2S9f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S9f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S9f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 -> (n2S0opt'=(n2S0t0+2))&(n2S0pc'=-4)&(n2S0ra'=3); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9t0:[0..1]; +n2S9ip0:[1..3] init 1; +n2S9ip1:[1..3] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..3] init 1; +n2S9op1:[1..3] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..3] init 1; +n2S9pc:[-6..3] init 0; n2S9ra:[-6..3] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n2H0f1] n2S9is=0 -> (n2S9ip0'=3)&(n2S9is'=1); +[n2H0f1] n2S9is=1 -> (n2S9ip1'=3)&(n2S9is'=2); +[n2H0f1] n2S9is=2 -> true; +[n2S3f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n2S3f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n2S3f1] n2S9is=2 -> true; +[n2S0f1] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S0f1] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S0f1] n2S9is=2 -> true; +[] unlk & numSteps0 -> (n2S9pc'=-5)&(unlk'=false); +[n2S9f3] n2S9pc=-5 & n2S9os>0 & n2S9op0=3 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S9pc'=1)&(unlk'=false); +[] n2S9pc=1 -> 0.555556:(n2S9t0'=0)&(n2S9pc'=2) + 0.444444:(n2S9t0'=1)&(n2S9pc'=2); +[] n2S9pc=2 -> (n2S9opt'=(n2S9t0+1))&(n2S9pc'=-4)&(n2S9ra'=3); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S10 +n3S10ip0:[1..3] init 1; +n3S10ip1:[1..3] init 1; +n3S10is:[0..2] init 0; +n3S10op0:[1..3] init 1; +n3S10op1:[1..3] init 1; +n3S10os:[0..2] init 0; +n3S10opt:[1..3] init 1; +n3S10pc:[-6..2] init 0; n3S10ra:[-6..2] init 0; +[] n3S10is<2 & n3S10pc=-1 -> (n3S10ip0'=1)&(n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-1 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10is<2 & n3S10pc=-2 -> (n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-3 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10pc=-3 -> (n3S10ip0'=n3S10ip1)&(n3S10is'=n3S10is-1)&(n3S10pc'=n3S10ra); +[] n3S10os=0 & n3S10pc=-4 -> (n3S10op0'=n3S10opt)&(n3S10os'=1)&(n3S10pc'=-3); +[] n3S10os=1 & n3S10pc=-4 -> (n3S10op1'=n3S10opt)&(n3S10os'=2)&(n3S10pc'=-3); +[] n3S10os=2 & n3S10pc=-4 -> (n3S10pc'=-3); +[n2S8f2] n3S10is=0 -> (n3S10ip0'=3)&(n3S10is'=1); +[n2S8f2] n3S10is=1 -> (n3S10ip1'=3)&(n3S10is'=2); +[n2S8f2] n3S10is=2 -> true; +[n2H1f1] n3S10is=0 -> (n3S10ip0'=2)&(n3S10is'=1); +[n2H1f1] n3S10is=1 -> (n3S10ip1'=2)&(n3S10is'=2); +[n2H1f1] n3S10is=2 -> true; +[n2S6f2] n3S10is=0 -> (n3S10ip0'=1)&(n3S10is'=1); +[n2S6f2] n3S10is=1 -> (n3S10ip1'=1)&(n3S10is'=2); +[n2S6f2] n3S10is=2 -> true; +[] unlk & numSteps0 -> (n3S10pc'=-5)&(unlk'=false); +[n3S10f3] n3S10pc=-5 & n3S10os>0 & n3S10op0=3 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f2] n3S10pc=-5 & n3S10os>0 & n3S10op0=2 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f1] n3S10pc=-5 & n3S10os>0 & n3S10op0=1 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[] numSteps (n3S10pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S10pc'=1)&(unlk'=false); +[] n3S10pc=1 -> (n3S10opt'=2)&(n3S10pc'=-4)&(n3S10ra'=2); +[] numSteps (n3S10pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1t0:[0..1]; +n2S1ip0:[1..4] init 1; +n2S1ip1:[1..4] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..4] init 1; +n2S1op1:[1..4] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..4] init 1; +n2S1pc:[-6..3] init 0; n2S1ra:[-6..3] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=4)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=4)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S8f3] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2S8f3] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2S8f3] n2S1is=2 -> true; +[n2S6f3] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S6f3] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S6f3] n2S1is=2 -> true; +[n2S0f3] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f3] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f3] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f4] n2S1pc=-5 & n2S1os>0 & n2S1op0=4 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> 0.5:(n2S1t0'=0)&(n2S1pc'=2) + 0.5:(n2S1t0'=1)&(n2S1pc'=2); +[] n2S1pc=2 -> (n2S1opt'=(n2S1t0+2))&(n2S1pc'=-4)&(n2S1ra'=3); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..2] init 0; n2S8ra:[-6..2] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n2S1f3] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n2S1f3] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n2S1f3] n2S8is=2 -> true; +[n3S10f3] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n3S10f3] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n3S10f3] n2S8is=2 -> true; +[n2S7f2] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S7f2] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S7f2] n2S8is=2 -> true; +[] unlk & numSteps0 -> (n2S8pc'=-5)&(unlk'=false); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S8pc'=1)&(unlk'=false); +[] n2S8pc=1 -> (n2S8opt'=2)&(n2S8pc'=-4)&(n2S8ra'=2); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n3S10f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n3S10f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n3S10f2] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..3] init 1; +n2S6ip1:[1..3] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..3] init 1; +n2S6op1:[1..3] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..3] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S1f2] n2S6is=0 -> (n2S6ip0'=3)&(n2S6is'=1); +[n2S1f2] n2S6is=1 -> (n2S6ip1'=3)&(n2S6is'=2); +[n2S1f2] n2S6is=2 -> true; +[n3S10f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n3S10f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n3S10f1] n2S6is=2 -> true; +[n2S5f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S5f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S5f2] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f3] n2S6pc=-5 & n2S6os>0 & n2S6op0=3 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S2f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f1] n2S3is=2 -> true; +[n2S9f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S9f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S9f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2t0:[0..1]; +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..3] init 0; n2S2ra:[-6..3] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S4f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S4f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S4f1] n2S2is=2 -> true; +[n2S1f4] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f4] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f4] n2S2is=2 -> true; +[n2S3f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> 0.571429:(n2S2t0'=0)&(n2S2pc'=2) + 0.428571:(n2S2t0'=1)&(n2S2pc'=2); +[] n2S2pc=2 -> (n2S2opt'=(n2S2t0+2))&(n2S2pc'=-4)&(n2S2ra'=3); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..2] init 1; +n2S7ip1:[1..2] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..2] init 1; +n2S7op1:[1..2] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..2] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S8f1] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S8f1] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S8f1] n2S7is=2 -> true; +[n2S0f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S0f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S0f2] n2S7is=2 -> true; +[] unlk & numSteps0 -> (n2S7pc'=-5)&(unlk'=false); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S7pc'=1)&(unlk'=false); +[] n2S7pc=1 -> (n2S7opt'=2)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 & n3S10is=0 & n3S10os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 13, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9, S8 := 10, S9 := 11, S10 := 12; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __cngsrc_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __cngsrc_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + Q_in.pushFront((Packet(),0)); + } else { + Q_in.popFront(); + } + } +} +dat __cngdst_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __cngdst_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __fwdr_ty{ + Q_in: Queue, Q_out: Queue; + def __fwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __swch1_ty{ + Q_in: Queue, Q_out: Queue; + def __swch1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((1/2))+2))); } + } +} +dat __swch2_ty{ + Q_in: Queue, Q_out: Queue; + def __swch2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((3/7))+2))); } + } +} +dat __swch3_ty{ + Q_in: Queue, Q_out: Queue; + def __swch3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((4/9))+1))); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __cngsrc_ty, __H1 : __cngdst_ty, __S0 : __swch1_ty, __S1 : __swch1_ty, __S2 : __swch2_ty, __S3 : __fwdr_ty, __S4 : __fwdr_ty, __S5 : __fwdr_ty, __S6 : __fwdr_ty, __S7 : __fwdr_ty, __S8 : __fwdr_ty, __S9 : __swch3_ty, __S10 : __fwdr_ty; + def __D(){ + __H0 = __cngsrc_ty(), __H1 = __cngdst_ty(), __S0 = __swch1_ty(), __S1 = __swch1_ty(), __S2 = __swch2_ty(), __S3 = __fwdr_ty(), __S4 = __fwdr_ty(), __S5 = __fwdr_ty(), __S6 = __fwdr_ty(), __S7 = __fwdr_ty(), __S8 = __fwdr_ty(), __S9 = __swch3_ty(), __S10 = __fwdr_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else if i == 4 { __S2.Q_in } else if i == 5 { __S3.Q_in } else if i == 6 { __S4.Q_in } else if i == 7 { __S5.Q_in } else if i == 8 { __S6.Q_in } else if i == 9 { __S7.Q_in } else if i == 10 { __S8.Q_in } else if i == 11 { __S9.Q_in } else { __S10.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else if i == 4 { __S2.Q_out } else if i == 5 { __S3.Q_out } else if i == 6 { __S4.Q_out } else if i == 7 { __S5.Q_out } else if i == 8 { __S6.Q_out } else if i == 9 { __S7.Q_out } else if i == 10 { __S8.Q_out } else if i == 11 { __S9.Q_out } else { __S10.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() || __S8.Q_in.size() || __S8.Q_out.size() || __S9.Q_in.size() || __S9.Q_out.size() || __S10.Q_in.size() || __S10.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S10.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __S8.Q_in.pushBack((pkt, 3)); + } + if port == 4 { + __S2.Q_in.pushBack((pkt, 2)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 4)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S10.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 2)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S8.Q_in.pushBack((pkt, 1)); + } + } + if node == 10 && __S8.Q_out.size() { + (pkt,port) := __S8.Q_out.takeFront(); + if port == 1 { + __S7.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S10.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 3)); + } + } + if node == 11 && __S9.Q_out.size() { + (pkt,port) := __S9.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 12 && __S10.Q_out.size() { + (pkt,port) := __S10.Q_out.takeFront(); + if port == 1 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S8.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + if node == 10 && __S8.Q_in.size() { + __S8.__run(); + } + if node == 11 && __S9.Q_in.size() { + __S9.__run(); + } + if node == 12 && __S10.Q_in.size() { + __S10.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size() || __d.__S8.Q_in.size() || __d.__S8.Q_out.size() || __d.__S9.Q_in.size() || __d.__S9.Q_out.size() || __d.__S10.Q_in.size() || __d.__S10.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/realcong/LEARN-d.bayonet b/realcong/LEARN-d.bayonet new file mode 100644 index 0000000..2e8c1d9 --- /dev/null +++ b/realcong/LEARN-d.bayonet @@ -0,0 +1,69 @@ +parameters{ NUM_PACKETS(3) } + +num_steps 50; + +query probability(pkt_count@H1 < NUM_PACKETS); + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5, S6, S7, S8, S9 } + links{ + (H0,pt1) <-> (S8,pt3), + (S8,pt1) <-> (S0,pt1), + (S8,pt2) <-> (S5,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (S9,pt1), + (S2,pt2) <-> (S3,pt1), + (S3,pt2) <-> (S4,pt1), + (S4,pt2) <-> (S9,pt4), + (S5,pt2) <-> (S6,pt1), + (S6,pt2) <-> (S7,pt1), + (S7,pt2) <-> (S9,pt3), + (S9,pt2) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> cngsrc, H1 -> cngdst, S0 -> swch2, S1 -> fwdr, S2 -> fwdr, S3 -> fwdr, S4 -> fwdr, S5 -> fwdr, S6 -> fwdr, S7 -> fwdr, S8 -> swch1, S9 -> fwdr } + +def cngsrc(pkt, port) state pkt_count(0) { + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +def cngdst(pkt, port) state pkt_count(0) { + pkt_count = pkt_count + 1; + drop; +} + +def fwdr(pkt, port) { + fwd(2); +} + +def swch1(pkt, port) { + fwd(flip(11/23)+1); +} + +def swch2(pkt, port) { + fwd(flip(1/3)+2); +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/realcong/LEARN-d.prism b/realcong/LEARN-d.prism new file mode 100644 index 0000000..54b4b93 --- /dev/null +++ b/realcong/LEARN-d.prism @@ -0,0 +1,459 @@ +dtmc +global unlk:[-1..23] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 24; +global numSkips:[0..24] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S8f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S8f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S8f3] n2H0is=2 -> true; +[] unlk=12 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S9f4] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S9f4] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S9f4] n2S4is=2 -> true; +[n2S3f2] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f2] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f2] n2S4is=2 -> true; +[] unlk=18 & numSteps0 -> (n2S4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=18 & numSteps (unlk'=19)&(numSkips'=numSkips+1); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=19)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2S4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S6f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S6f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S6f1] n2S5is=2 -> true; +[n2S8f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S8f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S8f2] n2S5is=2 -> true; +[] unlk=19 & numSteps0 -> (n2S5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=19 & numSteps (unlk'=20)&(numSkips'=numSkips+1); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=20)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2S5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..3] init 0; n2S0ra:[-6..3] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S8f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S8f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S8f1] n2S0is=2 -> true; +[] unlk=14 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 -> 0.666667:(n2S0t0'=0)&(n2S0pc'=2) + 0.333333:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 -> (n2S0opt'=(n2S0t0+2))&(n2S0pc'=-4)&(n2S0ra'=3); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9ip0:[1..4] init 1; +n2S9ip1:[1..4] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..4] init 1; +n2S9op1:[1..4] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..4] init 1; +n2S9pc:[-6..2] init 0; n2S9ra:[-6..2] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n2S4f2] n2S9is=0 -> (n2S9ip0'=4)&(n2S9is'=1); +[n2S4f2] n2S9is=1 -> (n2S9ip1'=4)&(n2S9is'=2); +[n2S4f2] n2S9is=2 -> true; +[n2S7f2] n2S9is=0 -> (n2S9ip0'=3)&(n2S9is'=1); +[n2S7f2] n2S9is=1 -> (n2S9ip1'=3)&(n2S9is'=2); +[n2S7f2] n2S9is=2 -> true; +[n2H1f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n2H1f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n2H1f1] n2S9is=2 -> true; +[n2S1f2] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S1f2] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S1f2] n2S9is=2 -> true; +[] unlk=23 & numSteps0 -> (n2S9pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=23 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S9f4] n2S9pc=-5 & n2S9os>0 & n2S9op0=4 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f3] n2S9pc=-5 & n2S9os>0 & n2S9op0=3 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=11 & numSteps0 -> (n2S9pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[] n2S9pc=1 -> (n2S9opt'=2)&(n2S9pc'=-4)&(n2S9ra'=2); +[] numSteps (n2S9pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S9f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S9f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S9f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=15 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8t0:[0..1]; +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..3] init 0; n2S8ra:[-6..3] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n2H0f1] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n2H0f1] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n2H0f1] n2S8is=2 -> true; +[n2S5f1] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n2S5f1] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n2S5f1] n2S8is=2 -> true; +[n2S0f1] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S0f1] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S0f1] n2S8is=2 -> true; +[] unlk=22 & numSteps0 -> (n2S8pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=22 & numSteps (unlk'=23)&(numSkips'=numSkips+1); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=23)&(numSteps'=numSteps+1); +[] unlk=10 & numSteps0 -> (n2S8pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[] n2S8pc=1 -> 0.521739:(n2S8t0'=0)&(n2S8pc'=2) + 0.478261:(n2S8t0'=1)&(n2S8pc'=2); +[] n2S8pc=2 -> (n2S8opt'=(n2S8t0+1))&(n2S8pc'=-4)&(n2S8ra'=3); +[] numSteps (n2S8pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S9f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S9f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S9f2] n2H1is=2 -> true; +[] unlk=13 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..2] init 1; +n2S6ip1:[1..2] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..2] init 1; +n2S6op1:[1..2] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..2] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S7f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2S7f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2S7f1] n2S6is=2 -> true; +[n2S5f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S5f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S5f2] n2S6is=2 -> true; +[] unlk=20 & numSteps0 -> (n2S6pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=20 & numSteps (unlk'=21)&(numSkips'=numSkips+1); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=21)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2S6pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[] unlk=17 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=18)&(numSkips'=numSkips+1); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=18)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f1] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk=16 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..2] init 1; +n2S7ip1:[1..2] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..2] init 1; +n2S7op1:[1..2] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..2] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S9f3] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S9f3] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S9f3] n2S7is=2 -> true; +[n2S6f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S6f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S6f2] n2S7is=2 -> true; +[] unlk=21 & numSteps0 -> (n2S7pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=21 & numSteps (unlk'=22)&(numSkips'=numSkips+1); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=22)&(numSteps'=numSteps+1); +[] unlk=9 & numSteps0 -> (n2S7pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[] n2S7pc=1 -> (n2S7opt'=2)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 12, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9, S8 := 10, S9 := 11; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __cngsrc_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __cngsrc_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + Q_in.pushFront((Packet(),0)); + } else { + Q_in.popFront(); + } + } +} +dat __cngdst_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __cngdst_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __fwdr_ty{ + Q_in: Queue, Q_out: Queue; + def __fwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __swch1_ty{ + Q_in: Queue, Q_out: Queue; + def __swch1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((11/23))+1))); } + } +} +dat __swch2_ty{ + Q_in: Queue, Q_out: Queue; + def __swch2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((1/3))+2))); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __cngsrc_ty, __H1 : __cngdst_ty, __S0 : __swch2_ty, __S1 : __fwdr_ty, __S2 : __fwdr_ty, __S3 : __fwdr_ty, __S4 : __fwdr_ty, __S5 : __fwdr_ty, __S6 : __fwdr_ty, __S7 : __fwdr_ty, __S8 : __swch1_ty, __S9 : __fwdr_ty; + next: ℝ; + def __D(){ + __H0 = __cngsrc_ty(), __H1 = __cngdst_ty(), __S0 = __swch2_ty(), __S1 = __fwdr_ty(), __S2 = __fwdr_ty(), __S3 = __fwdr_ty(), __S4 = __fwdr_ty(), __S5 = __fwdr_ty(), __S6 = __fwdr_ty(), __S7 = __fwdr_ty(), __S8 = __swch1_ty(), __S9 = __fwdr_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else if current == 5 { __S3.Q_in } else if current == 6 { __S4.Q_in } else if current == 7 { __S5.Q_in } else if current == 8 { __S6.Q_in } else if current == 9 { __S7.Q_in } else if current == 10 { __S8.Q_in } else { __S9.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else if (current - k) == 5 { __S3.Q_out } else if (current - k) == 6 { __S4.Q_out } else if (current - k) == 7 { __S5.Q_out } else if (current - k) == 8 { __S6.Q_out } else if (current - k) == 9 { __S7.Q_out } else if (current - k) == 10 { __S8.Q_out } else { __S9.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() || __S8.Q_in.size() || __S8.Q_out.size() || __S9.Q_in.size() || __S9.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 4)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 3)); + } + } + if node == 10 && __S8.Q_out.size() { + (pkt,port) := __S8.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 11 && __S9.Q_out.size() { + (pkt,port) := __S9.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S7.Q_in.pushBack((pkt, 2)); + } + if port == 4 { + __S4.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + if node == 10 && __S8.Q_in.size() { + __S8.__run(); + } + if node == 11 && __S9.Q_in.size() { + __S9.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size() || __d.__S8.Q_in.size() || __d.__S8.Q_out.size() || __d.__S9.Q_in.size() || __d.__S9.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/realcong/LEARN-n.prism b/realcong/LEARN-n.prism new file mode 100644 index 0000000..b1cb47d --- /dev/null +++ b/realcong/LEARN-n.prism @@ -0,0 +1,433 @@ +mdp +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S8f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S8f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S8f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S9f4] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S9f4] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S9f4] n2S4is=2 -> true; +[n2S3f2] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f2] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f2] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S6f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S6f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S6f1] n2S5is=2 -> true; +[n2S8f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S8f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S8f2] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..3] init 0; n2S0ra:[-6..3] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S8f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S8f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S8f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.666667:(n2S0t0'=0)&(n2S0pc'=2) + 0.333333:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 -> (n2S0opt'=(n2S0t0+2))&(n2S0pc'=-4)&(n2S0ra'=3); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9ip0:[1..4] init 1; +n2S9ip1:[1..4] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..4] init 1; +n2S9op1:[1..4] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..4] init 1; +n2S9pc:[-6..2] init 0; n2S9ra:[-6..2] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n2S4f2] n2S9is=0 -> (n2S9ip0'=4)&(n2S9is'=1); +[n2S4f2] n2S9is=1 -> (n2S9ip1'=4)&(n2S9is'=2); +[n2S4f2] n2S9is=2 -> true; +[n2S7f2] n2S9is=0 -> (n2S9ip0'=3)&(n2S9is'=1); +[n2S7f2] n2S9is=1 -> (n2S9ip1'=3)&(n2S9is'=2); +[n2S7f2] n2S9is=2 -> true; +[n2H1f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n2H1f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n2H1f1] n2S9is=2 -> true; +[n2S1f2] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S1f2] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S1f2] n2S9is=2 -> true; +[] unlk & numSteps0 -> (n2S9pc'=-5)&(unlk'=false); +[n2S9f4] n2S9pc=-5 & n2S9os>0 & n2S9op0=4 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f3] n2S9pc=-5 & n2S9os>0 & n2S9op0=3 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S9pc'=1)&(unlk'=false); +[] n2S9pc=1 -> (n2S9opt'=2)&(n2S9pc'=-4)&(n2S9ra'=2); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S9f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S9f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S9f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8t0:[0..1]; +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..3] init 0; n2S8ra:[-6..3] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n2H0f1] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n2H0f1] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n2H0f1] n2S8is=2 -> true; +[n2S5f1] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n2S5f1] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n2S5f1] n2S8is=2 -> true; +[n2S0f1] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S0f1] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S0f1] n2S8is=2 -> true; +[] unlk & numSteps0 -> (n2S8pc'=-5)&(unlk'=false); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S8pc'=1)&(unlk'=false); +[] n2S8pc=1 -> 0.521739:(n2S8t0'=0)&(n2S8pc'=2) + 0.478261:(n2S8t0'=1)&(n2S8pc'=2); +[] n2S8pc=2 -> (n2S8opt'=(n2S8t0+1))&(n2S8pc'=-4)&(n2S8ra'=3); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S9f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S9f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S9f2] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..2] init 1; +n2S6ip1:[1..2] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..2] init 1; +n2S6op1:[1..2] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..2] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S7f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2S7f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2S7f1] n2S6is=2 -> true; +[n2S5f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S5f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S5f2] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f1] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..2] init 1; +n2S7ip1:[1..2] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..2] init 1; +n2S7op1:[1..2] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..2] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S9f3] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S9f3] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S9f3] n2S7is=2 -> true; +[n2S6f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S6f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S6f2] n2S7is=2 -> true; +[] unlk & numSteps0 -> (n2S7pc'=-5)&(unlk'=false); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S7pc'=1)&(unlk'=false); +[] n2S7pc=1 -> (n2S7opt'=2)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count (S8,pt3), + (S8,pt1) <-> (S0,pt1), + (S8,pt2) <-> (S5,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (S9,pt1), + (S2,pt2) <-> (S3,pt1), + (S3,pt2) <-> (S4,pt1), + (S4,pt2) <-> (S9,pt4), + (S5,pt2) <-> (S6,pt1), + (S6,pt2) <-> (S7,pt1), + (S7,pt2) <-> (S9,pt3), + (S9,pt2) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> cngsrc, H1 -> cngdst, S0 -> swch2, S1 -> fwdr, S2 -> fwdr, S3 -> fwdr, S4 -> fwdr, S5 -> fwdr, S6 -> fwdr, S7 -> fwdr, S8 -> swch1, S9 -> fwdr } + +def cngsrc(pkt, port) state pkt_count(0) { + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +def cngdst(pkt, port) state pkt_count(0) { + pkt_count = pkt_count + 1; + drop; +} + +def fwdr(pkt, port) { + fwd(2); +} + +def swch1(pkt, port) { + fwd(flip(11/23)+1); +} + +def swch2(pkt, port) { + fwd(flip(1/3)+2); +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/realcong/LEARN.prism b/realcong/LEARN.prism new file mode 100644 index 0000000..d91be03 --- /dev/null +++ b/realcong/LEARN.prism @@ -0,0 +1,433 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S8f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S8f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S8f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S9f4] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S9f4] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S9f4] n2S4is=2 -> true; +[n2S3f2] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f2] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f2] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S6f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S6f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S6f1] n2S5is=2 -> true; +[n2S8f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S8f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S8f2] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..3] init 0; n2S0ra:[-6..3] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S8f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S8f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S8f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.666667:(n2S0t0'=0)&(n2S0pc'=2) + 0.333333:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 -> (n2S0opt'=(n2S0t0+2))&(n2S0pc'=-4)&(n2S0ra'=3); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9ip0:[1..4] init 1; +n2S9ip1:[1..4] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..4] init 1; +n2S9op1:[1..4] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..4] init 1; +n2S9pc:[-6..2] init 0; n2S9ra:[-6..2] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n2S4f2] n2S9is=0 -> (n2S9ip0'=4)&(n2S9is'=1); +[n2S4f2] n2S9is=1 -> (n2S9ip1'=4)&(n2S9is'=2); +[n2S4f2] n2S9is=2 -> true; +[n2S7f2] n2S9is=0 -> (n2S9ip0'=3)&(n2S9is'=1); +[n2S7f2] n2S9is=1 -> (n2S9ip1'=3)&(n2S9is'=2); +[n2S7f2] n2S9is=2 -> true; +[n2H1f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n2H1f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n2H1f1] n2S9is=2 -> true; +[n2S1f2] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S1f2] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S1f2] n2S9is=2 -> true; +[] unlk & numSteps0 -> (n2S9pc'=-5)&(unlk'=false); +[n2S9f4] n2S9pc=-5 & n2S9os>0 & n2S9op0=4 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f3] n2S9pc=-5 & n2S9os>0 & n2S9op0=3 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S9pc'=1)&(unlk'=false); +[] n2S9pc=1 -> (n2S9opt'=2)&(n2S9pc'=-4)&(n2S9ra'=2); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S9f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S9f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S9f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8t0:[0..1]; +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..3] init 0; n2S8ra:[-6..3] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n2H0f1] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n2H0f1] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n2H0f1] n2S8is=2 -> true; +[n2S5f1] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n2S5f1] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n2S5f1] n2S8is=2 -> true; +[n2S0f1] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S0f1] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S0f1] n2S8is=2 -> true; +[] unlk & numSteps0 -> (n2S8pc'=-5)&(unlk'=false); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S8pc'=1)&(unlk'=false); +[] n2S8pc=1 -> 0.521739:(n2S8t0'=0)&(n2S8pc'=2) + 0.478261:(n2S8t0'=1)&(n2S8pc'=2); +[] n2S8pc=2 -> (n2S8opt'=(n2S8t0+1))&(n2S8pc'=-4)&(n2S8ra'=3); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S9f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S9f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S9f2] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..2] init 1; +n2S6ip1:[1..2] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..2] init 1; +n2S6op1:[1..2] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..2] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S7f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2S7f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2S7f1] n2S6is=2 -> true; +[n2S5f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S5f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S5f2] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f1] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..2] init 1; +n2S7ip1:[1..2] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..2] init 1; +n2S7op1:[1..2] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..2] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S9f3] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S9f3] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S9f3] n2S7is=2 -> true; +[n2S6f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S6f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S6f2] n2S7is=2 -> true; +[] unlk & numSteps0 -> (n2S7pc'=-5)&(unlk'=false); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S7pc'=1)&(unlk'=false); +[] n2S7pc=1 -> (n2S7opt'=2)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 12, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9, S8 := 10, S9 := 11; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __cngsrc_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __cngsrc_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + Q_in.pushFront((Packet(),0)); + } else { + Q_in.popFront(); + } + } +} +dat __cngdst_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __cngdst_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __fwdr_ty{ + Q_in: Queue, Q_out: Queue; + def __fwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __swch1_ty{ + Q_in: Queue, Q_out: Queue; + def __swch1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((11/23))+1))); } + } +} +dat __swch2_ty{ + Q_in: Queue, Q_out: Queue; + def __swch2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((1/3))+2))); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __cngsrc_ty, __H1 : __cngdst_ty, __S0 : __swch2_ty, __S1 : __fwdr_ty, __S2 : __fwdr_ty, __S3 : __fwdr_ty, __S4 : __fwdr_ty, __S5 : __fwdr_ty, __S6 : __fwdr_ty, __S7 : __fwdr_ty, __S8 : __swch1_ty, __S9 : __fwdr_ty; + def __D(){ + __H0 = __cngsrc_ty(), __H1 = __cngdst_ty(), __S0 = __swch2_ty(), __S1 = __fwdr_ty(), __S2 = __fwdr_ty(), __S3 = __fwdr_ty(), __S4 = __fwdr_ty(), __S5 = __fwdr_ty(), __S6 = __fwdr_ty(), __S7 = __fwdr_ty(), __S8 = __swch1_ty(), __S9 = __fwdr_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else if i == 4 { __S2.Q_in } else if i == 5 { __S3.Q_in } else if i == 6 { __S4.Q_in } else if i == 7 { __S5.Q_in } else if i == 8 { __S6.Q_in } else if i == 9 { __S7.Q_in } else if i == 10 { __S8.Q_in } else { __S9.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else if i == 4 { __S2.Q_out } else if i == 5 { __S3.Q_out } else if i == 6 { __S4.Q_out } else if i == 7 { __S5.Q_out } else if i == 8 { __S6.Q_out } else if i == 9 { __S7.Q_out } else if i == 10 { __S8.Q_out } else { __S9.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() || __S8.Q_in.size() || __S8.Q_out.size() || __S9.Q_in.size() || __S9.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 4)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 3)); + } + } + if node == 10 && __S8.Q_out.size() { + (pkt,port) := __S8.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 11 && __S9.Q_out.size() { + (pkt,port) := __S9.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S7.Q_in.pushBack((pkt, 2)); + } + if port == 4 { + __S4.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + if node == 10 && __S8.Q_in.size() { + __S8.__run(); + } + if node == 11 && __S9.Q_in.size() { + __S9.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size() || __d.__S8.Q_in.size() || __d.__S8.Q_out.size() || __d.__S9.Q_in.size() || __d.__S9.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/realcong/SANReN-d.bayonet b/realcong/SANReN-d.bayonet new file mode 100644 index 0000000..9eaa600 --- /dev/null +++ b/realcong/SANReN-d.bayonet @@ -0,0 +1,61 @@ +parameters{ NUM_PACKETS(3) } + +num_steps 50; + +query probability(pkt_count@H1 < NUM_PACKETS); + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5, S6 } + links{ + (H0,pt1) <-> (S5,pt3), + (S5,pt1) <-> (S0,pt1), + (S5,pt2) <-> (S2,pt1), + (S0,pt2) <-> (S1,pt1), + (S1,pt2) <-> (S6,pt1), + (S2,pt2) <-> (S3,pt1), + (S3,pt2) <-> (S4,pt1), + (S4,pt2) <-> (S6,pt3), + (S6,pt2) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> cngsrc, H1 -> cngdst, S0 -> fwdr, S1 -> fwdr, S2 -> fwdr, S3 -> fwdr, S4 -> fwdr, S5 -> swch, S6 -> fwdr } + +def cngsrc(pkt, port) state pkt_count(0) { + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +def cngdst(pkt, port) state pkt_count(0) { + pkt_count = pkt_count + 1; + drop; +} + +def swch(pkt, port) { + fwd(flip(3/7)+1); +} + +def fwdr(pkt, port) { + fwd(2); +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/realcong/SANReN-d.prism b/realcong/SANReN-d.prism new file mode 100644 index 0000000..eb39399 --- /dev/null +++ b/realcong/SANReN-d.prism @@ -0,0 +1,344 @@ +dtmc +global unlk:[-1..17] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 18; +global numSkips:[0..18] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S5f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S5f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S5f3] n2H0is=2 -> true; +[] unlk=9 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S6f3] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S6f3] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S6f3] n2S4is=2 -> true; +[n2S3f2] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f2] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f2] n2S4is=2 -> true; +[] unlk=15 & numSteps0 -> (n2S4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2S4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5t0:[0..1]; +n2S5ip0:[1..3] init 1; +n2S5ip1:[1..3] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..3] init 1; +n2S5op1:[1..3] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..3] init 1; +n2S5pc:[-6..3] init 0; n2S5ra:[-6..3] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2H0f1] n2S5is=0 -> (n2S5ip0'=3)&(n2S5is'=1); +[n2H0f1] n2S5is=1 -> (n2S5ip1'=3)&(n2S5is'=2); +[n2H0f1] n2S5is=2 -> true; +[n2S2f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S2f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S2f1] n2S5is=2 -> true; +[n2S0f1] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S0f1] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S0f1] n2S5is=2 -> true; +[] unlk=16 & numSteps0 -> (n2S5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[n2S5f3] n2S5pc=-5 & n2S5os>0 & n2S5op0=3 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2S5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2S5pc=1 -> 0.571429:(n2S5t0'=0)&(n2S5pc'=2) + 0.428571:(n2S5t0'=1)&(n2S5pc'=2); +[] n2S5pc=2 -> (n2S5opt'=(n2S5t0+1))&(n2S5pc'=-4)&(n2S5ra'=3); +[] numSteps (n2S5pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0ip0:[1..2] init 1; +n2S0ip1:[1..2] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..2] init 1; +n2S0op1:[1..2] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..2] init 1; +n2S0pc:[-6..2] init 0; n2S0ra:[-6..2] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S5f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S5f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S5f1] n2S0is=2 -> true; +[] unlk=11 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=2); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S6f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S6f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S6f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=12 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S6f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S6f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S6f2] n2H1is=2 -> true; +[] unlk=10 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..3] init 1; +n2S6ip1:[1..3] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..3] init 1; +n2S6op1:[1..3] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..3] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S4f2] n2S6is=0 -> (n2S6ip0'=3)&(n2S6is'=1); +[n2S4f2] n2S6is=1 -> (n2S6ip1'=3)&(n2S6is'=2); +[n2S4f2] n2S6is=2 -> true; +[n2H1f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2H1f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2H1f1] n2S6is=2 -> true; +[n2S1f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S1f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S1f2] n2S6is=2 -> true; +[] unlk=17 & numSteps0 -> (n2S6pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S6f3] n2S6pc=-5 & n2S6os>0 & n2S6op0=3 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2S6pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[] unlk=14 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f1] n2S2is=2 -> true; +[n2S5f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S5f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S5f2] n2S2is=2 -> true; +[] unlk=13 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 9, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __cngsrc_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __cngsrc_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + Q_in.pushFront((Packet(),0)); + } else { + Q_in.popFront(); + } + } +} +dat __cngdst_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __cngdst_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __swch_ty{ + Q_in: Queue, Q_out: Queue; + def __swch_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((3/7))+1))); } + } +} +dat __fwdr_ty{ + Q_in: Queue, Q_out: Queue; + def __fwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __cngsrc_ty, __H1 : __cngdst_ty, __S0 : __fwdr_ty, __S1 : __fwdr_ty, __S2 : __fwdr_ty, __S3 : __fwdr_ty, __S4 : __fwdr_ty, __S5 : __swch_ty, __S6 : __fwdr_ty; + next: ℝ; + def __D(){ + __H0 = __cngsrc_ty(), __H1 = __cngdst_ty(), __S0 = __fwdr_ty(), __S1 = __fwdr_ty(), __S2 = __fwdr_ty(), __S3 = __fwdr_ty(), __S4 = __fwdr_ty(), __S5 = __swch_ty(), __S6 = __fwdr_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else if current == 5 { __S3.Q_in } else if current == 6 { __S4.Q_in } else if current == 7 { __S5.Q_in } else { __S6.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else if (current - k) == 5 { __S3.Q_out } else if (current - k) == 6 { __S4.Q_out } else if (current - k) == 7 { __S5.Q_out } else { __S6.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S6.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 3)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/realcong/SANReN-n.prism b/realcong/SANReN-n.prism new file mode 100644 index 0000000..c9f6c7c --- /dev/null +++ b/realcong/SANReN-n.prism @@ -0,0 +1,324 @@ +mdp +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S5f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S5f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S5f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S6f3] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S6f3] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S6f3] n2S4is=2 -> true; +[n2S3f2] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f2] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f2] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5t0:[0..1]; +n2S5ip0:[1..3] init 1; +n2S5ip1:[1..3] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..3] init 1; +n2S5op1:[1..3] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..3] init 1; +n2S5pc:[-6..3] init 0; n2S5ra:[-6..3] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2H0f1] n2S5is=0 -> (n2S5ip0'=3)&(n2S5is'=1); +[n2H0f1] n2S5is=1 -> (n2S5ip1'=3)&(n2S5is'=2); +[n2H0f1] n2S5is=2 -> true; +[n2S2f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S2f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S2f1] n2S5is=2 -> true; +[n2S0f1] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S0f1] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S0f1] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f3] n2S5pc=-5 & n2S5os>0 & n2S5op0=3 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 -> 0.571429:(n2S5t0'=0)&(n2S5pc'=2) + 0.428571:(n2S5t0'=1)&(n2S5pc'=2); +[] n2S5pc=2 -> (n2S5opt'=(n2S5t0+1))&(n2S5pc'=-4)&(n2S5ra'=3); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0ip0:[1..2] init 1; +n2S0ip1:[1..2] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..2] init 1; +n2S0op1:[1..2] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..2] init 1; +n2S0pc:[-6..2] init 0; n2S0ra:[-6..2] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S5f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S5f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S5f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=2); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S6f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S6f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S6f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S6f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S6f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S6f2] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..3] init 1; +n2S6ip1:[1..3] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..3] init 1; +n2S6op1:[1..3] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..3] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S4f2] n2S6is=0 -> (n2S6ip0'=3)&(n2S6is'=1); +[n2S4f2] n2S6is=1 -> (n2S6ip1'=3)&(n2S6is'=2); +[n2S4f2] n2S6is=2 -> true; +[n2H1f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2H1f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2H1f1] n2S6is=2 -> true; +[n2S1f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S1f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S1f2] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f3] n2S6pc=-5 & n2S6os>0 & n2S6op0=3 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f1] n2S2is=2 -> true; +[n2S5f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S5f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S5f2] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count (S5,pt3), + (S5,pt1) <-> (S0,pt1), + (S5,pt2) <-> (S2,pt1), + (S0,pt2) <-> (S1,pt1), + (S1,pt2) <-> (S6,pt1), + (S2,pt2) <-> (S3,pt1), + (S3,pt2) <-> (S4,pt1), + (S4,pt2) <-> (S6,pt3), + (S6,pt2) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> cngsrc, H1 -> cngdst, S0 -> fwdr, S1 -> fwdr, S2 -> fwdr, S3 -> fwdr, S4 -> fwdr, S5 -> swch, S6 -> fwdr } + +def cngsrc(pkt, port) state pkt_count(0) { + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +def cngdst(pkt, port) state pkt_count(0) { + pkt_count = pkt_count + 1; + drop; +} + +def swch(pkt, port) { + fwd(flip(3/7)+1); +} + +def fwdr(pkt, port) { + fwd(2); +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/realcong/SANReN.prism b/realcong/SANReN.prism new file mode 100644 index 0000000..c5a8e49 --- /dev/null +++ b/realcong/SANReN.prism @@ -0,0 +1,324 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 50; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0v9pkt_count:[INTMIN..INTMAX] init 0; +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..7] init 0; n2H0ra:[-6..7] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S5f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S5f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S5f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 & (n2H0v9pkt_count (n2H0pc'=2); +[] n2H0pc=1 & !((n2H0v9pkt_count (n2H0pc'=6); +[] n2H0pc=2 & (n2H0v9pkt_count+1)>=INTMIN & (n2H0v9pkt_count+1)<=INTMAX -> (n2H0v9pkt_count'=(n2H0v9pkt_count+1))&(n2H0pc'=3); +[] n2H0pc=3 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=4); +[] n2H0pc=4 -> (n2H0pc'=-1)&(n2H0ra'=5); +[] n2H0pc=5 -> (n2H0pc'=7); +[] n2H0pc=6 -> (n2H0pc'=-3)&(n2H0ra'=7); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S6f3] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S6f3] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S6f3] n2S4is=2 -> true; +[n2S3f2] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f2] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f2] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5t0:[0..1]; +n2S5ip0:[1..3] init 1; +n2S5ip1:[1..3] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..3] init 1; +n2S5op1:[1..3] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..3] init 1; +n2S5pc:[-6..3] init 0; n2S5ra:[-6..3] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2H0f1] n2S5is=0 -> (n2S5ip0'=3)&(n2S5is'=1); +[n2H0f1] n2S5is=1 -> (n2S5ip1'=3)&(n2S5is'=2); +[n2H0f1] n2S5is=2 -> true; +[n2S2f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S2f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S2f1] n2S5is=2 -> true; +[n2S0f1] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S0f1] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S0f1] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f3] n2S5pc=-5 & n2S5os>0 & n2S5op0=3 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 -> 0.571429:(n2S5t0'=0)&(n2S5pc'=2) + 0.428571:(n2S5t0'=1)&(n2S5pc'=2); +[] n2S5pc=2 -> (n2S5opt'=(n2S5t0+1))&(n2S5pc'=-4)&(n2S5ra'=3); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0ip0:[1..2] init 1; +n2S0ip1:[1..2] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..2] init 1; +n2S0op1:[1..2] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..2] init 1; +n2S0pc:[-6..2] init 0; n2S0ra:[-6..2] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S5f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S5f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S5f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=2); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S6f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S6f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S6f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v9pkt_count:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S6f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S6f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S6f2] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & (n2H1v9pkt_count+1)>=INTMIN & (n2H1v9pkt_count+1)<=INTMAX -> (n2H1v9pkt_count'=(n2H1v9pkt_count+1))&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..3] init 1; +n2S6ip1:[1..3] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..3] init 1; +n2S6op1:[1..3] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..3] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S4f2] n2S6is=0 -> (n2S6ip0'=3)&(n2S6is'=1); +[n2S4f2] n2S6is=1 -> (n2S6ip1'=3)&(n2S6is'=2); +[n2S4f2] n2S6is=2 -> true; +[n2H1f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2H1f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2H1f1] n2S6is=2 -> true; +[n2S1f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S1f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S1f2] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f3] n2S6pc=-5 & n2S6os>0 & n2S6op0=3 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f1] n2S2is=2 -> true; +[n2S5f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S5f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S5f2] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 9, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __cngsrc_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __cngsrc_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + if (pkt_count0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + Q_in.pushFront((Packet(),0)); + } else { + Q_in.popFront(); + } + } +} +dat __cngdst_ty{ + Q_in: Queue, Q_out: Queue; + pkt_count: ℝ; + def __cngdst_ty(){ + Q_in = Queue(); + Q_out = Queue(); + pkt_count = 0; + } + def __run(){ + pkt_count = (pkt_count+1); + Q_in.popFront(); + } +} +dat __swch_ty{ + Q_in: Queue, Q_out: Queue; + def __swch_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((3/7))+1))); } + } +} +dat __fwdr_ty{ + Q_in: Queue, Q_out: Queue; + def __fwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __cngsrc_ty, __H1 : __cngdst_ty, __S0 : __fwdr_ty, __S1 : __fwdr_ty, __S2 : __fwdr_ty, __S3 : __fwdr_ty, __S4 : __fwdr_ty, __S5 : __swch_ty, __S6 : __fwdr_ty; + def __D(){ + __H0 = __cngsrc_ty(), __H1 = __cngdst_ty(), __S0 = __fwdr_ty(), __S1 = __fwdr_ty(), __S2 = __fwdr_ty(), __S3 = __fwdr_ty(), __S4 = __fwdr_ty(), __S5 = __swch_ty(), __S6 = __fwdr_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else if i == 4 { __S2.Q_in } else if i == 5 { __S3.Q_in } else if i == 6 { __S4.Q_in } else if i == 7 { __S5.Q_in } else { __S6.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else if i == 4 { __S2.Q_out } else if i == 5 { __S3.Q_out } else if i == 6 { __S4.Q_out } else if i == 7 { __S5.Q_out } else { __S6.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S6.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 3)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size())); + q₁ := Expectation(((if H1 == 0 { __d.__H0.pkt_count } else if H1 == 1 { __d.__H1.pkt_count } else { assert(0) }) < NUM_PACKETS) !=0); + return (q₁); +} + diff --git a/realcong/congestion-n.pctl b/realcong/congestion-n.pctl new file mode 100644 index 0000000..a6f80e1 --- /dev/null +++ b/realcong/congestion-n.pctl @@ -0,0 +1,2 @@ +Pmin=? [ F finished & assrtOK & obsrvOK & (n2H1v9pkt_count (S9,pt3), + (S9,pt1) <-> (S0,pt1), + (S9,pt2) <-> (S3,pt1), + (S0,pt2) <-> (S7,pt1), + (S0,pt3) <-> (S1,pt1), + (S1,pt4) <-> (S2,pt2), + (S1,pt2) <-> (S6,pt3), + (S1,pt3) <-> (S8,pt3), + (S2,pt1) <-> (S3,pt2), + (S2,pt3) <-> (S4,pt1), + (S4,pt2) <-> (S5,pt1), + (S5,pt2) <-> (S6,pt1), + (S6,pt2) <-> (S10,pt1), + (S7,pt2) <-> (S8,pt1), + (S8,pt2) <-> (S10,pt3), + (S10,pt2) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> relsrc, H1 -> reldst, S0 -> swch1, S1 -> swch1, S2 -> swch2, S3 -> fwdr, S4 -> fwdr, S5 -> fwdr, S6 -> badfwdr, S7 -> fwdr, S8 -> fwdr, S9 -> swch3, S10 -> fwdr } + +def relsrc(pkt, port) { + fwd(1); +} + +def reldst(pkt, port) state arrived(0) { + arrived=1; + drop; +} + +def fwdr(pkt, port) { + fwd(2); +} + +def badfwdr(pkt, port) state failing(2) { + if failing == 2 { + failing = flip(1/1000); + } + if failing == 1 { + drop; + } else { + fwd(2); + } +} + +def swch1(pkt, port) { + fwd(flip(1/2)+2); +} + +def swch2(pkt, port) { + fwd(flip(3/7)+2); +} + +def swch3(pkt, port) { + fwd(flip(4/9)+1); +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/realreli/ComSer-d.prism b/realreli/ComSer-d.prism new file mode 100644 index 0000000..d011bc6 --- /dev/null +++ b/realreli/ComSer-d.prism @@ -0,0 +1,518 @@ +dtmc +global unlk:[-1..25] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 26; +global numSkips:[0..26] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..2] init 0; n2H0ra:[-6..2] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S9f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S9f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S9f3] n2H0is=2 -> true; +[] unlk=13 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=2); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S5f1] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S5f1] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S5f1] n2S4is=2 -> true; +[n2S2f3] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S2f3] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S2f3] n2S4is=2 -> true; +[] unlk=19 & numSteps0 -> (n2S4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=19 & numSteps (unlk'=20)&(numSkips'=numSkips+1); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=20)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2S4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S6f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S6f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S6f1] n2S5is=2 -> true; +[n2S4f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[] unlk=20 & numSteps0 -> (n2S5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=20 & numSteps (unlk'=21)&(numSkips'=numSkips+1); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=21)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2S5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..3] init 0; n2S0ra:[-6..3] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S1f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S7f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S7f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S7f1] n2S0is=2 -> true; +[n2S9f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S9f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S9f1] n2S0is=2 -> true; +[] unlk=15 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 -> (n2S0opt'=(n2S0t0+2))&(n2S0pc'=-4)&(n2S0ra'=3); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9t0:[0..1]; +n2S9ip0:[1..3] init 1; +n2S9ip1:[1..3] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..3] init 1; +n2S9op1:[1..3] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..3] init 1; +n2S9pc:[-6..3] init 0; n2S9ra:[-6..3] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n2H0f1] n2S9is=0 -> (n2S9ip0'=3)&(n2S9is'=1); +[n2H0f1] n2S9is=1 -> (n2S9ip1'=3)&(n2S9is'=2); +[n2H0f1] n2S9is=2 -> true; +[n2S3f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n2S3f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n2S3f1] n2S9is=2 -> true; +[n2S0f1] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S0f1] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S0f1] n2S9is=2 -> true; +[] unlk=24 & numSteps0 -> (n2S9pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=24 & numSteps (unlk'=25)&(numSkips'=numSkips+1); +[n2S9f3] n2S9pc=-5 & n2S9os>0 & n2S9op0=3 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=25)&(numSteps'=numSteps+1); +[] unlk=11 & numSteps0 -> (n2S9pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[] n2S9pc=1 -> 0.555556:(n2S9t0'=0)&(n2S9pc'=2) + 0.444444:(n2S9t0'=1)&(n2S9pc'=2); +[] n2S9pc=2 -> (n2S9opt'=(n2S9t0+1))&(n2S9pc'=-4)&(n2S9ra'=3); +[] numSteps (n2S9pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +endmodule +module n3S10 +n3S10ip0:[1..3] init 1; +n3S10ip1:[1..3] init 1; +n3S10is:[0..2] init 0; +n3S10op0:[1..3] init 1; +n3S10op1:[1..3] init 1; +n3S10os:[0..2] init 0; +n3S10opt:[1..3] init 1; +n3S10pc:[-6..2] init 0; n3S10ra:[-6..2] init 0; +[] n3S10is<2 & n3S10pc=-1 -> (n3S10ip0'=1)&(n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-1 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10is<2 & n3S10pc=-2 -> (n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-3 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10pc=-3 -> (n3S10ip0'=n3S10ip1)&(n3S10is'=n3S10is-1)&(n3S10pc'=n3S10ra); +[] n3S10os=0 & n3S10pc=-4 -> (n3S10op0'=n3S10opt)&(n3S10os'=1)&(n3S10pc'=-3); +[] n3S10os=1 & n3S10pc=-4 -> (n3S10op1'=n3S10opt)&(n3S10os'=2)&(n3S10pc'=-3); +[] n3S10os=2 & n3S10pc=-4 -> (n3S10pc'=-3); +[n2S8f2] n3S10is=0 -> (n3S10ip0'=3)&(n3S10is'=1); +[n2S8f2] n3S10is=1 -> (n3S10ip1'=3)&(n3S10is'=2); +[n2S8f2] n3S10is=2 -> true; +[n2H1f1] n3S10is=0 -> (n3S10ip0'=2)&(n3S10is'=1); +[n2H1f1] n3S10is=1 -> (n3S10ip1'=2)&(n3S10is'=2); +[n2H1f1] n3S10is=2 -> true; +[n2S6f2] n3S10is=0 -> (n3S10ip0'=1)&(n3S10is'=1); +[n2S6f2] n3S10is=1 -> (n3S10ip1'=1)&(n3S10is'=2); +[n2S6f2] n3S10is=2 -> true; +[] unlk=25 & numSteps0 -> (n3S10pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=25 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n3S10f3] n3S10pc=-5 & n3S10os>0 & n3S10op0=3 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f2] n3S10pc=-5 & n3S10os>0 & n3S10op0=2 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f1] n3S10pc=-5 & n3S10os>0 & n3S10op0=1 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[] numSteps (n3S10pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=12 & numSteps0 -> (n3S10pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[] n3S10pc=1 -> (n3S10opt'=2)&(n3S10pc'=-4)&(n3S10ra'=2); +[] numSteps (n3S10pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1t0:[0..1]; +n2S1ip0:[1..4] init 1; +n2S1ip1:[1..4] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..4] init 1; +n2S1op1:[1..4] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..4] init 1; +n2S1pc:[-6..3] init 0; n2S1ra:[-6..3] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=4)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=4)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S8f3] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2S8f3] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2S8f3] n2S1is=2 -> true; +[n2S6f3] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S6f3] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S6f3] n2S1is=2 -> true; +[n2S0f3] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f3] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f3] n2S1is=2 -> true; +[] unlk=16 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[n2S1f4] n2S1pc=-5 & n2S1os>0 & n2S1op0=4 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> 0.5:(n2S1t0'=0)&(n2S1pc'=2) + 0.5:(n2S1t0'=1)&(n2S1pc'=2); +[] n2S1pc=2 -> (n2S1opt'=(n2S1t0+2))&(n2S1pc'=-4)&(n2S1ra'=3); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..2] init 0; n2S8ra:[-6..2] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n2S1f3] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n2S1f3] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n2S1f3] n2S8is=2 -> true; +[n3S10f3] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n3S10f3] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n3S10f3] n2S8is=2 -> true; +[n2S7f2] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S7f2] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S7f2] n2S8is=2 -> true; +[] unlk=23 & numSteps0 -> (n2S8pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=23 & numSteps (unlk'=24)&(numSkips'=numSkips+1); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=24)&(numSteps'=numSteps+1); +[] unlk=10 & numSteps0 -> (n2S8pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[] n2S8pc=1 -> (n2S8opt'=2)&(n2S8pc'=-4)&(n2S8ra'=2); +[] numSteps (n2S8pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v7arrived:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n3S10f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n3S10f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n3S10f2] n2H1is=2 -> true; +[] unlk=14 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & 1>=INTMIN & 1<=INTMAX -> (n2H1v7arrived'=1)&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6v7failing:[INTMIN..INTMAX] init 2; +n2S6t0:[0..1]; +n2S6ip0:[1..3] init 1; +n2S6ip1:[1..3] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..3] init 1; +n2S6op1:[1..3] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..3] init 1; +n2S6pc:[-6..9] init 0; n2S6ra:[-6..9] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S1f2] n2S6is=0 -> (n2S6ip0'=3)&(n2S6is'=1); +[n2S1f2] n2S6is=1 -> (n2S6ip1'=3)&(n2S6is'=2); +[n2S1f2] n2S6is=2 -> true; +[n3S10f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n3S10f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n3S10f1] n2S6is=2 -> true; +[n2S5f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S5f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S5f2] n2S6is=2 -> true; +[] unlk=21 & numSteps0 -> (n2S6pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=21 & numSteps (unlk'=22)&(numSkips'=numSkips+1); +[n2S6f3] n2S6pc=-5 & n2S6os>0 & n2S6op0=3 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=22)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2S6pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2S6pc=1 & (n2S6v7failing=2) -> (n2S6pc'=2); +[] n2S6pc=1 & !((n2S6v7failing=2)) -> (n2S6pc'=5); +[] n2S6pc=2 -> 0.999:(n2S6t0'=0)&(n2S6pc'=3) + 0.001:(n2S6t0'=1)&(n2S6pc'=3); +[] n2S6pc=3 & n2S6t0>=INTMIN & n2S6t0<=INTMAX -> (n2S6v7failing'=n2S6t0)&(n2S6pc'=4); +[] n2S6pc=4 -> (n2S6pc'=5); +[] n2S6pc=5 & (n2S6v7failing=1) -> (n2S6pc'=6); +[] n2S6pc=5 & !((n2S6v7failing=1)) -> (n2S6pc'=8); +[] n2S6pc=6 -> (n2S6pc'=-3)&(n2S6ra'=7); +[] n2S6pc=7 -> (n2S6pc'=9); +[] n2S6pc=8 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=9); +[] numSteps (n2S6pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S2f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f1] n2S3is=2 -> true; +[n2S9f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S9f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S9f2] n2S3is=2 -> true; +[] unlk=18 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=18 & numSteps (unlk'=19)&(numSkips'=numSkips+1); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=19)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2t0:[0..1]; +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..3] init 0; n2S2ra:[-6..3] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S4f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S4f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S4f1] n2S2is=2 -> true; +[n2S1f4] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f4] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f4] n2S2is=2 -> true; +[n2S3f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[] unlk=17 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=18)&(numSkips'=numSkips+1); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=18)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> 0.571429:(n2S2t0'=0)&(n2S2pc'=2) + 0.428571:(n2S2t0'=1)&(n2S2pc'=2); +[] n2S2pc=2 -> (n2S2opt'=(n2S2t0+2))&(n2S2pc'=-4)&(n2S2ra'=3); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..2] init 1; +n2S7ip1:[1..2] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..2] init 1; +n2S7op1:[1..2] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..2] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S8f1] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S8f1] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S8f1] n2S7is=2 -> true; +[n2S0f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S0f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S0f2] n2S7is=2 -> true; +[] unlk=22 & numSteps0 -> (n2S7pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=22 & numSteps (unlk'=23)&(numSkips'=numSkips+1); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=23)&(numSteps'=numSteps+1); +[] unlk=9 & numSteps0 -> (n2S7pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[] n2S7pc=1 -> (n2S7opt'=2)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 & n3S10is=0 & n3S10os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/realreli/ComSer-d.psi b/realreli/ComSer-d.psi new file mode 100644 index 0000000..8a81b1d --- /dev/null +++ b/realreli/ComSer-d.psi @@ -0,0 +1,342 @@ +num_steps := 20; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 13, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9, S8 := 10, S9 := 11, S10 := 12; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __relsrc_ty{ + Q_in: Queue, Q_out: Queue; + def __relsrc_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } +} +dat __reldst_ty{ + Q_in: Queue, Q_out: Queue; + arrived: ℝ; + def __reldst_ty(){ + Q_in = Queue(); + Q_out = Queue(); + arrived = 0; + } + def __run(){ + arrived = 1; + Q_in.popFront(); + } +} +dat __fwdr_ty{ + Q_in: Queue, Q_out: Queue; + def __fwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __badfwdr_ty{ + Q_in: Queue, Q_out: Queue; + failing: ℝ; + def __badfwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + failing = 2; + } + def __run(){ + if (failing==2){ + failing = flip((1/1000)); + } + if (failing==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __swch1_ty{ + Q_in: Queue, Q_out: Queue; + def __swch1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((1/2))+2))); } + } +} +dat __swch2_ty{ + Q_in: Queue, Q_out: Queue; + def __swch2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((3/7))+2))); } + } +} +dat __swch3_ty{ + Q_in: Queue, Q_out: Queue; + def __swch3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((4/9))+1))); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __relsrc_ty, __H1 : __reldst_ty, __S0 : __swch1_ty, __S1 : __swch1_ty, __S2 : __swch2_ty, __S3 : __fwdr_ty, __S4 : __fwdr_ty, __S5 : __fwdr_ty, __S6 : __badfwdr_ty, __S7 : __fwdr_ty, __S8 : __fwdr_ty, __S9 : __swch3_ty, __S10 : __fwdr_ty; + next: ℝ; + def __D(){ + __H0 = __relsrc_ty(), __H1 = __reldst_ty(), __S0 = __swch1_ty(), __S1 = __swch1_ty(), __S2 = __swch2_ty(), __S3 = __fwdr_ty(), __S4 = __fwdr_ty(), __S5 = __fwdr_ty(), __S6 = __badfwdr_ty(), __S7 = __fwdr_ty(), __S8 = __fwdr_ty(), __S9 = __swch3_ty(), __S10 = __fwdr_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else if current == 5 { __S3.Q_in } else if current == 6 { __S4.Q_in } else if current == 7 { __S5.Q_in } else if current == 8 { __S6.Q_in } else if current == 9 { __S7.Q_in } else if current == 10 { __S8.Q_in } else if current == 11 { __S9.Q_in } else { __S10.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else if (current - k) == 5 { __S3.Q_out } else if (current - k) == 6 { __S4.Q_out } else if (current - k) == 7 { __S5.Q_out } else if (current - k) == 8 { __S6.Q_out } else if (current - k) == 9 { __S7.Q_out } else if (current - k) == 10 { __S8.Q_out } else if (current - k) == 11 { __S9.Q_out } else { __S10.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() || __S8.Q_in.size() || __S8.Q_out.size() || __S9.Q_in.size() || __S9.Q_out.size() || __S10.Q_in.size() || __S10.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S10.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __S8.Q_in.pushBack((pkt, 3)); + } + if port == 4 { + __S2.Q_in.pushBack((pkt, 2)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 4)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S10.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 2)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S8.Q_in.pushBack((pkt, 1)); + } + } + if node == 10 && __S8.Q_out.size() { + (pkt,port) := __S8.Q_out.takeFront(); + if port == 1 { + __S7.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S10.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 3)); + } + } + if node == 11 && __S9.Q_out.size() { + (pkt,port) := __S9.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 12 && __S10.Q_out.size() { + (pkt,port) := __S10.Q_out.takeFront(); + if port == 1 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S8.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + if node == 10 && __S8.Q_in.size() { + __S8.__run(); + } + if node == 11 && __S9.Q_in.size() { + __S9.__run(); + } + if node == 12 && __S10.Q_in.size() { + __S10.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size() || __d.__S8.Q_in.size() || __d.__S8.Q_out.size() || __d.__S9.Q_in.size() || __d.__S9.Q_out.size() || __d.__S10.Q_in.size() || __d.__S10.Q_out.size())); + q₁ := Expectation(((if H1 == 1 { __d.__H1.arrived } else { assert(0) }) == 1) !=0); + return (q₁); +} + diff --git a/realreli/ComSer.bayonet b/realreli/ComSer.bayonet new file mode 100644 index 0000000..1c1d3d1 --- /dev/null +++ b/realreli/ComSer.bayonet @@ -0,0 +1,77 @@ +parameters{ NUM_PACKETS(3) } + +num_steps 20; + +query probability(arrived@H1 == 1); + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, S10 } + links{ + (H0,pt1) <-> (S9,pt3), + (S9,pt1) <-> (S0,pt1), + (S9,pt2) <-> (S3,pt1), + (S0,pt2) <-> (S7,pt1), + (S0,pt3) <-> (S1,pt1), + (S1,pt4) <-> (S2,pt2), + (S1,pt2) <-> (S6,pt3), + (S1,pt3) <-> (S8,pt3), + (S2,pt1) <-> (S3,pt2), + (S2,pt3) <-> (S4,pt1), + (S4,pt2) <-> (S5,pt1), + (S5,pt2) <-> (S6,pt1), + (S6,pt2) <-> (S10,pt1), + (S7,pt2) <-> (S8,pt1), + (S8,pt2) <-> (S10,pt3), + (S10,pt2) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> relsrc, H1 -> reldst, S0 -> swch1, S1 -> swch1, S2 -> swch2, S3 -> fwdr, S4 -> fwdr, S5 -> fwdr, S6 -> badfwdr, S7 -> fwdr, S8 -> fwdr, S9 -> swch3, S10 -> fwdr } + +def relsrc(pkt, port) { + fwd(1); +} + +def reldst(pkt, port) state arrived(0) { + arrived=1; + drop; +} + +def fwdr(pkt, port) { + fwd(2); +} + +def badfwdr(pkt, port) state failing(2) { + if failing == 2 { + failing = flip(1/1000); + } + if failing == 1 { + drop; + } else { + fwd(2); + } +} + +def swch1(pkt, port) { + fwd(flip(1/2)+2); +} + +def swch2(pkt, port) { + fwd(flip(3/7)+2); +} + +def swch3(pkt, port) { + fwd(flip(4/9)+1); +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/realreli/ComSer.prism b/realreli/ComSer.prism new file mode 100644 index 0000000..c4c62e4 --- /dev/null +++ b/realreli/ComSer.prism @@ -0,0 +1,490 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..2] init 0; n2H0ra:[-6..2] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S9f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S9f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S9f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=2); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S5f1] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S5f1] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S5f1] n2S4is=2 -> true; +[n2S2f3] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S2f3] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S2f3] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S6f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S6f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S6f1] n2S5is=2 -> true; +[n2S4f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S4f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S4f2] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..3] init 0; n2S0ra:[-6..3] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S1f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S7f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S7f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S7f1] n2S0is=2 -> true; +[n2S9f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S9f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S9f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.5:(n2S0t0'=0)&(n2S0pc'=2) + 0.5:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 -> (n2S0opt'=(n2S0t0+2))&(n2S0pc'=-4)&(n2S0ra'=3); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9t0:[0..1]; +n2S9ip0:[1..3] init 1; +n2S9ip1:[1..3] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..3] init 1; +n2S9op1:[1..3] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..3] init 1; +n2S9pc:[-6..3] init 0; n2S9ra:[-6..3] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n2H0f1] n2S9is=0 -> (n2S9ip0'=3)&(n2S9is'=1); +[n2H0f1] n2S9is=1 -> (n2S9ip1'=3)&(n2S9is'=2); +[n2H0f1] n2S9is=2 -> true; +[n2S3f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n2S3f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n2S3f1] n2S9is=2 -> true; +[n2S0f1] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S0f1] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S0f1] n2S9is=2 -> true; +[] unlk & numSteps0 -> (n2S9pc'=-5)&(unlk'=false); +[n2S9f3] n2S9pc=-5 & n2S9os>0 & n2S9op0=3 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S9pc'=1)&(unlk'=false); +[] n2S9pc=1 -> 0.555556:(n2S9t0'=0)&(n2S9pc'=2) + 0.444444:(n2S9t0'=1)&(n2S9pc'=2); +[] n2S9pc=2 -> (n2S9opt'=(n2S9t0+1))&(n2S9pc'=-4)&(n2S9ra'=3); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n3S10 +n3S10ip0:[1..3] init 1; +n3S10ip1:[1..3] init 1; +n3S10is:[0..2] init 0; +n3S10op0:[1..3] init 1; +n3S10op1:[1..3] init 1; +n3S10os:[0..2] init 0; +n3S10opt:[1..3] init 1; +n3S10pc:[-6..2] init 0; n3S10ra:[-6..2] init 0; +[] n3S10is<2 & n3S10pc=-1 -> (n3S10ip0'=1)&(n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-1 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10is<2 & n3S10pc=-2 -> (n3S10ip1'=n3S10ip0)&(n3S10is'=n3S10is+1)&(n3S10pc'=n3S10ra); +[] n3S10is=2 & n3S10pc=-2 -> (n3S10pc'=n3S10ra); +[] n3S10is=0 & n3S10pc=-3 -> (n3S10pc'=n3S10ra); +[] n3S10is>0 & n3S10pc=-3 -> (n3S10ip0'=n3S10ip1)&(n3S10is'=n3S10is-1)&(n3S10pc'=n3S10ra); +[] n3S10os=0 & n3S10pc=-4 -> (n3S10op0'=n3S10opt)&(n3S10os'=1)&(n3S10pc'=-3); +[] n3S10os=1 & n3S10pc=-4 -> (n3S10op1'=n3S10opt)&(n3S10os'=2)&(n3S10pc'=-3); +[] n3S10os=2 & n3S10pc=-4 -> (n3S10pc'=-3); +[n2S8f2] n3S10is=0 -> (n3S10ip0'=3)&(n3S10is'=1); +[n2S8f2] n3S10is=1 -> (n3S10ip1'=3)&(n3S10is'=2); +[n2S8f2] n3S10is=2 -> true; +[n2H1f1] n3S10is=0 -> (n3S10ip0'=2)&(n3S10is'=1); +[n2H1f1] n3S10is=1 -> (n3S10ip1'=2)&(n3S10is'=2); +[n2H1f1] n3S10is=2 -> true; +[n2S6f2] n3S10is=0 -> (n3S10ip0'=1)&(n3S10is'=1); +[n2S6f2] n3S10is=1 -> (n3S10ip1'=1)&(n3S10is'=2); +[n2S6f2] n3S10is=2 -> true; +[] unlk & numSteps0 -> (n3S10pc'=-5)&(unlk'=false); +[n3S10f3] n3S10pc=-5 & n3S10os>0 & n3S10op0=3 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f2] n3S10pc=-5 & n3S10os>0 & n3S10op0=2 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[n3S10f1] n3S10pc=-5 & n3S10os>0 & n3S10op0=1 -> (n3S10op0'=n3S10op1)&(n3S10os'=n3S10os-1)&(n3S10pc'=-6); +[] numSteps (n3S10pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n3S10pc'=1)&(unlk'=false); +[] n3S10pc=1 -> (n3S10opt'=2)&(n3S10pc'=-4)&(n3S10ra'=2); +[] numSteps (n3S10pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1t0:[0..1]; +n2S1ip0:[1..4] init 1; +n2S1ip1:[1..4] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..4] init 1; +n2S1op1:[1..4] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..4] init 1; +n2S1pc:[-6..3] init 0; n2S1ra:[-6..3] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S2f2] n2S1is=0 -> (n2S1ip0'=4)&(n2S1is'=1); +[n2S2f2] n2S1is=1 -> (n2S1ip1'=4)&(n2S1is'=2); +[n2S2f2] n2S1is=2 -> true; +[n2S8f3] n2S1is=0 -> (n2S1ip0'=3)&(n2S1is'=1); +[n2S8f3] n2S1is=1 -> (n2S1ip1'=3)&(n2S1is'=2); +[n2S8f3] n2S1is=2 -> true; +[n2S6f3] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S6f3] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S6f3] n2S1is=2 -> true; +[n2S0f3] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f3] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f3] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f4] n2S1pc=-5 & n2S1os>0 & n2S1op0=4 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> 0.5:(n2S1t0'=0)&(n2S1pc'=2) + 0.5:(n2S1t0'=1)&(n2S1pc'=2); +[] n2S1pc=2 -> (n2S1opt'=(n2S1t0+2))&(n2S1pc'=-4)&(n2S1ra'=3); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..2] init 0; n2S8ra:[-6..2] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n2S1f3] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n2S1f3] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n2S1f3] n2S8is=2 -> true; +[n3S10f3] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n3S10f3] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n3S10f3] n2S8is=2 -> true; +[n2S7f2] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S7f2] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S7f2] n2S8is=2 -> true; +[] unlk & numSteps0 -> (n2S8pc'=-5)&(unlk'=false); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S8pc'=1)&(unlk'=false); +[] n2S8pc=1 -> (n2S8opt'=2)&(n2S8pc'=-4)&(n2S8ra'=2); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v7arrived:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n3S10f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n3S10f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n3S10f2] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & 1>=INTMIN & 1<=INTMAX -> (n2H1v7arrived'=1)&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6v7failing:[INTMIN..INTMAX] init 2; +n2S6t0:[0..1]; +n2S6ip0:[1..3] init 1; +n2S6ip1:[1..3] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..3] init 1; +n2S6op1:[1..3] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..3] init 1; +n2S6pc:[-6..9] init 0; n2S6ra:[-6..9] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S1f2] n2S6is=0 -> (n2S6ip0'=3)&(n2S6is'=1); +[n2S1f2] n2S6is=1 -> (n2S6ip1'=3)&(n2S6is'=2); +[n2S1f2] n2S6is=2 -> true; +[n3S10f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n3S10f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n3S10f1] n2S6is=2 -> true; +[n2S5f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S5f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S5f2] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f3] n2S6pc=-5 & n2S6os>0 & n2S6op0=3 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 & (n2S6v7failing=2) -> (n2S6pc'=2); +[] n2S6pc=1 & !((n2S6v7failing=2)) -> (n2S6pc'=5); +[] n2S6pc=2 -> 0.999:(n2S6t0'=0)&(n2S6pc'=3) + 0.001:(n2S6t0'=1)&(n2S6pc'=3); +[] n2S6pc=3 & n2S6t0>=INTMIN & n2S6t0<=INTMAX -> (n2S6v7failing'=n2S6t0)&(n2S6pc'=4); +[] n2S6pc=4 -> (n2S6pc'=5); +[] n2S6pc=5 & (n2S6v7failing=1) -> (n2S6pc'=6); +[] n2S6pc=5 & !((n2S6v7failing=1)) -> (n2S6pc'=8); +[] n2S6pc=6 -> (n2S6pc'=-3)&(n2S6ra'=7); +[] n2S6pc=7 -> (n2S6pc'=9); +[] n2S6pc=8 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=9); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S2f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S2f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S2f1] n2S3is=2 -> true; +[n2S9f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S9f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S9f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2t0:[0..1]; +n2S2ip0:[1..3] init 1; +n2S2ip1:[1..3] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..3] init 1; +n2S2op1:[1..3] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..3] init 1; +n2S2pc:[-6..3] init 0; n2S2ra:[-6..3] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S4f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2is'=1); +[n2S4f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2is'=2); +[n2S4f1] n2S2is=2 -> true; +[n2S1f4] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S1f4] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S1f4] n2S2is=2 -> true; +[n2S3f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S3f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S3f2] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> 0.571429:(n2S2t0'=0)&(n2S2pc'=2) + 0.428571:(n2S2t0'=1)&(n2S2pc'=2); +[] n2S2pc=2 -> (n2S2opt'=(n2S2t0+2))&(n2S2pc'=-4)&(n2S2ra'=3); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..2] init 1; +n2S7ip1:[1..2] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..2] init 1; +n2S7op1:[1..2] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..2] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S8f1] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S8f1] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S8f1] n2S7is=2 -> true; +[n2S0f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S0f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S0f2] n2S7is=2 -> true; +[] unlk & numSteps0 -> (n2S7pc'=-5)&(unlk'=false); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S7pc'=1)&(unlk'=false); +[] n2S7pc=1 -> (n2S7opt'=2)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 & n3S10is=0 & n3S10os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/realreli/ComSer.psi b/realreli/ComSer.psi new file mode 100644 index 0000000..4031cc0 --- /dev/null +++ b/realreli/ComSer.psi @@ -0,0 +1,340 @@ +num_steps := 20; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 13, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9, S8 := 10, S9 := 11, S10 := 12; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __relsrc_ty{ + Q_in: Queue, Q_out: Queue; + def __relsrc_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } +} +dat __reldst_ty{ + Q_in: Queue, Q_out: Queue; + arrived: ℝ; + def __reldst_ty(){ + Q_in = Queue(); + Q_out = Queue(); + arrived = 0; + } + def __run(){ + arrived = 1; + Q_in.popFront(); + } +} +dat __fwdr_ty{ + Q_in: Queue, Q_out: Queue; + def __fwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __badfwdr_ty{ + Q_in: Queue, Q_out: Queue; + failing: ℝ; + def __badfwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + failing = 2; + } + def __run(){ + if (failing==2){ + failing = flip((1/1000)); + } + if (failing==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __swch1_ty{ + Q_in: Queue, Q_out: Queue; + def __swch1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((1/2))+2))); } + } +} +dat __swch2_ty{ + Q_in: Queue, Q_out: Queue; + def __swch2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((3/7))+2))); } + } +} +dat __swch3_ty{ + Q_in: Queue, Q_out: Queue; + def __swch3_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((4/9))+1))); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __relsrc_ty, __H1 : __reldst_ty, __S0 : __swch1_ty, __S1 : __swch1_ty, __S2 : __swch2_ty, __S3 : __fwdr_ty, __S4 : __fwdr_ty, __S5 : __fwdr_ty, __S6 : __badfwdr_ty, __S7 : __fwdr_ty, __S8 : __fwdr_ty, __S9 : __swch3_ty, __S10 : __fwdr_ty; + def __D(){ + __H0 = __relsrc_ty(), __H1 = __reldst_ty(), __S0 = __swch1_ty(), __S1 = __swch1_ty(), __S2 = __swch2_ty(), __S3 = __fwdr_ty(), __S4 = __fwdr_ty(), __S5 = __fwdr_ty(), __S6 = __badfwdr_ty(), __S7 = __fwdr_ty(), __S8 = __fwdr_ty(), __S9 = __swch3_ty(), __S10 = __fwdr_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else if i == 4 { __S2.Q_in } else if i == 5 { __S3.Q_in } else if i == 6 { __S4.Q_in } else if i == 7 { __S5.Q_in } else if i == 8 { __S6.Q_in } else if i == 9 { __S7.Q_in } else if i == 10 { __S8.Q_in } else if i == 11 { __S9.Q_in } else { __S10.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else if i == 4 { __S2.Q_out } else if i == 5 { __S3.Q_out } else if i == 6 { __S4.Q_out } else if i == 7 { __S5.Q_out } else if i == 8 { __S6.Q_out } else if i == 9 { __S7.Q_out } else if i == 10 { __S8.Q_out } else if i == 11 { __S9.Q_out } else { __S10.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() || __S8.Q_in.size() || __S8.Q_out.size() || __S9.Q_in.size() || __S9.Q_out.size() || __S10.Q_in.size() || __S10.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S10.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __S8.Q_in.pushBack((pkt, 3)); + } + if port == 4 { + __S2.Q_in.pushBack((pkt, 2)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 4)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S4.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S10.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 2)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S8.Q_in.pushBack((pkt, 1)); + } + } + if node == 10 && __S8.Q_out.size() { + (pkt,port) := __S8.Q_out.takeFront(); + if port == 1 { + __S7.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S10.Q_in.pushBack((pkt, 3)); + } + if port == 3 { + __S1.Q_in.pushBack((pkt, 3)); + } + } + if node == 11 && __S9.Q_out.size() { + (pkt,port) := __S9.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 12 && __S10.Q_out.size() { + (pkt,port) := __S10.Q_out.takeFront(); + if port == 1 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S8.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + if node == 10 && __S8.Q_in.size() { + __S8.__run(); + } + if node == 11 && __S9.Q_in.size() { + __S9.__run(); + } + if node == 12 && __S10.Q_in.size() { + __S10.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size() || __d.__S8.Q_in.size() || __d.__S8.Q_out.size() || __d.__S9.Q_in.size() || __d.__S9.Q_out.size() || __d.__S10.Q_in.size() || __d.__S10.Q_out.size())); + q₁ := Expectation(((if H1 == 1 { __d.__H1.arrived } else { assert(0) }) == 1) !=0); + return (q₁); +} + diff --git a/realreli/LEARN-d.bayonet b/realreli/LEARN-d.bayonet new file mode 100644 index 0000000..5959265 --- /dev/null +++ b/realreli/LEARN-d.bayonet @@ -0,0 +1,74 @@ +parameters{ NUM_PACKETS(3) } + +num_steps 20; + +query probability(arrived@H1 == 1); + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5, S6, S7, S8, S9 } + links{ + (H0,pt1) <-> (S8,pt3), + (S8,pt1) <-> (S0,pt1), + (S8,pt2) <-> (S5,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (S9,pt1), + (S2,pt2) <-> (S3,pt1), + (S3,pt2) <-> (S4,pt1), + (S4,pt2) <-> (S9,pt4), + (S5,pt2) <-> (S6,pt1), + (S6,pt2) <-> (S7,pt1), + (S7,pt2) <-> (S9,pt3), + (S9,pt2) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> relsrc, H1 -> reldst, S0 -> swch2, S1 -> badfwdr, S2 -> fwdr, S3 -> fwdr, S4 -> fwdr, S5 -> fwdr, S6 -> fwdr, S7 -> fwdr, S8 -> swch1, S9 -> fwdr } + +def relsrc(pkt, port) { + fwd(1); +} + +def reldst(pkt, port) state arrived(0) { + arrived=1; + drop; +} + +def fwdr(pkt, port) { + fwd(2); +} + +def badfwdr(pkt, port) state failing(2) { + if failing == 2 { + failing = flip(1/1000); + } + if failing == 1 { + drop; + } else { + fwd(2); + } +} + +def swch1(pkt, port) { + fwd(flip(11/23)+1); +} + +def swch2(pkt, port) { + fwd(flip(1/3)+2); +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/realreli/LEARN-d.prism b/realreli/LEARN-d.prism new file mode 100644 index 0000000..769417a --- /dev/null +++ b/realreli/LEARN-d.prism @@ -0,0 +1,463 @@ +dtmc +global unlk:[-1..23] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 24; +global numSkips:[0..24] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..2] init 0; n2H0ra:[-6..2] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S8f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S8f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S8f3] n2H0is=2 -> true; +[] unlk=12 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=2); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S9f4] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S9f4] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S9f4] n2S4is=2 -> true; +[n2S3f2] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f2] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f2] n2S4is=2 -> true; +[] unlk=18 & numSteps0 -> (n2S4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=18 & numSteps (unlk'=19)&(numSkips'=numSkips+1); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=19)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2S4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S6f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S6f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S6f1] n2S5is=2 -> true; +[n2S8f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S8f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S8f2] n2S5is=2 -> true; +[] unlk=19 & numSteps0 -> (n2S5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=19 & numSteps (unlk'=20)&(numSkips'=numSkips+1); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=20)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2S5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..3] init 0; n2S0ra:[-6..3] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S8f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S8f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S8f1] n2S0is=2 -> true; +[] unlk=14 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 -> 0.666667:(n2S0t0'=0)&(n2S0pc'=2) + 0.333333:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 -> (n2S0opt'=(n2S0t0+2))&(n2S0pc'=-4)&(n2S0ra'=3); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9ip0:[1..4] init 1; +n2S9ip1:[1..4] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..4] init 1; +n2S9op1:[1..4] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..4] init 1; +n2S9pc:[-6..2] init 0; n2S9ra:[-6..2] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n2S4f2] n2S9is=0 -> (n2S9ip0'=4)&(n2S9is'=1); +[n2S4f2] n2S9is=1 -> (n2S9ip1'=4)&(n2S9is'=2); +[n2S4f2] n2S9is=2 -> true; +[n2S7f2] n2S9is=0 -> (n2S9ip0'=3)&(n2S9is'=1); +[n2S7f2] n2S9is=1 -> (n2S9ip1'=3)&(n2S9is'=2); +[n2S7f2] n2S9is=2 -> true; +[n2H1f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n2H1f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n2H1f1] n2S9is=2 -> true; +[n2S1f2] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S1f2] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S1f2] n2S9is=2 -> true; +[] unlk=23 & numSteps0 -> (n2S9pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=23 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S9f4] n2S9pc=-5 & n2S9os>0 & n2S9op0=4 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f3] n2S9pc=-5 & n2S9os>0 & n2S9op0=3 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=11 & numSteps0 -> (n2S9pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[] n2S9pc=1 -> (n2S9opt'=2)&(n2S9pc'=-4)&(n2S9ra'=2); +[] numSteps (n2S9pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v7failing:[INTMIN..INTMAX] init 2; +n2S1t0:[0..1]; +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..9] init 0; n2S1ra:[-6..9] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S9f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S9f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S9f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=15 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 & (n2S1v7failing=2) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1v7failing=2)) -> (n2S1pc'=5); +[] n2S1pc=2 -> 0.999:(n2S1t0'=0)&(n2S1pc'=3) + 0.001:(n2S1t0'=1)&(n2S1pc'=3); +[] n2S1pc=3 & n2S1t0>=INTMIN & n2S1t0<=INTMAX -> (n2S1v7failing'=n2S1t0)&(n2S1pc'=4); +[] n2S1pc=4 -> (n2S1pc'=5); +[] n2S1pc=5 & (n2S1v7failing=1) -> (n2S1pc'=6); +[] n2S1pc=5 & !((n2S1v7failing=1)) -> (n2S1pc'=8); +[] n2S1pc=6 -> (n2S1pc'=-3)&(n2S1ra'=7); +[] n2S1pc=7 -> (n2S1pc'=9); +[] n2S1pc=8 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=9); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8t0:[0..1]; +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..3] init 0; n2S8ra:[-6..3] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n2H0f1] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n2H0f1] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n2H0f1] n2S8is=2 -> true; +[n2S5f1] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n2S5f1] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n2S5f1] n2S8is=2 -> true; +[n2S0f1] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S0f1] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S0f1] n2S8is=2 -> true; +[] unlk=22 & numSteps0 -> (n2S8pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=22 & numSteps (unlk'=23)&(numSkips'=numSkips+1); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=23)&(numSteps'=numSteps+1); +[] unlk=10 & numSteps0 -> (n2S8pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[] n2S8pc=1 -> 0.521739:(n2S8t0'=0)&(n2S8pc'=2) + 0.478261:(n2S8t0'=1)&(n2S8pc'=2); +[] n2S8pc=2 -> (n2S8opt'=(n2S8t0+1))&(n2S8pc'=-4)&(n2S8ra'=3); +[] numSteps (n2S8pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v7arrived:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S9f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S9f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S9f2] n2H1is=2 -> true; +[] unlk=13 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & 1>=INTMIN & 1<=INTMAX -> (n2H1v7arrived'=1)&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..2] init 1; +n2S6ip1:[1..2] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..2] init 1; +n2S6op1:[1..2] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..2] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S7f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2S7f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2S7f1] n2S6is=2 -> true; +[n2S5f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S5f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S5f2] n2S6is=2 -> true; +[] unlk=20 & numSteps0 -> (n2S6pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=20 & numSteps (unlk'=21)&(numSkips'=numSkips+1); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=21)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2S6pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[] unlk=17 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=18)&(numSkips'=numSkips+1); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=18)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f1] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk=16 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..2] init 1; +n2S7ip1:[1..2] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..2] init 1; +n2S7op1:[1..2] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..2] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S9f3] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S9f3] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S9f3] n2S7is=2 -> true; +[n2S6f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S6f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S6f2] n2S7is=2 -> true; +[] unlk=21 & numSteps0 -> (n2S7pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=21 & numSteps (unlk'=22)&(numSkips'=numSkips+1); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=22)&(numSteps'=numSteps+1); +[] unlk=9 & numSteps0 -> (n2S7pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[] n2S7pc=1 -> (n2S7opt'=2)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/realreli/LEARN-d.psi b/realreli/LEARN-d.psi new file mode 100644 index 0000000..ab51239 --- /dev/null +++ b/realreli/LEARN-d.psi @@ -0,0 +1,308 @@ +num_steps := 20; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 12, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9, S8 := 10, S9 := 11; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __relsrc_ty{ + Q_in: Queue, Q_out: Queue; + def __relsrc_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } +} +dat __reldst_ty{ + Q_in: Queue, Q_out: Queue; + arrived: ℝ; + def __reldst_ty(){ + Q_in = Queue(); + Q_out = Queue(); + arrived = 0; + } + def __run(){ + arrived = 1; + Q_in.popFront(); + } +} +dat __fwdr_ty{ + Q_in: Queue, Q_out: Queue; + def __fwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __badfwdr_ty{ + Q_in: Queue, Q_out: Queue; + failing: ℝ; + def __badfwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + failing = 2; + } + def __run(){ + if (failing==2){ + failing = flip((1/1000)); + } + if (failing==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __swch1_ty{ + Q_in: Queue, Q_out: Queue; + def __swch1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((11/23))+1))); } + } +} +dat __swch2_ty{ + Q_in: Queue, Q_out: Queue; + def __swch2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((1/3))+2))); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __relsrc_ty, __H1 : __reldst_ty, __S0 : __swch2_ty, __S1 : __badfwdr_ty, __S2 : __fwdr_ty, __S3 : __fwdr_ty, __S4 : __fwdr_ty, __S5 : __fwdr_ty, __S6 : __fwdr_ty, __S7 : __fwdr_ty, __S8 : __swch1_ty, __S9 : __fwdr_ty; + next: ℝ; + def __D(){ + __H0 = __relsrc_ty(), __H1 = __reldst_ty(), __S0 = __swch2_ty(), __S1 = __badfwdr_ty(), __S2 = __fwdr_ty(), __S3 = __fwdr_ty(), __S4 = __fwdr_ty(), __S5 = __fwdr_ty(), __S6 = __fwdr_ty(), __S7 = __fwdr_ty(), __S8 = __swch1_ty(), __S9 = __fwdr_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else if current == 5 { __S3.Q_in } else if current == 6 { __S4.Q_in } else if current == 7 { __S5.Q_in } else if current == 8 { __S6.Q_in } else if current == 9 { __S7.Q_in } else if current == 10 { __S8.Q_in } else { __S9.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else if (current - k) == 5 { __S3.Q_out } else if (current - k) == 6 { __S4.Q_out } else if (current - k) == 7 { __S5.Q_out } else if (current - k) == 8 { __S6.Q_out } else if (current - k) == 9 { __S7.Q_out } else if (current - k) == 10 { __S8.Q_out } else { __S9.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() || __S8.Q_in.size() || __S8.Q_out.size() || __S9.Q_in.size() || __S9.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 4)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 3)); + } + } + if node == 10 && __S8.Q_out.size() { + (pkt,port) := __S8.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 11 && __S9.Q_out.size() { + (pkt,port) := __S9.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S7.Q_in.pushBack((pkt, 2)); + } + if port == 4 { + __S4.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + if node == 10 && __S8.Q_in.size() { + __S8.__run(); + } + if node == 11 && __S9.Q_in.size() { + __S9.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size() || __d.__S8.Q_in.size() || __d.__S8.Q_out.size() || __d.__S9.Q_in.size() || __d.__S9.Q_out.size())); + q₁ := Expectation(((if H1 == 1 { __d.__H1.arrived } else { assert(0) }) == 1) !=0); + return (q₁); +} + diff --git a/realreli/LEARN.bayonet b/realreli/LEARN.bayonet new file mode 100644 index 0000000..df88e52 --- /dev/null +++ b/realreli/LEARN.bayonet @@ -0,0 +1,70 @@ +parameters{ NUM_PACKETS(3) } + +num_steps 20; + +query probability(arrived@H1 == 1); + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5, S6, S7, S8, S9 } + links{ + (H0,pt1) <-> (S8,pt3), + (S8,pt1) <-> (S0,pt1), + (S8,pt2) <-> (S5,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (S9,pt1), + (S2,pt2) <-> (S3,pt1), + (S3,pt2) <-> (S4,pt1), + (S4,pt2) <-> (S9,pt4), + (S5,pt2) <-> (S6,pt1), + (S6,pt2) <-> (S7,pt1), + (S7,pt2) <-> (S9,pt3), + (S9,pt2) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> relsrc, H1 -> reldst, S0 -> swch2, S1 -> badfwdr, S2 -> fwdr, S3 -> fwdr, S4 -> fwdr, S5 -> fwdr, S6 -> fwdr, S7 -> fwdr, S8 -> swch1, S9 -> fwdr } + +def relsrc(pkt, port) { + fwd(1); +} + +def reldst(pkt, port) state arrived(0) { + arrived=1; + drop; +} + +def fwdr(pkt, port) { + fwd(2); +} + +def badfwdr(pkt, port) state failing(2) { + if failing == 2 { + failing = flip(1/1000); + } + if failing == 1 { + drop; + } else { + fwd(2); + } +} + +def swch1(pkt, port) { + fwd(flip(11/23)+1); +} + +def swch2(pkt, port) { + fwd(flip(1/3)+2); +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/realreli/LEARN.prism b/realreli/LEARN.prism new file mode 100644 index 0000000..709d40c --- /dev/null +++ b/realreli/LEARN.prism @@ -0,0 +1,437 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..2] init 0; n2H0ra:[-6..2] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S8f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S8f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S8f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=2); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S9f4] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S9f4] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S9f4] n2S4is=2 -> true; +[n2S3f2] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f2] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f2] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5ip0:[1..2] init 1; +n2S5ip1:[1..2] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..2] init 1; +n2S5op1:[1..2] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..2] init 1; +n2S5pc:[-6..2] init 0; n2S5ra:[-6..2] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2S6f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S6f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S6f1] n2S5is=2 -> true; +[n2S8f2] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S8f2] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S8f2] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 -> (n2S5opt'=2)&(n2S5pc'=-4)&(n2S5ra'=2); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0t0:[0..1]; +n2S0ip0:[1..3] init 1; +n2S0ip1:[1..3] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1; +n2S0op1:[1..3] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..3] init 0; n2S0ra:[-6..3] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S8f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S8f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S8f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 -> 0.666667:(n2S0t0'=0)&(n2S0pc'=2) + 0.333333:(n2S0t0'=1)&(n2S0pc'=2); +[] n2S0pc=2 -> (n2S0opt'=(n2S0t0+2))&(n2S0pc'=-4)&(n2S0ra'=3); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S9 +n2S9ip0:[1..4] init 1; +n2S9ip1:[1..4] init 1; +n2S9is:[0..2] init 0; +n2S9op0:[1..4] init 1; +n2S9op1:[1..4] init 1; +n2S9os:[0..2] init 0; +n2S9opt:[1..4] init 1; +n2S9pc:[-6..2] init 0; n2S9ra:[-6..2] init 0; +[] n2S9is<2 & n2S9pc=-1 -> (n2S9ip0'=1)&(n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-1 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9is<2 & n2S9pc=-2 -> (n2S9ip1'=n2S9ip0)&(n2S9is'=n2S9is+1)&(n2S9pc'=n2S9ra); +[] n2S9is=2 & n2S9pc=-2 -> (n2S9pc'=n2S9ra); +[] n2S9is=0 & n2S9pc=-3 -> (n2S9pc'=n2S9ra); +[] n2S9is>0 & n2S9pc=-3 -> (n2S9ip0'=n2S9ip1)&(n2S9is'=n2S9is-1)&(n2S9pc'=n2S9ra); +[] n2S9os=0 & n2S9pc=-4 -> (n2S9op0'=n2S9opt)&(n2S9os'=1)&(n2S9pc'=-3); +[] n2S9os=1 & n2S9pc=-4 -> (n2S9op1'=n2S9opt)&(n2S9os'=2)&(n2S9pc'=-3); +[] n2S9os=2 & n2S9pc=-4 -> (n2S9pc'=-3); +[n2S4f2] n2S9is=0 -> (n2S9ip0'=4)&(n2S9is'=1); +[n2S4f2] n2S9is=1 -> (n2S9ip1'=4)&(n2S9is'=2); +[n2S4f2] n2S9is=2 -> true; +[n2S7f2] n2S9is=0 -> (n2S9ip0'=3)&(n2S9is'=1); +[n2S7f2] n2S9is=1 -> (n2S9ip1'=3)&(n2S9is'=2); +[n2S7f2] n2S9is=2 -> true; +[n2H1f1] n2S9is=0 -> (n2S9ip0'=2)&(n2S9is'=1); +[n2H1f1] n2S9is=1 -> (n2S9ip1'=2)&(n2S9is'=2); +[n2H1f1] n2S9is=2 -> true; +[n2S1f2] n2S9is=0 -> (n2S9ip0'=1)&(n2S9is'=1); +[n2S1f2] n2S9is=1 -> (n2S9ip1'=1)&(n2S9is'=2); +[n2S1f2] n2S9is=2 -> true; +[] unlk & numSteps0 -> (n2S9pc'=-5)&(unlk'=false); +[n2S9f4] n2S9pc=-5 & n2S9os>0 & n2S9op0=4 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f3] n2S9pc=-5 & n2S9os>0 & n2S9op0=3 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f2] n2S9pc=-5 & n2S9os>0 & n2S9op0=2 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[n2S9f1] n2S9pc=-5 & n2S9os>0 & n2S9op0=1 -> (n2S9op0'=n2S9op1)&(n2S9os'=n2S9os-1)&(n2S9pc'=-6); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S9pc'=1)&(unlk'=false); +[] n2S9pc=1 -> (n2S9opt'=2)&(n2S9pc'=-4)&(n2S9ra'=2); +[] numSteps (n2S9pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1v7failing:[INTMIN..INTMAX] init 2; +n2S1t0:[0..1]; +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..9] init 0; n2S1ra:[-6..9] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S9f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S9f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S9f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 & (n2S1v7failing=2) -> (n2S1pc'=2); +[] n2S1pc=1 & !((n2S1v7failing=2)) -> (n2S1pc'=5); +[] n2S1pc=2 -> 0.999:(n2S1t0'=0)&(n2S1pc'=3) + 0.001:(n2S1t0'=1)&(n2S1pc'=3); +[] n2S1pc=3 & n2S1t0>=INTMIN & n2S1t0<=INTMAX -> (n2S1v7failing'=n2S1t0)&(n2S1pc'=4); +[] n2S1pc=4 -> (n2S1pc'=5); +[] n2S1pc=5 & (n2S1v7failing=1) -> (n2S1pc'=6); +[] n2S1pc=5 & !((n2S1v7failing=1)) -> (n2S1pc'=8); +[] n2S1pc=6 -> (n2S1pc'=-3)&(n2S1ra'=7); +[] n2S1pc=7 -> (n2S1pc'=9); +[] n2S1pc=8 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=9); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S8 +n2S8t0:[0..1]; +n2S8ip0:[1..3] init 1; +n2S8ip1:[1..3] init 1; +n2S8is:[0..2] init 0; +n2S8op0:[1..3] init 1; +n2S8op1:[1..3] init 1; +n2S8os:[0..2] init 0; +n2S8opt:[1..3] init 1; +n2S8pc:[-6..3] init 0; n2S8ra:[-6..3] init 0; +[] n2S8is<2 & n2S8pc=-1 -> (n2S8ip0'=1)&(n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-1 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8is<2 & n2S8pc=-2 -> (n2S8ip1'=n2S8ip0)&(n2S8is'=n2S8is+1)&(n2S8pc'=n2S8ra); +[] n2S8is=2 & n2S8pc=-2 -> (n2S8pc'=n2S8ra); +[] n2S8is=0 & n2S8pc=-3 -> (n2S8pc'=n2S8ra); +[] n2S8is>0 & n2S8pc=-3 -> (n2S8ip0'=n2S8ip1)&(n2S8is'=n2S8is-1)&(n2S8pc'=n2S8ra); +[] n2S8os=0 & n2S8pc=-4 -> (n2S8op0'=n2S8opt)&(n2S8os'=1)&(n2S8pc'=-3); +[] n2S8os=1 & n2S8pc=-4 -> (n2S8op1'=n2S8opt)&(n2S8os'=2)&(n2S8pc'=-3); +[] n2S8os=2 & n2S8pc=-4 -> (n2S8pc'=-3); +[n2H0f1] n2S8is=0 -> (n2S8ip0'=3)&(n2S8is'=1); +[n2H0f1] n2S8is=1 -> (n2S8ip1'=3)&(n2S8is'=2); +[n2H0f1] n2S8is=2 -> true; +[n2S5f1] n2S8is=0 -> (n2S8ip0'=2)&(n2S8is'=1); +[n2S5f1] n2S8is=1 -> (n2S8ip1'=2)&(n2S8is'=2); +[n2S5f1] n2S8is=2 -> true; +[n2S0f1] n2S8is=0 -> (n2S8ip0'=1)&(n2S8is'=1); +[n2S0f1] n2S8is=1 -> (n2S8ip1'=1)&(n2S8is'=2); +[n2S0f1] n2S8is=2 -> true; +[] unlk & numSteps0 -> (n2S8pc'=-5)&(unlk'=false); +[n2S8f3] n2S8pc=-5 & n2S8os>0 & n2S8op0=3 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f2] n2S8pc=-5 & n2S8os>0 & n2S8op0=2 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[n2S8f1] n2S8pc=-5 & n2S8os>0 & n2S8op0=1 -> (n2S8op0'=n2S8op1)&(n2S8os'=n2S8os-1)&(n2S8pc'=-6); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S8pc'=1)&(unlk'=false); +[] n2S8pc=1 -> 0.521739:(n2S8t0'=0)&(n2S8pc'=2) + 0.478261:(n2S8t0'=1)&(n2S8pc'=2); +[] n2S8pc=2 -> (n2S8opt'=(n2S8t0+1))&(n2S8pc'=-4)&(n2S8ra'=3); +[] numSteps (n2S8pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v7arrived:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S9f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S9f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S9f2] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & 1>=INTMIN & 1<=INTMAX -> (n2H1v7arrived'=1)&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..2] init 1; +n2S6ip1:[1..2] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..2] init 1; +n2S6op1:[1..2] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..2] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S7f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2S7f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2S7f1] n2S6is=2 -> true; +[n2S5f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S5f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S5f2] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f1] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S7 +n2S7ip0:[1..2] init 1; +n2S7ip1:[1..2] init 1; +n2S7is:[0..2] init 0; +n2S7op0:[1..2] init 1; +n2S7op1:[1..2] init 1; +n2S7os:[0..2] init 0; +n2S7opt:[1..2] init 1; +n2S7pc:[-6..2] init 0; n2S7ra:[-6..2] init 0; +[] n2S7is<2 & n2S7pc=-1 -> (n2S7ip0'=1)&(n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-1 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7is<2 & n2S7pc=-2 -> (n2S7ip1'=n2S7ip0)&(n2S7is'=n2S7is+1)&(n2S7pc'=n2S7ra); +[] n2S7is=2 & n2S7pc=-2 -> (n2S7pc'=n2S7ra); +[] n2S7is=0 & n2S7pc=-3 -> (n2S7pc'=n2S7ra); +[] n2S7is>0 & n2S7pc=-3 -> (n2S7ip0'=n2S7ip1)&(n2S7is'=n2S7is-1)&(n2S7pc'=n2S7ra); +[] n2S7os=0 & n2S7pc=-4 -> (n2S7op0'=n2S7opt)&(n2S7os'=1)&(n2S7pc'=-3); +[] n2S7os=1 & n2S7pc=-4 -> (n2S7op1'=n2S7opt)&(n2S7os'=2)&(n2S7pc'=-3); +[] n2S7os=2 & n2S7pc=-4 -> (n2S7pc'=-3); +[n2S9f3] n2S7is=0 -> (n2S7ip0'=2)&(n2S7is'=1); +[n2S9f3] n2S7is=1 -> (n2S7ip1'=2)&(n2S7is'=2); +[n2S9f3] n2S7is=2 -> true; +[n2S6f2] n2S7is=0 -> (n2S7ip0'=1)&(n2S7is'=1); +[n2S6f2] n2S7is=1 -> (n2S7ip1'=1)&(n2S7is'=2); +[n2S6f2] n2S7is=2 -> true; +[] unlk & numSteps0 -> (n2S7pc'=-5)&(unlk'=false); +[n2S7f2] n2S7pc=-5 & n2S7os>0 & n2S7op0=2 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[n2S7f1] n2S7pc=-5 & n2S7os>0 & n2S7op0=1 -> (n2S7op0'=n2S7op1)&(n2S7os'=n2S7os-1)&(n2S7pc'=-6); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S7pc'=1)&(unlk'=false); +[] n2S7pc=1 -> (n2S7opt'=2)&(n2S7pc'=-4)&(n2S7ra'=2); +[] numSteps (n2S7pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 & n2S7is=0 & n2S7os=0 & n2S8is=0 & n2S8os=0 & n2S9is=0 & n2S9os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/realreli/LEARN.psi b/realreli/LEARN.psi new file mode 100644 index 0000000..7031b96 --- /dev/null +++ b/realreli/LEARN.psi @@ -0,0 +1,306 @@ +num_steps := 20; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 12, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8, S7 := 9, S8 := 10, S9 := 11; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __relsrc_ty{ + Q_in: Queue, Q_out: Queue; + def __relsrc_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } +} +dat __reldst_ty{ + Q_in: Queue, Q_out: Queue; + arrived: ℝ; + def __reldst_ty(){ + Q_in = Queue(); + Q_out = Queue(); + arrived = 0; + } + def __run(){ + arrived = 1; + Q_in.popFront(); + } +} +dat __fwdr_ty{ + Q_in: Queue, Q_out: Queue; + def __fwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __badfwdr_ty{ + Q_in: Queue, Q_out: Queue; + failing: ℝ; + def __badfwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + failing = 2; + } + def __run(){ + if (failing==2){ + failing = flip((1/1000)); + } + if (failing==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +dat __swch1_ty{ + Q_in: Queue, Q_out: Queue; + def __swch1_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((11/23))+1))); } + } +} +dat __swch2_ty{ + Q_in: Queue, Q_out: Queue; + def __swch2_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((1/3))+2))); } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __relsrc_ty, __H1 : __reldst_ty, __S0 : __swch2_ty, __S1 : __badfwdr_ty, __S2 : __fwdr_ty, __S3 : __fwdr_ty, __S4 : __fwdr_ty, __S5 : __fwdr_ty, __S6 : __fwdr_ty, __S7 : __fwdr_ty, __S8 : __swch1_ty, __S9 : __fwdr_ty; + def __D(){ + __H0 = __relsrc_ty(), __H1 = __reldst_ty(), __S0 = __swch2_ty(), __S1 = __badfwdr_ty(), __S2 = __fwdr_ty(), __S3 = __fwdr_ty(), __S4 = __fwdr_ty(), __S5 = __fwdr_ty(), __S6 = __fwdr_ty(), __S7 = __fwdr_ty(), __S8 = __swch1_ty(), __S9 = __fwdr_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else if i == 4 { __S2.Q_in } else if i == 5 { __S3.Q_in } else if i == 6 { __S4.Q_in } else if i == 7 { __S5.Q_in } else if i == 8 { __S6.Q_in } else if i == 9 { __S7.Q_in } else if i == 10 { __S8.Q_in } else { __S9.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else if i == 4 { __S2.Q_out } else if i == 5 { __S3.Q_out } else if i == 6 { __S4.Q_out } else if i == 7 { __S5.Q_out } else if i == 8 { __S6.Q_out } else if i == 9 { __S7.Q_out } else if i == 10 { __S8.Q_out } else { __S9.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() || __S7.Q_in.size() || __S7.Q_out.size() || __S8.Q_in.size() || __S8.Q_out.size() || __S9.Q_in.size() || __S9.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S9.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S2.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 3)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 4)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S8.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S7.Q_in.pushBack((pkt, 1)); + } + } + if node == 9 && __S7.Q_out.size() { + (pkt,port) := __S7.Q_out.takeFront(); + if port == 1 { + __S6.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S9.Q_in.pushBack((pkt, 3)); + } + } + if node == 10 && __S8.Q_out.size() { + (pkt,port) := __S8.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 11 && __S9.Q_out.size() { + (pkt,port) := __S9.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S7.Q_in.pushBack((pkt, 2)); + } + if port == 4 { + __S4.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + if node == 9 && __S7.Q_in.size() { + __S7.__run(); + } + if node == 10 && __S8.Q_in.size() { + __S8.__run(); + } + if node == 11 && __S9.Q_in.size() { + __S9.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size() || __d.__S7.Q_in.size() || __d.__S7.Q_out.size() || __d.__S8.Q_in.size() || __d.__S8.Q_out.size() || __d.__S9.Q_in.size() || __d.__S9.Q_out.size())); + q₁ := Expectation(((if H1 == 1 { __d.__H1.arrived } else { assert(0) }) == 1) !=0); + return (q₁); +} + diff --git a/realreli/SANReN-d.bayonet b/realreli/SANReN-d.bayonet new file mode 100644 index 0000000..db2d77c --- /dev/null +++ b/realreli/SANReN-d.bayonet @@ -0,0 +1,66 @@ +parameters{ NUM_PACKETS(3) } + +num_steps 20; + +query probability(arrived@H1 == 1); + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5, S6 } + links{ + (H0,pt1) <-> (S5,pt3), + (S5,pt1) <-> (S0,pt1), + (S5,pt2) <-> (S2,pt1), + (S0,pt2) <-> (S1,pt1), + (S1,pt2) <-> (S6,pt1), + (S2,pt2) <-> (S3,pt1), + (S3,pt2) <-> (S4,pt1), + (S4,pt2) <-> (S6,pt3), + (S6,pt2) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> relsrc, H1 -> reldst, S0 -> badfwdr, S1 -> fwdr, S2 -> fwdr, S3 -> fwdr, S4 -> fwdr, S5 -> swch, S6 -> fwdr } + +def relsrc(pkt, port) { + fwd(1); +} + +def reldst(pkt, port) state arrived(0) { + arrived=1; + drop; +} + +def swch(pkt, port) { + fwd(flip(3/7)+1); +} + +def fwdr(pkt, port) { + fwd(2); +} + +def badfwdr(pkt, port) state failing(2) { + if failing == 2 { + failing = flip(1/1000); + } + if failing == 1 { + drop; + } else { + fwd(2); + } +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/realreli/SANReN-d.prism b/realreli/SANReN-d.prism new file mode 100644 index 0000000..54656d0 --- /dev/null +++ b/realreli/SANReN-d.prism @@ -0,0 +1,348 @@ +dtmc +global unlk:[-1..17] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 18; +global numSkips:[0..18] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..2] init 0; n2H0ra:[-6..2] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S5f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S5f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S5f3] n2H0is=2 -> true; +[] unlk=9 & numSteps0 -> (n2H0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n2H0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n2H0pc=1 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=2); +[] numSteps (n2H0pc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S6f3] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S6f3] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S6f3] n2S4is=2 -> true; +[n2S3f2] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f2] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f2] n2S4is=2 -> true; +[] unlk=15 & numSteps0 -> (n2S4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2S4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5t0:[0..1]; +n2S5ip0:[1..3] init 1; +n2S5ip1:[1..3] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..3] init 1; +n2S5op1:[1..3] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..3] init 1; +n2S5pc:[-6..3] init 0; n2S5ra:[-6..3] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2H0f1] n2S5is=0 -> (n2S5ip0'=3)&(n2S5is'=1); +[n2H0f1] n2S5is=1 -> (n2S5ip1'=3)&(n2S5is'=2); +[n2H0f1] n2S5is=2 -> true; +[n2S2f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S2f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S2f1] n2S5is=2 -> true; +[n2S0f1] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S0f1] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S0f1] n2S5is=2 -> true; +[] unlk=16 & numSteps0 -> (n2S5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[n2S5f3] n2S5pc=-5 & n2S5os>0 & n2S5op0=3 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2S5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2S5pc=1 -> 0.571429:(n2S5t0'=0)&(n2S5pc'=2) + 0.428571:(n2S5t0'=1)&(n2S5pc'=2); +[] n2S5pc=2 -> (n2S5opt'=(n2S5t0+1))&(n2S5pc'=-4)&(n2S5ra'=3); +[] numSteps (n2S5pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v7failing:[INTMIN..INTMAX] init 2; +n2S0t0:[0..1]; +n2S0ip0:[1..2] init 1; +n2S0ip1:[1..2] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..2] init 1; +n2S0op1:[1..2] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..2] init 1; +n2S0pc:[-6..9] init 0; n2S0ra:[-6..9] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S5f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S5f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S5f1] n2S0is=2 -> true; +[] unlk=11 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S0pc=1 & (n2S0v7failing=2) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0v7failing=2)) -> (n2S0pc'=5); +[] n2S0pc=2 -> 0.999:(n2S0t0'=0)&(n2S0pc'=3) + 0.001:(n2S0t0'=1)&(n2S0pc'=3); +[] n2S0pc=3 & n2S0t0>=INTMIN & n2S0t0<=INTMAX -> (n2S0v7failing'=n2S0t0)&(n2S0pc'=4); +[] n2S0pc=4 -> (n2S0pc'=5); +[] n2S0pc=5 & (n2S0v7failing=1) -> (n2S0pc'=6); +[] n2S0pc=5 & !((n2S0v7failing=1)) -> (n2S0pc'=8); +[] n2S0pc=6 -> (n2S0pc'=-3)&(n2S0ra'=7); +[] n2S0pc=7 -> (n2S0pc'=9); +[] n2S0pc=8 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=9); +[] numSteps (n2S0pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S6f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S6f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S6f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=12 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v7arrived:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S6f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S6f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S6f2] n2H1is=2 -> true; +[] unlk=10 & numSteps0 -> (n2H1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2H1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2H1pc=1 & 1>=INTMIN & 1<=INTMAX -> (n2H1v7arrived'=1)&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..3] init 1; +n2S6ip1:[1..3] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..3] init 1; +n2S6op1:[1..3] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..3] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S4f2] n2S6is=0 -> (n2S6ip0'=3)&(n2S6is'=1); +[n2S4f2] n2S6is=1 -> (n2S6ip1'=3)&(n2S6is'=2); +[n2S4f2] n2S6is=2 -> true; +[n2H1f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2H1f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2H1f1] n2S6is=2 -> true; +[n2S1f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S1f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S1f2] n2S6is=2 -> true; +[] unlk=17 & numSteps0 -> (n2S6pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2S6f3] n2S6pc=-5 & n2S6os>0 & n2S6op0=3 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2S6pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[] unlk=14 & numSteps0 -> (n2S3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2S3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f1] n2S2is=2 -> true; +[n2S5f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S5f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S5f2] n2S2is=2 -> true; +[] unlk=13 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/realreli/SANReN-d.psi b/realreli/SANReN-d.psi new file mode 100644 index 0000000..deb76b0 --- /dev/null +++ b/realreli/SANReN-d.psi @@ -0,0 +1,256 @@ +num_steps := 20; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 9, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __relsrc_ty{ + Q_in: Queue, Q_out: Queue; + def __relsrc_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } +} +dat __reldst_ty{ + Q_in: Queue, Q_out: Queue; + arrived: ℝ; + def __reldst_ty(){ + Q_in = Queue(); + Q_out = Queue(); + arrived = 0; + } + def __run(){ + arrived = 1; + Q_in.popFront(); + } +} +dat __swch_ty{ + Q_in: Queue, Q_out: Queue; + def __swch_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((3/7))+1))); } + } +} +dat __fwdr_ty{ + Q_in: Queue, Q_out: Queue; + def __fwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __badfwdr_ty{ + Q_in: Queue, Q_out: Queue; + failing: ℝ; + def __badfwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + failing = 2; + } + def __run(){ + if (failing==2){ + failing = flip((1/1000)); + } + if (failing==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __relsrc_ty, __H1 : __reldst_ty, __S0 : __badfwdr_ty, __S1 : __fwdr_ty, __S2 : __fwdr_ty, __S3 : __fwdr_ty, __S4 : __fwdr_ty, __S5 : __swch_ty, __S6 : __fwdr_ty; + next: ℝ; + def __D(){ + __H0 = __relsrc_ty(), __H1 = __reldst_ty(), __S0 = __badfwdr_ty(), __S1 = __fwdr_ty(), __S2 = __fwdr_ty(), __S3 = __fwdr_ty(), __S4 = __fwdr_ty(), __S5 = __swch_ty(), __S6 = __fwdr_ty(); + next = 0; + } + def scheduler(){ + for i in [0..2 * k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (if current == 0 { __H0.Q_in } else if current == 1 { __H1.Q_in } else if current == 2 { __S0.Q_in } else if current == 3 { __S1.Q_in } else if current == 4 { __S2.Q_in } else if current == 5 { __S3.Q_in } else if current == 6 { __S4.Q_in } else if current == 7 { __S5.Q_in } else { __S6.Q_in }).size() > 0 { + return (RunSw,current); + } else if current >= k && (if (current - k) == 0 { __H0.Q_out } else if (current - k) == 1 { __H1.Q_out } else if (current - k) == 2 { __S0.Q_out } else if (current - k) == 3 { __S1.Q_out } else if (current - k) == 4 { __S2.Q_out } else if (current - k) == 5 { __S3.Q_out } else if (current - k) == 6 { __S4.Q_out } else if (current - k) == 7 { __S5.Q_out } else { __S6.Q_out }).size() > 0 { + return (FwdQ,current - k); + } + } + assert(0); + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S6.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 3)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size())); + q₁ := Expectation(((if H1 == 1 { __d.__H1.arrived } else { assert(0) }) == 1) !=0); + return (q₁); +} + diff --git a/realreli/SANReN.bayonet b/realreli/SANReN.bayonet new file mode 100644 index 0000000..24f1445 --- /dev/null +++ b/realreli/SANReN.bayonet @@ -0,0 +1,62 @@ +parameters{ NUM_PACKETS(3) } + +num_steps 20; + +query probability(arrived@H1 == 1); + +topology{ + nodes{ H0, H1, S0, S1, S2, S3, S4, S5, S6 } + links{ + (H0,pt1) <-> (S5,pt3), + (S5,pt1) <-> (S0,pt1), + (S5,pt2) <-> (S2,pt1), + (S0,pt2) <-> (S1,pt1), + (S1,pt2) <-> (S6,pt1), + (S2,pt2) <-> (S3,pt1), + (S3,pt2) <-> (S4,pt1), + (S4,pt2) <-> (S6,pt3), + (S6,pt2) <-> (H1,pt1) + } +} +queue_capacity 2; + +packet_fields{ } + +programs{ H0 -> relsrc, H1 -> reldst, S0 -> badfwdr, S1 -> fwdr, S2 -> fwdr, S3 -> fwdr, S4 -> fwdr, S5 -> swch, S6 -> fwdr } + +def relsrc(pkt, port) { + fwd(1); +} + +def reldst(pkt, port) state arrived(0) { + arrived=1; + drop; +} + +def swch(pkt, port) { + fwd(flip(3/7)+1); +} + +def fwdr(pkt, port) { + fwd(2); +} + +def badfwdr(pkt, port) state failing(2) { + if failing == 2 { + failing = flip(1/1000); + } + if failing == 1 { + drop; + } else { + fwd(2); + } +} + +def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (Q_in@i).size() > 0 { actions ~= [(RunSw,i)]; } + if (Q_out@i).size() > 0 { actions ~= [(FwdQ,i)]; } + } + return actions[uniformInt(0,actions.length-1)]; +} diff --git a/realreli/SANReN.prism b/realreli/SANReN.prism new file mode 100644 index 0000000..737c620 --- /dev/null +++ b/realreli/SANReN.prism @@ -0,0 +1,328 @@ +dtmc +global unlk:bool init true; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +const int v11NUM_PACKETS = 3; +module n2H0 +n2H0ip0:[1..2] init 1; +n2H0ip1:[1..2] init 1; +n2H0is:[0..2] init 1; +n2H0op0:[1..2] init 1; +n2H0op1:[1..2] init 1; +n2H0os:[0..2] init 0; +n2H0opt:[1..2] init 1; +n2H0pc:[-6..2] init 0; n2H0ra:[-6..2] init 0; +[] n2H0is<2 & n2H0pc=-1 -> (n2H0ip0'=1)&(n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-1 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0is<2 & n2H0pc=-2 -> (n2H0ip1'=n2H0ip0)&(n2H0is'=n2H0is+1)&(n2H0pc'=n2H0ra); +[] n2H0is=2 & n2H0pc=-2 -> (n2H0pc'=n2H0ra); +[] n2H0is=0 & n2H0pc=-3 -> (n2H0pc'=n2H0ra); +[] n2H0is>0 & n2H0pc=-3 -> (n2H0ip0'=n2H0ip1)&(n2H0is'=n2H0is-1)&(n2H0pc'=n2H0ra); +[] n2H0os=0 & n2H0pc=-4 -> (n2H0op0'=n2H0opt)&(n2H0os'=1)&(n2H0pc'=-3); +[] n2H0os=1 & n2H0pc=-4 -> (n2H0op1'=n2H0opt)&(n2H0os'=2)&(n2H0pc'=-3); +[] n2H0os=2 & n2H0pc=-4 -> (n2H0pc'=-3); +[n2S5f3] n2H0is=0 -> (n2H0ip0'=1)&(n2H0is'=1); +[n2S5f3] n2H0is=1 -> (n2H0ip1'=1)&(n2H0is'=2); +[n2S5f3] n2H0is=2 -> true; +[] unlk & numSteps0 -> (n2H0pc'=-5)&(unlk'=false); +[n2H0f1] n2H0pc=-5 & n2H0os>0 & n2H0op0=1 -> (n2H0op0'=n2H0op1)&(n2H0os'=n2H0os-1)&(n2H0pc'=-6); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H0pc'=1)&(unlk'=false); +[] n2H0pc=1 -> (n2H0opt'=1)&(n2H0pc'=-4)&(n2H0ra'=2); +[] numSteps (n2H0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S4 +n2S4ip0:[1..2] init 1; +n2S4ip1:[1..2] init 1; +n2S4is:[0..2] init 0; +n2S4op0:[1..2] init 1; +n2S4op1:[1..2] init 1; +n2S4os:[0..2] init 0; +n2S4opt:[1..2] init 1; +n2S4pc:[-6..2] init 0; n2S4ra:[-6..2] init 0; +[] n2S4is<2 & n2S4pc=-1 -> (n2S4ip0'=1)&(n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-1 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4is<2 & n2S4pc=-2 -> (n2S4ip1'=n2S4ip0)&(n2S4is'=n2S4is+1)&(n2S4pc'=n2S4ra); +[] n2S4is=2 & n2S4pc=-2 -> (n2S4pc'=n2S4ra); +[] n2S4is=0 & n2S4pc=-3 -> (n2S4pc'=n2S4ra); +[] n2S4is>0 & n2S4pc=-3 -> (n2S4ip0'=n2S4ip1)&(n2S4is'=n2S4is-1)&(n2S4pc'=n2S4ra); +[] n2S4os=0 & n2S4pc=-4 -> (n2S4op0'=n2S4opt)&(n2S4os'=1)&(n2S4pc'=-3); +[] n2S4os=1 & n2S4pc=-4 -> (n2S4op1'=n2S4opt)&(n2S4os'=2)&(n2S4pc'=-3); +[] n2S4os=2 & n2S4pc=-4 -> (n2S4pc'=-3); +[n2S6f3] n2S4is=0 -> (n2S4ip0'=2)&(n2S4is'=1); +[n2S6f3] n2S4is=1 -> (n2S4ip1'=2)&(n2S4is'=2); +[n2S6f3] n2S4is=2 -> true; +[n2S3f2] n2S4is=0 -> (n2S4ip0'=1)&(n2S4is'=1); +[n2S3f2] n2S4is=1 -> (n2S4ip1'=1)&(n2S4is'=2); +[n2S3f2] n2S4is=2 -> true; +[] unlk & numSteps0 -> (n2S4pc'=-5)&(unlk'=false); +[n2S4f2] n2S4pc=-5 & n2S4os>0 & n2S4op0=2 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[n2S4f1] n2S4pc=-5 & n2S4os>0 & n2S4op0=1 -> (n2S4op0'=n2S4op1)&(n2S4os'=n2S4os-1)&(n2S4pc'=-6); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S4pc'=1)&(unlk'=false); +[] n2S4pc=1 -> (n2S4opt'=2)&(n2S4pc'=-4)&(n2S4ra'=2); +[] numSteps (n2S4pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S5 +n2S5t0:[0..1]; +n2S5ip0:[1..3] init 1; +n2S5ip1:[1..3] init 1; +n2S5is:[0..2] init 0; +n2S5op0:[1..3] init 1; +n2S5op1:[1..3] init 1; +n2S5os:[0..2] init 0; +n2S5opt:[1..3] init 1; +n2S5pc:[-6..3] init 0; n2S5ra:[-6..3] init 0; +[] n2S5is<2 & n2S5pc=-1 -> (n2S5ip0'=1)&(n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-1 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5is<2 & n2S5pc=-2 -> (n2S5ip1'=n2S5ip0)&(n2S5is'=n2S5is+1)&(n2S5pc'=n2S5ra); +[] n2S5is=2 & n2S5pc=-2 -> (n2S5pc'=n2S5ra); +[] n2S5is=0 & n2S5pc=-3 -> (n2S5pc'=n2S5ra); +[] n2S5is>0 & n2S5pc=-3 -> (n2S5ip0'=n2S5ip1)&(n2S5is'=n2S5is-1)&(n2S5pc'=n2S5ra); +[] n2S5os=0 & n2S5pc=-4 -> (n2S5op0'=n2S5opt)&(n2S5os'=1)&(n2S5pc'=-3); +[] n2S5os=1 & n2S5pc=-4 -> (n2S5op1'=n2S5opt)&(n2S5os'=2)&(n2S5pc'=-3); +[] n2S5os=2 & n2S5pc=-4 -> (n2S5pc'=-3); +[n2H0f1] n2S5is=0 -> (n2S5ip0'=3)&(n2S5is'=1); +[n2H0f1] n2S5is=1 -> (n2S5ip1'=3)&(n2S5is'=2); +[n2H0f1] n2S5is=2 -> true; +[n2S2f1] n2S5is=0 -> (n2S5ip0'=2)&(n2S5is'=1); +[n2S2f1] n2S5is=1 -> (n2S5ip1'=2)&(n2S5is'=2); +[n2S2f1] n2S5is=2 -> true; +[n2S0f1] n2S5is=0 -> (n2S5ip0'=1)&(n2S5is'=1); +[n2S0f1] n2S5is=1 -> (n2S5ip1'=1)&(n2S5is'=2); +[n2S0f1] n2S5is=2 -> true; +[] unlk & numSteps0 -> (n2S5pc'=-5)&(unlk'=false); +[n2S5f3] n2S5pc=-5 & n2S5os>0 & n2S5op0=3 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f2] n2S5pc=-5 & n2S5os>0 & n2S5op0=2 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[n2S5f1] n2S5pc=-5 & n2S5os>0 & n2S5op0=1 -> (n2S5op0'=n2S5op1)&(n2S5os'=n2S5os-1)&(n2S5pc'=-6); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S5pc'=1)&(unlk'=false); +[] n2S5pc=1 -> 0.571429:(n2S5t0'=0)&(n2S5pc'=2) + 0.428571:(n2S5t0'=1)&(n2S5pc'=2); +[] n2S5pc=2 -> (n2S5opt'=(n2S5t0+1))&(n2S5pc'=-4)&(n2S5ra'=3); +[] numSteps (n2S5pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0v7failing:[INTMIN..INTMAX] init 2; +n2S0t0:[0..1]; +n2S0ip0:[1..2] init 1; +n2S0ip1:[1..2] init 1; +n2S0is:[0..2] init 0; +n2S0op0:[1..2] init 1; +n2S0op1:[1..2] init 1; +n2S0os:[0..2] init 0; +n2S0opt:[1..2] init 1; +n2S0pc:[-6..9] init 0; n2S0ra:[-6..9] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n2S5f1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0is'=1); +[n2S5f1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0is'=2); +[n2S5f1] n2S0is=2 -> true; +[] unlk & numSteps0 -> (n2S0pc'=-5)&(unlk'=false); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S0pc'=1)&(unlk'=false); +[] n2S0pc=1 & (n2S0v7failing=2) -> (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0v7failing=2)) -> (n2S0pc'=5); +[] n2S0pc=2 -> 0.999:(n2S0t0'=0)&(n2S0pc'=3) + 0.001:(n2S0t0'=1)&(n2S0pc'=3); +[] n2S0pc=3 & n2S0t0>=INTMIN & n2S0t0<=INTMAX -> (n2S0v7failing'=n2S0t0)&(n2S0pc'=4); +[] n2S0pc=4 -> (n2S0pc'=5); +[] n2S0pc=5 & (n2S0v7failing=1) -> (n2S0pc'=6); +[] n2S0pc=5 & !((n2S0v7failing=1)) -> (n2S0pc'=8); +[] n2S0pc=6 -> (n2S0pc'=-3)&(n2S0ra'=7); +[] n2S0pc=7 -> (n2S0pc'=9); +[] n2S0pc=8 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=9); +[] numSteps (n2S0pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1; +n2S1ip1:[1..2] init 1; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1; +n2S1op1:[1..2] init 1; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2S6f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1is'=1); +[n2S6f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1is'=2); +[n2S6f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk & numSteps0 -> (n2S1pc'=-5)&(unlk'=false); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S1pc'=1)&(unlk'=false); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2H1 +n2H1v7arrived:[INTMIN..INTMAX] init 0; +n2H1ip0:[1..2] init 1; +n2H1ip1:[1..2] init 1; +n2H1is:[0..2] init 0; +n2H1op0:[1..2] init 1; +n2H1op1:[1..2] init 1; +n2H1os:[0..2] init 0; +n2H1opt:[1..2] init 1; +n2H1pc:[-6..3] init 0; n2H1ra:[-6..3] init 0; +[] n2H1is<2 & n2H1pc=-1 -> (n2H1ip0'=1)&(n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-1 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1is<2 & n2H1pc=-2 -> (n2H1ip1'=n2H1ip0)&(n2H1is'=n2H1is+1)&(n2H1pc'=n2H1ra); +[] n2H1is=2 & n2H1pc=-2 -> (n2H1pc'=n2H1ra); +[] n2H1is=0 & n2H1pc=-3 -> (n2H1pc'=n2H1ra); +[] n2H1is>0 & n2H1pc=-3 -> (n2H1ip0'=n2H1ip1)&(n2H1is'=n2H1is-1)&(n2H1pc'=n2H1ra); +[] n2H1os=0 & n2H1pc=-4 -> (n2H1op0'=n2H1opt)&(n2H1os'=1)&(n2H1pc'=-3); +[] n2H1os=1 & n2H1pc=-4 -> (n2H1op1'=n2H1opt)&(n2H1os'=2)&(n2H1pc'=-3); +[] n2H1os=2 & n2H1pc=-4 -> (n2H1pc'=-3); +[n2S6f2] n2H1is=0 -> (n2H1ip0'=1)&(n2H1is'=1); +[n2S6f2] n2H1is=1 -> (n2H1ip1'=1)&(n2H1is'=2); +[n2S6f2] n2H1is=2 -> true; +[] unlk & numSteps0 -> (n2H1pc'=-5)&(unlk'=false); +[n2H1f1] n2H1pc=-5 & n2H1os>0 & n2H1op0=1 -> (n2H1op0'=n2H1op1)&(n2H1os'=n2H1os-1)&(n2H1pc'=-6); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2H1pc'=1)&(unlk'=false); +[] n2H1pc=1 & 1>=INTMIN & 1<=INTMAX -> (n2H1v7arrived'=1)&(n2H1pc'=2); +[] n2H1pc=2 -> (n2H1pc'=-3)&(n2H1ra'=3); +[] numSteps (n2H1pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S6 +n2S6ip0:[1..3] init 1; +n2S6ip1:[1..3] init 1; +n2S6is:[0..2] init 0; +n2S6op0:[1..3] init 1; +n2S6op1:[1..3] init 1; +n2S6os:[0..2] init 0; +n2S6opt:[1..3] init 1; +n2S6pc:[-6..2] init 0; n2S6ra:[-6..2] init 0; +[] n2S6is<2 & n2S6pc=-1 -> (n2S6ip0'=1)&(n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-1 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6is<2 & n2S6pc=-2 -> (n2S6ip1'=n2S6ip0)&(n2S6is'=n2S6is+1)&(n2S6pc'=n2S6ra); +[] n2S6is=2 & n2S6pc=-2 -> (n2S6pc'=n2S6ra); +[] n2S6is=0 & n2S6pc=-3 -> (n2S6pc'=n2S6ra); +[] n2S6is>0 & n2S6pc=-3 -> (n2S6ip0'=n2S6ip1)&(n2S6is'=n2S6is-1)&(n2S6pc'=n2S6ra); +[] n2S6os=0 & n2S6pc=-4 -> (n2S6op0'=n2S6opt)&(n2S6os'=1)&(n2S6pc'=-3); +[] n2S6os=1 & n2S6pc=-4 -> (n2S6op1'=n2S6opt)&(n2S6os'=2)&(n2S6pc'=-3); +[] n2S6os=2 & n2S6pc=-4 -> (n2S6pc'=-3); +[n2S4f2] n2S6is=0 -> (n2S6ip0'=3)&(n2S6is'=1); +[n2S4f2] n2S6is=1 -> (n2S6ip1'=3)&(n2S6is'=2); +[n2S4f2] n2S6is=2 -> true; +[n2H1f1] n2S6is=0 -> (n2S6ip0'=2)&(n2S6is'=1); +[n2H1f1] n2S6is=1 -> (n2S6ip1'=2)&(n2S6is'=2); +[n2H1f1] n2S6is=2 -> true; +[n2S1f2] n2S6is=0 -> (n2S6ip0'=1)&(n2S6is'=1); +[n2S1f2] n2S6is=1 -> (n2S6ip1'=1)&(n2S6is'=2); +[n2S1f2] n2S6is=2 -> true; +[] unlk & numSteps0 -> (n2S6pc'=-5)&(unlk'=false); +[n2S6f3] n2S6pc=-5 & n2S6os>0 & n2S6op0=3 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f2] n2S6pc=-5 & n2S6os>0 & n2S6op0=2 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[n2S6f1] n2S6pc=-5 & n2S6os>0 & n2S6op0=1 -> (n2S6op0'=n2S6op1)&(n2S6os'=n2S6os-1)&(n2S6pc'=-6); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S6pc'=1)&(unlk'=false); +[] n2S6pc=1 -> (n2S6opt'=2)&(n2S6pc'=-4)&(n2S6ra'=2); +[] numSteps (n2S6pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S3 +n2S3ip0:[1..2] init 1; +n2S3ip1:[1..2] init 1; +n2S3is:[0..2] init 0; +n2S3op0:[1..2] init 1; +n2S3op1:[1..2] init 1; +n2S3os:[0..2] init 0; +n2S3opt:[1..2] init 1; +n2S3pc:[-6..2] init 0; n2S3ra:[-6..2] init 0; +[] n2S3is<2 & n2S3pc=-1 -> (n2S3ip0'=1)&(n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-1 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3is<2 & n2S3pc=-2 -> (n2S3ip1'=n2S3ip0)&(n2S3is'=n2S3is+1)&(n2S3pc'=n2S3ra); +[] n2S3is=2 & n2S3pc=-2 -> (n2S3pc'=n2S3ra); +[] n2S3is=0 & n2S3pc=-3 -> (n2S3pc'=n2S3ra); +[] n2S3is>0 & n2S3pc=-3 -> (n2S3ip0'=n2S3ip1)&(n2S3is'=n2S3is-1)&(n2S3pc'=n2S3ra); +[] n2S3os=0 & n2S3pc=-4 -> (n2S3op0'=n2S3opt)&(n2S3os'=1)&(n2S3pc'=-3); +[] n2S3os=1 & n2S3pc=-4 -> (n2S3op1'=n2S3opt)&(n2S3os'=2)&(n2S3pc'=-3); +[] n2S3os=2 & n2S3pc=-4 -> (n2S3pc'=-3); +[n2S4f1] n2S3is=0 -> (n2S3ip0'=2)&(n2S3is'=1); +[n2S4f1] n2S3is=1 -> (n2S3ip1'=2)&(n2S3is'=2); +[n2S4f1] n2S3is=2 -> true; +[n2S2f2] n2S3is=0 -> (n2S3ip0'=1)&(n2S3is'=1); +[n2S2f2] n2S3is=1 -> (n2S3ip1'=1)&(n2S3is'=2); +[n2S2f2] n2S3is=2 -> true; +[] unlk & numSteps0 -> (n2S3pc'=-5)&(unlk'=false); +[n2S3f2] n2S3pc=-5 & n2S3os>0 & n2S3op0=2 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[n2S3f1] n2S3pc=-5 & n2S3os>0 & n2S3op0=1 -> (n2S3op0'=n2S3op1)&(n2S3os'=n2S3os-1)&(n2S3pc'=-6); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S3pc'=1)&(unlk'=false); +[] n2S3pc=1 -> (n2S3opt'=2)&(n2S3pc'=-4)&(n2S3ra'=2); +[] numSteps (n2S3pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1; +n2S2ip1:[1..2] init 1; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1; +n2S2op1:[1..2] init 1; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2S3f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2is'=1); +[n2S3f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2is'=2); +[n2S3f1] n2S2is=2 -> true; +[n2S5f2] n2S2is=0 -> (n2S2ip0'=1)&(n2S2is'=1); +[n2S5f2] n2S2is=1 -> (n2S2ip1'=1)&(n2S2is'=2); +[n2S5f2] n2S2is=2 -> true; +[] unlk & numSteps0 -> (n2S2pc'=-5)&(unlk'=false); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +[] unlk & numSteps0 -> (n2S2pc'=1)&(unlk'=false); +[] n2S2pc=1 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=true)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & unlk & n2H0is=0 & n2H0os=0 & n2H1is=0 & n2H1os=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2S3is=0 & n2S3os=0 & n2S4is=0 & n2S4os=0 & n2S5is=0 & n2S5os=0 & n2S6is=0 & n2S6os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/realreli/SANReN.psi b/realreli/SANReN.psi new file mode 100644 index 0000000..cefe9fb --- /dev/null +++ b/realreli/SANReN.psi @@ -0,0 +1,254 @@ +num_steps := 20; +dat Queue{ + data: (Packet × ℝ)[]; + def Queue(){ + data = ([]:(Packet × ℝ)[]); + } + def pushFront(x: Packet × ℝ){ + if size() >= 2 { return; } + data=[x]~data; + } + def pushBack(x: Packet × ℝ){ + if size() >= 2 { return; } + data=data~[x]; + } + def takeFront(){ + r:=front(); + popFront(); + return r; + } + def takeBack(){ + r:=data[size()-1]; + data=data[0..size()-1]; + return r; + } + def size(){ + return data.length; + } + def front(){ + return data[0]; + } + def dupFront(){ + if size() == 0 { return; } + pushFront(front()); + } + def popFront(){ + if size() == 0 { return; } + data=data[1..size()]; + } +} +k := 9, H0 := 0, H1 := 1, S0 := 2, S1 := 3, S2 := 4, S3 := 5, S4 := 6, S5 := 7, S6 := 8; +NUM_PACKETS := 3; +dat Packet{ + def Packet(){ + } +} +dat __relsrc_ty{ + Q_in: Queue, Q_out: Queue; + def __relsrc_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],1)); } + } +} +dat __reldst_ty{ + Q_in: Queue, Q_out: Queue; + arrived: ℝ; + def __reldst_ty(){ + Q_in = Queue(); + Q_out = Queue(); + arrived = 0; + } + def __run(){ + arrived = 1; + Q_in.popFront(); + } +} +dat __swch_ty{ + Q_in: Queue, Q_out: Queue; + def __swch_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],(flip((3/7))+1))); } + } +} +dat __fwdr_ty{ + Q_in: Queue, Q_out: Queue; + def __fwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + } + def __run(){ + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } +} +dat __badfwdr_ty{ + Q_in: Queue, Q_out: Queue; + failing: ℝ; + def __badfwdr_ty(){ + Q_in = Queue(); + Q_out = Queue(); + failing = 2; + } + def __run(){ + if (failing==2){ + failing = flip((1/1000)); + } + if (failing==1){ + Q_in.popFront(); + } else { + if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],2)); } + } + } +} +RunSw:=0, FwdQ:=1; +dat __D{ + __H0 : __relsrc_ty, __H1 : __reldst_ty, __S0 : __badfwdr_ty, __S1 : __fwdr_ty, __S2 : __fwdr_ty, __S3 : __fwdr_ty, __S4 : __fwdr_ty, __S5 : __swch_ty, __S6 : __fwdr_ty; + def __D(){ + __H0 = __relsrc_ty(), __H1 = __reldst_ty(), __S0 = __badfwdr_ty(), __S1 = __fwdr_ty(), __S2 = __fwdr_ty(), __S3 = __fwdr_ty(), __S4 = __fwdr_ty(), __S5 = __swch_ty(), __S6 = __fwdr_ty(); + } + def scheduler(){ + actions := ([]: (R x R)[]); + for i in [0..k){ + if (if i == 0 { __H0.Q_in } else if i == 1 { __H1.Q_in } else if i == 2 { __S0.Q_in } else if i == 3 { __S1.Q_in } else if i == 4 { __S2.Q_in } else if i == 5 { __S3.Q_in } else if i == 6 { __S4.Q_in } else if i == 7 { __S5.Q_in } else { __S6.Q_in }).size() > 0 { + actions ~= [(RunSw,i)]; + } + if (if i == 0 { __H0.Q_out } else if i == 1 { __H1.Q_out } else if i == 2 { __S0.Q_out } else if i == 3 { __S1.Q_out } else if i == 4 { __S2.Q_out } else if i == 5 { __S3.Q_out } else if i == 6 { __S4.Q_out } else if i == 7 { __S5.Q_out } else { __S6.Q_out }).size() > 0 { + actions ~= [(FwdQ,i)]; + } + } + return actions[uniformInt(0,actions.length - 1)]; + } + def __step(){ + if __H0.Q_in.size() || __H0.Q_out.size() || __H1.Q_in.size() || __H1.Q_out.size() || __S0.Q_in.size() || __S0.Q_out.size() || __S1.Q_in.size() || __S1.Q_out.size() || __S2.Q_in.size() || __S2.Q_out.size() || __S3.Q_in.size() || __S3.Q_out.size() || __S4.Q_in.size() || __S4.Q_out.size() || __S5.Q_in.size() || __S5.Q_out.size() || __S6.Q_in.size() || __S6.Q_out.size() { + (action,node) := scheduler(); + if action { + if node == 0 && __H0.Q_out.size() { + (pkt,port) := __H0.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 3)); + } + } + if node == 1 && __H1.Q_out.size() { + (pkt,port) := __H1.Q_out.takeFront(); + if port == 1 { + __S6.Q_in.pushBack((pkt, 2)); + } + } + if node == 2 && __S0.Q_out.size() { + (pkt,port) := __S0.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S1.Q_in.pushBack((pkt, 1)); + } + } + if node == 3 && __S1.Q_out.size() { + (pkt,port) := __S1.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 1)); + } + } + if node == 4 && __S2.Q_out.size() { + (pkt,port) := __S2.Q_out.takeFront(); + if port == 1 { + __S5.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S3.Q_in.pushBack((pkt, 1)); + } + } + if node == 5 && __S3.Q_out.size() { + (pkt,port) := __S3.Q_out.takeFront(); + if port == 1 { + __S2.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S4.Q_in.pushBack((pkt, 1)); + } + } + if node == 6 && __S4.Q_out.size() { + (pkt,port) := __S4.Q_out.takeFront(); + if port == 1 { + __S3.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __S6.Q_in.pushBack((pkt, 3)); + } + } + if node == 7 && __S5.Q_out.size() { + (pkt,port) := __S5.Q_out.takeFront(); + if port == 1 { + __S0.Q_in.pushBack((pkt, 1)); + } + if port == 2 { + __S2.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __H0.Q_in.pushBack((pkt, 1)); + } + } + if node == 8 && __S6.Q_out.size() { + (pkt,port) := __S6.Q_out.takeFront(); + if port == 1 { + __S1.Q_in.pushBack((pkt, 2)); + } + if port == 2 { + __H1.Q_in.pushBack((pkt, 1)); + } + if port == 3 { + __S4.Q_in.pushBack((pkt, 2)); + } + } + } else { + if node == 0 && __H0.Q_in.size() { + __H0.__run(); + } + if node == 1 && __H1.Q_in.size() { + __H1.__run(); + } + if node == 2 && __S0.Q_in.size() { + __S0.__run(); + } + if node == 3 && __S1.Q_in.size() { + __S1.__run(); + } + if node == 4 && __S2.Q_in.size() { + __S2.__run(); + } + if node == 5 && __S3.Q_in.size() { + __S3.__run(); + } + if node == 6 && __S4.Q_in.size() { + __S4.__run(); + } + if node == 7 && __S5.Q_in.size() { + __S5.__run(); + } + if node == 8 && __S6.Q_in.size() { + __S6.__run(); + } + } + } + } +} +def main(){ + __d := __D(); + __d.__H0.Q_in.pushBack((Packet(),0)); + __d.__H0.__run(); + repeat num_steps { + __d.__step(); + } + assert(!(__d.__H0.Q_in.size() || __d.__H0.Q_out.size() || __d.__H1.Q_in.size() || __d.__H1.Q_out.size() || __d.__S0.Q_in.size() || __d.__S0.Q_out.size() || __d.__S1.Q_in.size() || __d.__S1.Q_out.size() || __d.__S2.Q_in.size() || __d.__S2.Q_out.size() || __d.__S3.Q_in.size() || __d.__S3.Q_out.size() || __d.__S4.Q_in.size() || __d.__S4.Q_out.size() || __d.__S5.Q_in.size() || __d.__S5.Q_out.size() || __d.__S6.Q_in.size() || __d.__S6.Q_out.size())); + q₁ := Expectation(((if H1 == 1 { __d.__H1.arrived } else { assert(0) }) == 1) !=0); + return (q₁); +} + diff --git a/realreli/generics.bayonet b/realreli/generics.bayonet new file mode 100644 index 0000000..5491528 --- /dev/null +++ b/realreli/generics.bayonet @@ -0,0 +1,68 @@ +#creates NUM_PACKETS packets and pushes them via port 1 + +def cngsrc(pkt, port) state pkt_count(0) { + if pkt_count < NUM_PACKETS { + pkt_count = pkt_count + 1; + fwd(1); + new; + } else { + drop; + } +} + +#counts packets received + +def cngdst(pkt, port) state pkt_count(0) { + pkt_count = pkt_count + 1; + drop; +} + +#pushes 1 packet and stops + +def relsrc(pkt, port) { + fwd(1); +} + +#checks if packet was received + +def reldst(pkt, port) state arrived(0) { + arrived=1; + drop; +} + +#forwards packet via port 1 +#give it packets via all other ports + +def fwdr(pkt, port) { + fwd(1); +} + +#forwards packet via port 1 or 2 with 50% probability +#give it packets via all other ports +#can be extended to switch between more ports + +def switch(pkt, port) { + fwd(uniformInt(1,2)); +} + +def switch(pkt, port) { + if flip(1/2) == 0 { + fwd(1); + } else { + fwd(2); + } +} + +#forwards packet via port 1, but can fail with 1/1000 probability +#give it packets via all other ports + +def badfwdr(pkt, port) state failing(2) { + if failing == 2 { + failing = flip(1/1000); + } + if failing == 1 { + drop; + } else { + fwd(1); + } +} diff --git a/realreli/reliability-n.pctl b/realreli/reliability-n.pctl new file mode 100644 index 0000000..02f08f3 --- /dev/null +++ b/realreli/reliability-n.pctl @@ -0,0 +1,2 @@ +Pmin=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / Pmax=? [ F finished & obsrvOK ] +Pmax=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / Pmin=? [ F finished & obsrvOK ] diff --git a/realreli/reliability-s.pctl b/realreli/reliability-s.pctl new file mode 100644 index 0000000..cd28a6a --- /dev/null +++ b/realreli/reliability-s.pctl @@ -0,0 +1 @@ +P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] diff --git a/realreli/reliability.pctl b/realreli/reliability.pctl new file mode 100644 index 0000000..b4a4f14 --- /dev/null +++ b/realreli/reliability.pctl @@ -0,0 +1 @@ +P=? [ F finished & assrtOK & obsrvOK & (n2H1v7arrived=1) ] / P=? [ F finished & obsrvOK ] diff --git a/running.txt b/running.txt new file mode 100644 index 0000000..f0d0391 --- /dev/null +++ b/running.txt @@ -0,0 +1,3 @@ +./xprism -javamaxmem 24g + +./psi --dp --noboundscheck diff --git a/subnets/subnets-3.bayonet b/subnets/subnets-3.bayonet new file mode 100644 index 0000000..f9a526f --- /dev/null +++ b/subnets/subnets-3.bayonet @@ -0,0 +1,69 @@ +num_steps 20; + +parameters{ SUBSIZE(3) } + +query probability(recvd@R0+recvd@R1+recvd@R2+recvd@R3+recvd@R4+recvd@R5 == 2); + +topology{ + nodes{ Sender, S0, S1, S2, R0, R1, R2, R3, R4, R5 } + links{ + (Sender,pt1) <-> (S0,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (R0,pt1), + (S1,pt3) <-> (R1,pt1), + (S1,pt4) <-> (R2,pt1), + (S2,pt2) <-> (R3,pt1), + (S2,pt3) <-> (R4,pt1), + (S2,pt4) <-> (R5,pt1) + } +} +queue_capacity 2; + +packet_fields{ dst } + +programs{ Sender -> send, S0 -> s0, S1 -> s1, S2 -> s2, R0 -> recv, R1 -> recv, R2 -> recv, R3 -> recv, R4 -> recv, R5 -> recv } + +def send(pkt, port) state sent(0) { + if sent < 2 { + pkt.dst = uniformInt(0,5); + fwd(1); + new; + } else { + drop; + } +} + +def recv(pkt, port) state recvd(0) { + recvd = recvd + 1; + drop; +} + +def s0(pkt, port) { + if pkt.dst < SUBSIZE { + fwd(2); + } else { + fwd(3); + } +} + +def s1(pkt, port) { + fwd(pkt.dst+2); +} + +def s2(pkt, port) { + fwd(pkt.dst+2-SUBSIZE); +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/subnets/subnets-3.prism b/subnets/subnets-3.prism new file mode 100644 index 0000000..1b8bd56 --- /dev/null +++ b/subnets/subnets-3.prism @@ -0,0 +1,385 @@ +dtmc +global unlk:[-1..19] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 20; +global numSkips:[0..20] init 0; +const int v7SUBSIZE = 3; +module n6Sender +n6Senderv4sent:[INTMIN..INTMAX] init 0; +n6Sendert0:[0..5]; +n6Senderip0:[1..2] init 1;n6Senderiv3dst0:[INTMIN..INTMAX] init 0; +n6Senderip1:[1..2] init 1;n6Senderiv3dst1:[INTMIN..INTMAX] init 0; +n6Senderis:[0..2] init 1; +n6Senderop0:[1..2] init 1;n6Senderov3dst0:[INTMIN..INTMAX] init 0; +n6Senderop1:[1..2] init 1;n6Senderov3dst1:[INTMIN..INTMAX] init 0; +n6Senderos:[0..2] init 0; +n6Senderopt:[1..2] init 1; +n6Senderpc:[-6..8] init 0; n6Senderra:[-6..8] init 0; +[] n6Senderis<2 & n6Senderpc=-1 -> (n6Senderip0'=1)&(n6Senderiv3dst0'=0)&(n6Senderip1'=n6Senderip0)&(n6Senderiv3dst1'=n6Senderiv3dst0)&(n6Senderis'=n6Senderis+1)&(n6Senderpc'=n6Senderra); +[] n6Senderis=2 & n6Senderpc=-1 -> (n6Senderpc'=n6Senderra); +[] n6Senderis=0 & n6Senderpc=-2 -> (n6Senderpc'=n6Senderra); +[] n6Senderis>0 & n6Senderis<2 & n6Senderpc=-2 -> (n6Senderip1'=n6Senderip0)&(n6Senderiv3dst1'=n6Senderiv3dst0)&(n6Senderis'=n6Senderis+1)&(n6Senderpc'=n6Senderra); +[] n6Senderis=2 & n6Senderpc=-2 -> (n6Senderpc'=n6Senderra); +[] n6Senderis=0 & n6Senderpc=-3 -> (n6Senderpc'=n6Senderra); +[] n6Senderis>0 & n6Senderpc=-3 -> (n6Senderip0'=n6Senderip1)&(n6Senderiv3dst0'=n6Senderiv3dst1)&(n6Senderis'=n6Senderis-1)&(n6Senderpc'=n6Senderra); +[] n6Senderos=0 & n6Senderpc=-4 -> (n6Senderop0'=n6Senderopt)&(n6Senderov3dst0'=n6Senderiv3dst0)&(n6Senderos'=1)&(n6Senderpc'=-3); +[] n6Senderos=1 & n6Senderpc=-4 -> (n6Senderop1'=n6Senderopt)&(n6Senderov3dst1'=n6Senderiv3dst0)&(n6Senderos'=2)&(n6Senderpc'=-3); +[] n6Senderos=2 & n6Senderpc=-4 -> (n6Senderpc'=-3); +[n2S0f1] n6Senderis=0 -> (n6Senderip0'=1)&(n6Senderiv3dst0'=n2S0ov3dst0)&(n6Senderis'=1); +[n2S0f1] n6Senderis=1 -> (n6Senderip1'=1)&(n6Senderiv3dst1'=n2S0ov3dst0)&(n6Senderis'=2); +[n2S0f1] n6Senderis=2 -> true; +[] unlk=10 & numSteps0 -> (n6Senderpc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[n6Senderf1] n6Senderpc=-5 & n6Senderos>0 & n6Senderop0=1 -> (n6Senderop0'=n6Senderop1)&(n6Senderov3dst0'=n6Senderov3dst1)&(n6Senderos'=n6Senderos-1)&(n6Senderpc'=-6); +[] numSteps (n6Senderpc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n6Senderpc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n6Senderpc=1 & (n6Senderv4sent<2) -> (n6Senderpc'=2); +[] n6Senderpc=1 & !((n6Senderv4sent<2)) -> (n6Senderpc'=7); +[] n6Senderpc=2 -> 0.166667:(n6Sendert0'=0)&(n6Senderpc'=3) + 0.166667:(n6Sendert0'=1)&(n6Senderpc'=3) + 0.166667:(n6Sendert0'=2)&(n6Senderpc'=3) + 0.166667:(n6Sendert0'=3)&(n6Senderpc'=3) + 0.166667:(n6Sendert0'=4)&(n6Senderpc'=3) + 0.166667:(n6Sendert0'=5)&(n6Senderpc'=3); +[] n6Senderpc=3 & n6Sendert0>=INTMIN & n6Sendert0<=INTMAX -> (n6Senderiv3dst0'=n6Sendert0)&(n6Senderpc'=4); +[] n6Senderpc=4 -> (n6Senderopt'=1)&(n6Senderpc'=-4)&(n6Senderra'=5); +[] n6Senderpc=5 -> (n6Senderpc'=-1)&(n6Senderra'=6); +[] n6Senderpc=6 -> (n6Senderpc'=8); +[] n6Senderpc=7 -> (n6Senderpc'=-3)&(n6Senderra'=8); +[] numSteps (n6Senderpc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2R2 +n2R2v5recvd:[INTMIN..INTMAX] init 0; +n2R2ip0:[1..2] init 1;n2R2iv3dst0:[INTMIN..INTMAX] init 0; +n2R2ip1:[1..2] init 1;n2R2iv3dst1:[INTMIN..INTMAX] init 0; +n2R2is:[0..2] init 0; +n2R2op0:[1..2] init 1;n2R2ov3dst0:[INTMIN..INTMAX] init 0; +n2R2op1:[1..2] init 1;n2R2ov3dst1:[INTMIN..INTMAX] init 0; +n2R2os:[0..2] init 0; +n2R2opt:[1..2] init 1; +n2R2pc:[-6..3] init 0; n2R2ra:[-6..3] init 0; +[] n2R2is<2 & n2R2pc=-1 -> (n2R2ip0'=1)&(n2R2iv3dst0'=0)&(n2R2ip1'=n2R2ip0)&(n2R2iv3dst1'=n2R2iv3dst0)&(n2R2is'=n2R2is+1)&(n2R2pc'=n2R2ra); +[] n2R2is=2 & n2R2pc=-1 -> (n2R2pc'=n2R2ra); +[] n2R2is=0 & n2R2pc=-2 -> (n2R2pc'=n2R2ra); +[] n2R2is>0 & n2R2is<2 & n2R2pc=-2 -> (n2R2ip1'=n2R2ip0)&(n2R2iv3dst1'=n2R2iv3dst0)&(n2R2is'=n2R2is+1)&(n2R2pc'=n2R2ra); +[] n2R2is=2 & n2R2pc=-2 -> (n2R2pc'=n2R2ra); +[] n2R2is=0 & n2R2pc=-3 -> (n2R2pc'=n2R2ra); +[] n2R2is>0 & n2R2pc=-3 -> (n2R2ip0'=n2R2ip1)&(n2R2iv3dst0'=n2R2iv3dst1)&(n2R2is'=n2R2is-1)&(n2R2pc'=n2R2ra); +[] n2R2os=0 & n2R2pc=-4 -> (n2R2op0'=n2R2opt)&(n2R2ov3dst0'=n2R2iv3dst0)&(n2R2os'=1)&(n2R2pc'=-3); +[] n2R2os=1 & n2R2pc=-4 -> (n2R2op1'=n2R2opt)&(n2R2ov3dst1'=n2R2iv3dst0)&(n2R2os'=2)&(n2R2pc'=-3); +[] n2R2os=2 & n2R2pc=-4 -> (n2R2pc'=-3); +[n2S1f4] n2R2is=0 -> (n2R2ip0'=1)&(n2R2iv3dst0'=n2S1ov3dst0)&(n2R2is'=1); +[n2S1f4] n2R2is=1 -> (n2R2ip1'=1)&(n2R2iv3dst1'=n2S1ov3dst0)&(n2R2is'=2); +[n2S1f4] n2R2is=2 -> true; +[] unlk=16 & numSteps0 -> (n2R2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[n2R2f1] n2R2pc=-5 & n2R2os>0 & n2R2op0=1 -> (n2R2op0'=n2R2op1)&(n2R2ov3dst0'=n2R2ov3dst1)&(n2R2os'=n2R2os-1)&(n2R2pc'=-6); +[] numSteps (n2R2pc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2R2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2R2pc=1 & (n2R2v5recvd+1)>=INTMIN & (n2R2v5recvd+1)<=INTMAX -> (n2R2v5recvd'=(n2R2v5recvd+1))&(n2R2pc'=2); +[] n2R2pc=2 -> (n2R2pc'=-3)&(n2R2ra'=3); +[] numSteps (n2R2pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n2R3 +n2R3v5recvd:[INTMIN..INTMAX] init 0; +n2R3ip0:[1..2] init 1;n2R3iv3dst0:[INTMIN..INTMAX] init 0; +n2R3ip1:[1..2] init 1;n2R3iv3dst1:[INTMIN..INTMAX] init 0; +n2R3is:[0..2] init 0; +n2R3op0:[1..2] init 1;n2R3ov3dst0:[INTMIN..INTMAX] init 0; +n2R3op1:[1..2] init 1;n2R3ov3dst1:[INTMIN..INTMAX] init 0; +n2R3os:[0..2] init 0; +n2R3opt:[1..2] init 1; +n2R3pc:[-6..3] init 0; n2R3ra:[-6..3] init 0; +[] n2R3is<2 & n2R3pc=-1 -> (n2R3ip0'=1)&(n2R3iv3dst0'=0)&(n2R3ip1'=n2R3ip0)&(n2R3iv3dst1'=n2R3iv3dst0)&(n2R3is'=n2R3is+1)&(n2R3pc'=n2R3ra); +[] n2R3is=2 & n2R3pc=-1 -> (n2R3pc'=n2R3ra); +[] n2R3is=0 & n2R3pc=-2 -> (n2R3pc'=n2R3ra); +[] n2R3is>0 & n2R3is<2 & n2R3pc=-2 -> (n2R3ip1'=n2R3ip0)&(n2R3iv3dst1'=n2R3iv3dst0)&(n2R3is'=n2R3is+1)&(n2R3pc'=n2R3ra); +[] n2R3is=2 & n2R3pc=-2 -> (n2R3pc'=n2R3ra); +[] n2R3is=0 & n2R3pc=-3 -> (n2R3pc'=n2R3ra); +[] n2R3is>0 & n2R3pc=-3 -> (n2R3ip0'=n2R3ip1)&(n2R3iv3dst0'=n2R3iv3dst1)&(n2R3is'=n2R3is-1)&(n2R3pc'=n2R3ra); +[] n2R3os=0 & n2R3pc=-4 -> (n2R3op0'=n2R3opt)&(n2R3ov3dst0'=n2R3iv3dst0)&(n2R3os'=1)&(n2R3pc'=-3); +[] n2R3os=1 & n2R3pc=-4 -> (n2R3op1'=n2R3opt)&(n2R3ov3dst1'=n2R3iv3dst0)&(n2R3os'=2)&(n2R3pc'=-3); +[] n2R3os=2 & n2R3pc=-4 -> (n2R3pc'=-3); +[n2S2f2] n2R3is=0 -> (n2R3ip0'=1)&(n2R3iv3dst0'=n2S2ov3dst0)&(n2R3is'=1); +[n2S2f2] n2R3is=1 -> (n2R3ip1'=1)&(n2R3iv3dst1'=n2S2ov3dst0)&(n2R3is'=2); +[n2S2f2] n2R3is=2 -> true; +[] unlk=17 & numSteps0 -> (n2R3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=18)&(numSkips'=numSkips+1); +[n2R3f1] n2R3pc=-5 & n2R3os>0 & n2R3op0=1 -> (n2R3op0'=n2R3op1)&(n2R3ov3dst0'=n2R3ov3dst1)&(n2R3os'=n2R3os-1)&(n2R3pc'=-6); +[] numSteps (n2R3pc'=0)&(unlk'=18)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2R3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2R3pc=1 & (n2R3v5recvd+1)>=INTMIN & (n2R3v5recvd+1)<=INTMAX -> (n2R3v5recvd'=(n2R3v5recvd+1))&(n2R3pc'=2); +[] n2R3pc=2 -> (n2R3pc'=-3)&(n2R3ra'=3); +[] numSteps (n2R3pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..4] init 1;n2S1iv3dst0:[INTMIN..INTMAX] init 0; +n2S1ip1:[1..4] init 1;n2S1iv3dst1:[INTMIN..INTMAX] init 0; +n2S1is:[0..2] init 0; +n2S1op0:[1..4] init 1;n2S1ov3dst0:[INTMIN..INTMAX] init 0; +n2S1op1:[1..4] init 1;n2S1ov3dst1:[INTMIN..INTMAX] init 0; +n2S1os:[0..2] init 0; +n2S1opt:[1..4] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1iv3dst0'=0)&(n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1iv3dst0'=n2S1iv3dst1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1ov3dst0'=n2S1iv3dst0)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1ov3dst1'=n2S1iv3dst0)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2R2f1] n2S1is=0 -> (n2S1ip0'=4)&(n2S1iv3dst0'=n2R2ov3dst0)&(n2S1is'=1); +[n2R2f1] n2S1is=1 -> (n2S1ip1'=4)&(n2S1iv3dst1'=n2R2ov3dst0)&(n2S1is'=2); +[n2R2f1] n2S1is=2 -> true; +[n2R1f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1iv3dst0'=n2R1ov3dst0)&(n2S1is'=1); +[n2R1f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1iv3dst1'=n2R1ov3dst0)&(n2S1is'=2); +[n2R1f1] n2S1is=2 -> true; +[n2R0f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1iv3dst0'=n2R0ov3dst0)&(n2S1is'=1); +[n2R0f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1iv3dst1'=n2R0ov3dst0)&(n2S1is'=2); +[n2R0f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1iv3dst0'=n2S0ov3dst0)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1iv3dst1'=n2S0ov3dst0)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=12 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[n2S1f4] n2S1pc=-5 & n2S1os>0 & n2S1op0=4 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=(n2S1iv3dst0+2))&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..4] init 1;n2S2iv3dst0:[INTMIN..INTMAX] init 0; +n2S2ip1:[1..4] init 1;n2S2iv3dst1:[INTMIN..INTMAX] init 0; +n2S2is:[0..2] init 0; +n2S2op0:[1..4] init 1;n2S2ov3dst0:[INTMIN..INTMAX] init 0; +n2S2op1:[1..4] init 1;n2S2ov3dst1:[INTMIN..INTMAX] init 0; +n2S2os:[0..2] init 0; +n2S2opt:[1..4] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2iv3dst0'=0)&(n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2iv3dst0'=n2S2iv3dst1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2ov3dst0'=n2S2iv3dst0)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2ov3dst1'=n2S2iv3dst0)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2R5f1] n2S2is=0 -> (n2S2ip0'=4)&(n2S2iv3dst0'=n2R5ov3dst0)&(n2S2is'=1); +[n2R5f1] n2S2is=1 -> (n2S2ip1'=4)&(n2S2iv3dst1'=n2R5ov3dst0)&(n2S2is'=2); +[n2R5f1] n2S2is=2 -> true; +[n2R4f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2iv3dst0'=n2R4ov3dst0)&(n2S2is'=1); +[n2R4f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2iv3dst1'=n2R4ov3dst0)&(n2S2is'=2); +[n2R4f1] n2S2is=2 -> true; +[n2R3f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2iv3dst0'=n2R3ov3dst0)&(n2S2is'=1); +[n2R3f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2iv3dst1'=n2R3ov3dst0)&(n2S2is'=2); +[n2R3f1] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2iv3dst0'=n2S0ov3dst0)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2iv3dst1'=n2S0ov3dst0)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk=13 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[n2S2f4] n2S2pc=-5 & n2S2os>0 & n2S2op0=4 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> (n2S2opt'=((n2S2iv3dst0+2)-v7SUBSIZE))&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0ip0:[1..3] init 1;n2S0iv3dst0:[INTMIN..INTMAX] init 0; +n2S0ip1:[1..3] init 1;n2S0iv3dst1:[INTMIN..INTMAX] init 0; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1;n2S0ov3dst0:[INTMIN..INTMAX] init 0; +n2S0op1:[1..3] init 1;n2S0ov3dst1:[INTMIN..INTMAX] init 0; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..5] init 0; n2S0ra:[-6..5] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0iv3dst0'=0)&(n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0iv3dst0'=n2S0iv3dst1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0ov3dst0'=n2S0iv3dst0)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0ov3dst1'=n2S0iv3dst0)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0iv3dst0'=n2S2ov3dst0)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0iv3dst1'=n2S2ov3dst0)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0iv3dst0'=n2S1ov3dst0)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0iv3dst1'=n2S1ov3dst0)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n6Senderf1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0iv3dst0'=n6Senderov3dst0)&(n2S0is'=1); +[n6Senderf1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0iv3dst1'=n6Senderov3dst0)&(n2S0is'=2); +[n6Senderf1] n2S0is=2 -> true; +[] unlk=11 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2S0pc=1 & (n2S0iv3dst0 (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0iv3dst0 (n2S0pc'=4); +[] n2S0pc=2 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=3); +[] n2S0pc=3 -> (n2S0pc'=5); +[] n2S0pc=4 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=5); +[] numSteps (n2S0pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2R4 +n2R4v5recvd:[INTMIN..INTMAX] init 0; +n2R4ip0:[1..2] init 1;n2R4iv3dst0:[INTMIN..INTMAX] init 0; +n2R4ip1:[1..2] init 1;n2R4iv3dst1:[INTMIN..INTMAX] init 0; +n2R4is:[0..2] init 0; +n2R4op0:[1..2] init 1;n2R4ov3dst0:[INTMIN..INTMAX] init 0; +n2R4op1:[1..2] init 1;n2R4ov3dst1:[INTMIN..INTMAX] init 0; +n2R4os:[0..2] init 0; +n2R4opt:[1..2] init 1; +n2R4pc:[-6..3] init 0; n2R4ra:[-6..3] init 0; +[] n2R4is<2 & n2R4pc=-1 -> (n2R4ip0'=1)&(n2R4iv3dst0'=0)&(n2R4ip1'=n2R4ip0)&(n2R4iv3dst1'=n2R4iv3dst0)&(n2R4is'=n2R4is+1)&(n2R4pc'=n2R4ra); +[] n2R4is=2 & n2R4pc=-1 -> (n2R4pc'=n2R4ra); +[] n2R4is=0 & n2R4pc=-2 -> (n2R4pc'=n2R4ra); +[] n2R4is>0 & n2R4is<2 & n2R4pc=-2 -> (n2R4ip1'=n2R4ip0)&(n2R4iv3dst1'=n2R4iv3dst0)&(n2R4is'=n2R4is+1)&(n2R4pc'=n2R4ra); +[] n2R4is=2 & n2R4pc=-2 -> (n2R4pc'=n2R4ra); +[] n2R4is=0 & n2R4pc=-3 -> (n2R4pc'=n2R4ra); +[] n2R4is>0 & n2R4pc=-3 -> (n2R4ip0'=n2R4ip1)&(n2R4iv3dst0'=n2R4iv3dst1)&(n2R4is'=n2R4is-1)&(n2R4pc'=n2R4ra); +[] n2R4os=0 & n2R4pc=-4 -> (n2R4op0'=n2R4opt)&(n2R4ov3dst0'=n2R4iv3dst0)&(n2R4os'=1)&(n2R4pc'=-3); +[] n2R4os=1 & n2R4pc=-4 -> (n2R4op1'=n2R4opt)&(n2R4ov3dst1'=n2R4iv3dst0)&(n2R4os'=2)&(n2R4pc'=-3); +[] n2R4os=2 & n2R4pc=-4 -> (n2R4pc'=-3); +[n2S2f3] n2R4is=0 -> (n2R4ip0'=1)&(n2R4iv3dst0'=n2S2ov3dst0)&(n2R4is'=1); +[n2S2f3] n2R4is=1 -> (n2R4ip1'=1)&(n2R4iv3dst1'=n2S2ov3dst0)&(n2R4is'=2); +[n2S2f3] n2R4is=2 -> true; +[] unlk=18 & numSteps0 -> (n2R4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=18 & numSteps (unlk'=19)&(numSkips'=numSkips+1); +[n2R4f1] n2R4pc=-5 & n2R4os>0 & n2R4op0=1 -> (n2R4op0'=n2R4op1)&(n2R4ov3dst0'=n2R4ov3dst1)&(n2R4os'=n2R4os-1)&(n2R4pc'=-6); +[] numSteps (n2R4pc'=0)&(unlk'=19)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2R4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2R4pc=1 & (n2R4v5recvd+1)>=INTMIN & (n2R4v5recvd+1)<=INTMAX -> (n2R4v5recvd'=(n2R4v5recvd+1))&(n2R4pc'=2); +[] n2R4pc=2 -> (n2R4pc'=-3)&(n2R4ra'=3); +[] numSteps (n2R4pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n2R1 +n2R1v5recvd:[INTMIN..INTMAX] init 0; +n2R1ip0:[1..2] init 1;n2R1iv3dst0:[INTMIN..INTMAX] init 0; +n2R1ip1:[1..2] init 1;n2R1iv3dst1:[INTMIN..INTMAX] init 0; +n2R1is:[0..2] init 0; +n2R1op0:[1..2] init 1;n2R1ov3dst0:[INTMIN..INTMAX] init 0; +n2R1op1:[1..2] init 1;n2R1ov3dst1:[INTMIN..INTMAX] init 0; +n2R1os:[0..2] init 0; +n2R1opt:[1..2] init 1; +n2R1pc:[-6..3] init 0; n2R1ra:[-6..3] init 0; +[] n2R1is<2 & n2R1pc=-1 -> (n2R1ip0'=1)&(n2R1iv3dst0'=0)&(n2R1ip1'=n2R1ip0)&(n2R1iv3dst1'=n2R1iv3dst0)&(n2R1is'=n2R1is+1)&(n2R1pc'=n2R1ra); +[] n2R1is=2 & n2R1pc=-1 -> (n2R1pc'=n2R1ra); +[] n2R1is=0 & n2R1pc=-2 -> (n2R1pc'=n2R1ra); +[] n2R1is>0 & n2R1is<2 & n2R1pc=-2 -> (n2R1ip1'=n2R1ip0)&(n2R1iv3dst1'=n2R1iv3dst0)&(n2R1is'=n2R1is+1)&(n2R1pc'=n2R1ra); +[] n2R1is=2 & n2R1pc=-2 -> (n2R1pc'=n2R1ra); +[] n2R1is=0 & n2R1pc=-3 -> (n2R1pc'=n2R1ra); +[] n2R1is>0 & n2R1pc=-3 -> (n2R1ip0'=n2R1ip1)&(n2R1iv3dst0'=n2R1iv3dst1)&(n2R1is'=n2R1is-1)&(n2R1pc'=n2R1ra); +[] n2R1os=0 & n2R1pc=-4 -> (n2R1op0'=n2R1opt)&(n2R1ov3dst0'=n2R1iv3dst0)&(n2R1os'=1)&(n2R1pc'=-3); +[] n2R1os=1 & n2R1pc=-4 -> (n2R1op1'=n2R1opt)&(n2R1ov3dst1'=n2R1iv3dst0)&(n2R1os'=2)&(n2R1pc'=-3); +[] n2R1os=2 & n2R1pc=-4 -> (n2R1pc'=-3); +[n2S1f3] n2R1is=0 -> (n2R1ip0'=1)&(n2R1iv3dst0'=n2S1ov3dst0)&(n2R1is'=1); +[n2S1f3] n2R1is=1 -> (n2R1ip1'=1)&(n2R1iv3dst1'=n2S1ov3dst0)&(n2R1is'=2); +[n2S1f3] n2R1is=2 -> true; +[] unlk=15 & numSteps0 -> (n2R1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[n2R1f1] n2R1pc=-5 & n2R1os>0 & n2R1op0=1 -> (n2R1op0'=n2R1op1)&(n2R1ov3dst0'=n2R1ov3dst1)&(n2R1os'=n2R1os-1)&(n2R1pc'=-6); +[] numSteps (n2R1pc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2R1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2R1pc=1 & (n2R1v5recvd+1)>=INTMIN & (n2R1v5recvd+1)<=INTMAX -> (n2R1v5recvd'=(n2R1v5recvd+1))&(n2R1pc'=2); +[] n2R1pc=2 -> (n2R1pc'=-3)&(n2R1ra'=3); +[] numSteps (n2R1pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2R0 +n2R0v5recvd:[INTMIN..INTMAX] init 0; +n2R0ip0:[1..2] init 1;n2R0iv3dst0:[INTMIN..INTMAX] init 0; +n2R0ip1:[1..2] init 1;n2R0iv3dst1:[INTMIN..INTMAX] init 0; +n2R0is:[0..2] init 0; +n2R0op0:[1..2] init 1;n2R0ov3dst0:[INTMIN..INTMAX] init 0; +n2R0op1:[1..2] init 1;n2R0ov3dst1:[INTMIN..INTMAX] init 0; +n2R0os:[0..2] init 0; +n2R0opt:[1..2] init 1; +n2R0pc:[-6..3] init 0; n2R0ra:[-6..3] init 0; +[] n2R0is<2 & n2R0pc=-1 -> (n2R0ip0'=1)&(n2R0iv3dst0'=0)&(n2R0ip1'=n2R0ip0)&(n2R0iv3dst1'=n2R0iv3dst0)&(n2R0is'=n2R0is+1)&(n2R0pc'=n2R0ra); +[] n2R0is=2 & n2R0pc=-1 -> (n2R0pc'=n2R0ra); +[] n2R0is=0 & n2R0pc=-2 -> (n2R0pc'=n2R0ra); +[] n2R0is>0 & n2R0is<2 & n2R0pc=-2 -> (n2R0ip1'=n2R0ip0)&(n2R0iv3dst1'=n2R0iv3dst0)&(n2R0is'=n2R0is+1)&(n2R0pc'=n2R0ra); +[] n2R0is=2 & n2R0pc=-2 -> (n2R0pc'=n2R0ra); +[] n2R0is=0 & n2R0pc=-3 -> (n2R0pc'=n2R0ra); +[] n2R0is>0 & n2R0pc=-3 -> (n2R0ip0'=n2R0ip1)&(n2R0iv3dst0'=n2R0iv3dst1)&(n2R0is'=n2R0is-1)&(n2R0pc'=n2R0ra); +[] n2R0os=0 & n2R0pc=-4 -> (n2R0op0'=n2R0opt)&(n2R0ov3dst0'=n2R0iv3dst0)&(n2R0os'=1)&(n2R0pc'=-3); +[] n2R0os=1 & n2R0pc=-4 -> (n2R0op1'=n2R0opt)&(n2R0ov3dst1'=n2R0iv3dst0)&(n2R0os'=2)&(n2R0pc'=-3); +[] n2R0os=2 & n2R0pc=-4 -> (n2R0pc'=-3); +[n2S1f2] n2R0is=0 -> (n2R0ip0'=1)&(n2R0iv3dst0'=n2S1ov3dst0)&(n2R0is'=1); +[n2S1f2] n2R0is=1 -> (n2R0ip1'=1)&(n2R0iv3dst1'=n2S1ov3dst0)&(n2R0is'=2); +[n2S1f2] n2R0is=2 -> true; +[] unlk=14 & numSteps0 -> (n2R0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[n2R0f1] n2R0pc=-5 & n2R0os>0 & n2R0op0=1 -> (n2R0op0'=n2R0op1)&(n2R0ov3dst0'=n2R0ov3dst1)&(n2R0os'=n2R0os-1)&(n2R0pc'=-6); +[] numSteps (n2R0pc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2R0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2R0pc=1 & (n2R0v5recvd+1)>=INTMIN & (n2R0v5recvd+1)<=INTMAX -> (n2R0v5recvd'=(n2R0v5recvd+1))&(n2R0pc'=2); +[] n2R0pc=2 -> (n2R0pc'=-3)&(n2R0ra'=3); +[] numSteps (n2R0pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2R5 +n2R5v5recvd:[INTMIN..INTMAX] init 0; +n2R5ip0:[1..2] init 1;n2R5iv3dst0:[INTMIN..INTMAX] init 0; +n2R5ip1:[1..2] init 1;n2R5iv3dst1:[INTMIN..INTMAX] init 0; +n2R5is:[0..2] init 0; +n2R5op0:[1..2] init 1;n2R5ov3dst0:[INTMIN..INTMAX] init 0; +n2R5op1:[1..2] init 1;n2R5ov3dst1:[INTMIN..INTMAX] init 0; +n2R5os:[0..2] init 0; +n2R5opt:[1..2] init 1; +n2R5pc:[-6..3] init 0; n2R5ra:[-6..3] init 0; +[] n2R5is<2 & n2R5pc=-1 -> (n2R5ip0'=1)&(n2R5iv3dst0'=0)&(n2R5ip1'=n2R5ip0)&(n2R5iv3dst1'=n2R5iv3dst0)&(n2R5is'=n2R5is+1)&(n2R5pc'=n2R5ra); +[] n2R5is=2 & n2R5pc=-1 -> (n2R5pc'=n2R5ra); +[] n2R5is=0 & n2R5pc=-2 -> (n2R5pc'=n2R5ra); +[] n2R5is>0 & n2R5is<2 & n2R5pc=-2 -> (n2R5ip1'=n2R5ip0)&(n2R5iv3dst1'=n2R5iv3dst0)&(n2R5is'=n2R5is+1)&(n2R5pc'=n2R5ra); +[] n2R5is=2 & n2R5pc=-2 -> (n2R5pc'=n2R5ra); +[] n2R5is=0 & n2R5pc=-3 -> (n2R5pc'=n2R5ra); +[] n2R5is>0 & n2R5pc=-3 -> (n2R5ip0'=n2R5ip1)&(n2R5iv3dst0'=n2R5iv3dst1)&(n2R5is'=n2R5is-1)&(n2R5pc'=n2R5ra); +[] n2R5os=0 & n2R5pc=-4 -> (n2R5op0'=n2R5opt)&(n2R5ov3dst0'=n2R5iv3dst0)&(n2R5os'=1)&(n2R5pc'=-3); +[] n2R5os=1 & n2R5pc=-4 -> (n2R5op1'=n2R5opt)&(n2R5ov3dst1'=n2R5iv3dst0)&(n2R5os'=2)&(n2R5pc'=-3); +[] n2R5os=2 & n2R5pc=-4 -> (n2R5pc'=-3); +[n2S2f4] n2R5is=0 -> (n2R5ip0'=1)&(n2R5iv3dst0'=n2S2ov3dst0)&(n2R5is'=1); +[n2S2f4] n2R5is=1 -> (n2R5ip1'=1)&(n2R5iv3dst1'=n2S2ov3dst0)&(n2R5is'=2); +[n2S2f4] n2R5is=2 -> true; +[] unlk=19 & numSteps0 -> (n2R5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=19 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2R5f1] n2R5pc=-5 & n2R5os>0 & n2R5op0=1 -> (n2R5op0'=n2R5op1)&(n2R5ov3dst0'=n2R5ov3dst1)&(n2R5os'=n2R5os-1)&(n2R5pc'=-6); +[] numSteps (n2R5pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=9 & numSteps0 -> (n2R5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[] n2R5pc=1 & (n2R5v5recvd+1)>=INTMIN & (n2R5v5recvd+1)<=INTMAX -> (n2R5v5recvd'=(n2R5v5recvd+1))&(n2R5pc'=2); +[] n2R5pc=2 -> (n2R5pc'=-3)&(n2R5ra'=3); +[] numSteps (n2R5pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n6Senderis=0 & n6Senderos=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2R0is=0 & n2R0os=0 & n2R1is=0 & n2R1os=0 & n2R2is=0 & n2R2os=0 & n2R3is=0 & n2R3os=0 & n2R4is=0 & n2R4os=0 & n2R5is=0 & n2R5os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & ((((((n2R0v5recvd+n2R1v5recvd)+n2R2v5recvd)+n2R3v5recvd)+n2R4v5recvd)+n2R5v5recvd)=2) ] / P=? [ F finished & obsrvOK ] diff --git a/subnets/subnets-4.bayonet b/subnets/subnets-4.bayonet new file mode 100644 index 0000000..556467d --- /dev/null +++ b/subnets/subnets-4.bayonet @@ -0,0 +1,71 @@ +num_steps 20; + +parameters{ SUBSIZE(4) } + +query probability(recvd@R0+recvd@R1+recvd@R2+recvd@R3+recvd@R4+recvd@R5+recvd@R6+recvd@R7 == 2); + +topology{ + nodes{ Sender, S0, S1, S2, R0, R1, R2, R3, R4, R5, R6, R7 } + links{ + (Sender,pt1) <-> (S0,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (R0,pt1), + (S1,pt3) <-> (R1,pt1), + (S1,pt4) <-> (R2,pt1), + (S1,pt5) <-> (R3,pt1), + (S2,pt2) <-> (R4,pt1), + (S2,pt3) <-> (R5,pt1), + (S2,pt4) <-> (R6,pt1), + (S2,pt5) <-> (R7,pt1) + } +} +queue_capacity 2; + +packet_fields{ dst } + +programs{ Sender -> send, S0 -> s0, S1 -> s1, S2 -> s2, R0 -> recv, R1 -> recv, R2 -> recv, R3 -> recv, R4 -> recv, R5 -> recv, R6 -> recv, R7 -> recv } + +def send(pkt, port) state sent(0) { + if sent < 2 { + pkt.dst = uniformInt(0,7); + fwd(1); + new; + } else { + drop; + } +} + +def recv(pkt, port) state recvd(0) { + recvd = recvd + 1; + drop; +} + +def s0(pkt, port) { + if pkt.dst < SUBSIZE { + fwd(2); + } else { + fwd(3); + } +} + +def s1(pkt, port) { + fwd(pkt.dst+2); +} + +def s2(pkt, port) { + fwd(pkt.dst+2-SUBSIZE); +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/subnets/subnets-4.prism b/subnets/subnets-4.prism new file mode 100644 index 0000000..1169ee1 --- /dev/null +++ b/subnets/subnets-4.prism @@ -0,0 +1,459 @@ +dtmc +global unlk:[-1..23] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 24; +global numSkips:[0..24] init 0; +const int v7SUBSIZE = 4; +module n6Sender +n6Senderv4sent:[INTMIN..INTMAX] init 0; +n6Sendert0:[0..7]; +n6Senderip0:[1..2] init 1;n6Senderiv3dst0:[INTMIN..INTMAX] init 0; +n6Senderip1:[1..2] init 1;n6Senderiv3dst1:[INTMIN..INTMAX] init 0; +n6Senderis:[0..2] init 1; +n6Senderop0:[1..2] init 1;n6Senderov3dst0:[INTMIN..INTMAX] init 0; +n6Senderop1:[1..2] init 1;n6Senderov3dst1:[INTMIN..INTMAX] init 0; +n6Senderos:[0..2] init 0; +n6Senderopt:[1..2] init 1; +n6Senderpc:[-6..8] init 0; n6Senderra:[-6..8] init 0; +[] n6Senderis<2 & n6Senderpc=-1 -> (n6Senderip0'=1)&(n6Senderiv3dst0'=0)&(n6Senderip1'=n6Senderip0)&(n6Senderiv3dst1'=n6Senderiv3dst0)&(n6Senderis'=n6Senderis+1)&(n6Senderpc'=n6Senderra); +[] n6Senderis=2 & n6Senderpc=-1 -> (n6Senderpc'=n6Senderra); +[] n6Senderis=0 & n6Senderpc=-2 -> (n6Senderpc'=n6Senderra); +[] n6Senderis>0 & n6Senderis<2 & n6Senderpc=-2 -> (n6Senderip1'=n6Senderip0)&(n6Senderiv3dst1'=n6Senderiv3dst0)&(n6Senderis'=n6Senderis+1)&(n6Senderpc'=n6Senderra); +[] n6Senderis=2 & n6Senderpc=-2 -> (n6Senderpc'=n6Senderra); +[] n6Senderis=0 & n6Senderpc=-3 -> (n6Senderpc'=n6Senderra); +[] n6Senderis>0 & n6Senderpc=-3 -> (n6Senderip0'=n6Senderip1)&(n6Senderiv3dst0'=n6Senderiv3dst1)&(n6Senderis'=n6Senderis-1)&(n6Senderpc'=n6Senderra); +[] n6Senderos=0 & n6Senderpc=-4 -> (n6Senderop0'=n6Senderopt)&(n6Senderov3dst0'=n6Senderiv3dst0)&(n6Senderos'=1)&(n6Senderpc'=-3); +[] n6Senderos=1 & n6Senderpc=-4 -> (n6Senderop1'=n6Senderopt)&(n6Senderov3dst1'=n6Senderiv3dst0)&(n6Senderos'=2)&(n6Senderpc'=-3); +[] n6Senderos=2 & n6Senderpc=-4 -> (n6Senderpc'=-3); +[n2S0f1] n6Senderis=0 -> (n6Senderip0'=1)&(n6Senderiv3dst0'=n2S0ov3dst0)&(n6Senderis'=1); +[n2S0f1] n6Senderis=1 -> (n6Senderip1'=1)&(n6Senderiv3dst1'=n2S0ov3dst0)&(n6Senderis'=2); +[n2S0f1] n6Senderis=2 -> true; +[] unlk=12 & numSteps0 -> (n6Senderpc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[n6Senderf1] n6Senderpc=-5 & n6Senderos>0 & n6Senderop0=1 -> (n6Senderop0'=n6Senderop1)&(n6Senderov3dst0'=n6Senderov3dst1)&(n6Senderos'=n6Senderos-1)&(n6Senderpc'=-6); +[] numSteps (n6Senderpc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n6Senderpc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n6Senderpc=1 & (n6Senderv4sent<2) -> (n6Senderpc'=2); +[] n6Senderpc=1 & !((n6Senderv4sent<2)) -> (n6Senderpc'=7); +[] n6Senderpc=2 -> 0.125:(n6Sendert0'=0)&(n6Senderpc'=3) + 0.125:(n6Sendert0'=1)&(n6Senderpc'=3) + 0.125:(n6Sendert0'=2)&(n6Senderpc'=3) + 0.125:(n6Sendert0'=3)&(n6Senderpc'=3) + 0.125:(n6Sendert0'=4)&(n6Senderpc'=3) + 0.125:(n6Sendert0'=5)&(n6Senderpc'=3) + 0.125:(n6Sendert0'=6)&(n6Senderpc'=3) + 0.125:(n6Sendert0'=7)&(n6Senderpc'=3); +[] n6Senderpc=3 & n6Sendert0>=INTMIN & n6Sendert0<=INTMAX -> (n6Senderiv3dst0'=n6Sendert0)&(n6Senderpc'=4); +[] n6Senderpc=4 -> (n6Senderopt'=1)&(n6Senderpc'=-4)&(n6Senderra'=5); +[] n6Senderpc=5 -> (n6Senderpc'=-1)&(n6Senderra'=6); +[] n6Senderpc=6 -> (n6Senderpc'=8); +[] n6Senderpc=7 -> (n6Senderpc'=-3)&(n6Senderra'=8); +[] numSteps (n6Senderpc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2R2 +n2R2v5recvd:[INTMIN..INTMAX] init 0; +n2R2ip0:[1..2] init 1;n2R2iv3dst0:[INTMIN..INTMAX] init 0; +n2R2ip1:[1..2] init 1;n2R2iv3dst1:[INTMIN..INTMAX] init 0; +n2R2is:[0..2] init 0; +n2R2op0:[1..2] init 1;n2R2ov3dst0:[INTMIN..INTMAX] init 0; +n2R2op1:[1..2] init 1;n2R2ov3dst1:[INTMIN..INTMAX] init 0; +n2R2os:[0..2] init 0; +n2R2opt:[1..2] init 1; +n2R2pc:[-6..3] init 0; n2R2ra:[-6..3] init 0; +[] n2R2is<2 & n2R2pc=-1 -> (n2R2ip0'=1)&(n2R2iv3dst0'=0)&(n2R2ip1'=n2R2ip0)&(n2R2iv3dst1'=n2R2iv3dst0)&(n2R2is'=n2R2is+1)&(n2R2pc'=n2R2ra); +[] n2R2is=2 & n2R2pc=-1 -> (n2R2pc'=n2R2ra); +[] n2R2is=0 & n2R2pc=-2 -> (n2R2pc'=n2R2ra); +[] n2R2is>0 & n2R2is<2 & n2R2pc=-2 -> (n2R2ip1'=n2R2ip0)&(n2R2iv3dst1'=n2R2iv3dst0)&(n2R2is'=n2R2is+1)&(n2R2pc'=n2R2ra); +[] n2R2is=2 & n2R2pc=-2 -> (n2R2pc'=n2R2ra); +[] n2R2is=0 & n2R2pc=-3 -> (n2R2pc'=n2R2ra); +[] n2R2is>0 & n2R2pc=-3 -> (n2R2ip0'=n2R2ip1)&(n2R2iv3dst0'=n2R2iv3dst1)&(n2R2is'=n2R2is-1)&(n2R2pc'=n2R2ra); +[] n2R2os=0 & n2R2pc=-4 -> (n2R2op0'=n2R2opt)&(n2R2ov3dst0'=n2R2iv3dst0)&(n2R2os'=1)&(n2R2pc'=-3); +[] n2R2os=1 & n2R2pc=-4 -> (n2R2op1'=n2R2opt)&(n2R2ov3dst1'=n2R2iv3dst0)&(n2R2os'=2)&(n2R2pc'=-3); +[] n2R2os=2 & n2R2pc=-4 -> (n2R2pc'=-3); +[n2S1f4] n2R2is=0 -> (n2R2ip0'=1)&(n2R2iv3dst0'=n2S1ov3dst0)&(n2R2is'=1); +[n2S1f4] n2R2is=1 -> (n2R2ip1'=1)&(n2R2iv3dst1'=n2S1ov3dst0)&(n2R2is'=2); +[n2S1f4] n2R2is=2 -> true; +[] unlk=18 & numSteps0 -> (n2R2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=18 & numSteps (unlk'=19)&(numSkips'=numSkips+1); +[n2R2f1] n2R2pc=-5 & n2R2os>0 & n2R2op0=1 -> (n2R2op0'=n2R2op1)&(n2R2ov3dst0'=n2R2ov3dst1)&(n2R2os'=n2R2os-1)&(n2R2pc'=-6); +[] numSteps (n2R2pc'=0)&(unlk'=19)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2R2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2R2pc=1 & (n2R2v5recvd+1)>=INTMIN & (n2R2v5recvd+1)<=INTMAX -> (n2R2v5recvd'=(n2R2v5recvd+1))&(n2R2pc'=2); +[] n2R2pc=2 -> (n2R2pc'=-3)&(n2R2ra'=3); +[] numSteps (n2R2pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n2R3 +n2R3v5recvd:[INTMIN..INTMAX] init 0; +n2R3ip0:[1..2] init 1;n2R3iv3dst0:[INTMIN..INTMAX] init 0; +n2R3ip1:[1..2] init 1;n2R3iv3dst1:[INTMIN..INTMAX] init 0; +n2R3is:[0..2] init 0; +n2R3op0:[1..2] init 1;n2R3ov3dst0:[INTMIN..INTMAX] init 0; +n2R3op1:[1..2] init 1;n2R3ov3dst1:[INTMIN..INTMAX] init 0; +n2R3os:[0..2] init 0; +n2R3opt:[1..2] init 1; +n2R3pc:[-6..3] init 0; n2R3ra:[-6..3] init 0; +[] n2R3is<2 & n2R3pc=-1 -> (n2R3ip0'=1)&(n2R3iv3dst0'=0)&(n2R3ip1'=n2R3ip0)&(n2R3iv3dst1'=n2R3iv3dst0)&(n2R3is'=n2R3is+1)&(n2R3pc'=n2R3ra); +[] n2R3is=2 & n2R3pc=-1 -> (n2R3pc'=n2R3ra); +[] n2R3is=0 & n2R3pc=-2 -> (n2R3pc'=n2R3ra); +[] n2R3is>0 & n2R3is<2 & n2R3pc=-2 -> (n2R3ip1'=n2R3ip0)&(n2R3iv3dst1'=n2R3iv3dst0)&(n2R3is'=n2R3is+1)&(n2R3pc'=n2R3ra); +[] n2R3is=2 & n2R3pc=-2 -> (n2R3pc'=n2R3ra); +[] n2R3is=0 & n2R3pc=-3 -> (n2R3pc'=n2R3ra); +[] n2R3is>0 & n2R3pc=-3 -> (n2R3ip0'=n2R3ip1)&(n2R3iv3dst0'=n2R3iv3dst1)&(n2R3is'=n2R3is-1)&(n2R3pc'=n2R3ra); +[] n2R3os=0 & n2R3pc=-4 -> (n2R3op0'=n2R3opt)&(n2R3ov3dst0'=n2R3iv3dst0)&(n2R3os'=1)&(n2R3pc'=-3); +[] n2R3os=1 & n2R3pc=-4 -> (n2R3op1'=n2R3opt)&(n2R3ov3dst1'=n2R3iv3dst0)&(n2R3os'=2)&(n2R3pc'=-3); +[] n2R3os=2 & n2R3pc=-4 -> (n2R3pc'=-3); +[n2S1f5] n2R3is=0 -> (n2R3ip0'=1)&(n2R3iv3dst0'=n2S1ov3dst0)&(n2R3is'=1); +[n2S1f5] n2R3is=1 -> (n2R3ip1'=1)&(n2R3iv3dst1'=n2S1ov3dst0)&(n2R3is'=2); +[n2S1f5] n2R3is=2 -> true; +[] unlk=19 & numSteps0 -> (n2R3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=19 & numSteps (unlk'=20)&(numSkips'=numSkips+1); +[n2R3f1] n2R3pc=-5 & n2R3os>0 & n2R3op0=1 -> (n2R3op0'=n2R3op1)&(n2R3ov3dst0'=n2R3ov3dst1)&(n2R3os'=n2R3os-1)&(n2R3pc'=-6); +[] numSteps (n2R3pc'=0)&(unlk'=20)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2R3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2R3pc=1 & (n2R3v5recvd+1)>=INTMIN & (n2R3v5recvd+1)<=INTMAX -> (n2R3v5recvd'=(n2R3v5recvd+1))&(n2R3pc'=2); +[] n2R3pc=2 -> (n2R3pc'=-3)&(n2R3ra'=3); +[] numSteps (n2R3pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..5] init 1;n2S1iv3dst0:[INTMIN..INTMAX] init 0; +n2S1ip1:[1..5] init 1;n2S1iv3dst1:[INTMIN..INTMAX] init 0; +n2S1is:[0..2] init 0; +n2S1op0:[1..5] init 1;n2S1ov3dst0:[INTMIN..INTMAX] init 0; +n2S1op1:[1..5] init 1;n2S1ov3dst1:[INTMIN..INTMAX] init 0; +n2S1os:[0..2] init 0; +n2S1opt:[1..5] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1iv3dst0'=0)&(n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1iv3dst0'=n2S1iv3dst1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1ov3dst0'=n2S1iv3dst0)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1ov3dst1'=n2S1iv3dst0)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2R3f1] n2S1is=0 -> (n2S1ip0'=5)&(n2S1iv3dst0'=n2R3ov3dst0)&(n2S1is'=1); +[n2R3f1] n2S1is=1 -> (n2S1ip1'=5)&(n2S1iv3dst1'=n2R3ov3dst0)&(n2S1is'=2); +[n2R3f1] n2S1is=2 -> true; +[n2R2f1] n2S1is=0 -> (n2S1ip0'=4)&(n2S1iv3dst0'=n2R2ov3dst0)&(n2S1is'=1); +[n2R2f1] n2S1is=1 -> (n2S1ip1'=4)&(n2S1iv3dst1'=n2R2ov3dst0)&(n2S1is'=2); +[n2R2f1] n2S1is=2 -> true; +[n2R1f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1iv3dst0'=n2R1ov3dst0)&(n2S1is'=1); +[n2R1f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1iv3dst1'=n2R1ov3dst0)&(n2S1is'=2); +[n2R1f1] n2S1is=2 -> true; +[n2R0f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1iv3dst0'=n2R0ov3dst0)&(n2S1is'=1); +[n2R0f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1iv3dst1'=n2R0ov3dst0)&(n2S1is'=2); +[n2R0f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1iv3dst0'=n2S0ov3dst0)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1iv3dst1'=n2S0ov3dst0)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=14 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[n2S1f5] n2S1pc=-5 & n2S1os>0 & n2S1op0=5 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f4] n2S1pc=-5 & n2S1os>0 & n2S1op0=4 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=(n2S1iv3dst0+2))&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2R7 +n2R7v5recvd:[INTMIN..INTMAX] init 0; +n2R7ip0:[1..2] init 1;n2R7iv3dst0:[INTMIN..INTMAX] init 0; +n2R7ip1:[1..2] init 1;n2R7iv3dst1:[INTMIN..INTMAX] init 0; +n2R7is:[0..2] init 0; +n2R7op0:[1..2] init 1;n2R7ov3dst0:[INTMIN..INTMAX] init 0; +n2R7op1:[1..2] init 1;n2R7ov3dst1:[INTMIN..INTMAX] init 0; +n2R7os:[0..2] init 0; +n2R7opt:[1..2] init 1; +n2R7pc:[-6..3] init 0; n2R7ra:[-6..3] init 0; +[] n2R7is<2 & n2R7pc=-1 -> (n2R7ip0'=1)&(n2R7iv3dst0'=0)&(n2R7ip1'=n2R7ip0)&(n2R7iv3dst1'=n2R7iv3dst0)&(n2R7is'=n2R7is+1)&(n2R7pc'=n2R7ra); +[] n2R7is=2 & n2R7pc=-1 -> (n2R7pc'=n2R7ra); +[] n2R7is=0 & n2R7pc=-2 -> (n2R7pc'=n2R7ra); +[] n2R7is>0 & n2R7is<2 & n2R7pc=-2 -> (n2R7ip1'=n2R7ip0)&(n2R7iv3dst1'=n2R7iv3dst0)&(n2R7is'=n2R7is+1)&(n2R7pc'=n2R7ra); +[] n2R7is=2 & n2R7pc=-2 -> (n2R7pc'=n2R7ra); +[] n2R7is=0 & n2R7pc=-3 -> (n2R7pc'=n2R7ra); +[] n2R7is>0 & n2R7pc=-3 -> (n2R7ip0'=n2R7ip1)&(n2R7iv3dst0'=n2R7iv3dst1)&(n2R7is'=n2R7is-1)&(n2R7pc'=n2R7ra); +[] n2R7os=0 & n2R7pc=-4 -> (n2R7op0'=n2R7opt)&(n2R7ov3dst0'=n2R7iv3dst0)&(n2R7os'=1)&(n2R7pc'=-3); +[] n2R7os=1 & n2R7pc=-4 -> (n2R7op1'=n2R7opt)&(n2R7ov3dst1'=n2R7iv3dst0)&(n2R7os'=2)&(n2R7pc'=-3); +[] n2R7os=2 & n2R7pc=-4 -> (n2R7pc'=-3); +[n2S2f5] n2R7is=0 -> (n2R7ip0'=1)&(n2R7iv3dst0'=n2S2ov3dst0)&(n2R7is'=1); +[n2S2f5] n2R7is=1 -> (n2R7ip1'=1)&(n2R7iv3dst1'=n2S2ov3dst0)&(n2R7is'=2); +[n2S2f5] n2R7is=2 -> true; +[] unlk=23 & numSteps0 -> (n2R7pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=23 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2R7f1] n2R7pc=-5 & n2R7os>0 & n2R7op0=1 -> (n2R7op0'=n2R7op1)&(n2R7ov3dst0'=n2R7ov3dst1)&(n2R7os'=n2R7os-1)&(n2R7pc'=-6); +[] numSteps (n2R7pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=11 & numSteps0 -> (n2R7pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[] n2R7pc=1 & (n2R7v5recvd+1)>=INTMIN & (n2R7v5recvd+1)<=INTMAX -> (n2R7v5recvd'=(n2R7v5recvd+1))&(n2R7pc'=2); +[] n2R7pc=2 -> (n2R7pc'=-3)&(n2R7ra'=3); +[] numSteps (n2R7pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..5] init 1;n2S2iv3dst0:[INTMIN..INTMAX] init 0; +n2S2ip1:[1..5] init 1;n2S2iv3dst1:[INTMIN..INTMAX] init 0; +n2S2is:[0..2] init 0; +n2S2op0:[1..5] init 1;n2S2ov3dst0:[INTMIN..INTMAX] init 0; +n2S2op1:[1..5] init 1;n2S2ov3dst1:[INTMIN..INTMAX] init 0; +n2S2os:[0..2] init 0; +n2S2opt:[1..5] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2iv3dst0'=0)&(n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2iv3dst0'=n2S2iv3dst1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2ov3dst0'=n2S2iv3dst0)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2ov3dst1'=n2S2iv3dst0)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2R7f1] n2S2is=0 -> (n2S2ip0'=5)&(n2S2iv3dst0'=n2R7ov3dst0)&(n2S2is'=1); +[n2R7f1] n2S2is=1 -> (n2S2ip1'=5)&(n2S2iv3dst1'=n2R7ov3dst0)&(n2S2is'=2); +[n2R7f1] n2S2is=2 -> true; +[n2R6f1] n2S2is=0 -> (n2S2ip0'=4)&(n2S2iv3dst0'=n2R6ov3dst0)&(n2S2is'=1); +[n2R6f1] n2S2is=1 -> (n2S2ip1'=4)&(n2S2iv3dst1'=n2R6ov3dst0)&(n2S2is'=2); +[n2R6f1] n2S2is=2 -> true; +[n2R5f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2iv3dst0'=n2R5ov3dst0)&(n2S2is'=1); +[n2R5f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2iv3dst1'=n2R5ov3dst0)&(n2S2is'=2); +[n2R5f1] n2S2is=2 -> true; +[n2R4f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2iv3dst0'=n2R4ov3dst0)&(n2S2is'=1); +[n2R4f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2iv3dst1'=n2R4ov3dst0)&(n2S2is'=2); +[n2R4f1] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2iv3dst0'=n2S0ov3dst0)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2iv3dst1'=n2S0ov3dst0)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk=15 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[n2S2f5] n2S2pc=-5 & n2S2os>0 & n2S2op0=5 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f4] n2S2pc=-5 & n2S2os>0 & n2S2op0=4 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> (n2S2opt'=((n2S2iv3dst0+2)-v7SUBSIZE))&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2R6 +n2R6v5recvd:[INTMIN..INTMAX] init 0; +n2R6ip0:[1..2] init 1;n2R6iv3dst0:[INTMIN..INTMAX] init 0; +n2R6ip1:[1..2] init 1;n2R6iv3dst1:[INTMIN..INTMAX] init 0; +n2R6is:[0..2] init 0; +n2R6op0:[1..2] init 1;n2R6ov3dst0:[INTMIN..INTMAX] init 0; +n2R6op1:[1..2] init 1;n2R6ov3dst1:[INTMIN..INTMAX] init 0; +n2R6os:[0..2] init 0; +n2R6opt:[1..2] init 1; +n2R6pc:[-6..3] init 0; n2R6ra:[-6..3] init 0; +[] n2R6is<2 & n2R6pc=-1 -> (n2R6ip0'=1)&(n2R6iv3dst0'=0)&(n2R6ip1'=n2R6ip0)&(n2R6iv3dst1'=n2R6iv3dst0)&(n2R6is'=n2R6is+1)&(n2R6pc'=n2R6ra); +[] n2R6is=2 & n2R6pc=-1 -> (n2R6pc'=n2R6ra); +[] n2R6is=0 & n2R6pc=-2 -> (n2R6pc'=n2R6ra); +[] n2R6is>0 & n2R6is<2 & n2R6pc=-2 -> (n2R6ip1'=n2R6ip0)&(n2R6iv3dst1'=n2R6iv3dst0)&(n2R6is'=n2R6is+1)&(n2R6pc'=n2R6ra); +[] n2R6is=2 & n2R6pc=-2 -> (n2R6pc'=n2R6ra); +[] n2R6is=0 & n2R6pc=-3 -> (n2R6pc'=n2R6ra); +[] n2R6is>0 & n2R6pc=-3 -> (n2R6ip0'=n2R6ip1)&(n2R6iv3dst0'=n2R6iv3dst1)&(n2R6is'=n2R6is-1)&(n2R6pc'=n2R6ra); +[] n2R6os=0 & n2R6pc=-4 -> (n2R6op0'=n2R6opt)&(n2R6ov3dst0'=n2R6iv3dst0)&(n2R6os'=1)&(n2R6pc'=-3); +[] n2R6os=1 & n2R6pc=-4 -> (n2R6op1'=n2R6opt)&(n2R6ov3dst1'=n2R6iv3dst0)&(n2R6os'=2)&(n2R6pc'=-3); +[] n2R6os=2 & n2R6pc=-4 -> (n2R6pc'=-3); +[n2S2f4] n2R6is=0 -> (n2R6ip0'=1)&(n2R6iv3dst0'=n2S2ov3dst0)&(n2R6is'=1); +[n2S2f4] n2R6is=1 -> (n2R6ip1'=1)&(n2R6iv3dst1'=n2S2ov3dst0)&(n2R6is'=2); +[n2S2f4] n2R6is=2 -> true; +[] unlk=22 & numSteps0 -> (n2R6pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=22 & numSteps (unlk'=23)&(numSkips'=numSkips+1); +[n2R6f1] n2R6pc=-5 & n2R6os>0 & n2R6op0=1 -> (n2R6op0'=n2R6op1)&(n2R6ov3dst0'=n2R6ov3dst1)&(n2R6os'=n2R6os-1)&(n2R6pc'=-6); +[] numSteps (n2R6pc'=0)&(unlk'=23)&(numSteps'=numSteps+1); +[] unlk=10 & numSteps0 -> (n2R6pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[] n2R6pc=1 & (n2R6v5recvd+1)>=INTMIN & (n2R6v5recvd+1)<=INTMAX -> (n2R6v5recvd'=(n2R6v5recvd+1))&(n2R6pc'=2); +[] n2R6pc=2 -> (n2R6pc'=-3)&(n2R6ra'=3); +[] numSteps (n2R6pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0ip0:[1..3] init 1;n2S0iv3dst0:[INTMIN..INTMAX] init 0; +n2S0ip1:[1..3] init 1;n2S0iv3dst1:[INTMIN..INTMAX] init 0; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1;n2S0ov3dst0:[INTMIN..INTMAX] init 0; +n2S0op1:[1..3] init 1;n2S0ov3dst1:[INTMIN..INTMAX] init 0; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..5] init 0; n2S0ra:[-6..5] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0iv3dst0'=0)&(n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0iv3dst0'=n2S0iv3dst1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0ov3dst0'=n2S0iv3dst0)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0ov3dst1'=n2S0iv3dst0)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0iv3dst0'=n2S2ov3dst0)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0iv3dst1'=n2S2ov3dst0)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0iv3dst0'=n2S1ov3dst0)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0iv3dst1'=n2S1ov3dst0)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n6Senderf1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0iv3dst0'=n6Senderov3dst0)&(n2S0is'=1); +[n6Senderf1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0iv3dst1'=n6Senderov3dst0)&(n2S0is'=2); +[n6Senderf1] n2S0is=2 -> true; +[] unlk=13 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2S0pc=1 & (n2S0iv3dst0 (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0iv3dst0 (n2S0pc'=4); +[] n2S0pc=2 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=3); +[] n2S0pc=3 -> (n2S0pc'=5); +[] n2S0pc=4 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=5); +[] numSteps (n2S0pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2R4 +n2R4v5recvd:[INTMIN..INTMAX] init 0; +n2R4ip0:[1..2] init 1;n2R4iv3dst0:[INTMIN..INTMAX] init 0; +n2R4ip1:[1..2] init 1;n2R4iv3dst1:[INTMIN..INTMAX] init 0; +n2R4is:[0..2] init 0; +n2R4op0:[1..2] init 1;n2R4ov3dst0:[INTMIN..INTMAX] init 0; +n2R4op1:[1..2] init 1;n2R4ov3dst1:[INTMIN..INTMAX] init 0; +n2R4os:[0..2] init 0; +n2R4opt:[1..2] init 1; +n2R4pc:[-6..3] init 0; n2R4ra:[-6..3] init 0; +[] n2R4is<2 & n2R4pc=-1 -> (n2R4ip0'=1)&(n2R4iv3dst0'=0)&(n2R4ip1'=n2R4ip0)&(n2R4iv3dst1'=n2R4iv3dst0)&(n2R4is'=n2R4is+1)&(n2R4pc'=n2R4ra); +[] n2R4is=2 & n2R4pc=-1 -> (n2R4pc'=n2R4ra); +[] n2R4is=0 & n2R4pc=-2 -> (n2R4pc'=n2R4ra); +[] n2R4is>0 & n2R4is<2 & n2R4pc=-2 -> (n2R4ip1'=n2R4ip0)&(n2R4iv3dst1'=n2R4iv3dst0)&(n2R4is'=n2R4is+1)&(n2R4pc'=n2R4ra); +[] n2R4is=2 & n2R4pc=-2 -> (n2R4pc'=n2R4ra); +[] n2R4is=0 & n2R4pc=-3 -> (n2R4pc'=n2R4ra); +[] n2R4is>0 & n2R4pc=-3 -> (n2R4ip0'=n2R4ip1)&(n2R4iv3dst0'=n2R4iv3dst1)&(n2R4is'=n2R4is-1)&(n2R4pc'=n2R4ra); +[] n2R4os=0 & n2R4pc=-4 -> (n2R4op0'=n2R4opt)&(n2R4ov3dst0'=n2R4iv3dst0)&(n2R4os'=1)&(n2R4pc'=-3); +[] n2R4os=1 & n2R4pc=-4 -> (n2R4op1'=n2R4opt)&(n2R4ov3dst1'=n2R4iv3dst0)&(n2R4os'=2)&(n2R4pc'=-3); +[] n2R4os=2 & n2R4pc=-4 -> (n2R4pc'=-3); +[n2S2f2] n2R4is=0 -> (n2R4ip0'=1)&(n2R4iv3dst0'=n2S2ov3dst0)&(n2R4is'=1); +[n2S2f2] n2R4is=1 -> (n2R4ip1'=1)&(n2R4iv3dst1'=n2S2ov3dst0)&(n2R4is'=2); +[n2S2f2] n2R4is=2 -> true; +[] unlk=20 & numSteps0 -> (n2R4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=20 & numSteps (unlk'=21)&(numSkips'=numSkips+1); +[n2R4f1] n2R4pc=-5 & n2R4os>0 & n2R4op0=1 -> (n2R4op0'=n2R4op1)&(n2R4ov3dst0'=n2R4ov3dst1)&(n2R4os'=n2R4os-1)&(n2R4pc'=-6); +[] numSteps (n2R4pc'=0)&(unlk'=21)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2R4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2R4pc=1 & (n2R4v5recvd+1)>=INTMIN & (n2R4v5recvd+1)<=INTMAX -> (n2R4v5recvd'=(n2R4v5recvd+1))&(n2R4pc'=2); +[] n2R4pc=2 -> (n2R4pc'=-3)&(n2R4ra'=3); +[] numSteps (n2R4pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n2R1 +n2R1v5recvd:[INTMIN..INTMAX] init 0; +n2R1ip0:[1..2] init 1;n2R1iv3dst0:[INTMIN..INTMAX] init 0; +n2R1ip1:[1..2] init 1;n2R1iv3dst1:[INTMIN..INTMAX] init 0; +n2R1is:[0..2] init 0; +n2R1op0:[1..2] init 1;n2R1ov3dst0:[INTMIN..INTMAX] init 0; +n2R1op1:[1..2] init 1;n2R1ov3dst1:[INTMIN..INTMAX] init 0; +n2R1os:[0..2] init 0; +n2R1opt:[1..2] init 1; +n2R1pc:[-6..3] init 0; n2R1ra:[-6..3] init 0; +[] n2R1is<2 & n2R1pc=-1 -> (n2R1ip0'=1)&(n2R1iv3dst0'=0)&(n2R1ip1'=n2R1ip0)&(n2R1iv3dst1'=n2R1iv3dst0)&(n2R1is'=n2R1is+1)&(n2R1pc'=n2R1ra); +[] n2R1is=2 & n2R1pc=-1 -> (n2R1pc'=n2R1ra); +[] n2R1is=0 & n2R1pc=-2 -> (n2R1pc'=n2R1ra); +[] n2R1is>0 & n2R1is<2 & n2R1pc=-2 -> (n2R1ip1'=n2R1ip0)&(n2R1iv3dst1'=n2R1iv3dst0)&(n2R1is'=n2R1is+1)&(n2R1pc'=n2R1ra); +[] n2R1is=2 & n2R1pc=-2 -> (n2R1pc'=n2R1ra); +[] n2R1is=0 & n2R1pc=-3 -> (n2R1pc'=n2R1ra); +[] n2R1is>0 & n2R1pc=-3 -> (n2R1ip0'=n2R1ip1)&(n2R1iv3dst0'=n2R1iv3dst1)&(n2R1is'=n2R1is-1)&(n2R1pc'=n2R1ra); +[] n2R1os=0 & n2R1pc=-4 -> (n2R1op0'=n2R1opt)&(n2R1ov3dst0'=n2R1iv3dst0)&(n2R1os'=1)&(n2R1pc'=-3); +[] n2R1os=1 & n2R1pc=-4 -> (n2R1op1'=n2R1opt)&(n2R1ov3dst1'=n2R1iv3dst0)&(n2R1os'=2)&(n2R1pc'=-3); +[] n2R1os=2 & n2R1pc=-4 -> (n2R1pc'=-3); +[n2S1f3] n2R1is=0 -> (n2R1ip0'=1)&(n2R1iv3dst0'=n2S1ov3dst0)&(n2R1is'=1); +[n2S1f3] n2R1is=1 -> (n2R1ip1'=1)&(n2R1iv3dst1'=n2S1ov3dst0)&(n2R1is'=2); +[n2S1f3] n2R1is=2 -> true; +[] unlk=17 & numSteps0 -> (n2R1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=18)&(numSkips'=numSkips+1); +[n2R1f1] n2R1pc=-5 & n2R1os>0 & n2R1op0=1 -> (n2R1op0'=n2R1op1)&(n2R1ov3dst0'=n2R1ov3dst1)&(n2R1os'=n2R1os-1)&(n2R1pc'=-6); +[] numSteps (n2R1pc'=0)&(unlk'=18)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2R1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2R1pc=1 & (n2R1v5recvd+1)>=INTMIN & (n2R1v5recvd+1)<=INTMAX -> (n2R1v5recvd'=(n2R1v5recvd+1))&(n2R1pc'=2); +[] n2R1pc=2 -> (n2R1pc'=-3)&(n2R1ra'=3); +[] numSteps (n2R1pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2R0 +n2R0v5recvd:[INTMIN..INTMAX] init 0; +n2R0ip0:[1..2] init 1;n2R0iv3dst0:[INTMIN..INTMAX] init 0; +n2R0ip1:[1..2] init 1;n2R0iv3dst1:[INTMIN..INTMAX] init 0; +n2R0is:[0..2] init 0; +n2R0op0:[1..2] init 1;n2R0ov3dst0:[INTMIN..INTMAX] init 0; +n2R0op1:[1..2] init 1;n2R0ov3dst1:[INTMIN..INTMAX] init 0; +n2R0os:[0..2] init 0; +n2R0opt:[1..2] init 1; +n2R0pc:[-6..3] init 0; n2R0ra:[-6..3] init 0; +[] n2R0is<2 & n2R0pc=-1 -> (n2R0ip0'=1)&(n2R0iv3dst0'=0)&(n2R0ip1'=n2R0ip0)&(n2R0iv3dst1'=n2R0iv3dst0)&(n2R0is'=n2R0is+1)&(n2R0pc'=n2R0ra); +[] n2R0is=2 & n2R0pc=-1 -> (n2R0pc'=n2R0ra); +[] n2R0is=0 & n2R0pc=-2 -> (n2R0pc'=n2R0ra); +[] n2R0is>0 & n2R0is<2 & n2R0pc=-2 -> (n2R0ip1'=n2R0ip0)&(n2R0iv3dst1'=n2R0iv3dst0)&(n2R0is'=n2R0is+1)&(n2R0pc'=n2R0ra); +[] n2R0is=2 & n2R0pc=-2 -> (n2R0pc'=n2R0ra); +[] n2R0is=0 & n2R0pc=-3 -> (n2R0pc'=n2R0ra); +[] n2R0is>0 & n2R0pc=-3 -> (n2R0ip0'=n2R0ip1)&(n2R0iv3dst0'=n2R0iv3dst1)&(n2R0is'=n2R0is-1)&(n2R0pc'=n2R0ra); +[] n2R0os=0 & n2R0pc=-4 -> (n2R0op0'=n2R0opt)&(n2R0ov3dst0'=n2R0iv3dst0)&(n2R0os'=1)&(n2R0pc'=-3); +[] n2R0os=1 & n2R0pc=-4 -> (n2R0op1'=n2R0opt)&(n2R0ov3dst1'=n2R0iv3dst0)&(n2R0os'=2)&(n2R0pc'=-3); +[] n2R0os=2 & n2R0pc=-4 -> (n2R0pc'=-3); +[n2S1f2] n2R0is=0 -> (n2R0ip0'=1)&(n2R0iv3dst0'=n2S1ov3dst0)&(n2R0is'=1); +[n2S1f2] n2R0is=1 -> (n2R0ip1'=1)&(n2R0iv3dst1'=n2S1ov3dst0)&(n2R0is'=2); +[n2S1f2] n2R0is=2 -> true; +[] unlk=16 & numSteps0 -> (n2R0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[n2R0f1] n2R0pc=-5 & n2R0os>0 & n2R0op0=1 -> (n2R0op0'=n2R0op1)&(n2R0ov3dst0'=n2R0ov3dst1)&(n2R0os'=n2R0os-1)&(n2R0pc'=-6); +[] numSteps (n2R0pc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2R0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2R0pc=1 & (n2R0v5recvd+1)>=INTMIN & (n2R0v5recvd+1)<=INTMAX -> (n2R0v5recvd'=(n2R0v5recvd+1))&(n2R0pc'=2); +[] n2R0pc=2 -> (n2R0pc'=-3)&(n2R0ra'=3); +[] numSteps (n2R0pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2R5 +n2R5v5recvd:[INTMIN..INTMAX] init 0; +n2R5ip0:[1..2] init 1;n2R5iv3dst0:[INTMIN..INTMAX] init 0; +n2R5ip1:[1..2] init 1;n2R5iv3dst1:[INTMIN..INTMAX] init 0; +n2R5is:[0..2] init 0; +n2R5op0:[1..2] init 1;n2R5ov3dst0:[INTMIN..INTMAX] init 0; +n2R5op1:[1..2] init 1;n2R5ov3dst1:[INTMIN..INTMAX] init 0; +n2R5os:[0..2] init 0; +n2R5opt:[1..2] init 1; +n2R5pc:[-6..3] init 0; n2R5ra:[-6..3] init 0; +[] n2R5is<2 & n2R5pc=-1 -> (n2R5ip0'=1)&(n2R5iv3dst0'=0)&(n2R5ip1'=n2R5ip0)&(n2R5iv3dst1'=n2R5iv3dst0)&(n2R5is'=n2R5is+1)&(n2R5pc'=n2R5ra); +[] n2R5is=2 & n2R5pc=-1 -> (n2R5pc'=n2R5ra); +[] n2R5is=0 & n2R5pc=-2 -> (n2R5pc'=n2R5ra); +[] n2R5is>0 & n2R5is<2 & n2R5pc=-2 -> (n2R5ip1'=n2R5ip0)&(n2R5iv3dst1'=n2R5iv3dst0)&(n2R5is'=n2R5is+1)&(n2R5pc'=n2R5ra); +[] n2R5is=2 & n2R5pc=-2 -> (n2R5pc'=n2R5ra); +[] n2R5is=0 & n2R5pc=-3 -> (n2R5pc'=n2R5ra); +[] n2R5is>0 & n2R5pc=-3 -> (n2R5ip0'=n2R5ip1)&(n2R5iv3dst0'=n2R5iv3dst1)&(n2R5is'=n2R5is-1)&(n2R5pc'=n2R5ra); +[] n2R5os=0 & n2R5pc=-4 -> (n2R5op0'=n2R5opt)&(n2R5ov3dst0'=n2R5iv3dst0)&(n2R5os'=1)&(n2R5pc'=-3); +[] n2R5os=1 & n2R5pc=-4 -> (n2R5op1'=n2R5opt)&(n2R5ov3dst1'=n2R5iv3dst0)&(n2R5os'=2)&(n2R5pc'=-3); +[] n2R5os=2 & n2R5pc=-4 -> (n2R5pc'=-3); +[n2S2f3] n2R5is=0 -> (n2R5ip0'=1)&(n2R5iv3dst0'=n2S2ov3dst0)&(n2R5is'=1); +[n2S2f3] n2R5is=1 -> (n2R5ip1'=1)&(n2R5iv3dst1'=n2S2ov3dst0)&(n2R5is'=2); +[n2S2f3] n2R5is=2 -> true; +[] unlk=21 & numSteps0 -> (n2R5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=21 & numSteps (unlk'=22)&(numSkips'=numSkips+1); +[n2R5f1] n2R5pc=-5 & n2R5os>0 & n2R5op0=1 -> (n2R5op0'=n2R5op1)&(n2R5ov3dst0'=n2R5ov3dst1)&(n2R5os'=n2R5os-1)&(n2R5pc'=-6); +[] numSteps (n2R5pc'=0)&(unlk'=22)&(numSteps'=numSteps+1); +[] unlk=9 & numSteps0 -> (n2R5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[] n2R5pc=1 & (n2R5v5recvd+1)>=INTMIN & (n2R5v5recvd+1)<=INTMAX -> (n2R5v5recvd'=(n2R5v5recvd+1))&(n2R5pc'=2); +[] n2R5pc=2 -> (n2R5pc'=-3)&(n2R5ra'=3); +[] numSteps (n2R5pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n6Senderis=0 & n6Senderos=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2R0is=0 & n2R0os=0 & n2R1is=0 & n2R1os=0 & n2R2is=0 & n2R2os=0 & n2R3is=0 & n2R3os=0 & n2R4is=0 & n2R4os=0 & n2R5is=0 & n2R5os=0 & n2R6is=0 & n2R6os=0 & n2R7is=0 & n2R7os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & ((((((((n2R0v5recvd+n2R1v5recvd)+n2R2v5recvd)+n2R3v5recvd)+n2R4v5recvd)+n2R5v5recvd)+n2R6v5recvd)+n2R7v5recvd)=2) ] / P=? [ F finished & obsrvOK ] diff --git a/subnets/subnets-5.bayonet b/subnets/subnets-5.bayonet new file mode 100644 index 0000000..1e072db --- /dev/null +++ b/subnets/subnets-5.bayonet @@ -0,0 +1,73 @@ +num_steps 20; + +parameters{ SUBSIZE(5) } + +query probability(recvd@R0+recvd@R1+recvd@R2+recvd@R3+recvd@R4+recvd@R5+recvd@R6+recvd@R7+recvd@R8+recvd@R9 == 2); + +topology{ + nodes{ Sender, S0, S1, S2, R0, R1, R2, R3, R4, R5, R6, R7, R8, R9 } + links{ + (Sender,pt1) <-> (S0,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (R0,pt1), + (S1,pt3) <-> (R1,pt1), + (S1,pt4) <-> (R2,pt1), + (S1,pt5) <-> (R3,pt1), + (S1,pt6) <-> (R4,pt1), + (S2,pt2) <-> (R5,pt1), + (S2,pt3) <-> (R6,pt1), + (S2,pt4) <-> (R7,pt1), + (S2,pt5) <-> (R8,pt1), + (S2,pt6) <-> (R9,pt1) + } +} +queue_capacity 2; + +packet_fields{ dst } + +programs{ Sender -> send, S0 -> s0, S1 -> s1, S2 -> s2, R0 -> recv, R1 -> recv, R2 -> recv, R3 -> recv, R4 -> recv, R5 -> recv, R6 -> recv, R7 -> recv, R8 -> recv, R9 -> recv } + +def send(pkt, port) state sent(0) { + if sent < 2 { + pkt.dst = uniformInt(0,9); + fwd(1); + new; + } else { + drop; + } +} + +def recv(pkt, port) state recvd(0) { + recvd = recvd + 1; + drop; +} + +def s0(pkt, port) { + if pkt.dst < SUBSIZE { + fwd(2); + } else { + fwd(3); + } +} + +def s1(pkt, port) { + fwd(pkt.dst+2); +} + +def s2(pkt, port) { + fwd(pkt.dst+2-SUBSIZE); +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/subnets/subnets-5.prism b/subnets/subnets-5.prism new file mode 100644 index 0000000..a751649 --- /dev/null +++ b/subnets/subnets-5.prism @@ -0,0 +1,533 @@ +dtmc +global unlk:[-1..27] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 28; +global numSkips:[0..28] init 0; +const int v7SUBSIZE = 5; +module n6Sender +n6Senderv4sent:[INTMIN..INTMAX] init 0; +n6Sendert0:[0..9]; +n6Senderip0:[1..2] init 1;n6Senderiv3dst0:[INTMIN..INTMAX] init 0; +n6Senderip1:[1..2] init 1;n6Senderiv3dst1:[INTMIN..INTMAX] init 0; +n6Senderis:[0..2] init 1; +n6Senderop0:[1..2] init 1;n6Senderov3dst0:[INTMIN..INTMAX] init 0; +n6Senderop1:[1..2] init 1;n6Senderov3dst1:[INTMIN..INTMAX] init 0; +n6Senderos:[0..2] init 0; +n6Senderopt:[1..2] init 1; +n6Senderpc:[-6..8] init 0; n6Senderra:[-6..8] init 0; +[] n6Senderis<2 & n6Senderpc=-1 -> (n6Senderip0'=1)&(n6Senderiv3dst0'=0)&(n6Senderip1'=n6Senderip0)&(n6Senderiv3dst1'=n6Senderiv3dst0)&(n6Senderis'=n6Senderis+1)&(n6Senderpc'=n6Senderra); +[] n6Senderis=2 & n6Senderpc=-1 -> (n6Senderpc'=n6Senderra); +[] n6Senderis=0 & n6Senderpc=-2 -> (n6Senderpc'=n6Senderra); +[] n6Senderis>0 & n6Senderis<2 & n6Senderpc=-2 -> (n6Senderip1'=n6Senderip0)&(n6Senderiv3dst1'=n6Senderiv3dst0)&(n6Senderis'=n6Senderis+1)&(n6Senderpc'=n6Senderra); +[] n6Senderis=2 & n6Senderpc=-2 -> (n6Senderpc'=n6Senderra); +[] n6Senderis=0 & n6Senderpc=-3 -> (n6Senderpc'=n6Senderra); +[] n6Senderis>0 & n6Senderpc=-3 -> (n6Senderip0'=n6Senderip1)&(n6Senderiv3dst0'=n6Senderiv3dst1)&(n6Senderis'=n6Senderis-1)&(n6Senderpc'=n6Senderra); +[] n6Senderos=0 & n6Senderpc=-4 -> (n6Senderop0'=n6Senderopt)&(n6Senderov3dst0'=n6Senderiv3dst0)&(n6Senderos'=1)&(n6Senderpc'=-3); +[] n6Senderos=1 & n6Senderpc=-4 -> (n6Senderop1'=n6Senderopt)&(n6Senderov3dst1'=n6Senderiv3dst0)&(n6Senderos'=2)&(n6Senderpc'=-3); +[] n6Senderos=2 & n6Senderpc=-4 -> (n6Senderpc'=-3); +[n2S0f1] n6Senderis=0 -> (n6Senderip0'=1)&(n6Senderiv3dst0'=n2S0ov3dst0)&(n6Senderis'=1); +[n2S0f1] n6Senderis=1 -> (n6Senderip1'=1)&(n6Senderiv3dst1'=n2S0ov3dst0)&(n6Senderis'=2); +[n2S0f1] n6Senderis=2 -> true; +[] unlk=14 & numSteps0 -> (n6Senderpc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[n6Senderf1] n6Senderpc=-5 & n6Senderos>0 & n6Senderop0=1 -> (n6Senderop0'=n6Senderop1)&(n6Senderov3dst0'=n6Senderov3dst1)&(n6Senderos'=n6Senderos-1)&(n6Senderpc'=-6); +[] numSteps (n6Senderpc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n6Senderpc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n6Senderpc=1 & (n6Senderv4sent<2) -> (n6Senderpc'=2); +[] n6Senderpc=1 & !((n6Senderv4sent<2)) -> (n6Senderpc'=7); +[] n6Senderpc=2 -> 0.1:(n6Sendert0'=0)&(n6Senderpc'=3) + 0.1:(n6Sendert0'=1)&(n6Senderpc'=3) + 0.1:(n6Sendert0'=2)&(n6Senderpc'=3) + 0.1:(n6Sendert0'=3)&(n6Senderpc'=3) + 0.1:(n6Sendert0'=4)&(n6Senderpc'=3) + 0.1:(n6Sendert0'=5)&(n6Senderpc'=3) + 0.1:(n6Sendert0'=6)&(n6Senderpc'=3) + 0.1:(n6Sendert0'=7)&(n6Senderpc'=3) + 0.1:(n6Sendert0'=8)&(n6Senderpc'=3) + 0.1:(n6Sendert0'=9)&(n6Senderpc'=3); +[] n6Senderpc=3 & n6Sendert0>=INTMIN & n6Sendert0<=INTMAX -> (n6Senderiv3dst0'=n6Sendert0)&(n6Senderpc'=4); +[] n6Senderpc=4 -> (n6Senderopt'=1)&(n6Senderpc'=-4)&(n6Senderra'=5); +[] n6Senderpc=5 -> (n6Senderpc'=-1)&(n6Senderra'=6); +[] n6Senderpc=6 -> (n6Senderpc'=8); +[] n6Senderpc=7 -> (n6Senderpc'=-3)&(n6Senderra'=8); +[] numSteps (n6Senderpc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2R9 +n2R9v5recvd:[INTMIN..INTMAX] init 0; +n2R9ip0:[1..2] init 1;n2R9iv3dst0:[INTMIN..INTMAX] init 0; +n2R9ip1:[1..2] init 1;n2R9iv3dst1:[INTMIN..INTMAX] init 0; +n2R9is:[0..2] init 0; +n2R9op0:[1..2] init 1;n2R9ov3dst0:[INTMIN..INTMAX] init 0; +n2R9op1:[1..2] init 1;n2R9ov3dst1:[INTMIN..INTMAX] init 0; +n2R9os:[0..2] init 0; +n2R9opt:[1..2] init 1; +n2R9pc:[-6..3] init 0; n2R9ra:[-6..3] init 0; +[] n2R9is<2 & n2R9pc=-1 -> (n2R9ip0'=1)&(n2R9iv3dst0'=0)&(n2R9ip1'=n2R9ip0)&(n2R9iv3dst1'=n2R9iv3dst0)&(n2R9is'=n2R9is+1)&(n2R9pc'=n2R9ra); +[] n2R9is=2 & n2R9pc=-1 -> (n2R9pc'=n2R9ra); +[] n2R9is=0 & n2R9pc=-2 -> (n2R9pc'=n2R9ra); +[] n2R9is>0 & n2R9is<2 & n2R9pc=-2 -> (n2R9ip1'=n2R9ip0)&(n2R9iv3dst1'=n2R9iv3dst0)&(n2R9is'=n2R9is+1)&(n2R9pc'=n2R9ra); +[] n2R9is=2 & n2R9pc=-2 -> (n2R9pc'=n2R9ra); +[] n2R9is=0 & n2R9pc=-3 -> (n2R9pc'=n2R9ra); +[] n2R9is>0 & n2R9pc=-3 -> (n2R9ip0'=n2R9ip1)&(n2R9iv3dst0'=n2R9iv3dst1)&(n2R9is'=n2R9is-1)&(n2R9pc'=n2R9ra); +[] n2R9os=0 & n2R9pc=-4 -> (n2R9op0'=n2R9opt)&(n2R9ov3dst0'=n2R9iv3dst0)&(n2R9os'=1)&(n2R9pc'=-3); +[] n2R9os=1 & n2R9pc=-4 -> (n2R9op1'=n2R9opt)&(n2R9ov3dst1'=n2R9iv3dst0)&(n2R9os'=2)&(n2R9pc'=-3); +[] n2R9os=2 & n2R9pc=-4 -> (n2R9pc'=-3); +[n2S2f6] n2R9is=0 -> (n2R9ip0'=1)&(n2R9iv3dst0'=n2S2ov3dst0)&(n2R9is'=1); +[n2S2f6] n2R9is=1 -> (n2R9ip1'=1)&(n2R9iv3dst1'=n2S2ov3dst0)&(n2R9is'=2); +[n2S2f6] n2R9is=2 -> true; +[] unlk=27 & numSteps0 -> (n2R9pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=27 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2R9f1] n2R9pc=-5 & n2R9os>0 & n2R9op0=1 -> (n2R9op0'=n2R9op1)&(n2R9ov3dst0'=n2R9ov3dst1)&(n2R9os'=n2R9os-1)&(n2R9pc'=-6); +[] numSteps (n2R9pc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=13 & numSteps0 -> (n2R9pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[] n2R9pc=1 & (n2R9v5recvd+1)>=INTMIN & (n2R9v5recvd+1)<=INTMAX -> (n2R9v5recvd'=(n2R9v5recvd+1))&(n2R9pc'=2); +[] n2R9pc=2 -> (n2R9pc'=-3)&(n2R9ra'=3); +[] numSteps (n2R9pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +endmodule +module n2R2 +n2R2v5recvd:[INTMIN..INTMAX] init 0; +n2R2ip0:[1..2] init 1;n2R2iv3dst0:[INTMIN..INTMAX] init 0; +n2R2ip1:[1..2] init 1;n2R2iv3dst1:[INTMIN..INTMAX] init 0; +n2R2is:[0..2] init 0; +n2R2op0:[1..2] init 1;n2R2ov3dst0:[INTMIN..INTMAX] init 0; +n2R2op1:[1..2] init 1;n2R2ov3dst1:[INTMIN..INTMAX] init 0; +n2R2os:[0..2] init 0; +n2R2opt:[1..2] init 1; +n2R2pc:[-6..3] init 0; n2R2ra:[-6..3] init 0; +[] n2R2is<2 & n2R2pc=-1 -> (n2R2ip0'=1)&(n2R2iv3dst0'=0)&(n2R2ip1'=n2R2ip0)&(n2R2iv3dst1'=n2R2iv3dst0)&(n2R2is'=n2R2is+1)&(n2R2pc'=n2R2ra); +[] n2R2is=2 & n2R2pc=-1 -> (n2R2pc'=n2R2ra); +[] n2R2is=0 & n2R2pc=-2 -> (n2R2pc'=n2R2ra); +[] n2R2is>0 & n2R2is<2 & n2R2pc=-2 -> (n2R2ip1'=n2R2ip0)&(n2R2iv3dst1'=n2R2iv3dst0)&(n2R2is'=n2R2is+1)&(n2R2pc'=n2R2ra); +[] n2R2is=2 & n2R2pc=-2 -> (n2R2pc'=n2R2ra); +[] n2R2is=0 & n2R2pc=-3 -> (n2R2pc'=n2R2ra); +[] n2R2is>0 & n2R2pc=-3 -> (n2R2ip0'=n2R2ip1)&(n2R2iv3dst0'=n2R2iv3dst1)&(n2R2is'=n2R2is-1)&(n2R2pc'=n2R2ra); +[] n2R2os=0 & n2R2pc=-4 -> (n2R2op0'=n2R2opt)&(n2R2ov3dst0'=n2R2iv3dst0)&(n2R2os'=1)&(n2R2pc'=-3); +[] n2R2os=1 & n2R2pc=-4 -> (n2R2op1'=n2R2opt)&(n2R2ov3dst1'=n2R2iv3dst0)&(n2R2os'=2)&(n2R2pc'=-3); +[] n2R2os=2 & n2R2pc=-4 -> (n2R2pc'=-3); +[n2S1f4] n2R2is=0 -> (n2R2ip0'=1)&(n2R2iv3dst0'=n2S1ov3dst0)&(n2R2is'=1); +[n2S1f4] n2R2is=1 -> (n2R2ip1'=1)&(n2R2iv3dst1'=n2S1ov3dst0)&(n2R2is'=2); +[n2S1f4] n2R2is=2 -> true; +[] unlk=20 & numSteps0 -> (n2R2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=20 & numSteps (unlk'=21)&(numSkips'=numSkips+1); +[n2R2f1] n2R2pc=-5 & n2R2os>0 & n2R2op0=1 -> (n2R2op0'=n2R2op1)&(n2R2ov3dst0'=n2R2ov3dst1)&(n2R2os'=n2R2os-1)&(n2R2pc'=-6); +[] numSteps (n2R2pc'=0)&(unlk'=21)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2R2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2R2pc=1 & (n2R2v5recvd+1)>=INTMIN & (n2R2v5recvd+1)<=INTMAX -> (n2R2v5recvd'=(n2R2v5recvd+1))&(n2R2pc'=2); +[] n2R2pc=2 -> (n2R2pc'=-3)&(n2R2ra'=3); +[] numSteps (n2R2pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n2R3 +n2R3v5recvd:[INTMIN..INTMAX] init 0; +n2R3ip0:[1..2] init 1;n2R3iv3dst0:[INTMIN..INTMAX] init 0; +n2R3ip1:[1..2] init 1;n2R3iv3dst1:[INTMIN..INTMAX] init 0; +n2R3is:[0..2] init 0; +n2R3op0:[1..2] init 1;n2R3ov3dst0:[INTMIN..INTMAX] init 0; +n2R3op1:[1..2] init 1;n2R3ov3dst1:[INTMIN..INTMAX] init 0; +n2R3os:[0..2] init 0; +n2R3opt:[1..2] init 1; +n2R3pc:[-6..3] init 0; n2R3ra:[-6..3] init 0; +[] n2R3is<2 & n2R3pc=-1 -> (n2R3ip0'=1)&(n2R3iv3dst0'=0)&(n2R3ip1'=n2R3ip0)&(n2R3iv3dst1'=n2R3iv3dst0)&(n2R3is'=n2R3is+1)&(n2R3pc'=n2R3ra); +[] n2R3is=2 & n2R3pc=-1 -> (n2R3pc'=n2R3ra); +[] n2R3is=0 & n2R3pc=-2 -> (n2R3pc'=n2R3ra); +[] n2R3is>0 & n2R3is<2 & n2R3pc=-2 -> (n2R3ip1'=n2R3ip0)&(n2R3iv3dst1'=n2R3iv3dst0)&(n2R3is'=n2R3is+1)&(n2R3pc'=n2R3ra); +[] n2R3is=2 & n2R3pc=-2 -> (n2R3pc'=n2R3ra); +[] n2R3is=0 & n2R3pc=-3 -> (n2R3pc'=n2R3ra); +[] n2R3is>0 & n2R3pc=-3 -> (n2R3ip0'=n2R3ip1)&(n2R3iv3dst0'=n2R3iv3dst1)&(n2R3is'=n2R3is-1)&(n2R3pc'=n2R3ra); +[] n2R3os=0 & n2R3pc=-4 -> (n2R3op0'=n2R3opt)&(n2R3ov3dst0'=n2R3iv3dst0)&(n2R3os'=1)&(n2R3pc'=-3); +[] n2R3os=1 & n2R3pc=-4 -> (n2R3op1'=n2R3opt)&(n2R3ov3dst1'=n2R3iv3dst0)&(n2R3os'=2)&(n2R3pc'=-3); +[] n2R3os=2 & n2R3pc=-4 -> (n2R3pc'=-3); +[n2S1f5] n2R3is=0 -> (n2R3ip0'=1)&(n2R3iv3dst0'=n2S1ov3dst0)&(n2R3is'=1); +[n2S1f5] n2R3is=1 -> (n2R3ip1'=1)&(n2R3iv3dst1'=n2S1ov3dst0)&(n2R3is'=2); +[n2S1f5] n2R3is=2 -> true; +[] unlk=21 & numSteps0 -> (n2R3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=21 & numSteps (unlk'=22)&(numSkips'=numSkips+1); +[n2R3f1] n2R3pc=-5 & n2R3os>0 & n2R3op0=1 -> (n2R3op0'=n2R3op1)&(n2R3ov3dst0'=n2R3ov3dst1)&(n2R3os'=n2R3os-1)&(n2R3pc'=-6); +[] numSteps (n2R3pc'=0)&(unlk'=22)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2R3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2R3pc=1 & (n2R3v5recvd+1)>=INTMIN & (n2R3v5recvd+1)<=INTMAX -> (n2R3v5recvd'=(n2R3v5recvd+1))&(n2R3pc'=2); +[] n2R3pc=2 -> (n2R3pc'=-3)&(n2R3ra'=3); +[] numSteps (n2R3pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..6] init 1;n2S1iv3dst0:[INTMIN..INTMAX] init 0; +n2S1ip1:[1..6] init 1;n2S1iv3dst1:[INTMIN..INTMAX] init 0; +n2S1is:[0..2] init 0; +n2S1op0:[1..6] init 1;n2S1ov3dst0:[INTMIN..INTMAX] init 0; +n2S1op1:[1..6] init 1;n2S1ov3dst1:[INTMIN..INTMAX] init 0; +n2S1os:[0..2] init 0; +n2S1opt:[1..6] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1iv3dst0'=0)&(n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1iv3dst0'=n2S1iv3dst1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1ov3dst0'=n2S1iv3dst0)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1ov3dst1'=n2S1iv3dst0)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2R4f1] n2S1is=0 -> (n2S1ip0'=6)&(n2S1iv3dst0'=n2R4ov3dst0)&(n2S1is'=1); +[n2R4f1] n2S1is=1 -> (n2S1ip1'=6)&(n2S1iv3dst1'=n2R4ov3dst0)&(n2S1is'=2); +[n2R4f1] n2S1is=2 -> true; +[n2R3f1] n2S1is=0 -> (n2S1ip0'=5)&(n2S1iv3dst0'=n2R3ov3dst0)&(n2S1is'=1); +[n2R3f1] n2S1is=1 -> (n2S1ip1'=5)&(n2S1iv3dst1'=n2R3ov3dst0)&(n2S1is'=2); +[n2R3f1] n2S1is=2 -> true; +[n2R2f1] n2S1is=0 -> (n2S1ip0'=4)&(n2S1iv3dst0'=n2R2ov3dst0)&(n2S1is'=1); +[n2R2f1] n2S1is=1 -> (n2S1ip1'=4)&(n2S1iv3dst1'=n2R2ov3dst0)&(n2S1is'=2); +[n2R2f1] n2S1is=2 -> true; +[n2R1f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1iv3dst0'=n2R1ov3dst0)&(n2S1is'=1); +[n2R1f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1iv3dst1'=n2R1ov3dst0)&(n2S1is'=2); +[n2R1f1] n2S1is=2 -> true; +[n2R0f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1iv3dst0'=n2R0ov3dst0)&(n2S1is'=1); +[n2R0f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1iv3dst1'=n2R0ov3dst0)&(n2S1is'=2); +[n2R0f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1iv3dst0'=n2S0ov3dst0)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1iv3dst1'=n2S0ov3dst0)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=16 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[n2S1f6] n2S1pc=-5 & n2S1os>0 & n2S1op0=6 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f5] n2S1pc=-5 & n2S1os>0 & n2S1op0=5 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f4] n2S1pc=-5 & n2S1os>0 & n2S1op0=4 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=(n2S1iv3dst0+2))&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2R7 +n2R7v5recvd:[INTMIN..INTMAX] init 0; +n2R7ip0:[1..2] init 1;n2R7iv3dst0:[INTMIN..INTMAX] init 0; +n2R7ip1:[1..2] init 1;n2R7iv3dst1:[INTMIN..INTMAX] init 0; +n2R7is:[0..2] init 0; +n2R7op0:[1..2] init 1;n2R7ov3dst0:[INTMIN..INTMAX] init 0; +n2R7op1:[1..2] init 1;n2R7ov3dst1:[INTMIN..INTMAX] init 0; +n2R7os:[0..2] init 0; +n2R7opt:[1..2] init 1; +n2R7pc:[-6..3] init 0; n2R7ra:[-6..3] init 0; +[] n2R7is<2 & n2R7pc=-1 -> (n2R7ip0'=1)&(n2R7iv3dst0'=0)&(n2R7ip1'=n2R7ip0)&(n2R7iv3dst1'=n2R7iv3dst0)&(n2R7is'=n2R7is+1)&(n2R7pc'=n2R7ra); +[] n2R7is=2 & n2R7pc=-1 -> (n2R7pc'=n2R7ra); +[] n2R7is=0 & n2R7pc=-2 -> (n2R7pc'=n2R7ra); +[] n2R7is>0 & n2R7is<2 & n2R7pc=-2 -> (n2R7ip1'=n2R7ip0)&(n2R7iv3dst1'=n2R7iv3dst0)&(n2R7is'=n2R7is+1)&(n2R7pc'=n2R7ra); +[] n2R7is=2 & n2R7pc=-2 -> (n2R7pc'=n2R7ra); +[] n2R7is=0 & n2R7pc=-3 -> (n2R7pc'=n2R7ra); +[] n2R7is>0 & n2R7pc=-3 -> (n2R7ip0'=n2R7ip1)&(n2R7iv3dst0'=n2R7iv3dst1)&(n2R7is'=n2R7is-1)&(n2R7pc'=n2R7ra); +[] n2R7os=0 & n2R7pc=-4 -> (n2R7op0'=n2R7opt)&(n2R7ov3dst0'=n2R7iv3dst0)&(n2R7os'=1)&(n2R7pc'=-3); +[] n2R7os=1 & n2R7pc=-4 -> (n2R7op1'=n2R7opt)&(n2R7ov3dst1'=n2R7iv3dst0)&(n2R7os'=2)&(n2R7pc'=-3); +[] n2R7os=2 & n2R7pc=-4 -> (n2R7pc'=-3); +[n2S2f4] n2R7is=0 -> (n2R7ip0'=1)&(n2R7iv3dst0'=n2S2ov3dst0)&(n2R7is'=1); +[n2S2f4] n2R7is=1 -> (n2R7ip1'=1)&(n2R7iv3dst1'=n2S2ov3dst0)&(n2R7is'=2); +[n2S2f4] n2R7is=2 -> true; +[] unlk=25 & numSteps0 -> (n2R7pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=25 & numSteps (unlk'=26)&(numSkips'=numSkips+1); +[n2R7f1] n2R7pc=-5 & n2R7os>0 & n2R7op0=1 -> (n2R7op0'=n2R7op1)&(n2R7ov3dst0'=n2R7ov3dst1)&(n2R7os'=n2R7os-1)&(n2R7pc'=-6); +[] numSteps (n2R7pc'=0)&(unlk'=26)&(numSteps'=numSteps+1); +[] unlk=11 & numSteps0 -> (n2R7pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[] n2R7pc=1 & (n2R7v5recvd+1)>=INTMIN & (n2R7v5recvd+1)<=INTMAX -> (n2R7v5recvd'=(n2R7v5recvd+1))&(n2R7pc'=2); +[] n2R7pc=2 -> (n2R7pc'=-3)&(n2R7ra'=3); +[] numSteps (n2R7pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +endmodule +module n2R8 +n2R8v5recvd:[INTMIN..INTMAX] init 0; +n2R8ip0:[1..2] init 1;n2R8iv3dst0:[INTMIN..INTMAX] init 0; +n2R8ip1:[1..2] init 1;n2R8iv3dst1:[INTMIN..INTMAX] init 0; +n2R8is:[0..2] init 0; +n2R8op0:[1..2] init 1;n2R8ov3dst0:[INTMIN..INTMAX] init 0; +n2R8op1:[1..2] init 1;n2R8ov3dst1:[INTMIN..INTMAX] init 0; +n2R8os:[0..2] init 0; +n2R8opt:[1..2] init 1; +n2R8pc:[-6..3] init 0; n2R8ra:[-6..3] init 0; +[] n2R8is<2 & n2R8pc=-1 -> (n2R8ip0'=1)&(n2R8iv3dst0'=0)&(n2R8ip1'=n2R8ip0)&(n2R8iv3dst1'=n2R8iv3dst0)&(n2R8is'=n2R8is+1)&(n2R8pc'=n2R8ra); +[] n2R8is=2 & n2R8pc=-1 -> (n2R8pc'=n2R8ra); +[] n2R8is=0 & n2R8pc=-2 -> (n2R8pc'=n2R8ra); +[] n2R8is>0 & n2R8is<2 & n2R8pc=-2 -> (n2R8ip1'=n2R8ip0)&(n2R8iv3dst1'=n2R8iv3dst0)&(n2R8is'=n2R8is+1)&(n2R8pc'=n2R8ra); +[] n2R8is=2 & n2R8pc=-2 -> (n2R8pc'=n2R8ra); +[] n2R8is=0 & n2R8pc=-3 -> (n2R8pc'=n2R8ra); +[] n2R8is>0 & n2R8pc=-3 -> (n2R8ip0'=n2R8ip1)&(n2R8iv3dst0'=n2R8iv3dst1)&(n2R8is'=n2R8is-1)&(n2R8pc'=n2R8ra); +[] n2R8os=0 & n2R8pc=-4 -> (n2R8op0'=n2R8opt)&(n2R8ov3dst0'=n2R8iv3dst0)&(n2R8os'=1)&(n2R8pc'=-3); +[] n2R8os=1 & n2R8pc=-4 -> (n2R8op1'=n2R8opt)&(n2R8ov3dst1'=n2R8iv3dst0)&(n2R8os'=2)&(n2R8pc'=-3); +[] n2R8os=2 & n2R8pc=-4 -> (n2R8pc'=-3); +[n2S2f5] n2R8is=0 -> (n2R8ip0'=1)&(n2R8iv3dst0'=n2S2ov3dst0)&(n2R8is'=1); +[n2S2f5] n2R8is=1 -> (n2R8ip1'=1)&(n2R8iv3dst1'=n2S2ov3dst0)&(n2R8is'=2); +[n2S2f5] n2R8is=2 -> true; +[] unlk=26 & numSteps0 -> (n2R8pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=26 & numSteps (unlk'=27)&(numSkips'=numSkips+1); +[n2R8f1] n2R8pc=-5 & n2R8os>0 & n2R8op0=1 -> (n2R8op0'=n2R8op1)&(n2R8ov3dst0'=n2R8ov3dst1)&(n2R8os'=n2R8os-1)&(n2R8pc'=-6); +[] numSteps (n2R8pc'=0)&(unlk'=27)&(numSteps'=numSteps+1); +[] unlk=12 & numSteps0 -> (n2R8pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[] n2R8pc=1 & (n2R8v5recvd+1)>=INTMIN & (n2R8v5recvd+1)<=INTMAX -> (n2R8v5recvd'=(n2R8v5recvd+1))&(n2R8pc'=2); +[] n2R8pc=2 -> (n2R8pc'=-3)&(n2R8ra'=3); +[] numSteps (n2R8pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..6] init 1;n2S2iv3dst0:[INTMIN..INTMAX] init 0; +n2S2ip1:[1..6] init 1;n2S2iv3dst1:[INTMIN..INTMAX] init 0; +n2S2is:[0..2] init 0; +n2S2op0:[1..6] init 1;n2S2ov3dst0:[INTMIN..INTMAX] init 0; +n2S2op1:[1..6] init 1;n2S2ov3dst1:[INTMIN..INTMAX] init 0; +n2S2os:[0..2] init 0; +n2S2opt:[1..6] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2iv3dst0'=0)&(n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2iv3dst0'=n2S2iv3dst1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2ov3dst0'=n2S2iv3dst0)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2ov3dst1'=n2S2iv3dst0)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2R9f1] n2S2is=0 -> (n2S2ip0'=6)&(n2S2iv3dst0'=n2R9ov3dst0)&(n2S2is'=1); +[n2R9f1] n2S2is=1 -> (n2S2ip1'=6)&(n2S2iv3dst1'=n2R9ov3dst0)&(n2S2is'=2); +[n2R9f1] n2S2is=2 -> true; +[n2R8f1] n2S2is=0 -> (n2S2ip0'=5)&(n2S2iv3dst0'=n2R8ov3dst0)&(n2S2is'=1); +[n2R8f1] n2S2is=1 -> (n2S2ip1'=5)&(n2S2iv3dst1'=n2R8ov3dst0)&(n2S2is'=2); +[n2R8f1] n2S2is=2 -> true; +[n2R7f1] n2S2is=0 -> (n2S2ip0'=4)&(n2S2iv3dst0'=n2R7ov3dst0)&(n2S2is'=1); +[n2R7f1] n2S2is=1 -> (n2S2ip1'=4)&(n2S2iv3dst1'=n2R7ov3dst0)&(n2S2is'=2); +[n2R7f1] n2S2is=2 -> true; +[n2R6f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2iv3dst0'=n2R6ov3dst0)&(n2S2is'=1); +[n2R6f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2iv3dst1'=n2R6ov3dst0)&(n2S2is'=2); +[n2R6f1] n2S2is=2 -> true; +[n2R5f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2iv3dst0'=n2R5ov3dst0)&(n2S2is'=1); +[n2R5f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2iv3dst1'=n2R5ov3dst0)&(n2S2is'=2); +[n2R5f1] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2iv3dst0'=n2S0ov3dst0)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2iv3dst1'=n2S0ov3dst0)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk=17 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=18)&(numSkips'=numSkips+1); +[n2S2f6] n2S2pc=-5 & n2S2os>0 & n2S2op0=6 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f5] n2S2pc=-5 & n2S2os>0 & n2S2op0=5 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f4] n2S2pc=-5 & n2S2os>0 & n2S2op0=4 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=18)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> (n2S2opt'=((n2S2iv3dst0+2)-v7SUBSIZE))&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2R6 +n2R6v5recvd:[INTMIN..INTMAX] init 0; +n2R6ip0:[1..2] init 1;n2R6iv3dst0:[INTMIN..INTMAX] init 0; +n2R6ip1:[1..2] init 1;n2R6iv3dst1:[INTMIN..INTMAX] init 0; +n2R6is:[0..2] init 0; +n2R6op0:[1..2] init 1;n2R6ov3dst0:[INTMIN..INTMAX] init 0; +n2R6op1:[1..2] init 1;n2R6ov3dst1:[INTMIN..INTMAX] init 0; +n2R6os:[0..2] init 0; +n2R6opt:[1..2] init 1; +n2R6pc:[-6..3] init 0; n2R6ra:[-6..3] init 0; +[] n2R6is<2 & n2R6pc=-1 -> (n2R6ip0'=1)&(n2R6iv3dst0'=0)&(n2R6ip1'=n2R6ip0)&(n2R6iv3dst1'=n2R6iv3dst0)&(n2R6is'=n2R6is+1)&(n2R6pc'=n2R6ra); +[] n2R6is=2 & n2R6pc=-1 -> (n2R6pc'=n2R6ra); +[] n2R6is=0 & n2R6pc=-2 -> (n2R6pc'=n2R6ra); +[] n2R6is>0 & n2R6is<2 & n2R6pc=-2 -> (n2R6ip1'=n2R6ip0)&(n2R6iv3dst1'=n2R6iv3dst0)&(n2R6is'=n2R6is+1)&(n2R6pc'=n2R6ra); +[] n2R6is=2 & n2R6pc=-2 -> (n2R6pc'=n2R6ra); +[] n2R6is=0 & n2R6pc=-3 -> (n2R6pc'=n2R6ra); +[] n2R6is>0 & n2R6pc=-3 -> (n2R6ip0'=n2R6ip1)&(n2R6iv3dst0'=n2R6iv3dst1)&(n2R6is'=n2R6is-1)&(n2R6pc'=n2R6ra); +[] n2R6os=0 & n2R6pc=-4 -> (n2R6op0'=n2R6opt)&(n2R6ov3dst0'=n2R6iv3dst0)&(n2R6os'=1)&(n2R6pc'=-3); +[] n2R6os=1 & n2R6pc=-4 -> (n2R6op1'=n2R6opt)&(n2R6ov3dst1'=n2R6iv3dst0)&(n2R6os'=2)&(n2R6pc'=-3); +[] n2R6os=2 & n2R6pc=-4 -> (n2R6pc'=-3); +[n2S2f3] n2R6is=0 -> (n2R6ip0'=1)&(n2R6iv3dst0'=n2S2ov3dst0)&(n2R6is'=1); +[n2S2f3] n2R6is=1 -> (n2R6ip1'=1)&(n2R6iv3dst1'=n2S2ov3dst0)&(n2R6is'=2); +[n2S2f3] n2R6is=2 -> true; +[] unlk=24 & numSteps0 -> (n2R6pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=24 & numSteps (unlk'=25)&(numSkips'=numSkips+1); +[n2R6f1] n2R6pc=-5 & n2R6os>0 & n2R6op0=1 -> (n2R6op0'=n2R6op1)&(n2R6ov3dst0'=n2R6ov3dst1)&(n2R6os'=n2R6os-1)&(n2R6pc'=-6); +[] numSteps (n2R6pc'=0)&(unlk'=25)&(numSteps'=numSteps+1); +[] unlk=10 & numSteps0 -> (n2R6pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[] n2R6pc=1 & (n2R6v5recvd+1)>=INTMIN & (n2R6v5recvd+1)<=INTMAX -> (n2R6v5recvd'=(n2R6v5recvd+1))&(n2R6pc'=2); +[] n2R6pc=2 -> (n2R6pc'=-3)&(n2R6ra'=3); +[] numSteps (n2R6pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0ip0:[1..3] init 1;n2S0iv3dst0:[INTMIN..INTMAX] init 0; +n2S0ip1:[1..3] init 1;n2S0iv3dst1:[INTMIN..INTMAX] init 0; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1;n2S0ov3dst0:[INTMIN..INTMAX] init 0; +n2S0op1:[1..3] init 1;n2S0ov3dst1:[INTMIN..INTMAX] init 0; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..5] init 0; n2S0ra:[-6..5] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0iv3dst0'=0)&(n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0iv3dst0'=n2S0iv3dst1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0ov3dst0'=n2S0iv3dst0)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0ov3dst1'=n2S0iv3dst0)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0iv3dst0'=n2S2ov3dst0)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0iv3dst1'=n2S2ov3dst0)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0iv3dst0'=n2S1ov3dst0)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0iv3dst1'=n2S1ov3dst0)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n6Senderf1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0iv3dst0'=n6Senderov3dst0)&(n2S0is'=1); +[n6Senderf1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0iv3dst1'=n6Senderov3dst0)&(n2S0is'=2); +[n6Senderf1] n2S0is=2 -> true; +[] unlk=15 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2S0pc=1 & (n2S0iv3dst0 (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0iv3dst0 (n2S0pc'=4); +[] n2S0pc=2 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=3); +[] n2S0pc=3 -> (n2S0pc'=5); +[] n2S0pc=4 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=5); +[] numSteps (n2S0pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2R4 +n2R4v5recvd:[INTMIN..INTMAX] init 0; +n2R4ip0:[1..2] init 1;n2R4iv3dst0:[INTMIN..INTMAX] init 0; +n2R4ip1:[1..2] init 1;n2R4iv3dst1:[INTMIN..INTMAX] init 0; +n2R4is:[0..2] init 0; +n2R4op0:[1..2] init 1;n2R4ov3dst0:[INTMIN..INTMAX] init 0; +n2R4op1:[1..2] init 1;n2R4ov3dst1:[INTMIN..INTMAX] init 0; +n2R4os:[0..2] init 0; +n2R4opt:[1..2] init 1; +n2R4pc:[-6..3] init 0; n2R4ra:[-6..3] init 0; +[] n2R4is<2 & n2R4pc=-1 -> (n2R4ip0'=1)&(n2R4iv3dst0'=0)&(n2R4ip1'=n2R4ip0)&(n2R4iv3dst1'=n2R4iv3dst0)&(n2R4is'=n2R4is+1)&(n2R4pc'=n2R4ra); +[] n2R4is=2 & n2R4pc=-1 -> (n2R4pc'=n2R4ra); +[] n2R4is=0 & n2R4pc=-2 -> (n2R4pc'=n2R4ra); +[] n2R4is>0 & n2R4is<2 & n2R4pc=-2 -> (n2R4ip1'=n2R4ip0)&(n2R4iv3dst1'=n2R4iv3dst0)&(n2R4is'=n2R4is+1)&(n2R4pc'=n2R4ra); +[] n2R4is=2 & n2R4pc=-2 -> (n2R4pc'=n2R4ra); +[] n2R4is=0 & n2R4pc=-3 -> (n2R4pc'=n2R4ra); +[] n2R4is>0 & n2R4pc=-3 -> (n2R4ip0'=n2R4ip1)&(n2R4iv3dst0'=n2R4iv3dst1)&(n2R4is'=n2R4is-1)&(n2R4pc'=n2R4ra); +[] n2R4os=0 & n2R4pc=-4 -> (n2R4op0'=n2R4opt)&(n2R4ov3dst0'=n2R4iv3dst0)&(n2R4os'=1)&(n2R4pc'=-3); +[] n2R4os=1 & n2R4pc=-4 -> (n2R4op1'=n2R4opt)&(n2R4ov3dst1'=n2R4iv3dst0)&(n2R4os'=2)&(n2R4pc'=-3); +[] n2R4os=2 & n2R4pc=-4 -> (n2R4pc'=-3); +[n2S1f6] n2R4is=0 -> (n2R4ip0'=1)&(n2R4iv3dst0'=n2S1ov3dst0)&(n2R4is'=1); +[n2S1f6] n2R4is=1 -> (n2R4ip1'=1)&(n2R4iv3dst1'=n2S1ov3dst0)&(n2R4is'=2); +[n2S1f6] n2R4is=2 -> true; +[] unlk=22 & numSteps0 -> (n2R4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=22 & numSteps (unlk'=23)&(numSkips'=numSkips+1); +[n2R4f1] n2R4pc=-5 & n2R4os>0 & n2R4op0=1 -> (n2R4op0'=n2R4op1)&(n2R4ov3dst0'=n2R4ov3dst1)&(n2R4os'=n2R4os-1)&(n2R4pc'=-6); +[] numSteps (n2R4pc'=0)&(unlk'=23)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2R4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2R4pc=1 & (n2R4v5recvd+1)>=INTMIN & (n2R4v5recvd+1)<=INTMAX -> (n2R4v5recvd'=(n2R4v5recvd+1))&(n2R4pc'=2); +[] n2R4pc=2 -> (n2R4pc'=-3)&(n2R4ra'=3); +[] numSteps (n2R4pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n2R1 +n2R1v5recvd:[INTMIN..INTMAX] init 0; +n2R1ip0:[1..2] init 1;n2R1iv3dst0:[INTMIN..INTMAX] init 0; +n2R1ip1:[1..2] init 1;n2R1iv3dst1:[INTMIN..INTMAX] init 0; +n2R1is:[0..2] init 0; +n2R1op0:[1..2] init 1;n2R1ov3dst0:[INTMIN..INTMAX] init 0; +n2R1op1:[1..2] init 1;n2R1ov3dst1:[INTMIN..INTMAX] init 0; +n2R1os:[0..2] init 0; +n2R1opt:[1..2] init 1; +n2R1pc:[-6..3] init 0; n2R1ra:[-6..3] init 0; +[] n2R1is<2 & n2R1pc=-1 -> (n2R1ip0'=1)&(n2R1iv3dst0'=0)&(n2R1ip1'=n2R1ip0)&(n2R1iv3dst1'=n2R1iv3dst0)&(n2R1is'=n2R1is+1)&(n2R1pc'=n2R1ra); +[] n2R1is=2 & n2R1pc=-1 -> (n2R1pc'=n2R1ra); +[] n2R1is=0 & n2R1pc=-2 -> (n2R1pc'=n2R1ra); +[] n2R1is>0 & n2R1is<2 & n2R1pc=-2 -> (n2R1ip1'=n2R1ip0)&(n2R1iv3dst1'=n2R1iv3dst0)&(n2R1is'=n2R1is+1)&(n2R1pc'=n2R1ra); +[] n2R1is=2 & n2R1pc=-2 -> (n2R1pc'=n2R1ra); +[] n2R1is=0 & n2R1pc=-3 -> (n2R1pc'=n2R1ra); +[] n2R1is>0 & n2R1pc=-3 -> (n2R1ip0'=n2R1ip1)&(n2R1iv3dst0'=n2R1iv3dst1)&(n2R1is'=n2R1is-1)&(n2R1pc'=n2R1ra); +[] n2R1os=0 & n2R1pc=-4 -> (n2R1op0'=n2R1opt)&(n2R1ov3dst0'=n2R1iv3dst0)&(n2R1os'=1)&(n2R1pc'=-3); +[] n2R1os=1 & n2R1pc=-4 -> (n2R1op1'=n2R1opt)&(n2R1ov3dst1'=n2R1iv3dst0)&(n2R1os'=2)&(n2R1pc'=-3); +[] n2R1os=2 & n2R1pc=-4 -> (n2R1pc'=-3); +[n2S1f3] n2R1is=0 -> (n2R1ip0'=1)&(n2R1iv3dst0'=n2S1ov3dst0)&(n2R1is'=1); +[n2S1f3] n2R1is=1 -> (n2R1ip1'=1)&(n2R1iv3dst1'=n2S1ov3dst0)&(n2R1is'=2); +[n2S1f3] n2R1is=2 -> true; +[] unlk=19 & numSteps0 -> (n2R1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=19 & numSteps (unlk'=20)&(numSkips'=numSkips+1); +[n2R1f1] n2R1pc=-5 & n2R1os>0 & n2R1op0=1 -> (n2R1op0'=n2R1op1)&(n2R1ov3dst0'=n2R1ov3dst1)&(n2R1os'=n2R1os-1)&(n2R1pc'=-6); +[] numSteps (n2R1pc'=0)&(unlk'=20)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2R1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2R1pc=1 & (n2R1v5recvd+1)>=INTMIN & (n2R1v5recvd+1)<=INTMAX -> (n2R1v5recvd'=(n2R1v5recvd+1))&(n2R1pc'=2); +[] n2R1pc=2 -> (n2R1pc'=-3)&(n2R1ra'=3); +[] numSteps (n2R1pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2R0 +n2R0v5recvd:[INTMIN..INTMAX] init 0; +n2R0ip0:[1..2] init 1;n2R0iv3dst0:[INTMIN..INTMAX] init 0; +n2R0ip1:[1..2] init 1;n2R0iv3dst1:[INTMIN..INTMAX] init 0; +n2R0is:[0..2] init 0; +n2R0op0:[1..2] init 1;n2R0ov3dst0:[INTMIN..INTMAX] init 0; +n2R0op1:[1..2] init 1;n2R0ov3dst1:[INTMIN..INTMAX] init 0; +n2R0os:[0..2] init 0; +n2R0opt:[1..2] init 1; +n2R0pc:[-6..3] init 0; n2R0ra:[-6..3] init 0; +[] n2R0is<2 & n2R0pc=-1 -> (n2R0ip0'=1)&(n2R0iv3dst0'=0)&(n2R0ip1'=n2R0ip0)&(n2R0iv3dst1'=n2R0iv3dst0)&(n2R0is'=n2R0is+1)&(n2R0pc'=n2R0ra); +[] n2R0is=2 & n2R0pc=-1 -> (n2R0pc'=n2R0ra); +[] n2R0is=0 & n2R0pc=-2 -> (n2R0pc'=n2R0ra); +[] n2R0is>0 & n2R0is<2 & n2R0pc=-2 -> (n2R0ip1'=n2R0ip0)&(n2R0iv3dst1'=n2R0iv3dst0)&(n2R0is'=n2R0is+1)&(n2R0pc'=n2R0ra); +[] n2R0is=2 & n2R0pc=-2 -> (n2R0pc'=n2R0ra); +[] n2R0is=0 & n2R0pc=-3 -> (n2R0pc'=n2R0ra); +[] n2R0is>0 & n2R0pc=-3 -> (n2R0ip0'=n2R0ip1)&(n2R0iv3dst0'=n2R0iv3dst1)&(n2R0is'=n2R0is-1)&(n2R0pc'=n2R0ra); +[] n2R0os=0 & n2R0pc=-4 -> (n2R0op0'=n2R0opt)&(n2R0ov3dst0'=n2R0iv3dst0)&(n2R0os'=1)&(n2R0pc'=-3); +[] n2R0os=1 & n2R0pc=-4 -> (n2R0op1'=n2R0opt)&(n2R0ov3dst1'=n2R0iv3dst0)&(n2R0os'=2)&(n2R0pc'=-3); +[] n2R0os=2 & n2R0pc=-4 -> (n2R0pc'=-3); +[n2S1f2] n2R0is=0 -> (n2R0ip0'=1)&(n2R0iv3dst0'=n2S1ov3dst0)&(n2R0is'=1); +[n2S1f2] n2R0is=1 -> (n2R0ip1'=1)&(n2R0iv3dst1'=n2S1ov3dst0)&(n2R0is'=2); +[n2S1f2] n2R0is=2 -> true; +[] unlk=18 & numSteps0 -> (n2R0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=18 & numSteps (unlk'=19)&(numSkips'=numSkips+1); +[n2R0f1] n2R0pc=-5 & n2R0os>0 & n2R0op0=1 -> (n2R0op0'=n2R0op1)&(n2R0ov3dst0'=n2R0ov3dst1)&(n2R0os'=n2R0os-1)&(n2R0pc'=-6); +[] numSteps (n2R0pc'=0)&(unlk'=19)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2R0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2R0pc=1 & (n2R0v5recvd+1)>=INTMIN & (n2R0v5recvd+1)<=INTMAX -> (n2R0v5recvd'=(n2R0v5recvd+1))&(n2R0pc'=2); +[] n2R0pc=2 -> (n2R0pc'=-3)&(n2R0ra'=3); +[] numSteps (n2R0pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2R5 +n2R5v5recvd:[INTMIN..INTMAX] init 0; +n2R5ip0:[1..2] init 1;n2R5iv3dst0:[INTMIN..INTMAX] init 0; +n2R5ip1:[1..2] init 1;n2R5iv3dst1:[INTMIN..INTMAX] init 0; +n2R5is:[0..2] init 0; +n2R5op0:[1..2] init 1;n2R5ov3dst0:[INTMIN..INTMAX] init 0; +n2R5op1:[1..2] init 1;n2R5ov3dst1:[INTMIN..INTMAX] init 0; +n2R5os:[0..2] init 0; +n2R5opt:[1..2] init 1; +n2R5pc:[-6..3] init 0; n2R5ra:[-6..3] init 0; +[] n2R5is<2 & n2R5pc=-1 -> (n2R5ip0'=1)&(n2R5iv3dst0'=0)&(n2R5ip1'=n2R5ip0)&(n2R5iv3dst1'=n2R5iv3dst0)&(n2R5is'=n2R5is+1)&(n2R5pc'=n2R5ra); +[] n2R5is=2 & n2R5pc=-1 -> (n2R5pc'=n2R5ra); +[] n2R5is=0 & n2R5pc=-2 -> (n2R5pc'=n2R5ra); +[] n2R5is>0 & n2R5is<2 & n2R5pc=-2 -> (n2R5ip1'=n2R5ip0)&(n2R5iv3dst1'=n2R5iv3dst0)&(n2R5is'=n2R5is+1)&(n2R5pc'=n2R5ra); +[] n2R5is=2 & n2R5pc=-2 -> (n2R5pc'=n2R5ra); +[] n2R5is=0 & n2R5pc=-3 -> (n2R5pc'=n2R5ra); +[] n2R5is>0 & n2R5pc=-3 -> (n2R5ip0'=n2R5ip1)&(n2R5iv3dst0'=n2R5iv3dst1)&(n2R5is'=n2R5is-1)&(n2R5pc'=n2R5ra); +[] n2R5os=0 & n2R5pc=-4 -> (n2R5op0'=n2R5opt)&(n2R5ov3dst0'=n2R5iv3dst0)&(n2R5os'=1)&(n2R5pc'=-3); +[] n2R5os=1 & n2R5pc=-4 -> (n2R5op1'=n2R5opt)&(n2R5ov3dst1'=n2R5iv3dst0)&(n2R5os'=2)&(n2R5pc'=-3); +[] n2R5os=2 & n2R5pc=-4 -> (n2R5pc'=-3); +[n2S2f2] n2R5is=0 -> (n2R5ip0'=1)&(n2R5iv3dst0'=n2S2ov3dst0)&(n2R5is'=1); +[n2S2f2] n2R5is=1 -> (n2R5ip1'=1)&(n2R5iv3dst1'=n2S2ov3dst0)&(n2R5is'=2); +[n2S2f2] n2R5is=2 -> true; +[] unlk=23 & numSteps0 -> (n2R5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=23 & numSteps (unlk'=24)&(numSkips'=numSkips+1); +[n2R5f1] n2R5pc=-5 & n2R5os>0 & n2R5op0=1 -> (n2R5op0'=n2R5op1)&(n2R5ov3dst0'=n2R5ov3dst1)&(n2R5os'=n2R5os-1)&(n2R5pc'=-6); +[] numSteps (n2R5pc'=0)&(unlk'=24)&(numSteps'=numSteps+1); +[] unlk=9 & numSteps0 -> (n2R5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[] n2R5pc=1 & (n2R5v5recvd+1)>=INTMIN & (n2R5v5recvd+1)<=INTMAX -> (n2R5v5recvd'=(n2R5v5recvd+1))&(n2R5pc'=2); +[] n2R5pc=2 -> (n2R5pc'=-3)&(n2R5ra'=3); +[] numSteps (n2R5pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n6Senderis=0 & n6Senderos=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2R0is=0 & n2R0os=0 & n2R1is=0 & n2R1os=0 & n2R2is=0 & n2R2os=0 & n2R3is=0 & n2R3os=0 & n2R4is=0 & n2R4os=0 & n2R5is=0 & n2R5os=0 & n2R6is=0 & n2R6os=0 & n2R7is=0 & n2R7os=0 & n2R8is=0 & n2R8os=0 & n2R9is=0 & n2R9os=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & ((((((((((n2R0v5recvd+n2R1v5recvd)+n2R2v5recvd)+n2R3v5recvd)+n2R4v5recvd)+n2R5v5recvd)+n2R6v5recvd)+n2R7v5recvd)+n2R8v5recvd)+n2R9v5recvd)=2) ] / P=? [ F finished & obsrvOK ] diff --git a/subnets/subnets-6.bayonet b/subnets/subnets-6.bayonet new file mode 100644 index 0000000..2526726 --- /dev/null +++ b/subnets/subnets-6.bayonet @@ -0,0 +1,75 @@ +num_steps 20; + +parameters{ SUBSIZE(6) } + +query probability(recvd@R0+recvd@R1+recvd@R2+recvd@R3+recvd@R4+recvd@R5+recvd@R6+recvd@R7+recvd@R8+recvd@R9+recvd@RA+recvd@RB == 2); + +topology{ + nodes{ Sender, S0, S1, S2, R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, RA, RB } + links{ + (Sender,pt1) <-> (S0,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (R0,pt1), + (S1,pt3) <-> (R1,pt1), + (S1,pt4) <-> (R2,pt1), + (S1,pt5) <-> (R3,pt1), + (S1,pt6) <-> (R4,pt1), + (S1,pt7) <-> (R5,pt1), + (S2,pt2) <-> (R6,pt1), + (S2,pt3) <-> (R7,pt1), + (S2,pt4) <-> (R8,pt1), + (S2,pt5) <-> (R9,pt1), + (S2,pt6) <-> (RA,pt1), + (S2,pt7) <-> (RB,pt1) + } +} +queue_capacity 2; + +packet_fields{ dst } + +programs{ Sender -> send, S0 -> s0, S1 -> s1, S2 -> s2, R0 -> recv, R1 -> recv, R2 -> recv, R3 -> recv, R4 -> recv, R5 -> recv, R6 -> recv, R7 -> recv, R8 -> recv, R9 -> recv, RA -> recv, RB -> recv } + +def send(pkt, port) state sent(0) { + if sent < 2 { + pkt.dst = uniformInt(0,11); + fwd(1); + new; + } else { + drop; + } +} + +def recv(pkt, port) state recvd(0) { + recvd = recvd + 1; + drop; +} + +def s0(pkt, port) { + if pkt.dst < SUBSIZE { + fwd(2); + } else { + fwd(3); + } +} + +def s1(pkt, port) { + fwd(pkt.dst+2); +} + +def s2(pkt, port) { + fwd(pkt.dst+2-SUBSIZE); +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/subnets/subnets-6.prism b/subnets/subnets-6.prism new file mode 100644 index 0000000..d012151 --- /dev/null +++ b/subnets/subnets-6.prism @@ -0,0 +1,607 @@ +dtmc +global unlk:[-1..31] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 32; +global numSkips:[0..32] init 0; +const int v7SUBSIZE = 6; +module n6Sender +n6Senderv4sent:[INTMIN..INTMAX] init 0; +n6Sendert0:[0..11]; +n6Senderip0:[1..2] init 1;n6Senderiv3dst0:[INTMIN..INTMAX] init 0; +n6Senderip1:[1..2] init 1;n6Senderiv3dst1:[INTMIN..INTMAX] init 0; +n6Senderis:[0..2] init 1; +n6Senderop0:[1..2] init 1;n6Senderov3dst0:[INTMIN..INTMAX] init 0; +n6Senderop1:[1..2] init 1;n6Senderov3dst1:[INTMIN..INTMAX] init 0; +n6Senderos:[0..2] init 0; +n6Senderopt:[1..2] init 1; +n6Senderpc:[-6..8] init 0; n6Senderra:[-6..8] init 0; +[] n6Senderis<2 & n6Senderpc=-1 -> (n6Senderip0'=1)&(n6Senderiv3dst0'=0)&(n6Senderip1'=n6Senderip0)&(n6Senderiv3dst1'=n6Senderiv3dst0)&(n6Senderis'=n6Senderis+1)&(n6Senderpc'=n6Senderra); +[] n6Senderis=2 & n6Senderpc=-1 -> (n6Senderpc'=n6Senderra); +[] n6Senderis=0 & n6Senderpc=-2 -> (n6Senderpc'=n6Senderra); +[] n6Senderis>0 & n6Senderis<2 & n6Senderpc=-2 -> (n6Senderip1'=n6Senderip0)&(n6Senderiv3dst1'=n6Senderiv3dst0)&(n6Senderis'=n6Senderis+1)&(n6Senderpc'=n6Senderra); +[] n6Senderis=2 & n6Senderpc=-2 -> (n6Senderpc'=n6Senderra); +[] n6Senderis=0 & n6Senderpc=-3 -> (n6Senderpc'=n6Senderra); +[] n6Senderis>0 & n6Senderpc=-3 -> (n6Senderip0'=n6Senderip1)&(n6Senderiv3dst0'=n6Senderiv3dst1)&(n6Senderis'=n6Senderis-1)&(n6Senderpc'=n6Senderra); +[] n6Senderos=0 & n6Senderpc=-4 -> (n6Senderop0'=n6Senderopt)&(n6Senderov3dst0'=n6Senderiv3dst0)&(n6Senderos'=1)&(n6Senderpc'=-3); +[] n6Senderos=1 & n6Senderpc=-4 -> (n6Senderop1'=n6Senderopt)&(n6Senderov3dst1'=n6Senderiv3dst0)&(n6Senderos'=2)&(n6Senderpc'=-3); +[] n6Senderos=2 & n6Senderpc=-4 -> (n6Senderpc'=-3); +[n2S0f1] n6Senderis=0 -> (n6Senderip0'=1)&(n6Senderiv3dst0'=n2S0ov3dst0)&(n6Senderis'=1); +[n2S0f1] n6Senderis=1 -> (n6Senderip1'=1)&(n6Senderiv3dst1'=n2S0ov3dst0)&(n6Senderis'=2); +[n2S0f1] n6Senderis=2 -> true; +[] unlk=16 & numSteps0 -> (n6Senderpc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=16 & numSteps (unlk'=17)&(numSkips'=numSkips+1); +[n6Senderf1] n6Senderpc=-5 & n6Senderos>0 & n6Senderop0=1 -> (n6Senderop0'=n6Senderop1)&(n6Senderov3dst0'=n6Senderov3dst1)&(n6Senderos'=n6Senderos-1)&(n6Senderpc'=-6); +[] numSteps (n6Senderpc'=0)&(unlk'=17)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n6Senderpc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n6Senderpc=1 & (n6Senderv4sent<2) -> (n6Senderpc'=2); +[] n6Senderpc=1 & !((n6Senderv4sent<2)) -> (n6Senderpc'=7); +[] n6Senderpc=2 -> 0.0833333:(n6Sendert0'=0)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=1)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=2)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=3)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=4)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=5)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=6)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=7)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=8)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=9)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=10)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=11)&(n6Senderpc'=3); +[] n6Senderpc=3 & n6Sendert0>=INTMIN & n6Sendert0<=INTMAX -> (n6Senderiv3dst0'=n6Sendert0)&(n6Senderpc'=4); +[] n6Senderpc=4 -> (n6Senderopt'=1)&(n6Senderpc'=-4)&(n6Senderra'=5); +[] n6Senderpc=5 -> (n6Senderpc'=-1)&(n6Senderra'=6); +[] n6Senderpc=6 -> (n6Senderpc'=8); +[] n6Senderpc=7 -> (n6Senderpc'=-3)&(n6Senderra'=8); +[] numSteps (n6Senderpc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n2R9 +n2R9v5recvd:[INTMIN..INTMAX] init 0; +n2R9ip0:[1..2] init 1;n2R9iv3dst0:[INTMIN..INTMAX] init 0; +n2R9ip1:[1..2] init 1;n2R9iv3dst1:[INTMIN..INTMAX] init 0; +n2R9is:[0..2] init 0; +n2R9op0:[1..2] init 1;n2R9ov3dst0:[INTMIN..INTMAX] init 0; +n2R9op1:[1..2] init 1;n2R9ov3dst1:[INTMIN..INTMAX] init 0; +n2R9os:[0..2] init 0; +n2R9opt:[1..2] init 1; +n2R9pc:[-6..3] init 0; n2R9ra:[-6..3] init 0; +[] n2R9is<2 & n2R9pc=-1 -> (n2R9ip0'=1)&(n2R9iv3dst0'=0)&(n2R9ip1'=n2R9ip0)&(n2R9iv3dst1'=n2R9iv3dst0)&(n2R9is'=n2R9is+1)&(n2R9pc'=n2R9ra); +[] n2R9is=2 & n2R9pc=-1 -> (n2R9pc'=n2R9ra); +[] n2R9is=0 & n2R9pc=-2 -> (n2R9pc'=n2R9ra); +[] n2R9is>0 & n2R9is<2 & n2R9pc=-2 -> (n2R9ip1'=n2R9ip0)&(n2R9iv3dst1'=n2R9iv3dst0)&(n2R9is'=n2R9is+1)&(n2R9pc'=n2R9ra); +[] n2R9is=2 & n2R9pc=-2 -> (n2R9pc'=n2R9ra); +[] n2R9is=0 & n2R9pc=-3 -> (n2R9pc'=n2R9ra); +[] n2R9is>0 & n2R9pc=-3 -> (n2R9ip0'=n2R9ip1)&(n2R9iv3dst0'=n2R9iv3dst1)&(n2R9is'=n2R9is-1)&(n2R9pc'=n2R9ra); +[] n2R9os=0 & n2R9pc=-4 -> (n2R9op0'=n2R9opt)&(n2R9ov3dst0'=n2R9iv3dst0)&(n2R9os'=1)&(n2R9pc'=-3); +[] n2R9os=1 & n2R9pc=-4 -> (n2R9op1'=n2R9opt)&(n2R9ov3dst1'=n2R9iv3dst0)&(n2R9os'=2)&(n2R9pc'=-3); +[] n2R9os=2 & n2R9pc=-4 -> (n2R9pc'=-3); +[n2S2f5] n2R9is=0 -> (n2R9ip0'=1)&(n2R9iv3dst0'=n2S2ov3dst0)&(n2R9is'=1); +[n2S2f5] n2R9is=1 -> (n2R9ip1'=1)&(n2R9iv3dst1'=n2S2ov3dst0)&(n2R9is'=2); +[n2S2f5] n2R9is=2 -> true; +[] unlk=29 & numSteps0 -> (n2R9pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=29 & numSteps (unlk'=30)&(numSkips'=numSkips+1); +[n2R9f1] n2R9pc=-5 & n2R9os>0 & n2R9op0=1 -> (n2R9op0'=n2R9op1)&(n2R9ov3dst0'=n2R9ov3dst1)&(n2R9os'=n2R9os-1)&(n2R9pc'=-6); +[] numSteps (n2R9pc'=0)&(unlk'=30)&(numSteps'=numSteps+1); +[] unlk=13 & numSteps0 -> (n2R9pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=13 & numSteps (unlk'=14)&(numSkips'=numSkips+1); +[] n2R9pc=1 & (n2R9v5recvd+1)>=INTMIN & (n2R9v5recvd+1)<=INTMAX -> (n2R9v5recvd'=(n2R9v5recvd+1))&(n2R9pc'=2); +[] n2R9pc=2 -> (n2R9pc'=-3)&(n2R9ra'=3); +[] numSteps (n2R9pc'=0)&(unlk'=14)&(numSteps'=numSteps+1); +endmodule +module n2RB +n2RBv5recvd:[INTMIN..INTMAX] init 0; +n2RBip0:[1..2] init 1;n2RBiv3dst0:[INTMIN..INTMAX] init 0; +n2RBip1:[1..2] init 1;n2RBiv3dst1:[INTMIN..INTMAX] init 0; +n2RBis:[0..2] init 0; +n2RBop0:[1..2] init 1;n2RBov3dst0:[INTMIN..INTMAX] init 0; +n2RBop1:[1..2] init 1;n2RBov3dst1:[INTMIN..INTMAX] init 0; +n2RBos:[0..2] init 0; +n2RBopt:[1..2] init 1; +n2RBpc:[-6..3] init 0; n2RBra:[-6..3] init 0; +[] n2RBis<2 & n2RBpc=-1 -> (n2RBip0'=1)&(n2RBiv3dst0'=0)&(n2RBip1'=n2RBip0)&(n2RBiv3dst1'=n2RBiv3dst0)&(n2RBis'=n2RBis+1)&(n2RBpc'=n2RBra); +[] n2RBis=2 & n2RBpc=-1 -> (n2RBpc'=n2RBra); +[] n2RBis=0 & n2RBpc=-2 -> (n2RBpc'=n2RBra); +[] n2RBis>0 & n2RBis<2 & n2RBpc=-2 -> (n2RBip1'=n2RBip0)&(n2RBiv3dst1'=n2RBiv3dst0)&(n2RBis'=n2RBis+1)&(n2RBpc'=n2RBra); +[] n2RBis=2 & n2RBpc=-2 -> (n2RBpc'=n2RBra); +[] n2RBis=0 & n2RBpc=-3 -> (n2RBpc'=n2RBra); +[] n2RBis>0 & n2RBpc=-3 -> (n2RBip0'=n2RBip1)&(n2RBiv3dst0'=n2RBiv3dst1)&(n2RBis'=n2RBis-1)&(n2RBpc'=n2RBra); +[] n2RBos=0 & n2RBpc=-4 -> (n2RBop0'=n2RBopt)&(n2RBov3dst0'=n2RBiv3dst0)&(n2RBos'=1)&(n2RBpc'=-3); +[] n2RBos=1 & n2RBpc=-4 -> (n2RBop1'=n2RBopt)&(n2RBov3dst1'=n2RBiv3dst0)&(n2RBos'=2)&(n2RBpc'=-3); +[] n2RBos=2 & n2RBpc=-4 -> (n2RBpc'=-3); +[n2S2f7] n2RBis=0 -> (n2RBip0'=1)&(n2RBiv3dst0'=n2S2ov3dst0)&(n2RBis'=1); +[n2S2f7] n2RBis=1 -> (n2RBip1'=1)&(n2RBiv3dst1'=n2S2ov3dst0)&(n2RBis'=2); +[n2S2f7] n2RBis=2 -> true; +[] unlk=31 & numSteps0 -> (n2RBpc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=31 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n2RBf1] n2RBpc=-5 & n2RBos>0 & n2RBop0=1 -> (n2RBop0'=n2RBop1)&(n2RBov3dst0'=n2RBov3dst1)&(n2RBos'=n2RBos-1)&(n2RBpc'=-6); +[] numSteps (n2RBpc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=15 & numSteps0 -> (n2RBpc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=15 & numSteps (unlk'=16)&(numSkips'=numSkips+1); +[] n2RBpc=1 & (n2RBv5recvd+1)>=INTMIN & (n2RBv5recvd+1)<=INTMAX -> (n2RBv5recvd'=(n2RBv5recvd+1))&(n2RBpc'=2); +[] n2RBpc=2 -> (n2RBpc'=-3)&(n2RBra'=3); +[] numSteps (n2RBpc'=0)&(unlk'=16)&(numSteps'=numSteps+1); +endmodule +module n2R2 +n2R2v5recvd:[INTMIN..INTMAX] init 0; +n2R2ip0:[1..2] init 1;n2R2iv3dst0:[INTMIN..INTMAX] init 0; +n2R2ip1:[1..2] init 1;n2R2iv3dst1:[INTMIN..INTMAX] init 0; +n2R2is:[0..2] init 0; +n2R2op0:[1..2] init 1;n2R2ov3dst0:[INTMIN..INTMAX] init 0; +n2R2op1:[1..2] init 1;n2R2ov3dst1:[INTMIN..INTMAX] init 0; +n2R2os:[0..2] init 0; +n2R2opt:[1..2] init 1; +n2R2pc:[-6..3] init 0; n2R2ra:[-6..3] init 0; +[] n2R2is<2 & n2R2pc=-1 -> (n2R2ip0'=1)&(n2R2iv3dst0'=0)&(n2R2ip1'=n2R2ip0)&(n2R2iv3dst1'=n2R2iv3dst0)&(n2R2is'=n2R2is+1)&(n2R2pc'=n2R2ra); +[] n2R2is=2 & n2R2pc=-1 -> (n2R2pc'=n2R2ra); +[] n2R2is=0 & n2R2pc=-2 -> (n2R2pc'=n2R2ra); +[] n2R2is>0 & n2R2is<2 & n2R2pc=-2 -> (n2R2ip1'=n2R2ip0)&(n2R2iv3dst1'=n2R2iv3dst0)&(n2R2is'=n2R2is+1)&(n2R2pc'=n2R2ra); +[] n2R2is=2 & n2R2pc=-2 -> (n2R2pc'=n2R2ra); +[] n2R2is=0 & n2R2pc=-3 -> (n2R2pc'=n2R2ra); +[] n2R2is>0 & n2R2pc=-3 -> (n2R2ip0'=n2R2ip1)&(n2R2iv3dst0'=n2R2iv3dst1)&(n2R2is'=n2R2is-1)&(n2R2pc'=n2R2ra); +[] n2R2os=0 & n2R2pc=-4 -> (n2R2op0'=n2R2opt)&(n2R2ov3dst0'=n2R2iv3dst0)&(n2R2os'=1)&(n2R2pc'=-3); +[] n2R2os=1 & n2R2pc=-4 -> (n2R2op1'=n2R2opt)&(n2R2ov3dst1'=n2R2iv3dst0)&(n2R2os'=2)&(n2R2pc'=-3); +[] n2R2os=2 & n2R2pc=-4 -> (n2R2pc'=-3); +[n2S1f4] n2R2is=0 -> (n2R2ip0'=1)&(n2R2iv3dst0'=n2S1ov3dst0)&(n2R2is'=1); +[n2S1f4] n2R2is=1 -> (n2R2ip1'=1)&(n2R2iv3dst1'=n2S1ov3dst0)&(n2R2is'=2); +[n2S1f4] n2R2is=2 -> true; +[] unlk=22 & numSteps0 -> (n2R2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=22 & numSteps (unlk'=23)&(numSkips'=numSkips+1); +[n2R2f1] n2R2pc=-5 & n2R2os>0 & n2R2op0=1 -> (n2R2op0'=n2R2op1)&(n2R2ov3dst0'=n2R2ov3dst1)&(n2R2os'=n2R2os-1)&(n2R2pc'=-6); +[] numSteps (n2R2pc'=0)&(unlk'=23)&(numSteps'=numSteps+1); +[] unlk=6 & numSteps0 -> (n2R2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[] n2R2pc=1 & (n2R2v5recvd+1)>=INTMIN & (n2R2v5recvd+1)<=INTMAX -> (n2R2v5recvd'=(n2R2v5recvd+1))&(n2R2pc'=2); +[] n2R2pc=2 -> (n2R2pc'=-3)&(n2R2ra'=3); +[] numSteps (n2R2pc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +endmodule +module n2R3 +n2R3v5recvd:[INTMIN..INTMAX] init 0; +n2R3ip0:[1..2] init 1;n2R3iv3dst0:[INTMIN..INTMAX] init 0; +n2R3ip1:[1..2] init 1;n2R3iv3dst1:[INTMIN..INTMAX] init 0; +n2R3is:[0..2] init 0; +n2R3op0:[1..2] init 1;n2R3ov3dst0:[INTMIN..INTMAX] init 0; +n2R3op1:[1..2] init 1;n2R3ov3dst1:[INTMIN..INTMAX] init 0; +n2R3os:[0..2] init 0; +n2R3opt:[1..2] init 1; +n2R3pc:[-6..3] init 0; n2R3ra:[-6..3] init 0; +[] n2R3is<2 & n2R3pc=-1 -> (n2R3ip0'=1)&(n2R3iv3dst0'=0)&(n2R3ip1'=n2R3ip0)&(n2R3iv3dst1'=n2R3iv3dst0)&(n2R3is'=n2R3is+1)&(n2R3pc'=n2R3ra); +[] n2R3is=2 & n2R3pc=-1 -> (n2R3pc'=n2R3ra); +[] n2R3is=0 & n2R3pc=-2 -> (n2R3pc'=n2R3ra); +[] n2R3is>0 & n2R3is<2 & n2R3pc=-2 -> (n2R3ip1'=n2R3ip0)&(n2R3iv3dst1'=n2R3iv3dst0)&(n2R3is'=n2R3is+1)&(n2R3pc'=n2R3ra); +[] n2R3is=2 & n2R3pc=-2 -> (n2R3pc'=n2R3ra); +[] n2R3is=0 & n2R3pc=-3 -> (n2R3pc'=n2R3ra); +[] n2R3is>0 & n2R3pc=-3 -> (n2R3ip0'=n2R3ip1)&(n2R3iv3dst0'=n2R3iv3dst1)&(n2R3is'=n2R3is-1)&(n2R3pc'=n2R3ra); +[] n2R3os=0 & n2R3pc=-4 -> (n2R3op0'=n2R3opt)&(n2R3ov3dst0'=n2R3iv3dst0)&(n2R3os'=1)&(n2R3pc'=-3); +[] n2R3os=1 & n2R3pc=-4 -> (n2R3op1'=n2R3opt)&(n2R3ov3dst1'=n2R3iv3dst0)&(n2R3os'=2)&(n2R3pc'=-3); +[] n2R3os=2 & n2R3pc=-4 -> (n2R3pc'=-3); +[n2S1f5] n2R3is=0 -> (n2R3ip0'=1)&(n2R3iv3dst0'=n2S1ov3dst0)&(n2R3is'=1); +[n2S1f5] n2R3is=1 -> (n2R3ip1'=1)&(n2R3iv3dst1'=n2S1ov3dst0)&(n2R3is'=2); +[n2S1f5] n2R3is=2 -> true; +[] unlk=23 & numSteps0 -> (n2R3pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=23 & numSteps (unlk'=24)&(numSkips'=numSkips+1); +[n2R3f1] n2R3pc=-5 & n2R3os>0 & n2R3op0=1 -> (n2R3op0'=n2R3op1)&(n2R3ov3dst0'=n2R3ov3dst1)&(n2R3os'=n2R3os-1)&(n2R3pc'=-6); +[] numSteps (n2R3pc'=0)&(unlk'=24)&(numSteps'=numSteps+1); +[] unlk=7 & numSteps0 -> (n2R3pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[] n2R3pc=1 & (n2R3v5recvd+1)>=INTMIN & (n2R3v5recvd+1)<=INTMAX -> (n2R3v5recvd'=(n2R3v5recvd+1))&(n2R3pc'=2); +[] n2R3pc=2 -> (n2R3pc'=-3)&(n2R3ra'=3); +[] numSteps (n2R3pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..7] init 1;n2S1iv3dst0:[INTMIN..INTMAX] init 0; +n2S1ip1:[1..7] init 1;n2S1iv3dst1:[INTMIN..INTMAX] init 0; +n2S1is:[0..2] init 0; +n2S1op0:[1..7] init 1;n2S1ov3dst0:[INTMIN..INTMAX] init 0; +n2S1op1:[1..7] init 1;n2S1ov3dst1:[INTMIN..INTMAX] init 0; +n2S1os:[0..2] init 0; +n2S1opt:[1..7] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1iv3dst0'=0)&(n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1iv3dst0'=n2S1iv3dst1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1ov3dst0'=n2S1iv3dst0)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1ov3dst1'=n2S1iv3dst0)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n2R4f1] n2S1is=0 -> (n2S1ip0'=6)&(n2S1iv3dst0'=n2R4ov3dst0)&(n2S1is'=1); +[n2R4f1] n2S1is=1 -> (n2S1ip1'=6)&(n2S1iv3dst1'=n2R4ov3dst0)&(n2S1is'=2); +[n2R4f1] n2S1is=2 -> true; +[n2R5f1] n2S1is=0 -> (n2S1ip0'=7)&(n2S1iv3dst0'=n2R5ov3dst0)&(n2S1is'=1); +[n2R5f1] n2S1is=1 -> (n2S1ip1'=7)&(n2S1iv3dst1'=n2R5ov3dst0)&(n2S1is'=2); +[n2R5f1] n2S1is=2 -> true; +[n2R0f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1iv3dst0'=n2R0ov3dst0)&(n2S1is'=1); +[n2R0f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1iv3dst1'=n2R0ov3dst0)&(n2S1is'=2); +[n2R0f1] n2S1is=2 -> true; +[n2R1f1] n2S1is=0 -> (n2S1ip0'=3)&(n2S1iv3dst0'=n2R1ov3dst0)&(n2S1is'=1); +[n2R1f1] n2S1is=1 -> (n2S1ip1'=3)&(n2S1iv3dst1'=n2R1ov3dst0)&(n2S1is'=2); +[n2R1f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1iv3dst0'=n2S0ov3dst0)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1iv3dst1'=n2S0ov3dst0)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[n2R3f1] n2S1is=0 -> (n2S1ip0'=5)&(n2S1iv3dst0'=n2R3ov3dst0)&(n2S1is'=1); +[n2R3f1] n2S1is=1 -> (n2S1ip1'=5)&(n2S1iv3dst1'=n2R3ov3dst0)&(n2S1is'=2); +[n2R3f1] n2S1is=2 -> true; +[n2R2f1] n2S1is=0 -> (n2S1ip0'=4)&(n2S1iv3dst0'=n2R2ov3dst0)&(n2S1is'=1); +[n2R2f1] n2S1is=1 -> (n2S1ip1'=4)&(n2S1iv3dst1'=n2R2ov3dst0)&(n2S1is'=2); +[n2R2f1] n2S1is=2 -> true; +[] unlk=18 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=18 & numSteps (unlk'=19)&(numSkips'=numSkips+1); +[n2S1f6] n2S1pc=-5 & n2S1os>0 & n2S1op0=6 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f7] n2S1pc=-5 & n2S1os>0 & n2S1op0=7 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f3] n2S1pc=-5 & n2S1os>0 & n2S1op0=3 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f5] n2S1pc=-5 & n2S1os>0 & n2S1op0=5 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f4] n2S1pc=-5 & n2S1os>0 & n2S1op0=4 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=19)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=(n2S1iv3dst0+2))&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2R7 +n2R7v5recvd:[INTMIN..INTMAX] init 0; +n2R7ip0:[1..2] init 1;n2R7iv3dst0:[INTMIN..INTMAX] init 0; +n2R7ip1:[1..2] init 1;n2R7iv3dst1:[INTMIN..INTMAX] init 0; +n2R7is:[0..2] init 0; +n2R7op0:[1..2] init 1;n2R7ov3dst0:[INTMIN..INTMAX] init 0; +n2R7op1:[1..2] init 1;n2R7ov3dst1:[INTMIN..INTMAX] init 0; +n2R7os:[0..2] init 0; +n2R7opt:[1..2] init 1; +n2R7pc:[-6..3] init 0; n2R7ra:[-6..3] init 0; +[] n2R7is<2 & n2R7pc=-1 -> (n2R7ip0'=1)&(n2R7iv3dst0'=0)&(n2R7ip1'=n2R7ip0)&(n2R7iv3dst1'=n2R7iv3dst0)&(n2R7is'=n2R7is+1)&(n2R7pc'=n2R7ra); +[] n2R7is=2 & n2R7pc=-1 -> (n2R7pc'=n2R7ra); +[] n2R7is=0 & n2R7pc=-2 -> (n2R7pc'=n2R7ra); +[] n2R7is>0 & n2R7is<2 & n2R7pc=-2 -> (n2R7ip1'=n2R7ip0)&(n2R7iv3dst1'=n2R7iv3dst0)&(n2R7is'=n2R7is+1)&(n2R7pc'=n2R7ra); +[] n2R7is=2 & n2R7pc=-2 -> (n2R7pc'=n2R7ra); +[] n2R7is=0 & n2R7pc=-3 -> (n2R7pc'=n2R7ra); +[] n2R7is>0 & n2R7pc=-3 -> (n2R7ip0'=n2R7ip1)&(n2R7iv3dst0'=n2R7iv3dst1)&(n2R7is'=n2R7is-1)&(n2R7pc'=n2R7ra); +[] n2R7os=0 & n2R7pc=-4 -> (n2R7op0'=n2R7opt)&(n2R7ov3dst0'=n2R7iv3dst0)&(n2R7os'=1)&(n2R7pc'=-3); +[] n2R7os=1 & n2R7pc=-4 -> (n2R7op1'=n2R7opt)&(n2R7ov3dst1'=n2R7iv3dst0)&(n2R7os'=2)&(n2R7pc'=-3); +[] n2R7os=2 & n2R7pc=-4 -> (n2R7pc'=-3); +[n2S2f3] n2R7is=0 -> (n2R7ip0'=1)&(n2R7iv3dst0'=n2S2ov3dst0)&(n2R7is'=1); +[n2S2f3] n2R7is=1 -> (n2R7ip1'=1)&(n2R7iv3dst1'=n2S2ov3dst0)&(n2R7is'=2); +[n2S2f3] n2R7is=2 -> true; +[] unlk=27 & numSteps0 -> (n2R7pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=27 & numSteps (unlk'=28)&(numSkips'=numSkips+1); +[n2R7f1] n2R7pc=-5 & n2R7os>0 & n2R7op0=1 -> (n2R7op0'=n2R7op1)&(n2R7ov3dst0'=n2R7ov3dst1)&(n2R7os'=n2R7os-1)&(n2R7pc'=-6); +[] numSteps (n2R7pc'=0)&(unlk'=28)&(numSteps'=numSteps+1); +[] unlk=11 & numSteps0 -> (n2R7pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=12)&(numSkips'=numSkips+1); +[] n2R7pc=1 & (n2R7v5recvd+1)>=INTMIN & (n2R7v5recvd+1)<=INTMAX -> (n2R7v5recvd'=(n2R7v5recvd+1))&(n2R7pc'=2); +[] n2R7pc=2 -> (n2R7pc'=-3)&(n2R7ra'=3); +[] numSteps (n2R7pc'=0)&(unlk'=12)&(numSteps'=numSteps+1); +endmodule +module n2R8 +n2R8v5recvd:[INTMIN..INTMAX] init 0; +n2R8ip0:[1..2] init 1;n2R8iv3dst0:[INTMIN..INTMAX] init 0; +n2R8ip1:[1..2] init 1;n2R8iv3dst1:[INTMIN..INTMAX] init 0; +n2R8is:[0..2] init 0; +n2R8op0:[1..2] init 1;n2R8ov3dst0:[INTMIN..INTMAX] init 0; +n2R8op1:[1..2] init 1;n2R8ov3dst1:[INTMIN..INTMAX] init 0; +n2R8os:[0..2] init 0; +n2R8opt:[1..2] init 1; +n2R8pc:[-6..3] init 0; n2R8ra:[-6..3] init 0; +[] n2R8is<2 & n2R8pc=-1 -> (n2R8ip0'=1)&(n2R8iv3dst0'=0)&(n2R8ip1'=n2R8ip0)&(n2R8iv3dst1'=n2R8iv3dst0)&(n2R8is'=n2R8is+1)&(n2R8pc'=n2R8ra); +[] n2R8is=2 & n2R8pc=-1 -> (n2R8pc'=n2R8ra); +[] n2R8is=0 & n2R8pc=-2 -> (n2R8pc'=n2R8ra); +[] n2R8is>0 & n2R8is<2 & n2R8pc=-2 -> (n2R8ip1'=n2R8ip0)&(n2R8iv3dst1'=n2R8iv3dst0)&(n2R8is'=n2R8is+1)&(n2R8pc'=n2R8ra); +[] n2R8is=2 & n2R8pc=-2 -> (n2R8pc'=n2R8ra); +[] n2R8is=0 & n2R8pc=-3 -> (n2R8pc'=n2R8ra); +[] n2R8is>0 & n2R8pc=-3 -> (n2R8ip0'=n2R8ip1)&(n2R8iv3dst0'=n2R8iv3dst1)&(n2R8is'=n2R8is-1)&(n2R8pc'=n2R8ra); +[] n2R8os=0 & n2R8pc=-4 -> (n2R8op0'=n2R8opt)&(n2R8ov3dst0'=n2R8iv3dst0)&(n2R8os'=1)&(n2R8pc'=-3); +[] n2R8os=1 & n2R8pc=-4 -> (n2R8op1'=n2R8opt)&(n2R8ov3dst1'=n2R8iv3dst0)&(n2R8os'=2)&(n2R8pc'=-3); +[] n2R8os=2 & n2R8pc=-4 -> (n2R8pc'=-3); +[n2S2f4] n2R8is=0 -> (n2R8ip0'=1)&(n2R8iv3dst0'=n2S2ov3dst0)&(n2R8is'=1); +[n2S2f4] n2R8is=1 -> (n2R8ip1'=1)&(n2R8iv3dst1'=n2S2ov3dst0)&(n2R8is'=2); +[n2S2f4] n2R8is=2 -> true; +[] unlk=28 & numSteps0 -> (n2R8pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=28 & numSteps (unlk'=29)&(numSkips'=numSkips+1); +[n2R8f1] n2R8pc=-5 & n2R8os>0 & n2R8op0=1 -> (n2R8op0'=n2R8op1)&(n2R8ov3dst0'=n2R8ov3dst1)&(n2R8os'=n2R8os-1)&(n2R8pc'=-6); +[] numSteps (n2R8pc'=0)&(unlk'=29)&(numSteps'=numSteps+1); +[] unlk=12 & numSteps0 -> (n2R8pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=12 & numSteps (unlk'=13)&(numSkips'=numSkips+1); +[] n2R8pc=1 & (n2R8v5recvd+1)>=INTMIN & (n2R8v5recvd+1)<=INTMAX -> (n2R8v5recvd'=(n2R8v5recvd+1))&(n2R8pc'=2); +[] n2R8pc=2 -> (n2R8pc'=-3)&(n2R8ra'=3); +[] numSteps (n2R8pc'=0)&(unlk'=13)&(numSteps'=numSteps+1); +endmodule +module n2RA +n2RAv5recvd:[INTMIN..INTMAX] init 0; +n2RAip0:[1..2] init 1;n2RAiv3dst0:[INTMIN..INTMAX] init 0; +n2RAip1:[1..2] init 1;n2RAiv3dst1:[INTMIN..INTMAX] init 0; +n2RAis:[0..2] init 0; +n2RAop0:[1..2] init 1;n2RAov3dst0:[INTMIN..INTMAX] init 0; +n2RAop1:[1..2] init 1;n2RAov3dst1:[INTMIN..INTMAX] init 0; +n2RAos:[0..2] init 0; +n2RAopt:[1..2] init 1; +n2RApc:[-6..3] init 0; n2RAra:[-6..3] init 0; +[] n2RAis<2 & n2RApc=-1 -> (n2RAip0'=1)&(n2RAiv3dst0'=0)&(n2RAip1'=n2RAip0)&(n2RAiv3dst1'=n2RAiv3dst0)&(n2RAis'=n2RAis+1)&(n2RApc'=n2RAra); +[] n2RAis=2 & n2RApc=-1 -> (n2RApc'=n2RAra); +[] n2RAis=0 & n2RApc=-2 -> (n2RApc'=n2RAra); +[] n2RAis>0 & n2RAis<2 & n2RApc=-2 -> (n2RAip1'=n2RAip0)&(n2RAiv3dst1'=n2RAiv3dst0)&(n2RAis'=n2RAis+1)&(n2RApc'=n2RAra); +[] n2RAis=2 & n2RApc=-2 -> (n2RApc'=n2RAra); +[] n2RAis=0 & n2RApc=-3 -> (n2RApc'=n2RAra); +[] n2RAis>0 & n2RApc=-3 -> (n2RAip0'=n2RAip1)&(n2RAiv3dst0'=n2RAiv3dst1)&(n2RAis'=n2RAis-1)&(n2RApc'=n2RAra); +[] n2RAos=0 & n2RApc=-4 -> (n2RAop0'=n2RAopt)&(n2RAov3dst0'=n2RAiv3dst0)&(n2RAos'=1)&(n2RApc'=-3); +[] n2RAos=1 & n2RApc=-4 -> (n2RAop1'=n2RAopt)&(n2RAov3dst1'=n2RAiv3dst0)&(n2RAos'=2)&(n2RApc'=-3); +[] n2RAos=2 & n2RApc=-4 -> (n2RApc'=-3); +[n2S2f6] n2RAis=0 -> (n2RAip0'=1)&(n2RAiv3dst0'=n2S2ov3dst0)&(n2RAis'=1); +[n2S2f6] n2RAis=1 -> (n2RAip1'=1)&(n2RAiv3dst1'=n2S2ov3dst0)&(n2RAis'=2); +[n2S2f6] n2RAis=2 -> true; +[] unlk=30 & numSteps0 -> (n2RApc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=30 & numSteps (unlk'=31)&(numSkips'=numSkips+1); +[n2RAf1] n2RApc=-5 & n2RAos>0 & n2RAop0=1 -> (n2RAop0'=n2RAop1)&(n2RAov3dst0'=n2RAov3dst1)&(n2RAos'=n2RAos-1)&(n2RApc'=-6); +[] numSteps (n2RApc'=0)&(unlk'=31)&(numSteps'=numSteps+1); +[] unlk=14 & numSteps0 -> (n2RApc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=14 & numSteps (unlk'=15)&(numSkips'=numSkips+1); +[] n2RApc=1 & (n2RAv5recvd+1)>=INTMIN & (n2RAv5recvd+1)<=INTMAX -> (n2RAv5recvd'=(n2RAv5recvd+1))&(n2RApc'=2); +[] n2RApc=2 -> (n2RApc'=-3)&(n2RAra'=3); +[] numSteps (n2RApc'=0)&(unlk'=15)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..7] init 1;n2S2iv3dst0:[INTMIN..INTMAX] init 0; +n2S2ip1:[1..7] init 1;n2S2iv3dst1:[INTMIN..INTMAX] init 0; +n2S2is:[0..2] init 0; +n2S2op0:[1..7] init 1;n2S2ov3dst0:[INTMIN..INTMAX] init 0; +n2S2op1:[1..7] init 1;n2S2ov3dst1:[INTMIN..INTMAX] init 0; +n2S2os:[0..2] init 0; +n2S2opt:[1..7] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2iv3dst0'=0)&(n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2iv3dst0'=n2S2iv3dst1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2ov3dst0'=n2S2iv3dst0)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2ov3dst1'=n2S2iv3dst0)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n2RAf1] n2S2is=0 -> (n2S2ip0'=6)&(n2S2iv3dst0'=n2RAov3dst0)&(n2S2is'=1); +[n2RAf1] n2S2is=1 -> (n2S2ip1'=6)&(n2S2iv3dst1'=n2RAov3dst0)&(n2S2is'=2); +[n2RAf1] n2S2is=2 -> true; +[n2RBf1] n2S2is=0 -> (n2S2ip0'=7)&(n2S2iv3dst0'=n2RBov3dst0)&(n2S2is'=1); +[n2RBf1] n2S2is=1 -> (n2S2ip1'=7)&(n2S2iv3dst1'=n2RBov3dst0)&(n2S2is'=2); +[n2RBf1] n2S2is=2 -> true; +[n2R6f1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2iv3dst0'=n2R6ov3dst0)&(n2S2is'=1); +[n2R6f1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2iv3dst1'=n2R6ov3dst0)&(n2S2is'=2); +[n2R6f1] n2S2is=2 -> true; +[n2R7f1] n2S2is=0 -> (n2S2ip0'=3)&(n2S2iv3dst0'=n2R7ov3dst0)&(n2S2is'=1); +[n2R7f1] n2S2is=1 -> (n2S2ip1'=3)&(n2S2iv3dst1'=n2R7ov3dst0)&(n2S2is'=2); +[n2R7f1] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2iv3dst0'=n2S0ov3dst0)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2iv3dst1'=n2S0ov3dst0)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[n2R9f1] n2S2is=0 -> (n2S2ip0'=5)&(n2S2iv3dst0'=n2R9ov3dst0)&(n2S2is'=1); +[n2R9f1] n2S2is=1 -> (n2S2ip1'=5)&(n2S2iv3dst1'=n2R9ov3dst0)&(n2S2is'=2); +[n2R9f1] n2S2is=2 -> true; +[n2R8f1] n2S2is=0 -> (n2S2ip0'=4)&(n2S2iv3dst0'=n2R8ov3dst0)&(n2S2is'=1); +[n2R8f1] n2S2is=1 -> (n2S2ip1'=4)&(n2S2iv3dst1'=n2R8ov3dst0)&(n2S2is'=2); +[n2R8f1] n2S2is=2 -> true; +[] unlk=19 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=19 & numSteps (unlk'=20)&(numSkips'=numSkips+1); +[n2S2f6] n2S2pc=-5 & n2S2os>0 & n2S2op0=6 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f7] n2S2pc=-5 & n2S2os>0 & n2S2op0=7 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f3] n2S2pc=-5 & n2S2os>0 & n2S2op0=3 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f5] n2S2pc=-5 & n2S2os>0 & n2S2op0=5 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f4] n2S2pc=-5 & n2S2os>0 & n2S2op0=4 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=20)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> (n2S2opt'=((n2S2iv3dst0+2)-v7SUBSIZE))&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2R6 +n2R6v5recvd:[INTMIN..INTMAX] init 0; +n2R6ip0:[1..2] init 1;n2R6iv3dst0:[INTMIN..INTMAX] init 0; +n2R6ip1:[1..2] init 1;n2R6iv3dst1:[INTMIN..INTMAX] init 0; +n2R6is:[0..2] init 0; +n2R6op0:[1..2] init 1;n2R6ov3dst0:[INTMIN..INTMAX] init 0; +n2R6op1:[1..2] init 1;n2R6ov3dst1:[INTMIN..INTMAX] init 0; +n2R6os:[0..2] init 0; +n2R6opt:[1..2] init 1; +n2R6pc:[-6..3] init 0; n2R6ra:[-6..3] init 0; +[] n2R6is<2 & n2R6pc=-1 -> (n2R6ip0'=1)&(n2R6iv3dst0'=0)&(n2R6ip1'=n2R6ip0)&(n2R6iv3dst1'=n2R6iv3dst0)&(n2R6is'=n2R6is+1)&(n2R6pc'=n2R6ra); +[] n2R6is=2 & n2R6pc=-1 -> (n2R6pc'=n2R6ra); +[] n2R6is=0 & n2R6pc=-2 -> (n2R6pc'=n2R6ra); +[] n2R6is>0 & n2R6is<2 & n2R6pc=-2 -> (n2R6ip1'=n2R6ip0)&(n2R6iv3dst1'=n2R6iv3dst0)&(n2R6is'=n2R6is+1)&(n2R6pc'=n2R6ra); +[] n2R6is=2 & n2R6pc=-2 -> (n2R6pc'=n2R6ra); +[] n2R6is=0 & n2R6pc=-3 -> (n2R6pc'=n2R6ra); +[] n2R6is>0 & n2R6pc=-3 -> (n2R6ip0'=n2R6ip1)&(n2R6iv3dst0'=n2R6iv3dst1)&(n2R6is'=n2R6is-1)&(n2R6pc'=n2R6ra); +[] n2R6os=0 & n2R6pc=-4 -> (n2R6op0'=n2R6opt)&(n2R6ov3dst0'=n2R6iv3dst0)&(n2R6os'=1)&(n2R6pc'=-3); +[] n2R6os=1 & n2R6pc=-4 -> (n2R6op1'=n2R6opt)&(n2R6ov3dst1'=n2R6iv3dst0)&(n2R6os'=2)&(n2R6pc'=-3); +[] n2R6os=2 & n2R6pc=-4 -> (n2R6pc'=-3); +[n2S2f2] n2R6is=0 -> (n2R6ip0'=1)&(n2R6iv3dst0'=n2S2ov3dst0)&(n2R6is'=1); +[n2S2f2] n2R6is=1 -> (n2R6ip1'=1)&(n2R6iv3dst1'=n2S2ov3dst0)&(n2R6is'=2); +[n2S2f2] n2R6is=2 -> true; +[] unlk=26 & numSteps0 -> (n2R6pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=26 & numSteps (unlk'=27)&(numSkips'=numSkips+1); +[n2R6f1] n2R6pc=-5 & n2R6os>0 & n2R6op0=1 -> (n2R6op0'=n2R6op1)&(n2R6ov3dst0'=n2R6ov3dst1)&(n2R6os'=n2R6os-1)&(n2R6pc'=-6); +[] numSteps (n2R6pc'=0)&(unlk'=27)&(numSteps'=numSteps+1); +[] unlk=10 & numSteps0 -> (n2R6pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[] n2R6pc=1 & (n2R6v5recvd+1)>=INTMIN & (n2R6v5recvd+1)<=INTMAX -> (n2R6v5recvd'=(n2R6v5recvd+1))&(n2R6pc'=2); +[] n2R6pc=2 -> (n2R6pc'=-3)&(n2R6ra'=3); +[] numSteps (n2R6pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0ip0:[1..3] init 1;n2S0iv3dst0:[INTMIN..INTMAX] init 0; +n2S0ip1:[1..3] init 1;n2S0iv3dst1:[INTMIN..INTMAX] init 0; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1;n2S0ov3dst0:[INTMIN..INTMAX] init 0; +n2S0op1:[1..3] init 1;n2S0ov3dst1:[INTMIN..INTMAX] init 0; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..5] init 0; n2S0ra:[-6..5] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0iv3dst0'=0)&(n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0iv3dst0'=n2S0iv3dst1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0ov3dst0'=n2S0iv3dst0)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0ov3dst1'=n2S0iv3dst0)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0iv3dst0'=n2S2ov3dst0)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0iv3dst1'=n2S2ov3dst0)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0iv3dst0'=n2S1ov3dst0)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0iv3dst1'=n2S1ov3dst0)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n6Senderf1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0iv3dst0'=n6Senderov3dst0)&(n2S0is'=1); +[n6Senderf1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0iv3dst1'=n6Senderov3dst0)&(n2S0is'=2); +[n6Senderf1] n2S0is=2 -> true; +[] unlk=17 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=17 & numSteps (unlk'=18)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=18)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2S0pc=1 & (n2S0iv3dst0 (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0iv3dst0 (n2S0pc'=4); +[] n2S0pc=2 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=3); +[] n2S0pc=3 -> (n2S0pc'=5); +[] n2S0pc=4 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=5); +[] numSteps (n2S0pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module n2R4 +n2R4v5recvd:[INTMIN..INTMAX] init 0; +n2R4ip0:[1..2] init 1;n2R4iv3dst0:[INTMIN..INTMAX] init 0; +n2R4ip1:[1..2] init 1;n2R4iv3dst1:[INTMIN..INTMAX] init 0; +n2R4is:[0..2] init 0; +n2R4op0:[1..2] init 1;n2R4ov3dst0:[INTMIN..INTMAX] init 0; +n2R4op1:[1..2] init 1;n2R4ov3dst1:[INTMIN..INTMAX] init 0; +n2R4os:[0..2] init 0; +n2R4opt:[1..2] init 1; +n2R4pc:[-6..3] init 0; n2R4ra:[-6..3] init 0; +[] n2R4is<2 & n2R4pc=-1 -> (n2R4ip0'=1)&(n2R4iv3dst0'=0)&(n2R4ip1'=n2R4ip0)&(n2R4iv3dst1'=n2R4iv3dst0)&(n2R4is'=n2R4is+1)&(n2R4pc'=n2R4ra); +[] n2R4is=2 & n2R4pc=-1 -> (n2R4pc'=n2R4ra); +[] n2R4is=0 & n2R4pc=-2 -> (n2R4pc'=n2R4ra); +[] n2R4is>0 & n2R4is<2 & n2R4pc=-2 -> (n2R4ip1'=n2R4ip0)&(n2R4iv3dst1'=n2R4iv3dst0)&(n2R4is'=n2R4is+1)&(n2R4pc'=n2R4ra); +[] n2R4is=2 & n2R4pc=-2 -> (n2R4pc'=n2R4ra); +[] n2R4is=0 & n2R4pc=-3 -> (n2R4pc'=n2R4ra); +[] n2R4is>0 & n2R4pc=-3 -> (n2R4ip0'=n2R4ip1)&(n2R4iv3dst0'=n2R4iv3dst1)&(n2R4is'=n2R4is-1)&(n2R4pc'=n2R4ra); +[] n2R4os=0 & n2R4pc=-4 -> (n2R4op0'=n2R4opt)&(n2R4ov3dst0'=n2R4iv3dst0)&(n2R4os'=1)&(n2R4pc'=-3); +[] n2R4os=1 & n2R4pc=-4 -> (n2R4op1'=n2R4opt)&(n2R4ov3dst1'=n2R4iv3dst0)&(n2R4os'=2)&(n2R4pc'=-3); +[] n2R4os=2 & n2R4pc=-4 -> (n2R4pc'=-3); +[n2S1f6] n2R4is=0 -> (n2R4ip0'=1)&(n2R4iv3dst0'=n2S1ov3dst0)&(n2R4is'=1); +[n2S1f6] n2R4is=1 -> (n2R4ip1'=1)&(n2R4iv3dst1'=n2S1ov3dst0)&(n2R4is'=2); +[n2S1f6] n2R4is=2 -> true; +[] unlk=24 & numSteps0 -> (n2R4pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=24 & numSteps (unlk'=25)&(numSkips'=numSkips+1); +[n2R4f1] n2R4pc=-5 & n2R4os>0 & n2R4op0=1 -> (n2R4op0'=n2R4op1)&(n2R4ov3dst0'=n2R4ov3dst1)&(n2R4os'=n2R4os-1)&(n2R4pc'=-6); +[] numSteps (n2R4pc'=0)&(unlk'=25)&(numSteps'=numSteps+1); +[] unlk=8 & numSteps0 -> (n2R4pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[] n2R4pc=1 & (n2R4v5recvd+1)>=INTMIN & (n2R4v5recvd+1)<=INTMAX -> (n2R4v5recvd'=(n2R4v5recvd+1))&(n2R4pc'=2); +[] n2R4pc=2 -> (n2R4pc'=-3)&(n2R4ra'=3); +[] numSteps (n2R4pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +endmodule +module n2R1 +n2R1v5recvd:[INTMIN..INTMAX] init 0; +n2R1ip0:[1..2] init 1;n2R1iv3dst0:[INTMIN..INTMAX] init 0; +n2R1ip1:[1..2] init 1;n2R1iv3dst1:[INTMIN..INTMAX] init 0; +n2R1is:[0..2] init 0; +n2R1op0:[1..2] init 1;n2R1ov3dst0:[INTMIN..INTMAX] init 0; +n2R1op1:[1..2] init 1;n2R1ov3dst1:[INTMIN..INTMAX] init 0; +n2R1os:[0..2] init 0; +n2R1opt:[1..2] init 1; +n2R1pc:[-6..3] init 0; n2R1ra:[-6..3] init 0; +[] n2R1is<2 & n2R1pc=-1 -> (n2R1ip0'=1)&(n2R1iv3dst0'=0)&(n2R1ip1'=n2R1ip0)&(n2R1iv3dst1'=n2R1iv3dst0)&(n2R1is'=n2R1is+1)&(n2R1pc'=n2R1ra); +[] n2R1is=2 & n2R1pc=-1 -> (n2R1pc'=n2R1ra); +[] n2R1is=0 & n2R1pc=-2 -> (n2R1pc'=n2R1ra); +[] n2R1is>0 & n2R1is<2 & n2R1pc=-2 -> (n2R1ip1'=n2R1ip0)&(n2R1iv3dst1'=n2R1iv3dst0)&(n2R1is'=n2R1is+1)&(n2R1pc'=n2R1ra); +[] n2R1is=2 & n2R1pc=-2 -> (n2R1pc'=n2R1ra); +[] n2R1is=0 & n2R1pc=-3 -> (n2R1pc'=n2R1ra); +[] n2R1is>0 & n2R1pc=-3 -> (n2R1ip0'=n2R1ip1)&(n2R1iv3dst0'=n2R1iv3dst1)&(n2R1is'=n2R1is-1)&(n2R1pc'=n2R1ra); +[] n2R1os=0 & n2R1pc=-4 -> (n2R1op0'=n2R1opt)&(n2R1ov3dst0'=n2R1iv3dst0)&(n2R1os'=1)&(n2R1pc'=-3); +[] n2R1os=1 & n2R1pc=-4 -> (n2R1op1'=n2R1opt)&(n2R1ov3dst1'=n2R1iv3dst0)&(n2R1os'=2)&(n2R1pc'=-3); +[] n2R1os=2 & n2R1pc=-4 -> (n2R1pc'=-3); +[n2S1f3] n2R1is=0 -> (n2R1ip0'=1)&(n2R1iv3dst0'=n2S1ov3dst0)&(n2R1is'=1); +[n2S1f3] n2R1is=1 -> (n2R1ip1'=1)&(n2R1iv3dst1'=n2S1ov3dst0)&(n2R1is'=2); +[n2S1f3] n2R1is=2 -> true; +[] unlk=21 & numSteps0 -> (n2R1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=21 & numSteps (unlk'=22)&(numSkips'=numSkips+1); +[n2R1f1] n2R1pc=-5 & n2R1os>0 & n2R1op0=1 -> (n2R1op0'=n2R1op1)&(n2R1ov3dst0'=n2R1ov3dst1)&(n2R1os'=n2R1os-1)&(n2R1pc'=-6); +[] numSteps (n2R1pc'=0)&(unlk'=22)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n2R1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n2R1pc=1 & (n2R1v5recvd+1)>=INTMIN & (n2R1v5recvd+1)<=INTMAX -> (n2R1v5recvd'=(n2R1v5recvd+1))&(n2R1pc'=2); +[] n2R1pc=2 -> (n2R1pc'=-3)&(n2R1ra'=3); +[] numSteps (n2R1pc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n2R0 +n2R0v5recvd:[INTMIN..INTMAX] init 0; +n2R0ip0:[1..2] init 1;n2R0iv3dst0:[INTMIN..INTMAX] init 0; +n2R0ip1:[1..2] init 1;n2R0iv3dst1:[INTMIN..INTMAX] init 0; +n2R0is:[0..2] init 0; +n2R0op0:[1..2] init 1;n2R0ov3dst0:[INTMIN..INTMAX] init 0; +n2R0op1:[1..2] init 1;n2R0ov3dst1:[INTMIN..INTMAX] init 0; +n2R0os:[0..2] init 0; +n2R0opt:[1..2] init 1; +n2R0pc:[-6..3] init 0; n2R0ra:[-6..3] init 0; +[] n2R0is<2 & n2R0pc=-1 -> (n2R0ip0'=1)&(n2R0iv3dst0'=0)&(n2R0ip1'=n2R0ip0)&(n2R0iv3dst1'=n2R0iv3dst0)&(n2R0is'=n2R0is+1)&(n2R0pc'=n2R0ra); +[] n2R0is=2 & n2R0pc=-1 -> (n2R0pc'=n2R0ra); +[] n2R0is=0 & n2R0pc=-2 -> (n2R0pc'=n2R0ra); +[] n2R0is>0 & n2R0is<2 & n2R0pc=-2 -> (n2R0ip1'=n2R0ip0)&(n2R0iv3dst1'=n2R0iv3dst0)&(n2R0is'=n2R0is+1)&(n2R0pc'=n2R0ra); +[] n2R0is=2 & n2R0pc=-2 -> (n2R0pc'=n2R0ra); +[] n2R0is=0 & n2R0pc=-3 -> (n2R0pc'=n2R0ra); +[] n2R0is>0 & n2R0pc=-3 -> (n2R0ip0'=n2R0ip1)&(n2R0iv3dst0'=n2R0iv3dst1)&(n2R0is'=n2R0is-1)&(n2R0pc'=n2R0ra); +[] n2R0os=0 & n2R0pc=-4 -> (n2R0op0'=n2R0opt)&(n2R0ov3dst0'=n2R0iv3dst0)&(n2R0os'=1)&(n2R0pc'=-3); +[] n2R0os=1 & n2R0pc=-4 -> (n2R0op1'=n2R0opt)&(n2R0ov3dst1'=n2R0iv3dst0)&(n2R0os'=2)&(n2R0pc'=-3); +[] n2R0os=2 & n2R0pc=-4 -> (n2R0pc'=-3); +[n2S1f2] n2R0is=0 -> (n2R0ip0'=1)&(n2R0iv3dst0'=n2S1ov3dst0)&(n2R0is'=1); +[n2S1f2] n2R0is=1 -> (n2R0ip1'=1)&(n2R0iv3dst1'=n2S1ov3dst0)&(n2R0is'=2); +[n2S1f2] n2R0is=2 -> true; +[] unlk=20 & numSteps0 -> (n2R0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=20 & numSteps (unlk'=21)&(numSkips'=numSkips+1); +[n2R0f1] n2R0pc=-5 & n2R0os>0 & n2R0op0=1 -> (n2R0op0'=n2R0op1)&(n2R0ov3dst0'=n2R0ov3dst1)&(n2R0os'=n2R0os-1)&(n2R0pc'=-6); +[] numSteps (n2R0pc'=0)&(unlk'=21)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n2R0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n2R0pc=1 & (n2R0v5recvd+1)>=INTMIN & (n2R0v5recvd+1)<=INTMAX -> (n2R0v5recvd'=(n2R0v5recvd+1))&(n2R0pc'=2); +[] n2R0pc=2 -> (n2R0pc'=-3)&(n2R0ra'=3); +[] numSteps (n2R0pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2R5 +n2R5v5recvd:[INTMIN..INTMAX] init 0; +n2R5ip0:[1..2] init 1;n2R5iv3dst0:[INTMIN..INTMAX] init 0; +n2R5ip1:[1..2] init 1;n2R5iv3dst1:[INTMIN..INTMAX] init 0; +n2R5is:[0..2] init 0; +n2R5op0:[1..2] init 1;n2R5ov3dst0:[INTMIN..INTMAX] init 0; +n2R5op1:[1..2] init 1;n2R5ov3dst1:[INTMIN..INTMAX] init 0; +n2R5os:[0..2] init 0; +n2R5opt:[1..2] init 1; +n2R5pc:[-6..3] init 0; n2R5ra:[-6..3] init 0; +[] n2R5is<2 & n2R5pc=-1 -> (n2R5ip0'=1)&(n2R5iv3dst0'=0)&(n2R5ip1'=n2R5ip0)&(n2R5iv3dst1'=n2R5iv3dst0)&(n2R5is'=n2R5is+1)&(n2R5pc'=n2R5ra); +[] n2R5is=2 & n2R5pc=-1 -> (n2R5pc'=n2R5ra); +[] n2R5is=0 & n2R5pc=-2 -> (n2R5pc'=n2R5ra); +[] n2R5is>0 & n2R5is<2 & n2R5pc=-2 -> (n2R5ip1'=n2R5ip0)&(n2R5iv3dst1'=n2R5iv3dst0)&(n2R5is'=n2R5is+1)&(n2R5pc'=n2R5ra); +[] n2R5is=2 & n2R5pc=-2 -> (n2R5pc'=n2R5ra); +[] n2R5is=0 & n2R5pc=-3 -> (n2R5pc'=n2R5ra); +[] n2R5is>0 & n2R5pc=-3 -> (n2R5ip0'=n2R5ip1)&(n2R5iv3dst0'=n2R5iv3dst1)&(n2R5is'=n2R5is-1)&(n2R5pc'=n2R5ra); +[] n2R5os=0 & n2R5pc=-4 -> (n2R5op0'=n2R5opt)&(n2R5ov3dst0'=n2R5iv3dst0)&(n2R5os'=1)&(n2R5pc'=-3); +[] n2R5os=1 & n2R5pc=-4 -> (n2R5op1'=n2R5opt)&(n2R5ov3dst1'=n2R5iv3dst0)&(n2R5os'=2)&(n2R5pc'=-3); +[] n2R5os=2 & n2R5pc=-4 -> (n2R5pc'=-3); +[n2S1f7] n2R5is=0 -> (n2R5ip0'=1)&(n2R5iv3dst0'=n2S1ov3dst0)&(n2R5is'=1); +[n2S1f7] n2R5is=1 -> (n2R5ip1'=1)&(n2R5iv3dst1'=n2S1ov3dst0)&(n2R5is'=2); +[n2S1f7] n2R5is=2 -> true; +[] unlk=25 & numSteps0 -> (n2R5pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=25 & numSteps (unlk'=26)&(numSkips'=numSkips+1); +[n2R5f1] n2R5pc=-5 & n2R5os>0 & n2R5op0=1 -> (n2R5op0'=n2R5op1)&(n2R5ov3dst0'=n2R5ov3dst1)&(n2R5os'=n2R5os-1)&(n2R5pc'=-6); +[] numSteps (n2R5pc'=0)&(unlk'=26)&(numSteps'=numSteps+1); +[] unlk=9 & numSteps0 -> (n2R5pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[] n2R5pc=1 & (n2R5v5recvd+1)>=INTMIN & (n2R5v5recvd+1)<=INTMAX -> (n2R5v5recvd'=(n2R5v5recvd+1))&(n2R5pc'=2); +[] n2R5pc=2 -> (n2R5pc'=-3)&(n2R5ra'=3); +[] numSteps (n2R5pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n6Senderis=0 & n6Senderos=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n2R0is=0 & n2R0os=0 & n2R1is=0 & n2R1os=0 & n2R2is=0 & n2R2os=0 & n2R3is=0 & n2R3os=0 & n2R4is=0 & n2R4os=0 & n2R5is=0 & n2R5os=0 & n2R6is=0 & n2R6os=0 & n2R7is=0 & n2R7os=0 & n2R8is=0 & n2R8os=0 & n2R9is=0 & n2R9os=0 & n2RAis=0 & n2RAos=0 & n2RBis=0 & n2RBos=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & ((((((((((((n2R0v5recvd+n2R1v5recvd)+n2R2v5recvd)+n2R3v5recvd)+n2R4v5recvd)+n2R5v5recvd)+n2R6v5recvd)+n2R7v5recvd)+n2R8v5recvd)+n2R9v5recvd)+n2RAv5recvd)+n2RBv5recvd)=2) ] / P=? [ F finished & obsrvOK ] diff --git a/subnets/subnets-c.bayonet b/subnets/subnets-c.bayonet new file mode 100644 index 0000000..6e5eea2 --- /dev/null +++ b/subnets/subnets-c.bayonet @@ -0,0 +1,66 @@ +num_steps 20; + +parameters{ SUBSIZE(6) } + +query probability(recvd@R05+recvd@R6B == 2); + +topology{ + nodes{ Sender, S0, S1, S2, R05, R6B } + links{ + (Sender,pt1) <-> (S0,pt1), + (S0,pt2) <-> (S1,pt1), + (S0,pt3) <-> (S2,pt1), + (S1,pt2) <-> (R05,pt1), + (S2,pt2) <-> (R6B,pt1), + } +} +queue_capacity 2; + +packet_fields{ dst } + +programs{ Sender -> send, S0 -> s0, S1 -> s1, S2 -> s2, R05 -> recv, R6B -> recv } + +def send(pkt, port) state sent(0) { + if sent < 2 { + pkt.dst = uniformInt(0,11); + fwd(1); + sent = sent + 1; + new; + } else { + drop; + } +} + +def recv(pkt, port) state recvd(0) { + recvd = recvd + 1; + drop; +} + +def s0(pkt, port) { + if pkt.dst < SUBSIZE { + fwd(2); + } else { + fwd(3); + } +} + +def s1(pkt, port) { + fwd(2); +} + +def s2(pkt, port) { + fwd(2); +} + +def scheduler() state next(0){ + for i in [0..2*k){ + current := next; + next = (next + 1) % (2 * k); + if current < k && (Q_in@current).size() > 0 { + return (RunSw,current); + } else if current >= k && (Q_out@(current-k)).size() > 0 { + return (FwdQ,current-k); + } + } + assert(0); +} diff --git a/subnets/subnets-c.prism b/subnets/subnets-c.prism new file mode 100644 index 0000000..c98567f --- /dev/null +++ b/subnets/subnets-c.prism @@ -0,0 +1,238 @@ +dtmc +global unlk:[-1..11] init 0; +global assrtOK:bool init true; +global obsrvOK:bool init true; +const int INTMIN = 0; const int INTMAX = 255; +const int maxNumSteps = 20; +global numSteps:[0..maxNumSteps] init 0; +const int maxNumSkips = 12; +global numSkips:[0..12] init 0; +const int v7SUBSIZE = 6; +module n6Sender +n6Senderv4sent:[INTMIN..INTMAX] init 0; +n6Sendert0:[0..11]; +n6Senderip0:[1..2] init 1;n6Senderiv3dst0:[INTMIN..INTMAX] init 0; +n6Senderip1:[1..2] init 1;n6Senderiv3dst1:[INTMIN..INTMAX] init 0; +n6Senderis:[0..2] init 1; +n6Senderop0:[1..2] init 1;n6Senderov3dst0:[INTMIN..INTMAX] init 0; +n6Senderop1:[1..2] init 1;n6Senderov3dst1:[INTMIN..INTMAX] init 0; +n6Senderos:[0..2] init 0; +n6Senderopt:[1..2] init 1; +n6Senderpc:[-6..9] init 0; n6Senderra:[-6..9] init 0; +[] n6Senderis<2 & n6Senderpc=-1 -> (n6Senderip0'=1)&(n6Senderiv3dst0'=0)&(n6Senderip1'=n6Senderip0)&(n6Senderiv3dst1'=n6Senderiv3dst0)&(n6Senderis'=n6Senderis+1)&(n6Senderpc'=n6Senderra); +[] n6Senderis=2 & n6Senderpc=-1 -> (n6Senderpc'=n6Senderra); +[] n6Senderis=0 & n6Senderpc=-2 -> (n6Senderpc'=n6Senderra); +[] n6Senderis>0 & n6Senderis<2 & n6Senderpc=-2 -> (n6Senderip1'=n6Senderip0)&(n6Senderiv3dst1'=n6Senderiv3dst0)&(n6Senderis'=n6Senderis+1)&(n6Senderpc'=n6Senderra); +[] n6Senderis=2 & n6Senderpc=-2 -> (n6Senderpc'=n6Senderra); +[] n6Senderis=0 & n6Senderpc=-3 -> (n6Senderpc'=n6Senderra); +[] n6Senderis>0 & n6Senderpc=-3 -> (n6Senderip0'=n6Senderip1)&(n6Senderiv3dst0'=n6Senderiv3dst1)&(n6Senderis'=n6Senderis-1)&(n6Senderpc'=n6Senderra); +[] n6Senderos=0 & n6Senderpc=-4 -> (n6Senderop0'=n6Senderopt)&(n6Senderov3dst0'=n6Senderiv3dst0)&(n6Senderos'=1)&(n6Senderpc'=-3); +[] n6Senderos=1 & n6Senderpc=-4 -> (n6Senderop1'=n6Senderopt)&(n6Senderov3dst1'=n6Senderiv3dst0)&(n6Senderos'=2)&(n6Senderpc'=-3); +[] n6Senderos=2 & n6Senderpc=-4 -> (n6Senderpc'=-3); +[n2S0f1] n6Senderis=0 -> (n6Senderip0'=1)&(n6Senderiv3dst0'=n2S0ov3dst0)&(n6Senderis'=1); +[n2S0f1] n6Senderis=1 -> (n6Senderip1'=1)&(n6Senderiv3dst1'=n2S0ov3dst0)&(n6Senderis'=2); +[n2S0f1] n6Senderis=2 -> true; +[] unlk=6 & numSteps0 -> (n6Senderpc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=6 & numSteps (unlk'=7)&(numSkips'=numSkips+1); +[n6Senderf1] n6Senderpc=-5 & n6Senderos>0 & n6Senderop0=1 -> (n6Senderop0'=n6Senderop1)&(n6Senderov3dst0'=n6Senderov3dst1)&(n6Senderos'=n6Senderos-1)&(n6Senderpc'=-6); +[] numSteps (n6Senderpc'=0)&(unlk'=7)&(numSteps'=numSteps+1); +[] unlk=0 & numSteps0 -> (n6Senderpc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=0 & numSteps (unlk'=1)&(numSkips'=numSkips+1); +[] n6Senderpc=1 & (n6Senderv4sent<2) -> (n6Senderpc'=2); +[] n6Senderpc=1 & !((n6Senderv4sent<2)) -> (n6Senderpc'=8); +[] n6Senderpc=2 -> 0.0833333:(n6Sendert0'=0)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=1)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=2)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=3)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=4)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=5)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=6)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=7)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=8)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=9)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=10)&(n6Senderpc'=3) + 0.0833333:(n6Sendert0'=11)&(n6Senderpc'=3); +[] n6Senderpc=3 & n6Sendert0>=INTMIN & n6Sendert0<=INTMAX -> (n6Senderiv3dst0'=n6Sendert0)&(n6Senderpc'=4); +[] n6Senderpc=4 -> (n6Senderopt'=1)&(n6Senderpc'=-4)&(n6Senderra'=5); +[] n6Senderpc=5 & (n6Senderv4sent+1)>=INTMIN & (n6Senderv4sent+1)<=INTMAX -> (n6Senderv4sent'=(n6Senderv4sent+1))&(n6Senderpc'=6); +[] n6Senderpc=6 -> (n6Senderpc'=-1)&(n6Senderra'=7); +[] n6Senderpc=7 -> (n6Senderpc'=9); +[] n6Senderpc=8 -> (n6Senderpc'=-3)&(n6Senderra'=9); +[] numSteps (n6Senderpc'=0)&(unlk'=1)&(numSteps'=numSteps+1); +endmodule +module n3R6B +n3R6Bv5recvd:[INTMIN..INTMAX] init 0; +n3R6Bip0:[1..2] init 1;n3R6Biv3dst0:[INTMIN..INTMAX] init 0; +n3R6Bip1:[1..2] init 1;n3R6Biv3dst1:[INTMIN..INTMAX] init 0; +n3R6Bis:[0..2] init 0; +n3R6Bop0:[1..2] init 1;n3R6Bov3dst0:[INTMIN..INTMAX] init 0; +n3R6Bop1:[1..2] init 1;n3R6Bov3dst1:[INTMIN..INTMAX] init 0; +n3R6Bos:[0..2] init 0; +n3R6Bopt:[1..2] init 1; +n3R6Bpc:[-6..3] init 0; n3R6Bra:[-6..3] init 0; +[] n3R6Bis<2 & n3R6Bpc=-1 -> (n3R6Bip0'=1)&(n3R6Biv3dst0'=0)&(n3R6Bip1'=n3R6Bip0)&(n3R6Biv3dst1'=n3R6Biv3dst0)&(n3R6Bis'=n3R6Bis+1)&(n3R6Bpc'=n3R6Bra); +[] n3R6Bis=2 & n3R6Bpc=-1 -> (n3R6Bpc'=n3R6Bra); +[] n3R6Bis=0 & n3R6Bpc=-2 -> (n3R6Bpc'=n3R6Bra); +[] n3R6Bis>0 & n3R6Bis<2 & n3R6Bpc=-2 -> (n3R6Bip1'=n3R6Bip0)&(n3R6Biv3dst1'=n3R6Biv3dst0)&(n3R6Bis'=n3R6Bis+1)&(n3R6Bpc'=n3R6Bra); +[] n3R6Bis=2 & n3R6Bpc=-2 -> (n3R6Bpc'=n3R6Bra); +[] n3R6Bis=0 & n3R6Bpc=-3 -> (n3R6Bpc'=n3R6Bra); +[] n3R6Bis>0 & n3R6Bpc=-3 -> (n3R6Bip0'=n3R6Bip1)&(n3R6Biv3dst0'=n3R6Biv3dst1)&(n3R6Bis'=n3R6Bis-1)&(n3R6Bpc'=n3R6Bra); +[] n3R6Bos=0 & n3R6Bpc=-4 -> (n3R6Bop0'=n3R6Bopt)&(n3R6Bov3dst0'=n3R6Biv3dst0)&(n3R6Bos'=1)&(n3R6Bpc'=-3); +[] n3R6Bos=1 & n3R6Bpc=-4 -> (n3R6Bop1'=n3R6Bopt)&(n3R6Bov3dst1'=n3R6Biv3dst0)&(n3R6Bos'=2)&(n3R6Bpc'=-3); +[] n3R6Bos=2 & n3R6Bpc=-4 -> (n3R6Bpc'=-3); +[n2S2f2] n3R6Bis=0 -> (n3R6Bip0'=1)&(n3R6Biv3dst0'=n2S2ov3dst0)&(n3R6Bis'=1); +[n2S2f2] n3R6Bis=1 -> (n3R6Bip1'=1)&(n3R6Biv3dst1'=n2S2ov3dst0)&(n3R6Bis'=2); +[n2S2f2] n3R6Bis=2 -> true; +[] unlk=11 & numSteps0 -> (n3R6Bpc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=11 & numSteps (unlk'=0)&(numSkips'=numSkips+1); +[n3R6Bf1] n3R6Bpc=-5 & n3R6Bos>0 & n3R6Bop0=1 -> (n3R6Bop0'=n3R6Bop1)&(n3R6Bov3dst0'=n3R6Bov3dst1)&(n3R6Bos'=n3R6Bos-1)&(n3R6Bpc'=-6); +[] numSteps (n3R6Bpc'=0)&(unlk'=0)&(numSteps'=numSteps+1); +[] unlk=5 & numSteps0 -> (n3R6Bpc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=5 & numSteps (unlk'=6)&(numSkips'=numSkips+1); +[] n3R6Bpc=1 & (n3R6Bv5recvd+1)>=INTMIN & (n3R6Bv5recvd+1)<=INTMAX -> (n3R6Bv5recvd'=(n3R6Bv5recvd+1))&(n3R6Bpc'=2); +[] n3R6Bpc=2 -> (n3R6Bpc'=-3)&(n3R6Bra'=3); +[] numSteps (n3R6Bpc'=0)&(unlk'=6)&(numSteps'=numSteps+1); +endmodule +module n3R05 +n3R05v5recvd:[INTMIN..INTMAX] init 0; +n3R05ip0:[1..2] init 1;n3R05iv3dst0:[INTMIN..INTMAX] init 0; +n3R05ip1:[1..2] init 1;n3R05iv3dst1:[INTMIN..INTMAX] init 0; +n3R05is:[0..2] init 0; +n3R05op0:[1..2] init 1;n3R05ov3dst0:[INTMIN..INTMAX] init 0; +n3R05op1:[1..2] init 1;n3R05ov3dst1:[INTMIN..INTMAX] init 0; +n3R05os:[0..2] init 0; +n3R05opt:[1..2] init 1; +n3R05pc:[-6..3] init 0; n3R05ra:[-6..3] init 0; +[] n3R05is<2 & n3R05pc=-1 -> (n3R05ip0'=1)&(n3R05iv3dst0'=0)&(n3R05ip1'=n3R05ip0)&(n3R05iv3dst1'=n3R05iv3dst0)&(n3R05is'=n3R05is+1)&(n3R05pc'=n3R05ra); +[] n3R05is=2 & n3R05pc=-1 -> (n3R05pc'=n3R05ra); +[] n3R05is=0 & n3R05pc=-2 -> (n3R05pc'=n3R05ra); +[] n3R05is>0 & n3R05is<2 & n3R05pc=-2 -> (n3R05ip1'=n3R05ip0)&(n3R05iv3dst1'=n3R05iv3dst0)&(n3R05is'=n3R05is+1)&(n3R05pc'=n3R05ra); +[] n3R05is=2 & n3R05pc=-2 -> (n3R05pc'=n3R05ra); +[] n3R05is=0 & n3R05pc=-3 -> (n3R05pc'=n3R05ra); +[] n3R05is>0 & n3R05pc=-3 -> (n3R05ip0'=n3R05ip1)&(n3R05iv3dst0'=n3R05iv3dst1)&(n3R05is'=n3R05is-1)&(n3R05pc'=n3R05ra); +[] n3R05os=0 & n3R05pc=-4 -> (n3R05op0'=n3R05opt)&(n3R05ov3dst0'=n3R05iv3dst0)&(n3R05os'=1)&(n3R05pc'=-3); +[] n3R05os=1 & n3R05pc=-4 -> (n3R05op1'=n3R05opt)&(n3R05ov3dst1'=n3R05iv3dst0)&(n3R05os'=2)&(n3R05pc'=-3); +[] n3R05os=2 & n3R05pc=-4 -> (n3R05pc'=-3); +[n2S1f2] n3R05is=0 -> (n3R05ip0'=1)&(n3R05iv3dst0'=n2S1ov3dst0)&(n3R05is'=1); +[n2S1f2] n3R05is=1 -> (n3R05ip1'=1)&(n3R05iv3dst1'=n2S1ov3dst0)&(n3R05is'=2); +[n2S1f2] n3R05is=2 -> true; +[] unlk=10 & numSteps0 -> (n3R05pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=10 & numSteps (unlk'=11)&(numSkips'=numSkips+1); +[n3R05f1] n3R05pc=-5 & n3R05os>0 & n3R05op0=1 -> (n3R05op0'=n3R05op1)&(n3R05ov3dst0'=n3R05ov3dst1)&(n3R05os'=n3R05os-1)&(n3R05pc'=-6); +[] numSteps (n3R05pc'=0)&(unlk'=11)&(numSteps'=numSteps+1); +[] unlk=4 & numSteps0 -> (n3R05pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=4 & numSteps (unlk'=5)&(numSkips'=numSkips+1); +[] n3R05pc=1 & (n3R05v5recvd+1)>=INTMIN & (n3R05v5recvd+1)<=INTMAX -> (n3R05v5recvd'=(n3R05v5recvd+1))&(n3R05pc'=2); +[] n3R05pc=2 -> (n3R05pc'=-3)&(n3R05ra'=3); +[] numSteps (n3R05pc'=0)&(unlk'=5)&(numSteps'=numSteps+1); +endmodule +module n2S2 +n2S2ip0:[1..2] init 1;n2S2iv3dst0:[INTMIN..INTMAX] init 0; +n2S2ip1:[1..2] init 1;n2S2iv3dst1:[INTMIN..INTMAX] init 0; +n2S2is:[0..2] init 0; +n2S2op0:[1..2] init 1;n2S2ov3dst0:[INTMIN..INTMAX] init 0; +n2S2op1:[1..2] init 1;n2S2ov3dst1:[INTMIN..INTMAX] init 0; +n2S2os:[0..2] init 0; +n2S2opt:[1..2] init 1; +n2S2pc:[-6..2] init 0; n2S2ra:[-6..2] init 0; +[] n2S2is<2 & n2S2pc=-1 -> (n2S2ip0'=1)&(n2S2iv3dst0'=0)&(n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-1 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2is<2 & n2S2pc=-2 -> (n2S2ip1'=n2S2ip0)&(n2S2iv3dst1'=n2S2iv3dst0)&(n2S2is'=n2S2is+1)&(n2S2pc'=n2S2ra); +[] n2S2is=2 & n2S2pc=-2 -> (n2S2pc'=n2S2ra); +[] n2S2is=0 & n2S2pc=-3 -> (n2S2pc'=n2S2ra); +[] n2S2is>0 & n2S2pc=-3 -> (n2S2ip0'=n2S2ip1)&(n2S2iv3dst0'=n2S2iv3dst1)&(n2S2is'=n2S2is-1)&(n2S2pc'=n2S2ra); +[] n2S2os=0 & n2S2pc=-4 -> (n2S2op0'=n2S2opt)&(n2S2ov3dst0'=n2S2iv3dst0)&(n2S2os'=1)&(n2S2pc'=-3); +[] n2S2os=1 & n2S2pc=-4 -> (n2S2op1'=n2S2opt)&(n2S2ov3dst1'=n2S2iv3dst0)&(n2S2os'=2)&(n2S2pc'=-3); +[] n2S2os=2 & n2S2pc=-4 -> (n2S2pc'=-3); +[n3R6Bf1] n2S2is=0 -> (n2S2ip0'=2)&(n2S2iv3dst0'=n3R6Bov3dst0)&(n2S2is'=1); +[n3R6Bf1] n2S2is=1 -> (n2S2ip1'=2)&(n2S2iv3dst1'=n3R6Bov3dst0)&(n2S2is'=2); +[n3R6Bf1] n2S2is=2 -> true; +[n2S0f3] n2S2is=0 -> (n2S2ip0'=1)&(n2S2iv3dst0'=n2S0ov3dst0)&(n2S2is'=1); +[n2S0f3] n2S2is=1 -> (n2S2ip1'=1)&(n2S2iv3dst1'=n2S0ov3dst0)&(n2S2is'=2); +[n2S0f3] n2S2is=2 -> true; +[] unlk=9 & numSteps0 -> (n2S2pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=9 & numSteps (unlk'=10)&(numSkips'=numSkips+1); +[n2S2f2] n2S2pc=-5 & n2S2os>0 & n2S2op0=2 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[n2S2f1] n2S2pc=-5 & n2S2os>0 & n2S2op0=1 -> (n2S2op0'=n2S2op1)&(n2S2ov3dst0'=n2S2ov3dst1)&(n2S2os'=n2S2os-1)&(n2S2pc'=-6); +[] numSteps (n2S2pc'=0)&(unlk'=10)&(numSteps'=numSteps+1); +[] unlk=3 & numSteps0 -> (n2S2pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=3 & numSteps (unlk'=4)&(numSkips'=numSkips+1); +[] n2S2pc=1 -> (n2S2opt'=2)&(n2S2pc'=-4)&(n2S2ra'=2); +[] numSteps (n2S2pc'=0)&(unlk'=4)&(numSteps'=numSteps+1); +endmodule +module n2S1 +n2S1ip0:[1..2] init 1;n2S1iv3dst0:[INTMIN..INTMAX] init 0; +n2S1ip1:[1..2] init 1;n2S1iv3dst1:[INTMIN..INTMAX] init 0; +n2S1is:[0..2] init 0; +n2S1op0:[1..2] init 1;n2S1ov3dst0:[INTMIN..INTMAX] init 0; +n2S1op1:[1..2] init 1;n2S1ov3dst1:[INTMIN..INTMAX] init 0; +n2S1os:[0..2] init 0; +n2S1opt:[1..2] init 1; +n2S1pc:[-6..2] init 0; n2S1ra:[-6..2] init 0; +[] n2S1is<2 & n2S1pc=-1 -> (n2S1ip0'=1)&(n2S1iv3dst0'=0)&(n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-1 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1is<2 & n2S1pc=-2 -> (n2S1ip1'=n2S1ip0)&(n2S1iv3dst1'=n2S1iv3dst0)&(n2S1is'=n2S1is+1)&(n2S1pc'=n2S1ra); +[] n2S1is=2 & n2S1pc=-2 -> (n2S1pc'=n2S1ra); +[] n2S1is=0 & n2S1pc=-3 -> (n2S1pc'=n2S1ra); +[] n2S1is>0 & n2S1pc=-3 -> (n2S1ip0'=n2S1ip1)&(n2S1iv3dst0'=n2S1iv3dst1)&(n2S1is'=n2S1is-1)&(n2S1pc'=n2S1ra); +[] n2S1os=0 & n2S1pc=-4 -> (n2S1op0'=n2S1opt)&(n2S1ov3dst0'=n2S1iv3dst0)&(n2S1os'=1)&(n2S1pc'=-3); +[] n2S1os=1 & n2S1pc=-4 -> (n2S1op1'=n2S1opt)&(n2S1ov3dst1'=n2S1iv3dst0)&(n2S1os'=2)&(n2S1pc'=-3); +[] n2S1os=2 & n2S1pc=-4 -> (n2S1pc'=-3); +[n3R05f1] n2S1is=0 -> (n2S1ip0'=2)&(n2S1iv3dst0'=n3R05ov3dst0)&(n2S1is'=1); +[n3R05f1] n2S1is=1 -> (n2S1ip1'=2)&(n2S1iv3dst1'=n3R05ov3dst0)&(n2S1is'=2); +[n3R05f1] n2S1is=2 -> true; +[n2S0f2] n2S1is=0 -> (n2S1ip0'=1)&(n2S1iv3dst0'=n2S0ov3dst0)&(n2S1is'=1); +[n2S0f2] n2S1is=1 -> (n2S1ip1'=1)&(n2S1iv3dst1'=n2S0ov3dst0)&(n2S1is'=2); +[n2S0f2] n2S1is=2 -> true; +[] unlk=8 & numSteps0 -> (n2S1pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=8 & numSteps (unlk'=9)&(numSkips'=numSkips+1); +[n2S1f2] n2S1pc=-5 & n2S1os>0 & n2S1op0=2 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[n2S1f1] n2S1pc=-5 & n2S1os>0 & n2S1op0=1 -> (n2S1op0'=n2S1op1)&(n2S1ov3dst0'=n2S1ov3dst1)&(n2S1os'=n2S1os-1)&(n2S1pc'=-6); +[] numSteps (n2S1pc'=0)&(unlk'=9)&(numSteps'=numSteps+1); +[] unlk=2 & numSteps0 -> (n2S1pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=2 & numSteps (unlk'=3)&(numSkips'=numSkips+1); +[] n2S1pc=1 -> (n2S1opt'=2)&(n2S1pc'=-4)&(n2S1ra'=2); +[] numSteps (n2S1pc'=0)&(unlk'=3)&(numSteps'=numSteps+1); +endmodule +module n2S0 +n2S0ip0:[1..3] init 1;n2S0iv3dst0:[INTMIN..INTMAX] init 0; +n2S0ip1:[1..3] init 1;n2S0iv3dst1:[INTMIN..INTMAX] init 0; +n2S0is:[0..2] init 0; +n2S0op0:[1..3] init 1;n2S0ov3dst0:[INTMIN..INTMAX] init 0; +n2S0op1:[1..3] init 1;n2S0ov3dst1:[INTMIN..INTMAX] init 0; +n2S0os:[0..2] init 0; +n2S0opt:[1..3] init 1; +n2S0pc:[-6..5] init 0; n2S0ra:[-6..5] init 0; +[] n2S0is<2 & n2S0pc=-1 -> (n2S0ip0'=1)&(n2S0iv3dst0'=0)&(n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-1 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0is<2 & n2S0pc=-2 -> (n2S0ip1'=n2S0ip0)&(n2S0iv3dst1'=n2S0iv3dst0)&(n2S0is'=n2S0is+1)&(n2S0pc'=n2S0ra); +[] n2S0is=2 & n2S0pc=-2 -> (n2S0pc'=n2S0ra); +[] n2S0is=0 & n2S0pc=-3 -> (n2S0pc'=n2S0ra); +[] n2S0is>0 & n2S0pc=-3 -> (n2S0ip0'=n2S0ip1)&(n2S0iv3dst0'=n2S0iv3dst1)&(n2S0is'=n2S0is-1)&(n2S0pc'=n2S0ra); +[] n2S0os=0 & n2S0pc=-4 -> (n2S0op0'=n2S0opt)&(n2S0ov3dst0'=n2S0iv3dst0)&(n2S0os'=1)&(n2S0pc'=-3); +[] n2S0os=1 & n2S0pc=-4 -> (n2S0op1'=n2S0opt)&(n2S0ov3dst1'=n2S0iv3dst0)&(n2S0os'=2)&(n2S0pc'=-3); +[] n2S0os=2 & n2S0pc=-4 -> (n2S0pc'=-3); +[n2S2f1] n2S0is=0 -> (n2S0ip0'=3)&(n2S0iv3dst0'=n2S2ov3dst0)&(n2S0is'=1); +[n2S2f1] n2S0is=1 -> (n2S0ip1'=3)&(n2S0iv3dst1'=n2S2ov3dst0)&(n2S0is'=2); +[n2S2f1] n2S0is=2 -> true; +[n2S1f1] n2S0is=0 -> (n2S0ip0'=2)&(n2S0iv3dst0'=n2S1ov3dst0)&(n2S0is'=1); +[n2S1f1] n2S0is=1 -> (n2S0ip1'=2)&(n2S0iv3dst1'=n2S1ov3dst0)&(n2S0is'=2); +[n2S1f1] n2S0is=2 -> true; +[n6Senderf1] n2S0is=0 -> (n2S0ip0'=1)&(n2S0iv3dst0'=n6Senderov3dst0)&(n2S0is'=1); +[n6Senderf1] n2S0is=1 -> (n2S0ip1'=1)&(n2S0iv3dst1'=n6Senderov3dst0)&(n2S0is'=2); +[n6Senderf1] n2S0is=2 -> true; +[] unlk=7 & numSteps0 -> (n2S0pc'=-5)&(unlk'=-1)&(numSkips'=0); +[] unlk=7 & numSteps (unlk'=8)&(numSkips'=numSkips+1); +[n2S0f3] n2S0pc=-5 & n2S0os>0 & n2S0op0=3 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f2] n2S0pc=-5 & n2S0os>0 & n2S0op0=2 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[n2S0f1] n2S0pc=-5 & n2S0os>0 & n2S0op0=1 -> (n2S0op0'=n2S0op1)&(n2S0ov3dst0'=n2S0ov3dst1)&(n2S0os'=n2S0os-1)&(n2S0pc'=-6); +[] numSteps (n2S0pc'=0)&(unlk'=8)&(numSteps'=numSteps+1); +[] unlk=1 & numSteps0 -> (n2S0pc'=1)&(unlk'=-1)&(numSkips'=0); +[] unlk=1 & numSteps (unlk'=2)&(numSkips'=numSkips+1); +[] n2S0pc=1 & (n2S0iv3dst0 (n2S0pc'=2); +[] n2S0pc=1 & !((n2S0iv3dst0 (n2S0pc'=4); +[] n2S0pc=2 -> (n2S0opt'=2)&(n2S0pc'=-4)&(n2S0ra'=3); +[] n2S0pc=3 -> (n2S0pc'=5); +[] n2S0pc=4 -> (n2S0opt'=3)&(n2S0pc'=-4)&(n2S0ra'=5); +[] numSteps (n2S0pc'=0)&(unlk'=2)&(numSteps'=numSteps+1); +endmodule +module finisher +finished:bool init false; +[] !finished & assrtOK & numSkips=maxNumSkips & n6Senderis=0 & n6Senderos=0 & n2S0is=0 & n2S0os=0 & n2S1is=0 & n2S1os=0 & n2S2is=0 & n2S2os=0 & n3R05is=0 & n3R05os=0 & n3R6Bis=0 & n3R6Bos=0 -> (finished'=true); +endmodule + +//Properties + +// P=? [ F finished & assrtOK & obsrvOK & ((n3R05v5recvd+n3R6Bv5recvd)=2) ] / P=? [ F finished & obsrvOK ] diff --git a/translate_.d b/translate_.d index ef61bb5..d1ee55a 100644 --- a/translate_.d +++ b/translate_.d @@ -193,7 +193,7 @@ class Builder{ Expression port; this(Expression port){ this.port=port; } override string toPSI(){ - return text("Q_out.pushBack((Q_in.takeFront()[0],",port.toPSI(),"));\n"); + return text("if(Q_in.size()>0){ Q_out.pushBack((Q_in.takeFront()[0],",port.toPSI(),")); }\n"); } } return new FwdStm(port); @@ -402,6 +402,7 @@ class Builder{ "data = ([]:(Packet × ℝ)[]);\n" )~"}\n"~ "def pushFront(x: Packet × ℝ){\n"~indent( + (capacity?"if size() >= "~capacity.toString()~" { return; }\n":"")~ "data=[x]~data;\n" )~"}\n"~ "def pushBack(x: Packet × ℝ){\n"~indent( @@ -425,9 +426,11 @@ class Builder{ "return data[0];\n" )~"}\n"~ "def dupFront(){\n"~indent( + (capacity?"if size() == 0 { return; }\n":"")~ "pushFront(front());\n" )~"}\n"~ "def popFront(){\n"~indent( + (capacity?"if size() == 0 { return; }\n":"")~ "data=data[1..size()];\n" )~"}\n" )~"}\n"; diff --git a/translate_prism.d b/translate_prism.d new file mode 100644 index 0000000..180df89 --- /dev/null +++ b/translate_prism.d @@ -0,0 +1,800 @@ +import std.conv, std.algorithm, std.range, std.array; +import lexer, expression, declaration, util; + +import std.typecons: Q=Tuple,q=tuple; + +class Builder{ + class Variable{ + string name; + string type; + string init_; + this(string name,string type,string init_=""){ + this.name=name; + this.type=type; + this.init_=init_; + } + } + class Program{ + alias UpdateList=Q!(string,string)[]; + string name; + this(string name){ + this.name=name; + } + void addState(string name,string init_=""){ + state~=new Variable(name,"int",init_); + stateSet[name]=[]; + } + struct TempVarData{ + int count=0; + Q!(int,int)[] ranges; + int getNewTemp(int m, int M){ + ranges ~= q(m,M); + ++count; + return count-1; + } + } + class Label{// TODO: get rid of this? + int id=-1; + Statement stm; + void here()in{assert(id==-1);}body{ + id=cast(int)stms.length; + stms~=[stm]; + } + string toPRISM()in{assert(id!=-1);}body{ + return "__state = "~to!string(id)~";\n"; + } + } + Label getLabel(){ + return new Label(); + } + static abstract class Statement{ + abstract void toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName); + } + static abstract class Expression{ + abstract string toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName); + } + Statement assign(Expression name, Expression rhs){ + static class AssignStm: Statement{ + bool pkt=false; + Expression var; + Expression rhs; + this(Expression var,Expression rhs){ this.var=var; this.rhs=rhs; } + override void toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + string varStr = var.toPRISM(outStream, tempVars, instCtr, mangName); + string rhsStr = rhs.toPRISM(outStream, tempVars, instCtr, mangName); + string output = "[] "~mangName~"pc="~to!string(instCtr)~" & "~rhsStr~">=INTMIN & "~rhsStr~"<=INTMAX"; + UpdateList assignUL; + assignUL ~= q(varStr,rhsStr); + assignUL ~= q(mangName~"pc",to!string(instCtr+1)); + output ~= updateListToPRISM(assignUL); + outStream ~= output; + ++instCtr; + } + } + return new AssignStm(name,rhs); + } + Statement define(Expression name, Expression rhs){ + static class DefineStm: Statement{ + Expression var; + Expression rhs; + this(Expression var,Expression rhs){ this.var=var; this.rhs=rhs; } + override void toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + assert(0,text("Define Statement unimplemented for PRISM backend")); + } + } + return new DefineStm(name,rhs); + } + Expression read(string name, int varType){ + static class Read: Expression{ + string name; + int varType; + this(string name, int varType){ + this.name=name; + this.varType=varType; + } + override string toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + if(name == "pkt") return mangName~"i"; + if(name == "port") return mangName~"ip0"; + if(varType==0) + return mangName~mangleVar(name); + else if(varType==1) + return mangleVar(name); + else if(varType==2) + return name; + else + assert(0); + } + } + return new Read(name,varType); + } + Expression literal(int value){ + static class Literal: Expression{ + int value; + this(int value){ this.value=value; } + override string toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + return to!string(value); + } + } + return new Literal(value); + } + Expression binary(Expression e1,Expression e2,string op){ + class BinaryExp: Expression{ + Expression e1,e2; + string op; + this(Expression e1,Expression e2, string op){ + this.e1=e1; this.e2=e2; this.op=op; + if(op=="or" || op=="||") this.op="|"; + if(op=="and" || op=="&&") this.op="&"; + if(op=="==") this.op="="; + } + override string toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + string s1 = e1.toPRISM(outStream, tempVars, instCtr, mangName); + string s2 = e2.toPRISM(outStream, tempVars, instCtr, mangName); + return "("~s1~op~s2~")"; + } + } + return new BinaryExp(e1,e2,op); + } + Expression field(Expression e,string f){ + class FieldExp: Expression{ + Expression e; + string f; + this(Expression e,string f){ this.e=e; this.f=f; } + override string toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + string pktStr = e.toPRISM(outStream, tempVars, instCtr, mangName); + return pktStr~mangleVar(f)~"0"; + } + } + return new FieldExp(e,f); + } + Expression flip(double p){ + static class Flip: Expression{ + double trueProb; + this(double trueProb){ + this.trueProb=trueProb; + } + override string toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + string newTemp = mangName~"t"~to!string(tempVars.getNewTemp(0,1)); + string output = "[] "~mangName~"pc="~to!string(instCtr)~" -> "; + UpdateList flipUL0, flipUL1; + flipUL0 ~= q(newTemp,"0"); + flipUL0 ~= q(mangName~"pc",to!string(instCtr+1)); + flipUL1 ~= q(newTemp,"1"); + flipUL1 ~= q(mangName~"pc",to!string(instCtr+1)); + //TODO: rounding errors can occur here, eg. 1/3 -> 0.333 + 0.666 =/= 1.0 + output ~= to!string(1.0-trueProb)~":"~updateListToPRISM_pure(flipUL0)~" + "~to!string(trueProb)~":"~updateListToPRISM_pure(flipUL1)~";\n"; + outStream ~= output; + ++instCtr; + return newTemp; + } + } + return new Flip(p); + } + Expression uniformInt(int m, int M){ + static class UniformInt: Expression{ + int minInt, maxInt; + this(int minInt, int maxInt){ + assert(minInt "; + string[] possibilities; + //TODO: rounding errors can occur here, eg. 1-3 -> 0.333 + 0.333 + 0.333 =/= 1.0 + //TODO: handle the edge case where one of the inclusive bounds is the int type minimum/maximum + for(int i=minInt; i<=maxInt; ++i){ + UpdateList uiUL; + uiUL ~= q(newTemp,to!string(i)); + uiUL ~= q(mangName~"pc",to!string(instCtr+1)); + possibilities ~= updateListToPRISM_pure(uiUL); + } + string uniformProb = to!string(1.0/to!double(maxInt-minInt+1)); + output ~= (possibilities.map!(poss=>uniformProb~":"~poss).join(" + "))~";\n"; + outStream ~= output; + ++instCtr; + return newTemp; + } + } + return new UniformInt(m,M); + } + Statement compound(Statement[] stms){ + static class CompoundStm: Statement{ + Statement[] stms; + this(Statement[] stms){ + this.stms=stms; + } + override void toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + for(int i=0; imangName~mangleVar(v.name)~":[INTMIN..INTMAX]"~(v.init_?" init "~v.init_:"")~";\n").join(""); + string queueVars = ""; + assert(nodeName in maxPort); + foreach(ref io; [ "i", "o" ]){ + for(int pos=0; pos0 & "~mangName~"is<"~qSize~" & "~mangName~"pc=-2"; + UpdateList dupUL; + addDataShiftUpdates(dupUL, mangName, "i", 1, to!int(qSize), 0, -1); + dupUL ~= q(mangName~"is",mangName~"is+1"); + dupUL ~= q(mangName~"pc",mangName~"ra"); + dupStmt ~= updateListToPRISM(dupUL); + dupStmt ~= "[] "~mangName~"is="~qSize~" & "~mangName~"pc=-2"; + dupStmt ~= updateListToPRISM([q(mangName~"pc",mangName~"ra")]); + string dropStmt = "[] "~mangName~"is=0 & "~mangName~"pc=-3"; + dropStmt ~= updateListToPRISM([q(mangName~"pc",mangName~"ra")]); + dropStmt ~= "[] "~mangName~"is>0 & "~mangName~"pc=-3"; + UpdateList dropUL; + addDataShiftUpdates(dropUL, mangName, "i", 1, to!int(qSize), -1, 0); + dropUL ~= q(mangName~"is",mangName~"is-1"); + dropUL ~= q(mangName~"pc",mangName~"ra"); + dropStmt ~= updateListToPRISM(dropUL); + string fwdStmt = ""; + for(int pos=0; pos0"; + UpdateList fwdStartUL; + fwdStartUL ~= q(mangName~"pc","-5"); + fwdStartUL ~= q("unlk","false"); + fwdAct ~= updateListToPRISM(fwdStartUL); + foreach(srcNodeName, srcPorts; links){ + foreach(srcPort, dest; srcPorts){ + if(srcNodeName == nodeName){ + fwdAct ~= "["~mangName~"f"~to!string(srcPort)~"] "~mangName~"pc=-5 & "~mangName~"os>0 & "~mangName~"op0="~to!string(srcPort); + UpdateList fwdUL; + addDataShiftUpdates(fwdUL, mangName, "o", 1, to!int(qSize), -1, 0); + fwdUL ~= q(mangName~"os",mangName~"os-1"); + fwdUL ~= q(mangName~"pc","-6"); + fwdAct ~= updateListToPRISM(fwdUL); + } + } + } + fwdAct ~= "[] numSteps0"; + UpdateList runStartUL; + runStartUL ~= q(mangName~"pc","1"); + runStartUL ~= q("unlk","false"); + runAct ~= updateListToPRISM(runStartUL); + int instCtr=1; + for(int i=0; i "~(updates.map!(u=>"("~u[0]~"'="~u[1]~")").join("&"))~";\n"; + }else{ + return " -> true;\n"; + } + } + static string updateListToPRISM_pure(UpdateList updates){ + if(updates.length){ + return updates.map!(u=>"("~u[0]~"'="~u[1]~")").join("&"); + }else{ + return "true"; + } + } + Variable[] state; + void[0][string] stateSet; + Statement[] stms; + } + void addNode(string name)in{assert(name !in nodeId);}body{ + nodeId[name]=cast(int)nodes.length; + nodes~=name; + } + void addLink(InterfaceDecl a,InterfaceDecl b){ + auto x=q(a.node.name,a.port), y=q(b.node.name,b.port); + links[x[0]][x[1]]=y; + if(!(x[0] in maxPort) || x[1]>maxPort[x[0]]) + maxPort[x[0]] = x[1]; + links[y[0]][y[1]]=x; + if(!(y[0] in maxPort) || y[1]>maxPort[y[0]]) + maxPort[y[0]] = y[1]; + } + void addParam(ParameterDecl p){ + params~=p; + } + void addPacketField(string name){ + packetFields~=new Variable(name,"int"); + } + void addNumSteps(NumStepsDecl numSteps){ + this.num_steps = numSteps.num_steps; + } + void addQueueCapacity(QueueCapacityDecl capacity){ + this.capacity = capacity.capacity; + } + void addQuery(QueryDecl query){ + queries~=query.query; + } + Program addProgram(string name){ + auto r=new Program(name); + programs~=r; + return r; + } + void addProgram(string node,string name)in{assert(node in nodeId);}body{ + foreach(i,p;programs) if(p.name==name){ // TODO: replace linear lookup + nodeProg[nodeId[node]]=cast(int)i; + return; + } + assert(0); + } + void addPostObserve(Expression decl){ + postObserves~=decl; + } + string toPRISM(){ + string header = "dtmc\nglobal unlk:bool init true;\nglobal assrtOK:bool init true;\nglobal obsrvOK:bool init true;" + ~"\nconst int INTMIN = 0; const int INTMAX = 255;" + ~"\nconst int maxNumSteps = "~num_steps.toString()~";\nglobal numSteps:[0..maxNumSteps] init 0;\n"; + //assume parameters are integers - any way to find out otherwise? + string paramdef = params.map!(p=>"const int "~mangleVar(p.name.toString())~" = "~(p.init_?p.init_.toString():"?"~p.name.toString())~";\n").join(""); + string modules = ""; + foreach(nodeid, progid; nodeProg){ + modules ~= programs[progid].toPRISM(nodes[nodeid]); + } + finishedCondition = "unlk"~nodes.map!(n=>" & "~mangleNode(n)~"is=0 & "~mangleNode(n)~"os=0").join(); + modules ~= "module finisher\nfinished:bool init false;\n[] !finished & assrtOK & "~finishedCondition~" -> (finished'=true);\nendmodule\n"; + string queries = formatQueries(); + //TODO post observes and nonterminal asserts? + return header~paramdef~modules~queries; + } +private: + static string mangleNode(string nodeName){ + return "n"~to!string(nodeName.length)~nodeName; + } + static string mangleVar(string varName){ + return "v"~to!string(varName.length)~varName; + } + string formatQueries(){ + string rewards=""; + int rewardCtr=0; + string formatQuery(Expression q){ + string translateExpression(Expression exp){ + if(auto be=cast(ABinaryExp)exp){ + if(be.operator=="@") + return mangleNode(be.e2.toString())~translateExpression(be.e1); + auto e1=translateExpression(be.e1); + auto e2=translateExpression(be.e2); + string op=""; + if(be.operator=="or" || be.operator=="||") op="|"; + else if(be.operator=="and" || be.operator=="&&") op="&"; + else if(be.operator=="==") op="="; + else op=be.operator; + return "("~e1~op~e2~")"; + }else if(auto id=cast(Identifier)exp){ + return mangleVar(id.name); + }else if(auto lit=cast(LiteralExp)exp){ + assert(lit.lit.type==Tok!"0",text("TODO: ",lit)); + return lit.lit.str; + }else if(auto ce=cast(CallExp)exp){ + assert(0,text("Call epression unsupported inside queries by PRISM backend")); + }else if(auto be=cast(BuiltInExp)exp){ + assert(0,text("Builtin epression unsupported inside queries by PRISM backend")); + }else if(auto fe=cast(FieldExp)exp){ + assert(0,text("Field epression unsupported inside queries by PRISM backend")); + } + assert(0,text("TODO: ",exp)); + } + if(auto ce=cast(CallExp)q){ + if(auto id=cast(Identifier)ce.e){ + if(id.name=="probability"){ + return "// P=? [ F finished & assrtOK & obsrvOK & "~translateExpression(ce.args[0])~" ] / P=? [ F finished & obsrvOK ]"; + }if(id.name=="expectation"){ + string rewardName = "\"exp"~to!string(rewardCtr++)~"\""; + rewards ~= "rewards "~rewardName~"\n!finished & "~finishedCondition~" : "~translateExpression(ce.args[0])~";\nendrewards\n"; + return "// R{"~rewardName~"}=? [ F finished ]"; + } + } + } + assert(0,text("Only probability queries and expectation queries supported by PRISM backend")); + } + string properties = queries.map!(q=>formatQuery(q)).join("\n"); + return rewards~"\n//Properties\n\n"~properties; + } + string finishedCondition; + Variable[] packetFields; + Program[] programs; + string[] nodes; + ParameterDecl[] params; + int[string] nodeId; + int[int] nodeProg; + Q!(string,int)[int][string] links; + int[string] maxPort; + FunctionDef scheduler; + Expression[] queries; + Expression num_steps; + Expression capacity; + Expression[] postObserves; +} + +string translate(Expression[] exprs, Builder bld){ + string[] paramNames; + Expression[][typeof(typeid(Object))] byTid; + foreach(expr;exprs){ + assert(cast(Declaration)expr && expr.sstate==SemState.completed,text(expr)); + byTid[typeid(expr)]~=expr; + } + auto all(T)(){ return cast(T[])byTid.get(typeid(T),[]); } + auto topology=all!TopologyDecl[0]; + foreach(n;topology.nodes) bld.addNode(n.name.name); + foreach(l;topology.links) bld.addLink(l.a,l.b); + auto params=all!ParametersDecl.length?all!ParametersDecl[0]:null; + if(params) + foreach(prm;params.params){ + bld.addParam(prm); + paramNames ~= prm.name.toString(); + } + auto pfld=all!PacketFieldsDecl[0]; + foreach(f;pfld.fields) bld.addPacketField(f.name.name); + auto pdcl=all!ProgramsDecl[0]; + bld.addNumSteps(all!NumStepsDecl[0]); + assert(all!QueueCapacityDecl.length); //required for PRISM backend + bld.addQueueCapacity(all!QueueCapacityDecl[0]); + foreach(q;all!QueryDecl) bld.addQuery(q); + void translateFun(FunctionDef fdef){ + auto prg=bld.addProgram(fdef.name.name); + Builder.Program.Expression translateExpression(Expression exp){ + if(auto be=cast(ABinaryExp)exp){ + auto e1=translateExpression(be.e1); + auto e2=translateExpression(be.e2); + return prg.binary(e1,e2,be.operator); + }else if(auto id=cast(Identifier)exp){ + foreach(s;paramNames) + if(s == id.name) + return prg.read(id.name,1); + foreach(i,n;topology.nodes) + if(n.name.name == id.name) + return prg.read(to!string(i),2); + return prg.read(id.name,0); + }else if(auto lit=cast(LiteralExp)exp){ + assert(lit.lit.type==Tok!"0",text("TODO: ",lit)); + return prg.literal(to!int(lit.lit.str)); + }else if(auto ce=cast(CallExp)exp){ + auto callee=cast(Identifier)ce.e; + assert(callee); + if(callee.name=="flip"){ + assert(ce.args.length==1); + auto trueProbInt=cast(LiteralExp)ce.args[0]; + auto trueProbFrac=cast(ABinaryExp)ce.args[0]; + assert(trueProbInt || trueProbFrac); + double trueProbDbl; + if(trueProbInt){ + trueProbDbl=to!double(trueProbInt.lit.str); + }else if(trueProbFrac){ + auto numerator=cast(LiteralExp)trueProbFrac.e1; + auto denominator=cast(LiteralExp)trueProbFrac.e2; + assert(numerator && denominator); + trueProbDbl=to!double(numerator.lit.str)/to!double(denominator.lit.str); + } + return prg.flip(trueProbDbl); + }else if(callee.name=="uniformInt"){ + assert(ce.args.length==2); + auto minInt=cast(LiteralExp)ce.args[0]; + auto maxInt=cast(LiteralExp)ce.args[1]; + assert(minInt && maxInt); + return prg.uniformInt(to!int(minInt.lit.str),to!int(maxInt.lit.str)); + }else{ + assert(0); + } + /*}else if(auto ite=cast(IteExp)exp){ + auto cond=translateExpression(ite.cond); + Expression getIt(Expression e){ + auto ce=cast(CompoundExp)e; + assert(ce&&ce.s.length==1); + return ce.s[0]; + } + return prg.ite(cond,translateExpression(getIt(ite.then)),translateExpression(getIt(ite.othw)));*/ + }else if(auto be=cast(BuiltInExp)exp){ + if(be.which==Tok!"FwdQ") return prg.literal(0); + if(be.which==Tok!"RunSw") return prg.literal(1); + }else if(auto fe=cast(FieldExp)exp){ + return prg.field(translateExpression(fe.e),fe.f.name); + } + assert(0,text("TODO: ",exp)); + } + if(fdef.state) + foreach(sd;fdef.state.vars){ + if(sd.init_){ + auto initLit=cast(LiteralExp)sd.init_; + assert(initLit); + prg.addState(sd.name.name,initLit.lit.str); + }else{ + prg.addState(sd.name.name,""); + } + } + alias Statement=Builder.Program.Statement; + alias Label=Builder.Program.Label; + Statement translateStatement(Expression stm,Label nloc,Label loc)in{assert(!!nloc);}body{ + Builder.Program.Statement tstm=null; + if(auto be=cast(ABinaryExp)stm){ + if(cast(BinaryExp!(Tok!"="))be){ + auto e=translateExpression(be.e2); + tstm=prg.assign(translateExpression(be.e1),e); + }else if(cast(BinaryExp!(Tok!":="))be){ + auto e=translateExpression(be.e2); + tstm=prg.define(translateExpression(be.e1),e); + }else assert(0,text(stm)); + }else if(auto ite=cast(IteExp)stm){ + auto cnd=translateExpression(ite.cond); + auto join=nloc; + auto tloc=prg.getLabel(); + tloc.here(); + auto then=translateStatement(ite.then,join,tloc); + auto oloc=prg.getLabel(); + oloc.here(); + auto othw=ite.othw?translateStatement(ite.othw,join,oloc):null; + tstm=prg.getIf(cnd,then,othw); + }else if(auto obs=cast(ObserveExp)stm){ + auto cnd=translateExpression(obs.e); + tstm=prg.observe(cnd); + }else if(auto ass=cast(AssertExp)stm){ + auto cnd=translateExpression(ass.e); + tstm=prg.assert_(cnd); + }else if(auto be=cast(BuiltInExp)stm){ + if(be.which==Tok!"new") tstm=prg.new_(); + if(be.which==Tok!"dup") tstm=prg.dup(); + if(be.which==Tok!"drop") tstm=prg.drop(); + }else if(auto ce=cast(CallExp)stm){ + auto be=cast(BuiltInExp)ce.e; + assert(be&&be.which==Tok!"fwd"); + assert(ce.args.length==1); + tstm=prg.fwd(translateExpression(ce.args[0])); + }else if(auto ce=cast(CompoundExp)stm){ + auto cloc=loc; + if(ce.s.length){ + Statement[] stms; + foreach(i,s;ce.s){ + auto cnloc=i+1==ce.s.length?nloc:prg.getLabel(); + stms~=translateStatement(s,cnloc,cloc); + if(i+1!=ce.s.length) cnloc.here(); + cloc=cnloc; + } + tstm=prg.compound(stms); + }else tstm=prg.skip(); + } + //assert(tstm && nloc,text("TODO: ",stm)); + static class TODOStatement: Builder.Program.Statement{ + Expression stm; + this(Expression stm){ this.stm=stm; } + override void toPRISM(ref string outStream, ref Builder.Program.TempVarData tempVars, ref int instCtr, string mangName){ + outStream ~= "/+ TODO: "~stm.toString()~"+/\n"; + } + } + if(!tstm) tstm=new TODOStatement(stm); + // tstm.next=nloc; + return tstm; + } + auto init=prg.getLabel(); + init.here(); + prg.addStatement(init,translateStatement(fdef.body_,init,init)); + } + foreach(fdef;all!FunctionDef){ + if(fdef.name.name=="scheduler") {}//bld.addScheduler(fdef); + else translateFun(fdef); + } + foreach(m;pdcl.mappings) bld.addProgram(m.node.name,m.prg.name); + foreach(p;all!PostObserveDecl) bld.addPostObserve(p.e); + return bld.toPRISM(); +} diff --git a/translate_prism_deterministic.d b/translate_prism_deterministic.d new file mode 100644 index 0000000..95b99b2 --- /dev/null +++ b/translate_prism_deterministic.d @@ -0,0 +1,815 @@ +import std.conv, std.algorithm, std.range, std.array; +import lexer, expression, declaration, util; + +import std.typecons: Q=Tuple,q=tuple; + +class Builder{ + class Variable{ + string name; + string type; + string init_; + this(string name,string type,string init_=""){ + this.name=name; + this.type=type; + this.init_=init_; + } + } + class Program{ + alias UpdateList=Q!(string,string)[]; + string name; + this(string name){ + this.name=name; + } + void addState(string name,string init_=""){ + state~=new Variable(name,"int",init_); + stateSet[name]=[]; + } + struct TempVarData{ + int count=0; + Q!(int,int)[] ranges; + int getNewTemp(int m, int M){ + ranges ~= q(m,M); + ++count; + return count-1; + } + } + class Label{// TODO: get rid of this? + int id=-1; + Statement stm; + void here()in{assert(id==-1);}body{ + id=cast(int)stms.length; + stms~=[stm]; + } + string toPRISM()in{assert(id!=-1);}body{ + return "__state = "~to!string(id)~";\n"; + } + } + Label getLabel(){ + return new Label(); + } + static abstract class Statement{ + abstract void toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName); + } + static abstract class Expression{ + abstract string toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName); + } + Statement assign(Expression name, Expression rhs){ + static class AssignStm: Statement{ + bool pkt=false; + Expression var; + Expression rhs; + this(Expression var,Expression rhs){ this.var=var; this.rhs=rhs; } + override void toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + string varStr = var.toPRISM(outStream, tempVars, instCtr, mangName); + string rhsStr = rhs.toPRISM(outStream, tempVars, instCtr, mangName); + string output = "[] "~mangName~"pc="~to!string(instCtr)~" & "~rhsStr~">=INTMIN & "~rhsStr~"<=INTMAX"; + UpdateList assignUL; + assignUL ~= q(varStr,rhsStr); + assignUL ~= q(mangName~"pc",to!string(instCtr+1)); + output ~= updateListToPRISM(assignUL); + outStream ~= output; + ++instCtr; + } + } + return new AssignStm(name,rhs); + } + Statement define(Expression name, Expression rhs){ + static class DefineStm: Statement{ + Expression var; + Expression rhs; + this(Expression var,Expression rhs){ this.var=var; this.rhs=rhs; } + override void toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + assert(0,text("Define Statement unimplemented for PRISM backend")); + } + } + return new DefineStm(name,rhs); + } + Expression read(string name, int varType){ + static class Read: Expression{ + string name; + int varType; + this(string name, int varType){ + this.name=name; + this.varType=varType; + } + override string toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + if(name == "pkt") return mangName~"i"; + if(name == "port") return mangName~"ip0"; + if(varType==0) + return mangName~mangleVar(name); + else if(varType==1) + return mangleVar(name); + else if(varType==2) + return name; + else + assert(0); + } + } + return new Read(name,varType); + } + Expression literal(int value){ + static class Literal: Expression{ + int value; + this(int value){ this.value=value; } + override string toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + return to!string(value); + } + } + return new Literal(value); + } + Expression binary(Expression e1,Expression e2,string op){ + class BinaryExp: Expression{ + Expression e1,e2; + string op; + this(Expression e1,Expression e2, string op){ + this.e1=e1; this.e2=e2; this.op=op; + if(op=="or" || op=="||") this.op="|"; + if(op=="and" || op=="&&") this.op="&"; + if(op=="==") this.op="="; + } + override string toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + string s1 = e1.toPRISM(outStream, tempVars, instCtr, mangName); + string s2 = e2.toPRISM(outStream, tempVars, instCtr, mangName); + return "("~s1~op~s2~")"; + } + } + return new BinaryExp(e1,e2,op); + } + Expression field(Expression e,string f){ + class FieldExp: Expression{ + Expression e; + string f; + this(Expression e,string f){ this.e=e; this.f=f; } + override string toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + string pktStr = e.toPRISM(outStream, tempVars, instCtr, mangName); + return pktStr~mangleVar(f)~"0"; + } + } + return new FieldExp(e,f); + } + Expression flip(double p){ + static class Flip: Expression{ + double trueProb; + this(double trueProb){ + this.trueProb=trueProb; + } + override string toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + string newTemp = mangName~"t"~to!string(tempVars.getNewTemp(0,1)); + string output = "[] "~mangName~"pc="~to!string(instCtr)~" -> "; + UpdateList flipUL0, flipUL1; + flipUL0 ~= q(newTemp,"0"); + flipUL0 ~= q(mangName~"pc",to!string(instCtr+1)); + flipUL1 ~= q(newTemp,"1"); + flipUL1 ~= q(mangName~"pc",to!string(instCtr+1)); + //TODO: rounding errors can occur here, eg. 1/3 -> 0.333 + 0.666 =/= 1.0 + output ~= to!string(1.0-trueProb)~":"~updateListToPRISM_pure(flipUL0)~" + "~to!string(trueProb)~":"~updateListToPRISM_pure(flipUL1)~";\n"; + outStream ~= output; + ++instCtr; + return newTemp; + } + } + return new Flip(p); + } + Expression uniformInt(int m, int M){ + static class UniformInt: Expression{ + int minInt, maxInt; + this(int minInt, int maxInt){ + assert(minInt "; + string[] possibilities; + //TODO: rounding errors can occur here, eg. 1-3 -> 0.333 + 0.333 + 0.333 =/= 1.0 + //TODO: handle the edge case where one of the inclusive bounds is the int type minimum/maximum + for(int i=minInt; i<=maxInt; ++i){ + UpdateList uiUL; + uiUL ~= q(newTemp,to!string(i)); + uiUL ~= q(mangName~"pc",to!string(instCtr+1)); + possibilities ~= updateListToPRISM_pure(uiUL); + } + string uniformProb = to!string(1.0/to!double(maxInt-minInt+1)); + output ~= (possibilities.map!(poss=>uniformProb~":"~poss).join(" + "))~";\n"; + outStream ~= output; + ++instCtr; + return newTemp; + } + } + return new UniformInt(m,M); + } + Statement compound(Statement[] stms){ + static class CompoundStm: Statement{ + Statement[] stms; + this(Statement[] stms){ + this.stms=stms; + } + override void toPRISM(ref string outStream, ref TempVarData tempVars, ref int instCtr, string mangName){ + for(int i=0; imangName~mangleVar(v.name)~":[INTMIN..INTMAX]"~(v.init_?" init "~v.init_:"")~";\n").join(""); + string queueVars = ""; + assert(nodeName in maxPort); + foreach(ref io; [ "i", "o" ]){ + for(int pos=0; pos0 & "~mangName~"is<"~qSize~" & "~mangName~"pc=-2"; + UpdateList dupUL; + addDataShiftUpdates(dupUL, mangName, "i", 1, to!int(qSize), 0, -1); + dupUL ~= q(mangName~"is",mangName~"is+1"); + dupUL ~= q(mangName~"pc",mangName~"ra"); + dupStmt ~= updateListToPRISM(dupUL); + dupStmt ~= "[] "~mangName~"is="~qSize~" & "~mangName~"pc=-2"; + dupStmt ~= updateListToPRISM([q(mangName~"pc",mangName~"ra")]); + string dropStmt = "[] "~mangName~"is=0 & "~mangName~"pc=-3"; + dropStmt ~= updateListToPRISM([q(mangName~"pc",mangName~"ra")]); + dropStmt ~= "[] "~mangName~"is>0 & "~mangName~"pc=-3"; + UpdateList dropUL; + addDataShiftUpdates(dropUL, mangName, "i", 1, to!int(qSize), -1, 0); + dropUL ~= q(mangName~"is",mangName~"is-1"); + dropUL ~= q(mangName~"pc",mangName~"ra"); + dropStmt ~= updateListToPRISM(dropUL); + string fwdStmt = ""; + for(int pos=0; pos0"; + UpdateList fwdStartUL; + fwdStartUL ~= q(mangName~"pc","-5"); + fwdStartUL ~= q("unlk","-1"); + fwdStartUL ~= q("numSkips","0"); + fwdAct ~= updateListToPRISM(fwdStartUL); + fwdAct ~= "[] unlk="~to!string(fwdActUnlkVal)~" & numSteps0 & "~mangName~"op0="~to!string(srcPort); + UpdateList fwdUL; + addDataShiftUpdates(fwdUL, mangName, "o", 1, to!int(qSize), -1, 0); + fwdUL ~= q(mangName~"os",mangName~"os-1"); + fwdUL ~= q(mangName~"pc","-6"); + fwdAct ~= updateListToPRISM(fwdUL); + } + } + } + fwdAct ~= "[] numSteps0"; + UpdateList runStartUL; + runStartUL ~= q(mangName~"pc","1"); + runStartUL ~= q("unlk","-1"); + runStartUL ~= q("numSkips","0"); + runAct ~= updateListToPRISM(runStartUL); + runAct ~= "[] unlk="~to!string(nodeId[nodeName])~" & numSteps "~(updates.map!(u=>"("~u[0]~"'="~u[1]~")").join("&"))~";\n"; + }else{ + return " -> true;\n"; + } + } + static string updateListToPRISM_pure(UpdateList updates){ + if(updates.length){ + return updates.map!(u=>"("~u[0]~"'="~u[1]~")").join("&"); + }else{ + return "true"; + } + } + Variable[] state; + void[0][string] stateSet; + Statement[] stms; + } + void addNode(string name)in{assert(name !in nodeId);}body{ + nodeId[name]=cast(int)nodes.length; + nodes~=name; + } + void addLink(InterfaceDecl a,InterfaceDecl b){ + auto x=q(a.node.name,a.port), y=q(b.node.name,b.port); + links[x[0]][x[1]]=y; + if(!(x[0] in maxPort) || x[1]>maxPort[x[0]]) + maxPort[x[0]] = x[1]; + links[y[0]][y[1]]=x; + if(!(y[0] in maxPort) || y[1]>maxPort[y[0]]) + maxPort[y[0]] = y[1]; + } + void addParam(ParameterDecl p){ + params~=p; + } + void addPacketField(string name){ + packetFields~=new Variable(name,"int"); + } + void addNumSteps(NumStepsDecl numSteps){ + this.num_steps = numSteps.num_steps; + } + void addQueueCapacity(QueueCapacityDecl capacity){ + this.capacity = capacity.capacity; + } + void addQuery(QueryDecl query){ + queries~=query.query; + } + Program addProgram(string name){ + auto r=new Program(name); + programs~=r; + return r; + } + void addProgram(string node,string name)in{assert(node in nodeId);}body{ + foreach(i,p;programs) if(p.name==name){ // TODO: replace linear lookup + nodeProg[nodeId[node]]=cast(int)i; + return; + } + assert(0); + } + void addPostObserve(Expression decl){ + postObserves~=decl; + } + string toPRISM(){ + string header = "dtmc\nglobal unlk:[-1.."~to!string(nodes.length*2-1)~"] init 0;\nglobal assrtOK:bool init true;\nglobal obsrvOK:bool init true;" + ~"\nconst int INTMIN = 0; const int INTMAX = 255;" + ~"\nconst int maxNumSteps = "~num_steps.toString()~";\nglobal numSteps:[0..maxNumSteps] init 0;" + ~"\nconst int maxNumSkips = "~to!string(nodes.length*2)~";\nglobal numSkips:[0.."~to!string(nodes.length*2)~"] init 0;\n"; + //assume parameters are integers - any way to find out otherwise? + string paramdef = params.map!(p=>"const int "~mangleVar(p.name.toString())~" = "~(p.init_?p.init_.toString():"?"~p.name.toString())~";\n").join(""); + string modules = ""; + foreach(nodeid, progid; nodeProg){ + modules ~= programs[progid].toPRISM(nodes[nodeid]); + } + finishedCondition = "numSkips=maxNumSkips"~nodes.map!(n=>" & "~mangleNode(n)~"is=0 & "~mangleNode(n)~"os=0").join(); + modules ~= "module finisher\nfinished:bool init false;\n[] !finished & assrtOK & "~finishedCondition~" -> (finished'=true);\nendmodule\n"; + string queries = formatQueries(); + //TODO post observes and nonterminal asserts? + return header~paramdef~modules~queries; + } +private: + static string mangleNode(string nodeName){ + return "n"~to!string(nodeName.length)~nodeName; + } + static string mangleVar(string varName){ + return "v"~to!string(varName.length)~varName; + } + string formatQueries(){ + string rewards=""; + int rewardCtr=0; + string formatQuery(Expression q){ + string translateExpression(Expression exp){ + if(auto be=cast(ABinaryExp)exp){ + if(be.operator=="@") + return mangleNode(be.e2.toString())~translateExpression(be.e1); + auto e1=translateExpression(be.e1); + auto e2=translateExpression(be.e2); + string op=""; + if(be.operator=="or" || be.operator=="||") op="|"; + else if(be.operator=="and" || be.operator=="&&") op="&"; + else if(be.operator=="==") op="="; + else op=be.operator; + return "("~e1~op~e2~")"; + }else if(auto id=cast(Identifier)exp){ + return mangleVar(id.name); + }else if(auto lit=cast(LiteralExp)exp){ + assert(lit.lit.type==Tok!"0",text("TODO: ",lit)); + return lit.lit.str; + }else if(auto ce=cast(CallExp)exp){ + assert(0,text("Call epression unsupported inside queries by PRISM backend")); + }else if(auto be=cast(BuiltInExp)exp){ + assert(0,text("Builtin epression unsupported inside queries by PRISM backend")); + }else if(auto fe=cast(FieldExp)exp){ + assert(0,text("Field epression unsupported inside queries by PRISM backend")); + } + assert(0,text("TODO: ",exp)); + } + if(auto ce=cast(CallExp)q){ + if(auto id=cast(Identifier)ce.e){ + if(id.name=="probability"){ + return "// P=? [ F finished & assrtOK & obsrvOK & "~translateExpression(ce.args[0])~" ] / P=? [ F finished & obsrvOK ]"; + }if(id.name=="expectation"){ + string rewardName = "\"exp"~to!string(rewardCtr++)~"\""; + rewards ~= "rewards "~rewardName~"\n!finished & "~finishedCondition~" : "~translateExpression(ce.args[0])~";\nendrewards\n"; + return "// R{"~rewardName~"}=? [ F finished ]"; + } + } + } + assert(0,text("Only probability queries and expectation queries supported by PRISM backend")); + } + string properties = queries.map!(q=>formatQuery(q)).join("\n"); + return rewards~"\n//Properties\n\n"~properties; + } + string finishedCondition; + Variable[] packetFields; + Program[] programs; + string[] nodes; + ParameterDecl[] params; + int[string] nodeId; + int[int] nodeProg; + Q!(string,int)[int][string] links; + int[string] maxPort; + FunctionDef scheduler; + Expression[] queries; + Expression num_steps; + Expression capacity; + Expression[] postObserves; +} + +string translate(Expression[] exprs, Builder bld){ + string[] paramNames; + Expression[][typeof(typeid(Object))] byTid; + foreach(expr;exprs){ + assert(cast(Declaration)expr && expr.sstate==SemState.completed,text(expr)); + byTid[typeid(expr)]~=expr; + } + auto all(T)(){ return cast(T[])byTid.get(typeid(T),[]); } + auto topology=all!TopologyDecl[0]; + foreach(n;topology.nodes) bld.addNode(n.name.name); + foreach(l;topology.links) bld.addLink(l.a,l.b); + auto params=all!ParametersDecl.length?all!ParametersDecl[0]:null; + if(params) + foreach(prm;params.params){ + bld.addParam(prm); + paramNames ~= prm.name.toString(); + } + auto pfld=all!PacketFieldsDecl[0]; + foreach(f;pfld.fields) bld.addPacketField(f.name.name); + auto pdcl=all!ProgramsDecl[0]; + bld.addNumSteps(all!NumStepsDecl[0]); + assert(all!QueueCapacityDecl.length); //required for PRISM backend + bld.addQueueCapacity(all!QueueCapacityDecl[0]); + foreach(q;all!QueryDecl) bld.addQuery(q); + void translateFun(FunctionDef fdef){ + auto prg=bld.addProgram(fdef.name.name); + Builder.Program.Expression translateExpression(Expression exp){ + if(auto be=cast(ABinaryExp)exp){ + auto e1=translateExpression(be.e1); + auto e2=translateExpression(be.e2); + return prg.binary(e1,e2,be.operator); + }else if(auto id=cast(Identifier)exp){ + foreach(s;paramNames) + if(s == id.name) + return prg.read(id.name,1); + foreach(i,n;topology.nodes) + if(n.name.name == id.name) + return prg.read(to!string(i),2); + return prg.read(id.name,0); + }else if(auto lit=cast(LiteralExp)exp){ + assert(lit.lit.type==Tok!"0",text("TODO: ",lit)); + return prg.literal(to!int(lit.lit.str)); + }else if(auto ce=cast(CallExp)exp){ + auto callee=cast(Identifier)ce.e; + assert(callee); + if(callee.name=="flip"){ + assert(ce.args.length==1); + auto trueProbInt=cast(LiteralExp)ce.args[0]; + auto trueProbFrac=cast(ABinaryExp)ce.args[0]; + assert(trueProbInt || trueProbFrac); + double trueProbDbl; + if(trueProbInt){ + trueProbDbl=to!double(trueProbInt.lit.str); + }else if(trueProbFrac){ + auto numerator=cast(LiteralExp)trueProbFrac.e1; + auto denominator=cast(LiteralExp)trueProbFrac.e2; + assert(numerator && denominator); + trueProbDbl=to!double(numerator.lit.str)/to!double(denominator.lit.str); + } + return prg.flip(trueProbDbl); + }else if(callee.name=="uniformInt"){ + assert(ce.args.length==2); + auto minInt=cast(LiteralExp)ce.args[0]; + auto maxInt=cast(LiteralExp)ce.args[1]; + assert(minInt && maxInt); + return prg.uniformInt(to!int(minInt.lit.str),to!int(maxInt.lit.str)); + }else{ + assert(0); + } + /*}else if(auto ite=cast(IteExp)exp){ + auto cond=translateExpression(ite.cond); + Expression getIt(Expression e){ + auto ce=cast(CompoundExp)e; + assert(ce&&ce.s.length==1); + return ce.s[0]; + } + return prg.ite(cond,translateExpression(getIt(ite.then)),translateExpression(getIt(ite.othw)));*/ + }else if(auto be=cast(BuiltInExp)exp){ + if(be.which==Tok!"FwdQ") return prg.literal(0); + if(be.which==Tok!"RunSw") return prg.literal(1); + }else if(auto fe=cast(FieldExp)exp){ + return prg.field(translateExpression(fe.e),fe.f.name); + } + assert(0,text("TODO: ",exp)); + } + if(fdef.state) + foreach(sd;fdef.state.vars){ + if(sd.init_){ + auto initLit=cast(LiteralExp)sd.init_; + assert(initLit); + prg.addState(sd.name.name,initLit.lit.str); + }else{ + prg.addState(sd.name.name,""); + } + } + alias Statement=Builder.Program.Statement; + alias Label=Builder.Program.Label; + Statement translateStatement(Expression stm,Label nloc,Label loc)in{assert(!!nloc);}body{ + Builder.Program.Statement tstm=null; + if(auto be=cast(ABinaryExp)stm){ + if(cast(BinaryExp!(Tok!"="))be){ + auto e=translateExpression(be.e2); + tstm=prg.assign(translateExpression(be.e1),e); + }else if(cast(BinaryExp!(Tok!":="))be){ + auto e=translateExpression(be.e2); + tstm=prg.define(translateExpression(be.e1),e); + }else assert(0,text(stm)); + }else if(auto ite=cast(IteExp)stm){ + auto cnd=translateExpression(ite.cond); + auto join=nloc; + auto tloc=prg.getLabel(); + tloc.here(); + auto then=translateStatement(ite.then,join,tloc); + auto oloc=prg.getLabel(); + oloc.here(); + auto othw=ite.othw?translateStatement(ite.othw,join,oloc):null; + tstm=prg.getIf(cnd,then,othw); + }else if(auto obs=cast(ObserveExp)stm){ + auto cnd=translateExpression(obs.e); + tstm=prg.observe(cnd); + }else if(auto ass=cast(AssertExp)stm){ + auto cnd=translateExpression(ass.e); + tstm=prg.assert_(cnd); + }else if(auto be=cast(BuiltInExp)stm){ + if(be.which==Tok!"new") tstm=prg.new_(); + if(be.which==Tok!"dup") tstm=prg.dup(); + if(be.which==Tok!"drop") tstm=prg.drop(); + }else if(auto ce=cast(CallExp)stm){ + auto be=cast(BuiltInExp)ce.e; + assert(be&&be.which==Tok!"fwd"); + assert(ce.args.length==1); + tstm=prg.fwd(translateExpression(ce.args[0])); + }else if(auto ce=cast(CompoundExp)stm){ + auto cloc=loc; + if(ce.s.length){ + Statement[] stms; + foreach(i,s;ce.s){ + auto cnloc=i+1==ce.s.length?nloc:prg.getLabel(); + stms~=translateStatement(s,cnloc,cloc); + if(i+1!=ce.s.length) cnloc.here(); + cloc=cnloc; + } + tstm=prg.compound(stms); + }else tstm=prg.skip(); + } + //assert(tstm && nloc,text("TODO: ",stm)); + static class TODOStatement: Builder.Program.Statement{ + Expression stm; + this(Expression stm){ this.stm=stm; } + override void toPRISM(ref string outStream, ref Builder.Program.TempVarData tempVars, ref int instCtr, string mangName){ + outStream ~= "/+ TODO: "~stm.toString()~"+/\n"; + } + } + if(!tstm) tstm=new TODOStatement(stm); + // tstm.next=nloc; + return tstm; + } + auto init=prg.getLabel(); + init.here(); + prg.addStatement(init,translateStatement(fdef.body_,init,init)); + } + foreach(fdef;all!FunctionDef){ + if(fdef.name.name=="scheduler") {}//bld.addScheduler(fdef); + else translateFun(fdef); + } + foreach(m;pdcl.mappings) bld.addProgram(m.node.name,m.prg.name); + foreach(p;all!PostObserveDecl) bld.addPostObserve(p.e); + return bld.toPRISM(); +}