Ex2_modif.nm 5.13 KB
pta

formula fk1Ca = (sU=1);
formula fk2Ca = (sCa=3);
formula fk1I = (sF=1) | (sF=8);
formula fk2I = (sI=3);
formula fk1F = (sL=1) | (sL=3);
formula fk2F = (sF=6) | (sF=11);
formula fk1U = (sL=1);
formula fk2U = (sU=9);
formula fk1L = (sF=1) | (sF=3);
formula fk2L = (sL=11);
formula flock1 = (sU=4) | (sL=6) | (sG=1);
formula flock2 = (sM=1);
formula funlock1 = (sU=7) | (sL=9) | (sG=4);
formula funlock2 = (sM=3);



module mCa
    xCa : clock;
    sCa : [0..3] init 0;
    
    invariant
        (sCa=0 => xCa <= 3000) &
        (sCa=1 => xCa <= 4500) &
        (sCa=2 => xCa <= 0) 
    endinvariant

    [] sCa=0 & xCa >= 2000 -> (sCa'=1) & (xCa'=0);
    [] sCa=1 & xCa >= 3500 -> (sCa'=2) & (xCa'=0);
    [k1Ca] sCa=2 -> (sCa'=1) & (xCa'=0);
    [] sCa=2 & !fk1Ca -> (sCa'=3);
    [k2Ca] sCa=3 -> (sCa'=1) & (xCa'=0);
endmodule

module mI
    xI : clock;
    sI : [0..3] init 0;
    
    invariant
        (sI=0 => xI <= 600) &
        (sI=1 => xI <= 1000) &
        (sI=2 => xI <= 0) 
    endinvariant

    [] sI=0 & xI >= 400 -> (sI'=1) & (xI'=0);
    [] sI=1 & xI >= 900 -> (sI'=2) & (xI'=0);
    [k1I] sI=2 -> (sI'=1) & (xI'=0);
    [] sI=2 & !fk1I -> (sI'=3);
    [k2I] sI=3 -> (sI'=1) & (xI'=0);
endmodule

module mU
    xU : clock;
    sU : [0..9] init 0;

    invariant 
        (sU=0 => xU<=0) &
        (sU=2 => xU<=9000) &
        (sU=3 => xU<=0) &
        (sU=5 => xU<=400) &
        (sU=6 => xU<=0) &
        (sU=8 => xU<=0)
    endinvariant

    [k2Ca] sU=0 -> (sU'=2) & (xU'=0);
    [] sU=0 & !fk2Ca -> (sU'=1);
    [k1Ca] sU=1 -> (sU'=2) & (xU'=0);
    [] sU=2 & xU >= 7000 -> (sU'=3) & (xU'=0);
    [] sU=3 & !flock2 -> (sU'=4);
    [lock2U] sU=3 -> (sU'=5) & (xU'=0);
    [lock1U] sU=4 -> (sU'=5) & (xU'=0);
    [] sU=5 & xU >= 300 -> (sU'=6) & (xU'=0);
    [] sU=6 & !funlock2 -> (sU'=7);
    [unlock2U] sU=6 -> (sU'=8) & (xU'=0);
    [unlock1U] sU=7 -> (sU'=8) & (xU'=0);
    [k2U] sU=8 -> (sU'=0) & (xU'=0);
    [] sU=8 & !fk2U -> (sU'=9);
    [k1U] sU=9 -> (sU'=0) & (xU'=8);

    
endmodule

module mF
    xF : clock;
    sF : [0..11] init 7;

    invariant 
        (sF=0 => xF<=0) &
        (sF=2 => xF<=0) &
        (sF=4 => xF<=60) &
        (sF=5 => xF<=0) &
        (sF=7 => xF<=0) &
        (sF=9 => xF<=60) &
        (sF=10 => xF<=0) 
    endinvariant

    [k2I] sF=0 -> (sF'=2) & (xF'=0);
    [k2L] sF=0 -> (sF'=4) & (xF'=0);
    [] sF=0 & !fk2I & !fk2L -> (sF'=1);
    [k1I] sF=1 -> (sF'=2) & (xF'=0);
    [k1L] sF=1 -> (sF'=4) & (xF'=0);
    [k2L] sF=2 -> (sF'=4) & (xF'=0);
    [] sF=2 & !fk2L -> (sF'=3);
    [k1L] sF=3 -> (sF'=4) & (xF'=0);
    [] sF=4 & xF >= 40 -> (sF'=5) & (xF'=0);
    [] sF=5 & !fk1F -> (sF'=6);
    [k1F] sF=5 -> (sF'=0) & (xF'=0);
    [k2F] sF=6 -> (sF'=0) & (xF'=0);
    [k2I] sF=7 -> (sF'=9) & (xF'=0);
    [] sF=7 & !fk2I -> (sF'=8);
    [k1I] sF=8 -> (sF'=9) & (xF'=0);
    [] sF=9 & xF >= 40 -> (sF'=10) & (xF'=0);
    [] sF=10 & !fk1F -> (sF'=11);
    [k1F] sF=10 -> (sF'=0) & (xF'=0);
    [k2F] sF=11 -> (sF'=0) & (xF'=0);
endmodule

module mL
    xL : clock;
    sL : [0..11] init 0;

    invariant 
        (sL=0 => xL<=0) &
        (sL=2 => xL<=0) &
        (sL=4 => xL<=30) &
        (sL=5 => xL<=0) &
        (sL=7 => xL<=20) &
        (sL=8 => xL<=0) &
        (sL=10 => xL<=0) 
    endinvariant

    [k2U] sL=0 -> (sL'=2) & (xL'=0);
    [k2F] sL=0 -> (sL'=4) & (xL'=0);
    [] sL=0 & !fk2U & !fk2F -> (sL'=1);
    [k1U] sL=1 -> (sL'=2) & (xL'=0);
    [k1F] sL=1 -> (sL'=4) & (xL'=0);
    [k2F] sL=2 -> (sL'=4) & (xL'=0);
    [] sL=2 & !fk2F -> (sL'=3);
    [k1F] sL=3 -> (sL'=4) & (xL'=0);
    [] sL=4 & xL >= 20 -> (sL'=5) & (xL'=0);
    [] sL=5 & !flock2 -> (sL'=6);
    [lock2L] sL=5 -> (sL'=7) & (xL'=0);
    [lock1L] sL=6 -> (sL'=7) & (xL'=0);
    [] sL=7 & xL >= 10 -> (sL'=8) & (xL'=0);
    [] sL=8 & !funlock2 -> (sL'=9);
    [unlock2L] sL=8 -> (sL'=10) & (xL'=0);
    [unlock1L] sL=9 -> (sL'=10) & (xL'=0);
    [k2L] sL=10 -> (sL'=0) & (xL'=0);
    [] sL=10 & !fk2L -> (sL'=11);
    [k1L] sL=11 -> (sL'=0) & (xL'=8);  

endmodule

module mM
    xM : clock;
    sM : [0..3] init 1;

    invariant 
        (sM=0 => xM<=0) &
        (sM=2 => xM<=0)
    endinvariant

    [] sM=0 & !flock1-> (sM'=1);
    [lock1L] sM=0 -> (sM'=2) & (xM'=0);
    [lock1U] sM=0 -> (sM'=2) & (xM'=0);
    [lock1G] sM=0 -> (sM'=2) & (xM'=0);
    [lock2L] sM=1 -> (sM'=2) & (xM'=0);
    [lock2U] sM=1 -> (sM'=2) & (xM'=0);
    [lock2G] sM=1 -> (sM'=2) & (xM'=0);
    [] sM=2 & !funlock1 -> (sM'=3);
    [unlock1L] sM=2 -> (sM'=0) & (xM'=0);
    [unlock1U] sM=2 -> (sM'=0) & (xM'=0);
    [unlock1G] sM=2 -> (sM'=0) & (xM'=0);
    [unlock2L] sM=3 -> (sM'=0) & (xM'=0);
    [unlock2U] sM=3 -> (sM'=0) & (xM'=0);
    [unlock2G] sM=3 -> (sM'=0) & (xM'=0);

endmodule

module mG
    xG : clock;
    sG : [0..5] init 0;

    invariant 
         (sG=0 => xG<=0) &
         (sG=2 => xG<=420) &
         (sG=3 => xG<=0) &
         (sG=5 => xG<=750)
    endinvariant

    [lock2G] sG=0 -> (sG'=2) & (xG'=0);
    [] sG=0 & !flock2 -> (sG'=1);
    [lock1G] sG=1 -> (sG'=2) & (xG'=0);
    [] sG=2 & xG >= 310 -> (sG'=3) & (xG'=0);
    [unlock2G] sG=3 -> (sG'=5) & (xG'=0);
    [] sG=3 & !funlock2 -> (sG'=4);
    [unlock1G] sG=4 -> (sG'=5) & (xG'=0);
    [] sG=5 & xG >= 500 -> (sG'=0) & (xG'=0);

endmodule