Project

General

Profile

Download (3.7 KB) Statistics
| Branch: | Tag: | Revision:
1

    
2
node Sofar( X : bool ) returns ( Sofar : bool );
3
let
4
    Sofar = X -> X and pre Sofar;
5
tel
6

    
7
node excludes9( X1, X2, X3, X4, X5, X6, X7, X8, X9 : bool ) returns ( excludes : bool );
8
let
9
    excludes = not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 or
10
                  X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 or
11
              not X1 and     X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 or
12
              not X1 and not X2 and     X3 and not X4 and not X5 and not X6 and not X7 and not X8 and not X9 or
13
              not X1 and not X2 and not X3 and     X4 and not X5 and not X6 and not X7 and not X8 and not X9 or
14
              not X1 and not X2 and not X3 and not X4 and     X5 and not X6 and not X7 and not X8 and not X9 or
15
              not X1 and not X2 and not X3 and not X4 and not X5 and     X6 and not X7 and not X8 and not X9 or
16
              not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and     X7 and not X8 and not X9 or
17
              not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and     X8 and not X9 or
18
              not X1 and not X2 and not X3 and not X4 and not X5 and not X6 and not X7 and not X8 and     X9;
19
tel
20

    
21
node ticket3i(e1, e2, e3, e4, e5, e6, e7, e8, e9 : bool;
22
init_a1, init_a2, init_a3, init_t : int) returns (
23
p1, p2, p3, t, s, a1, a2, a3 : int; erreur_ticket3i : bool);
24
var
25
   g1, g2, g3, g4, g5, g6, g7, g8, g9 : bool;
26
let
27

    
28
   erreur_ticket3i = if((p1>=3) or (p2>=3) or (p3>=3)) then true else false;
29

    
30
   g1 = pre p1 = 0;
31
   g2 = pre p1 = 1 and pre s >= a1;
32
   g3 = pre p1 = 2;
33
   g4 = pre p2 = 0;
34
   g5 = pre p2 = 1 and pre s >= a2;
35
   g6 = pre p2 = 2;
36
   g7 = pre p3 = 0;
37
   g8 = pre p3 = 1 and pre s >= a3;
38
   g9 = pre p3 = 2;
39

    
40
   p1 = 0 -> 
41
   if(e1) then if(g1) then 1 else pre p1 else 
42
   if(e2) then if(g2) then 2 else pre p1 else 
43
   if(e3) then if(g3) then 0 else pre p1 else 
44
   pre p1;
45

    
46
   p2 = 0 -> 
47
   if(e4) then if(g4) then 1 else pre p2 else 
48
   if(e5) then if(g5) then 2 else pre p2 else 
49
   if(e6) then if(g6) then 0 else pre p2 else 
50
   pre p2;
51

    
52
   p3 = 0 -> 
53
   if(e7) then if(g7) then 1 else pre p3 else 
54
   if(e8) then if(g8) then 2 else pre p3 else 
55
   if(e9) then if(g9) then 0 else pre p3 else 
56
   pre p3;
57

    
58
   t = init_t -> 
59
   if(e1) then if(g1) then pre t+1 else pre t else 
60
   if(e4) then if(g4) then pre t+1 else pre t else 
61
   if(e7) then if(g7) then pre t+1 else pre t else 
62
   pre t;
63

    
64
   s = t -> 
65
   if(e3) then if(g3) then pre s+1 else pre s else 
66
   if(e6) then if(g6) then pre s+1 else pre s else 
67
   if(e9) then if(g9) then pre s+1 else pre s else 
68
   pre s;
69

    
70
   a1 = init_a1 -> 
71
   if(e1) then if(g1) then pre t else pre a1 else 
72
   pre a1;
73

    
74
   a2 = init_a2 -> 
75
   if(e4) then if(g4) then pre t else pre a2 else 
76
   pre a2;
77

    
78
   a3 = init_a3 -> 
79
   if(e7) then if(g7) then pre t else pre a3 else 
80
   pre a3;
81

    
82
tel
83

    
84
--@ ensures OK;
85
node top( e1, e2, e3, e4, e5, e6, e7, e8, e9 : bool;
86
         init_a1, init_a2, init_a3, init_t : int )
87
returns ( OK : bool );
88
    var p1, p2, p3, t, s, a1, a2, a3 : int;
89
        erreur_ticket3i : bool;
90
        env : bool;
91
let
92
    ( p1, p2, p3, t, s, a1, a2, a3 , erreur_ticket3i ) =
93
        ticket3i( e1, e2, e3, e4, e5, e6, e7, e8, e9,
94
                  init_a1, init_a2, init_a3, init_t );
95
    env = Sofar( excludes9( e1, e2, e3, e4, e5, e6, e7, e8, e9 ) and
96
                 init_a1 >= 0 and
97
                 init_a2 >= 0 and
98
                 init_a3 >= 0 and
99
                 init_t >= 0 );
100
    OK = env => 0 <= p1 and p1 <= 3 and
101
                     0 <= p2 and p2 <= 3 and
102
                     0 <= p3 and p3 <= 3 and
103
                     p1 + p2 + p3 <= 9;
104
--!k:2;
105
--!PROPERTY: OK=true;
106
    --%MAIN;
107
tel
(28-28/31)