Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /************************************************
- * TP1 Mini Contrôle ferroviaire
- * Réalisé par :
- * Alex Lacasse (111 239 094)
- * Antoine Olivier (111 175 276)
- * Philippe Audet (111 238 832)
- * Samuel Comeau (111 181 237)
- ************************************************/
- const LA = 5
- const LB = 7
- const LC = 5
- A = A[1],
- A[i:1..LA] = (when (i < LA && i != 2 && i != 4 ) t[i] -> A[i+1] |
- when (i == 2) entreeAB -> t[i] -> sortieAB -> A[i+1] |
- when (i == 4) entreeABC -> t[i] -> sortieABC -> A[i+1] |
- when (i == LA) t[i] -> A ).
- ||TrainA = a:A.
- B = B[1],
- B[i:1..LB] = (when (i < LB && i != 2 && i != 4 && i != 6 ) t[i] -> B[i+1] |
- when (i == 2) entreeAB -> t[i] -> sortieAB -> B[i+1] |
- when (i == 4) entreeBC -> t[i] -> sortieBC -> B[i+1] |
- when (i == 6) entreeABC -> t[i] -> sortieABC -> B[i+1] |
- when (i == LB) t[i] -> B).
- ||TrainB = b:B.
- C = C[1],
- C[i:1..LC] = (when (i < LC && i != 2 && i != 4 ) t[i] -> C[i+1] |
- when (i == 2) entreeBC -> t[i] -> sortieBC -> C[i+1] |
- when (i == 4) entreeABC -> t[i] -> sortieABC -> C[i+1] |
- when (i == LC) t[i] -> C ).
- ||TrainC = c:C.
- ||Reseau1 = (TrainA || TrainB || TrainC) .
- /************************************************
- * Question #1
- * Trace violant la propriété P1 :
- * a.t.1 -> a.entreeAB
- * b.t.1 -> b.entreeAB
- * ERROR
- * Trace violant la propriété P2 :
- * b.t.1 -> b.entreeAB -> b.t.2 -> b.sortieAB -> b.t.3 -> b.entreeBC
- * c.t.1 -> c.entreeBC
- * ERROR
- * Trace violant la propriété P3 :
- * a.t.1 -> a.entreeAB -> a.t.2 -> a.sortieAB -> a.t.3 -> a.entreeABC
- * c.t.1 -> c.entreeBC -> c.t.2 -> c.sortieBC -> c.t.3 -> c.entreeABC
- * ERROR
- ************************************************/
- property P1 =({a,b}.entreeAB->{a,b}.sortieAB->P1).
- property P2 =({b,c}.entreeBC->{b,c}.sortieBC->P2).
- property P3 =({a,b,c}.entreeABC->{a,b,c}.sortieABC->P3).
- ||TestExclusionMutuelle = (Reseau1 || P1 || P2 || P3).
- /************************************************
- * Question #2
- * Preuve que ça marche :
- * a.a.t.1 -> a.entreeAB -> a.a.t.2 -> a.sortieAB
- * b.b.t.1 (ne peut pas entrer dans entreeAB, car a est déjà entrée)
- ************************************************/
- ||TrainA2 = a:A / {entreeAB / a.entreeAB, sortieAB / a.sortieAB, entreeABC / a.entreeABC, sortieABC / a.sortieABC }.
- ||TrainB2 = b:B / {entreeAB / b.entreeAB, sortieAB / b.sortieAB, entreeBC / b.entreeBC, sortieBC / b.sortieBC, entreeABC / b.entreeABC, sortieABC / b.sortieABC }.
- ||TrainC2 = c:C / {entreeBC / c.entreeBC, sortieBC / c.sortieBC, entreeABC / c.entreeABC, sortieABC / c.sortieABC }.
- LOCK_AB = ( entreeAB -> sortieAB -> LOCK_AB ).
- LOCK_BC = ( entreeBC -> sortieBC -> LOCK_BC ).
- LOCK_ABC = ( entreeABC -> sortieABC -> LOCK_ABC ).
- ||Reseau2 = (a:TrainA2 || b:TrainB2 || c:TrainC2 || {a, b, c}::LOCK_AB || {a,b,c}::LOCK_ABC || {a,b,c}::LOCK_BC).
- /************************************************
- * Question #3
- ************************************************/
- const N=2
- range T = 0..N
- range ID = 1..N
- DEPASSE_PAS_AB1 = C1[1],
- C1[i:ID] = ( [i].entreeAB -> C1[i%N+1] ).
- DEPASSE_PAS_AB2 = C2[1],
- C2[i:ID] = ( [i].sortieAB -> C2[i%N+1] ).
- DEPASSE_PAS_BC1 = C1[1],
- C1[i:ID] = ( [i].entreeBC -> C1[i%N+1] ).
- DEPASSE_PAS_BC2 = C2[1],
- C2[i:ID] = ( [i].sortieBC -> C2[i%N+1] ).
- DEPASSE_PAS_ABC1 = C1[1],
- C1[i:ID] = ( [i].entreeABC -> C1[i%N+1] ).
- DEPASSE_PAS_ABC2 = C2[1],
- C2[i:ID] = ( [i].sortieABC -> C2[i%N+1] ).
- ||CONVOI_A = ([i:ID]:TrainA2 || DEPASSE_PAS_AB1 || DEPASSE_PAS_AB2 || DEPASSE_PAS_ABC1 || DEPASSE_PAS_ABC2 ).
- ||CONVOI_B = ([i:ID]:TrainB2 || DEPASSE_PAS_AB1 || DEPASSE_PAS_AB2 ||DEPASSE_PAS_BC1 || DEPASSE_PAS_BC2 || DEPASSE_PAS_ABC1 || DEPASSE_PAS_ABC2 ).
- ||CONVOI_C = ([i:ID]:TrainC2 ||DEPASSE_PAS_BC1 || DEPASSE_PAS_BC2 || DEPASSE_PAS_ABC1 || DEPASSE_PAS_ABC2 ).
- ||TRAINS = (trainA:CONVOI_A || trainB: CONVOI_B || trainC: CONVOI_C).
- CHEMIN_AB = CHEMIN_AB[0][0],
- CHEMIN_AB[na:T][nb:T]= (
- when (nb ==0) trainA[i:ID].entreeAB -> CHEMIN_AB[na+1][nb]|
- trainA[j:ID].sortieAB -> CHEMIN_AB[na-1][nb]|
- when (na ==0) trainB[i:ID].entreeAB -> CHEMIN_AB[na][nb+1]|
- trainB[j:ID].sortieAB -> CHEMIN_AB[na][nb-1]).
- CHEMIN_BC = CHEMIN_BC[0][0],
- CHEMIN_BC[nb:T][nc:T]= (
- when (nc ==0) trainB[i:ID].entreeBC -> CHEMIN_BC[nb+1][nc]|
- trainB[j:ID].sortieBC -> CHEMIN_BC[nb-1][nc]|
- when (nb ==0) trainC[i:ID].entreeBC -> CHEMIN_BC[nb][nc+1]|
- trainC[j:ID].sortieBC -> CHEMIN_BC[nb][nc-1]).
- CHEMIN_ABC = CHEMIN_ABC[0][0][0],
- CHEMIN_ABC[na:T][nb:T][nc:T]= (
- when (nc ==0 && na ==0) trainB[i:ID].entreeABC -> CHEMIN_ABC[na][nb+1][nc]|
- trainB[j:ID].sortieABC -> CHEMIN_ABC[na][nb-1][nc]|
- when (nc ==0 && nb ==0) trainA[i:ID].entreeABC -> CHEMIN_ABC[na+1][nb][nc]|
- trainA[j:ID].sortieABC -> CHEMIN_ABC[na-1][nb][nc]|
- when (na ==0 && nb ==0) trainC[i:ID].entreeABC -> CHEMIN_ABC[na][nb][nc+1]|
- trainC[j:ID].sortieABC -> CHEMIN_ABC[na][nb][nc-1]).
- ||Reseau3 = ( CHEMIN_AB || CHEMIN_BC || CHEMIN_ABC || TRAINS).
- /************************************************
- * Question #4
- *Aucun blocage
- *On a du progrès
- ************************************************/
- property P41 = CHEMIN_AB[0][0],
- CHEMIN_AB[na:T][nb:T]= (
- when (nb ==0) trainA[i:ID].entreeAB -> CHEMIN_AB[na+1][nb]|
- trainA[j:ID].sortieAB -> CHEMIN_AB[na-1][nb]|
- when (na ==0) trainB[i:ID].entreeAB -> CHEMIN_AB[na][nb+1]|
- trainB[j:ID].sortieAB -> CHEMIN_AB[na][nb-1]).
- property P42 = CHEMIN_BC[0][0],
- CHEMIN_BC[nb:T][nc:T]= (
- when (nc ==0) trainB[i:ID].entreeBC -> CHEMIN_BC[nb+1][nc]|
- trainB[j:ID].sortieBC -> CHEMIN_BC[nb-1][nc]|
- when (nb ==0) trainC[i:ID].entreeBC -> CHEMIN_BC[nb][nc+1]|
- trainC[j:ID].sortieBC -> CHEMIN_BC[nb][nc-1]).
- property P43 = CHEMIN_ABC[0][0][0],
- CHEMIN_ABC[na:T][nb:T][nc:T]= (
- when (nc ==0 && na ==0) trainB[i:ID].entreeABC -> CHEMIN_ABC[na][nb+1][nc]|
- trainB[j:ID].sortieABC -> CHEMIN_ABC[na][nb-1][nc]|
- when (nc ==0 && nb ==0) trainA[i:ID].entreeABC -> CHEMIN_ABC[na+1][nb][nc]|
- trainA[j:ID].sortieABC -> CHEMIN_ABC[na-1][nb][nc]|
- when (na ==0 && nb ==0) trainC[i:ID].entreeABC -> CHEMIN_ABC[na][nb][nc+1]|
- trainC[j:ID].sortieABC -> CHEMIN_ABC[na][nb][nc-1]).
- ||Reseau4 = (Reseau3 ||P41 ||P42 ||P43 ).
- /************************************************
- * Question #5
- *Aucun blocage
- *On a du progrès
- ************************************************/
- property P51 = C1[1],
- C1[i:ID] = ( [i].entreeAB -> C1[i%N+1] ).
- property P52 = C2[1],
- C2[i:ID] = ( [i].sortieAB -> C2[i%N+1] ).
- property P53 = C1[1],
- C1[i:ID] = ( [i].entreeBC -> C1[i%N+1] ).
- property P54 = C2[1],
- C2[i:ID] = ( [i].sortieBC -> C2[i%N+1] ).
- property P55 = C1[1],
- C1[i:ID] = ( [i].entreeABC -> C1[i%N+1] ).
- property P56 = C2[1],
- C2[i:ID] = ( [i].sortieABC -> C2[i%N+1] ).
- ||CONVOI_A_5 = ([i:ID]:TrainA2 || DEPASSE_PAS_AB1 || DEPASSE_PAS_AB2 || P51 || P52 || DEPASSE_PAS_ABC1 || DEPASSE_PAS_ABC2 || P55 || P56 ).
- ||CONVOI_B_5 = ([i:ID]:TrainB2 ||DEPASSE_PAS_AB1 || DEPASSE_PAS_AB2 ||DEPASSE_PAS_BC1 || DEPASSE_PAS_BC2 || DEPASSE_PAS_ABC1 || DEPASSE_PAS_ABC2 || P51 || P52 || P53 || P54 || P55 || P56 ).
- ||CONVOI_C_5 = ([i:ID]:TrainC2 ||DEPASSE_PAS_BC1 || DEPASSE_PAS_BC2 || DEPASSE_PAS_ABC1 || DEPASSE_PAS_ABC2 ||P53 || P54 || P55 || P56 ).
- ||TRAINS_5 = (trainA:CONVOI_A_5 || trainB: CONVOI_B_5 || trainC: CONVOI_C_5).
- ||Reseau5 =(CHEMIN_AB || CHEMIN_BC || CHEMIN_ABC || TRAINS_5 ||P41 ||P42 ||P43).
- /************************************************
- * Question #6
- * Le système est robuste
- * Aucun blocage
- * On a du progrès
- ************************************************/
- set ActionsTrainA = {a.{entreeAB, sortieAB, entreeABC, sortieABC}}
- ||Reseau6 =(Reseau5) >> {[i:1..N].ActionsTrainA}.
- /************************************************
- * Question #7
- * On force l'entrée dans les troncons en alterance.
- * pour AB a envoit son premier train et ensuite c'est le tour de b et ainsi de suite.
- * le comportement est similaire pour BC et ABC.
- * Cependant ceci force l'attente des trains aux tronçons lorsqu'il n'arrive pas dans le bon ordre.
- ************************************************/
- CHEMIN_AB_ORDRE = (trainA.[1..N].entreeAB -> trainA.[1..N].sortieAB -> trainB.[1..N].entreeAB -> trainB.[1..N].sortieAB -> CHEMIN_AB_ORDRE).
- CHEMIN_BC_ORDRE = (trainB.[1..N].entreeBC -> trainB.[1..N].sortieBC -> trainC.[1..N].entreeBC -> trainC.[1..N].sortieBC -> CHEMIN_BC_ORDRE).
- CHEMIN_ABC_ORDRE = (trainA.[1..N].entreeABC -> trainA.[1..N].sortieABC ->trainB.[1..N].entreeABC -> trainB.[1..N].sortieABC -> trainC.[1..N].entreeABC -> trainC.[1..N].sortieABC -> CHEMIN_ABC_ORDRE).
- ||Reseau7 = (Reseau6 || CHEMIN_AB_ORDRE || CHEMIN_BC_ORDRE || CHEMIN_ABC_ORDRE).
- /************************************************
- * Question #8
- ************************************************/
- TrainALeger = ( a.entreeAB -> a.sortieAB -> a.entreeABC -> a.sortieABC -> TrainALeger).
- TrainBLeger = ( b.entreeAB -> b.sortieAB -> b.entreeBC -> b.sortieBC -> b.entreeABC -> b.sortieABC -> TrainBLeger).
- TrainCLeger = ( c.entreeBC -> c.sortieBC -> c.entreeABC -> c.sortieABC -> TrainCLeger).
- ||TrainA3 = (a:TrainALeger) / {entreeAB / a.a.entreeAB, sortieAB / a.a.sortieAB, entreeABC / a.a.entreeABC, sortieABC / a.a.sortieABC }.
- ||TrainB3 = (b:TrainBLeger) / {entreeAB / b.b.entreeAB, sortieAB / b.b.sortieAB, entreeBC / b.b.entreeBC, sortieBC / b.b.sortieBC, entreeABC / b.b.entreeABC, sortieABC / b.b.sortieABC }.
- ||TrainC3 = (c:TrainCLeger) / {entreeBC / c.c.entreeBC, sortieBC / c.c.sortieBC, entreeABC / c.c.entreeABC, sortieABC / c.c.sortieABC }.
- ||CONVOI_A_LEGER = ([i:ID]:TrainA3 || DEPASSE_PAS_AB1 || DEPASSE_PAS_AB2 || DEPASSE_PAS_ABC1 || DEPASSE_PAS_ABC2 ).
- ||CONVOI_B_LEGER = ([i:ID]:TrainB3 || DEPASSE_PAS_AB1 || DEPASSE_PAS_AB2 ||DEPASSE_PAS_BC1 || DEPASSE_PAS_BC2 || DEPASSE_PAS_ABC1 || DEPASSE_PAS_ABC2 ).
- ||CONVOI_C_LEGER = ([i:ID]:TrainC3 || DEPASSE_PAS_BC1 || DEPASSE_PAS_BC2 || DEPASSE_PAS_ABC1 || DEPASSE_PAS_ABC2 ).
- ||TRAINSLEGERS = (trainA:CONVOI_A_LEGER || trainB:CONVOI_B_LEGER || trainC:CONVOI_C_LEGER).
- ||Reseau8 = ( CHEMIN_AB || CHEMIN_BC || CHEMIN_ABC || TRAINSLEGERS).
- /************************************************
- * Question #9
- * Le progrès est bel et bien absent
- ************************************************/
- set ActionsTrainA2 = {entreeAB, sortieAB, entreeABC, sortieABC}
- ||Reseau9 =(Reseau8) >> {trainA.[1..N].ActionsTrainA2}.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement