Revision 4f3cc9f3
Added by Pierre-Loïc Garoche over 9 years ago
ex3.smt2 | ||
---|---|---|
54 | 54 |
(and (= speed.__speed_2 (and speed.second (not speed.beacon))) |
55 | 55 |
(= speed.__speed_1 (and speed.beacon (not speed.second))) |
56 | 56 |
(= speed.incr (ite speed.__speed_1 1 (ite speed.__speed_2 2 0))) |
57 |
(COUNTER_init 0 speed.incr (or speed.beacon speed.second) 0 speed.diff speed.__COUNTER_1_x)
|
|
57 |
(COUNTER_init 0 speed.incr (or speed.beacon speed.second) false speed.diff speed.ni_4.COUNTER.__COUNTER_1_x)
|
|
58 | 58 |
(= speed.__speed_7 speed.__speed_6_c) |
59 | 59 |
(= speed.__speed_8 (ite speed.__speed_7 (< speed.diff 0) |
60 | 60 |
(<= speed.diff (- 10)))) |
61 |
(= speed.late 0)
|
|
61 |
(= speed.late false)
|
|
62 | 62 |
(= speed.__speed_4 speed.__speed_3_c) |
63 | 63 |
(= speed.__speed_5 (ite speed.__speed_4 (> speed.diff 0) |
64 | 64 |
(>= speed.diff 10))) |
65 |
(= speed.early 0)
|
|
65 |
(= speed.early false)
|
|
66 | 66 |
(= speed.__speed_6_x speed.late) |
67 | 67 |
(= speed.__speed_3_x speed.early) |
68 | 68 |
) |
... | ... | |
73 | 73 |
(and (= speed.__speed_2 (and speed.second (not speed.beacon))) |
74 | 74 |
(= speed.__speed_1 (and speed.beacon (not speed.second))) |
75 | 75 |
(= speed.incr (ite speed.__speed_1 1 (ite speed.__speed_2 2 0))) |
76 |
(COUNTER_step 0 speed.incr (or speed.beacon speed.second) 0 speed.diff speed.__COUNTER_1_c speed.__COUNTER_1_x)
|
|
76 |
(COUNTER_step 0 speed.incr (or speed.beacon speed.second) false speed.diff speed.ni_4.COUNTER.__COUNTER_1_c speed.ni_4.COUNTER.__COUNTER_1_x)
|
|
77 | 77 |
(= speed.__speed_7 speed.__speed_6_c) |
78 | 78 |
(= speed.__speed_8 (ite speed.__speed_7 (< speed.diff 0) |
79 | 79 |
(<= speed.diff (- 10)))) |
... | ... | |
95 | 95 |
(declare-var top.__top_1_c Bool) |
96 | 96 |
(declare-var top.ni_1.speed.__speed_3_c Bool) |
97 | 97 |
(declare-var top.ni_1.speed.__speed_6_c Bool) |
98 |
(declare-var top.ni_1.ni_4.COUNTER.__COUNTER_1_c Int) |
|
98 |
(declare-var top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_c Int)
|
|
99 | 99 |
(declare-var top.__top_1_x Bool) |
100 | 100 |
(declare-var top.ni_1.speed.__speed_3_x Bool) |
101 | 101 |
(declare-var top.ni_1.speed.__speed_6_x Bool) |
102 |
(declare-var top.ni_1.ni_4.COUNTER.__COUNTER_1_x Int) |
|
102 |
(declare-var top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_x Int)
|
|
103 | 103 |
(declare-var top.early Bool) |
104 | 104 |
(declare-var top.late Bool) |
105 | 105 |
(declare-rel top_init (Bool Bool Bool Bool Bool Bool Int)) |
106 | 106 |
(declare-rel top_step (Bool Bool Bool Bool Bool Bool Int Bool Bool Bool Int)) |
107 | 107 |
|
108 | 108 |
(rule (=> |
109 |
(and (speed_init top.beacon top.second top.late top.early top.__speed_3_x top.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x)
|
|
110 |
(= top.OK 1)
|
|
109 |
(and (speed_init top.beacon top.second top.late top.early top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_x)
|
|
110 |
(= top.OK true)
|
|
111 | 111 |
(= top.__top_1_x top.early) |
112 | 112 |
) |
113 |
(top_init top.beacon top.second top.OK top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x) |
|
113 |
(top_init top.beacon top.second top.OK top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_x)
|
|
114 | 114 |
)) |
115 | 115 |
|
116 | 116 |
(rule (=> |
117 |
(and (speed_step top.beacon top.second top.late top.early top.__speed_3_c top.__speed_6_c top.ni_1.ni_4.COUNTER.__COUNTER_1_c top.__speed_3_x top.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x)
|
|
117 |
(and (speed_step top.beacon top.second top.late top.early top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_c top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_x)
|
|
118 | 118 |
(= top.OK (or (not top.__top_1_c) (not top.late))) |
119 | 119 |
(= top.__top_1_x top.early) |
120 | 120 |
) |
121 |
(top_step top.beacon top.second top.OK top.__top_1_c top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.ni_4.COUNTER.__COUNTER_1_c top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x)
|
|
121 |
(top_step top.beacon top.second top.OK top.__top_1_c top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_c top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_x)
|
|
122 | 122 |
)) |
123 | 123 |
|
124 |
; Collecting semantics with main node top |
|
125 |
|
|
126 |
(declare-rel MAIN (Bool Bool Bool Int Bool)) |
|
127 |
; Initial set |
|
128 |
(declare-rel INIT_STATE ()) |
|
129 |
(rule INIT_STATE) |
|
130 |
(rule (=> |
|
131 |
(and INIT_STATE |
|
132 |
(top_init top.beacon top.second top.OK top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_x) |
|
133 |
) |
|
134 |
(MAIN top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_x top.OK) |
|
135 |
)) |
|
136 |
|
|
137 |
; Inductive def |
|
138 |
(declare-var dummy Bool) |
|
139 |
(rule (=> |
|
140 |
(and (MAIN top.__top_1_c top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_c dummy) |
|
141 |
(top_step top.beacon top.second top.OK top.__top_1_c top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_c top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_x) |
|
142 |
) |
|
143 |
(MAIN top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_x top.OK) |
|
144 |
)) |
|
145 |
|
|
146 |
; Property def |
|
147 |
(declare-rel ERR ()) |
|
148 |
(rule (=> |
|
149 |
(and (not (= top.OK true)) |
|
150 |
(MAIN top.__top_1_c top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.speed.ni_4.COUNTER.__COUNTER_1_c)) |
|
151 |
ERR)) |
|
152 |
(query ERR) |
ex3_correct.smt2 | ||
---|---|---|
4 | 4 |
(declare-var COUNTER.X Bool) |
5 | 5 |
(declare-var COUNTER.reset Bool) |
6 | 6 |
(declare-var COUNTER.C Int) |
7 |
(declare-var COUNTER.COUNTER.__COUNTER_1_c Int)
|
|
8 |
(declare-var COUNTER.COUNTER.__COUNTER_1_x Int)
|
|
7 |
(declare-var COUNTER.__COUNTER_1_c Int) |
|
8 |
(declare-var COUNTER.__COUNTER_1_x Int) |
|
9 | 9 |
(declare-var COUNTER.PC Int) |
10 | 10 |
(declare-rel COUNTER_init (Int Int Bool Bool Int Int)) |
11 | 11 |
(declare-rel COUNTER_step (Int Int Bool Bool Int Int Int)) |
... | ... | |
14 | 14 |
(and (= COUNTER.PC COUNTER.init) |
15 | 15 |
(= COUNTER.C (ite COUNTER.reset COUNTER.init |
16 | 16 |
(ite COUNTER.X (+ COUNTER.PC COUNTER.incr) COUNTER.PC))) |
17 |
(= COUNTER.COUNTER.__COUNTER_1_x COUNTER.C)
|
|
17 |
(= COUNTER.__COUNTER_1_x COUNTER.C) |
|
18 | 18 |
) |
19 |
(COUNTER_init COUNTER.init COUNTER.incr COUNTER.X COUNTER.reset COUNTER.C COUNTER.COUNTER.__COUNTER_1_x)
|
|
19 |
(COUNTER_init COUNTER.init COUNTER.incr COUNTER.X COUNTER.reset COUNTER.C COUNTER.__COUNTER_1_x) |
|
20 | 20 |
)) |
21 | 21 |
|
22 | 22 |
(rule (=> |
23 |
(and (= COUNTER.PC COUNTER.COUNTER.__COUNTER_1_c)
|
|
23 |
(and (= COUNTER.PC COUNTER.__COUNTER_1_c) |
|
24 | 24 |
(= COUNTER.C (ite COUNTER.reset COUNTER.init |
25 | 25 |
(ite COUNTER.X (+ COUNTER.PC COUNTER.incr) COUNTER.PC))) |
26 |
(= COUNTER.COUNTER.__COUNTER_1_x COUNTER.C)
|
|
26 |
(= COUNTER.__COUNTER_1_x COUNTER.C) |
|
27 | 27 |
) |
28 |
(COUNTER_step COUNTER.init COUNTER.incr COUNTER.X COUNTER.reset COUNTER.C COUNTER.COUNTER.__COUNTER_1_c COUNTER.COUNTER.__COUNTER_1_x)
|
|
28 |
(COUNTER_step COUNTER.init COUNTER.incr COUNTER.X COUNTER.reset COUNTER.C COUNTER.__COUNTER_1_c COUNTER.__COUNTER_1_x)
|
|
29 | 29 |
)) |
30 | 30 |
|
31 | 31 |
; speed |
... | ... | |
33 | 33 |
(declare-var speed.second Bool) |
34 | 34 |
(declare-var speed.late Bool) |
35 | 35 |
(declare-var speed.early Bool) |
36 |
(declare-var speed.speed.__speed_3_c Bool)
|
|
37 |
(declare-var speed.speed.__speed_6_c Bool)
|
|
36 |
(declare-var speed.__speed_3_c Bool) |
|
37 |
(declare-var speed.__speed_6_c Bool) |
|
38 | 38 |
(declare-var speed.ni_4.COUNTER.__COUNTER_1_c Int) |
39 |
(declare-var speed.speed.__speed_3_x Bool)
|
|
40 |
(declare-var speed.speed.__speed_6_x Bool)
|
|
39 |
(declare-var speed.__speed_3_x Bool) |
|
40 |
(declare-var speed.__speed_6_x Bool) |
|
41 | 41 |
(declare-var speed.ni_4.COUNTER.__COUNTER_1_x Int) |
42 | 42 |
(declare-var speed.__speed_1 Bool) |
43 | 43 |
(declare-var speed.__speed_2 Bool) |
... | ... | |
55 | 55 |
(= speed.__speed_1 (and speed.beacon (not speed.second))) |
56 | 56 |
(= speed.incr (ite speed.__speed_1 1 (ite speed.__speed_2 2 0))) |
57 | 57 |
(COUNTER_init 0 speed.incr (or speed.beacon speed.second) false speed.diff speed.ni_4.COUNTER.__COUNTER_1_x) |
58 |
(= speed.__speed_7 speed.speed.__speed_6_c)
|
|
58 |
(= speed.__speed_7 speed.__speed_6_c) |
|
59 | 59 |
(= speed.__speed_8 (ite speed.__speed_7 (< speed.diff 0) |
60 | 60 |
(<= speed.diff (- 10)))) |
61 | 61 |
(= speed.late false) |
62 |
(= speed.__speed_4 speed.speed.__speed_3_c)
|
|
62 |
(= speed.__speed_4 speed.__speed_3_c) |
|
63 | 63 |
(= speed.__speed_5 (ite speed.__speed_4 (> speed.diff 0) |
64 | 64 |
(>= speed.diff 10))) |
65 | 65 |
(= speed.early false) |
66 |
(= speed.speed.__speed_6_x speed.late)
|
|
67 |
(= speed.speed.__speed_3_x speed.early)
|
|
66 |
(= speed.__speed_6_x speed.late) |
|
67 |
(= speed.__speed_3_x speed.early) |
|
68 | 68 |
) |
69 |
(speed_init speed.beacon speed.second speed.late speed.early speed.speed.__speed_3_x speed.speed.__speed_6_x speed.ni_4.COUNTER.__COUNTER_1_x)
|
|
69 |
(speed_init speed.beacon speed.second speed.late speed.early speed.__speed_3_x speed.__speed_6_x speed.ni_4.COUNTER.__COUNTER_1_x)
|
|
70 | 70 |
)) |
71 | 71 |
|
72 | 72 |
(rule (=> |
... | ... | |
74 | 74 |
(= speed.__speed_1 (and speed.beacon (not speed.second))) |
75 | 75 |
(= speed.incr (ite speed.__speed_1 1 (ite speed.__speed_2 2 0))) |
76 | 76 |
(COUNTER_step 0 speed.incr (or speed.beacon speed.second) false speed.diff speed.ni_4.COUNTER.__COUNTER_1_c speed.ni_4.COUNTER.__COUNTER_1_x) |
77 |
(= speed.__speed_7 speed.speed.__speed_6_c)
|
|
77 |
(= speed.__speed_7 speed.__speed_6_c) |
|
78 | 78 |
(= speed.__speed_8 (ite speed.__speed_7 (< speed.diff 0) |
79 | 79 |
(<= speed.diff (- 10)))) |
80 | 80 |
(= speed.late speed.__speed_8) |
81 |
(= speed.__speed_4 speed.speed.__speed_3_c)
|
|
81 |
(= speed.__speed_4 speed.__speed_3_c) |
|
82 | 82 |
(= speed.__speed_5 (ite speed.__speed_4 (> speed.diff 0) |
83 | 83 |
(>= speed.diff 10))) |
84 | 84 |
(= speed.early speed.__speed_5) |
85 |
(= speed.speed.__speed_6_x speed.late)
|
|
86 |
(= speed.speed.__speed_3_x speed.early)
|
|
85 |
(= speed.__speed_6_x speed.late) |
|
86 |
(= speed.__speed_3_x speed.early) |
|
87 | 87 |
) |
88 |
(speed_step speed.beacon speed.second speed.late speed.early speed.speed.__speed_3_c speed.speed.__speed_6_c speed.ni_4.COUNTER.__COUNTER_1_c speed.speed.__speed_3_x speed.speed.__speed_6_x speed.ni_4.COUNTER.__COUNTER_1_x)
|
|
88 |
(speed_step speed.beacon speed.second speed.late speed.early speed.__speed_3_c speed.__speed_6_c speed.ni_4.COUNTER.__COUNTER_1_c speed.__speed_3_x speed.__speed_6_x speed.ni_4.COUNTER.__COUNTER_1_x)
|
|
89 | 89 |
)) |
90 | 90 |
|
91 | 91 |
; top |
92 | 92 |
(declare-var top.beacon Bool) |
93 | 93 |
(declare-var top.second Bool) |
94 | 94 |
(declare-var top.OK Bool) |
95 |
(declare-var top.top.__top_1_c Bool)
|
|
95 |
(declare-var top.__top_1_c Bool) |
|
96 | 96 |
(declare-var top.ni_1.speed.__speed_3_c Bool) |
97 | 97 |
(declare-var top.ni_1.speed.__speed_6_c Bool) |
98 | 98 |
(declare-var top.ni_1.ni_4.COUNTER.__COUNTER_1_c Int) |
99 |
(declare-var top.top.__top_1_x Bool)
|
|
99 |
(declare-var top.__top_1_x Bool) |
|
100 | 100 |
(declare-var top.ni_1.speed.__speed_3_x Bool) |
101 | 101 |
(declare-var top.ni_1.speed.__speed_6_x Bool) |
102 | 102 |
(declare-var top.ni_1.ni_4.COUNTER.__COUNTER_1_x Int) |
... | ... | |
108 | 108 |
(rule (=> |
109 | 109 |
(and (speed_init top.beacon top.second top.late top.early top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x) |
110 | 110 |
(= top.OK true) |
111 |
(= top.top.__top_1_x top.early)
|
|
111 |
(= top.__top_1_x top.early) |
|
112 | 112 |
) |
113 |
(top_init top.beacon top.second top.OK top.top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x)
|
|
113 |
(top_init top.beacon top.second top.OK top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x) |
|
114 | 114 |
)) |
115 | 115 |
|
116 | 116 |
(rule (=> |
117 | 117 |
(and (speed_step top.beacon top.second top.late top.early top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.ni_4.COUNTER.__COUNTER_1_c top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x) |
118 |
(= top.OK (or (not top.top.__top_1_c) (not top.late)))
|
|
119 |
(= top.top.__top_1_x top.early)
|
|
118 |
(= top.OK (or (not top.__top_1_c) (not top.late))) |
|
119 |
(= top.__top_1_x top.early) |
|
120 | 120 |
) |
121 |
(top_step top.beacon top.second top.OK top.top.__top_1_c top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.ni_4.COUNTER.__COUNTER_1_c top.top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x)
|
|
121 |
(top_step top.beacon top.second top.OK top.__top_1_c top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.ni_4.COUNTER.__COUNTER_1_c top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x)
|
|
122 | 122 |
)) |
123 | 123 |
|
124 | 124 |
; Collecting semantics with main node top |
... | ... | |
129 | 129 |
(rule INIT_STATE) |
130 | 130 |
(rule (=> |
131 | 131 |
(and INIT_STATE |
132 |
(top_init top.beacon top.second top.OK top.top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x)
|
|
132 |
(top_init top.beacon top.second top.OK top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x) |
|
133 | 133 |
) |
134 |
(MAIN top.top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x top.OK)
|
|
134 |
(MAIN top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x top.OK) |
|
135 | 135 |
)) |
136 | 136 |
|
137 | 137 |
; Inductive def |
138 | 138 |
(declare-var dummy Bool) |
139 | 139 |
(rule (=> |
140 |
(and (MAIN top.top.__top_1_c top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.ni_4.COUNTER.__COUNTER_1_c dummy)
|
|
141 |
(top_step top.beacon top.second top.OK top.top.__top_1_c top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.ni_4.COUNTER.__COUNTER_1_c top.top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x)
|
|
140 |
(and (MAIN top.__top_1_c top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.ni_4.COUNTER.__COUNTER_1_c dummy) |
|
141 |
(top_step top.beacon top.second top.OK top.__top_1_c top.ni_1.speed.__speed_3_c top.ni_1.speed.__speed_6_c top.ni_1.ni_4.COUNTER.__COUNTER_1_c top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x)
|
|
142 | 142 |
) |
143 |
(MAIN top.top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x top.OK)
|
|
143 |
(MAIN top.__top_1_x top.ni_1.speed.__speed_3_x top.ni_1.speed.__speed_6_x top.ni_1.ni_4.COUNTER.__COUNTER_1_x top.OK) |
|
144 | 144 |
)) |
145 | 145 |
|
146 | 146 |
; Property def |
147 | 147 |
(declare-rel ERR ()) |
148 | 148 |
(rule (=> |
149 | 149 |
(and (not (= top.OK true)) |
150 |
(MAIN top.top.__top_1_c top.ni_1.speed.__speed_3_c
|
|
150 |
(MAIN top.__top_1_c top.ni_1.speed.__speed_3_c |
|
151 | 151 |
top.ni_1.speed.__speed_6_c top.ni_1.ni_4.COUNTER.__COUNTER_1_c top.OK)) |
152 | 152 |
ERR)) |
153 | 153 |
(query ERR) |
src/horn_backend.ml | ||
---|---|---|
28 | 28 |
let pp_var fmt id = Format.pp_print_string fmt id.var_id |
29 | 29 |
|
30 | 30 |
|
31 |
let prefix prefix x = if prefix = "" then x else prefix ^ "." ^ x |
|
32 |
let rename_machine p = rename (fun n -> prefix p n) |
|
31 |
let concat prefix x = if prefix = "" then x else prefix ^ "." ^ x |
|
32 |
let rename f = (fun v -> {v with var_id = f v.var_id } ) |
|
33 |
let rename_machine p = rename (fun n -> concat p n) |
|
33 | 34 |
let rename_machine_list p = List.map (rename_machine p) |
34 | 35 |
|
35 |
let rename f = (fun v -> {v with var_id = f v.var_id } ) |
|
36 | 36 |
let rename_current = rename (fun n -> n ^ "_c") |
37 | 37 |
let rename_current_list = List.map rename_current |
38 | 38 |
let rename_next = rename (fun n -> n ^ "_x") |
... | ... | |
43 | 43 |
List.find (fun m -> m.mname.node_id = node_name) machines |
44 | 44 |
|
45 | 45 |
let full_memory_vars machines machine = |
46 |
let rec aux fst prefix_s m =
|
|
47 |
(rename_machine_list (if fst then prefix else prefix ^ "." ^ m.mname.node_id) m.mmemory) @
|
|
46 |
let rec aux fst prefix m = |
|
47 |
(rename_machine_list (if fst then prefix else concat prefix m.mname.node_id) m.mmemory) @
|
|
48 | 48 |
List.fold_left (fun accu (id, (n, _)) -> |
49 | 49 |
let name = node_name n in |
50 | 50 |
if name = "_arrow" then accu else |
51 | 51 |
let machine_n = get_machine machines name in |
52 |
( aux false (prefix_s ^ "." ^ id) machine_n ) @ accu
|
|
52 |
( aux false (concat prefix (if fst then id else concat m.mname.node_id id)) machine_n ) @ accu
|
|
53 | 53 |
) [] (m.minstances) |
54 | 54 |
in |
55 | 55 |
aux true machine.mname.node_id machine |
... | ... | |
85 | 85 |
|
86 | 86 |
(* Used to print boolean constants *) |
87 | 87 |
let pp_horn_tag fmt t = |
88 |
pp_print_string fmt (if t = tag_true then "1" else if t = tag_false then "0" else t)
|
|
88 |
pp_print_string fmt (if t = tag_true then "true" else if t = tag_false then "false" else t)
|
|
89 | 89 |
|
90 | 90 |
(* Prints a constant value *) |
91 | 91 |
let rec pp_horn_const fmt c = |
... | ... | |
110 | 110 |
| StateVar v -> |
111 | 111 |
if Types.is_array_type v.var_type |
112 | 112 |
then assert false |
113 |
else pp_var fmt ((if is_lhs then rename_next else rename_current) self v)
|
|
113 |
else pp_var fmt (rename_machine self ((if is_lhs then rename_next else rename_current) (* self *) v))
|
|
114 | 114 |
| Fun (n, vl) -> Format.fprintf fmt "%a" (Basic_library.pp_horn n (pp_horn_val self pp_var)) vl |
115 | 115 |
|
116 | 116 |
(* Prints a [value] indexed by the suffix list [loop_vars] *) |
... | ... | |
161 | 161 |
(Utils.fprintf_list ~sep:" " (pp_horn_val self (pp_horn_var m))) (List.map (fun v -> LocalVar v) outputs) |
162 | 162 |
(Utils.pp_final_char_if_non_empty " " outputs) |
163 | 163 |
(Utils.fprintf_list ~sep:" " pp_var) ( |
164 |
(rename_next_list m.mname.node_id (full_memory_vars machines i target_machine))
|
|
164 |
rename_machine_list (concat m.mname.node_id i) (rename_next_list (* concat m.mname.node_id i *) (full_memory_vars machines target_machine))
|
|
165 | 165 |
) |
166 | 166 |
else |
167 | 167 |
Format.fprintf fmt "(%s_step %a%t%a%t%a)" |
... | ... | |
172 | 172 |
(Utils.pp_final_char_if_non_empty " " outputs) |
173 | 173 |
(Utils.fprintf_list ~sep:" " pp_var) ( |
174 | 174 |
|
175 |
(rename_current_list m.mname.node_id (full_memory_vars machines i target_machine)) @
|
|
176 |
(rename_next_list m.mname.node_id (full_memory_vars machines i target_machine))
|
|
175 |
(rename_machine_list (concat m.mname.node_id i) (rename_current_list (* concat m.mname.node_id i *) (full_memory_vars machines target_machine))) @
|
|
176 |
(rename_machine_list (concat m.mname.node_id i) (rename_next_list (* concat m.mname.node_id i *) (full_memory_vars machines target_machine)))
|
|
177 | 177 |
) |
178 | 178 |
|
179 | 179 |
end |
... | ... | |
280 | 280 |
Format.fprintf fmt "; Collecting semantics with main node %s@.@." node; |
281 | 281 |
(* We print the types of the main node "memory tree" TODO: add the output *) |
282 | 282 |
let main_memory_next = |
283 |
(rename_next_list machine.mname.node_id (full_memory_vars machines "" machine))
|
|
283 |
(rename_next_list (* machine.mname.node_id *) (full_memory_vars machines machine))
|
|
284 | 284 |
in |
285 | 285 |
let main_memory_current = |
286 |
(rename_current_list machine.mname.node_id (full_memory_vars machines "" machine))
|
|
286 |
(rename_current_list (* machine.mname.node_id *) (full_memory_vars machines machine))
|
|
287 | 287 |
in |
288 | 288 |
Format.fprintf fmt "(declare-rel MAIN (%a Bool))@." |
289 | 289 |
(Utils.fprintf_list ~sep:" " pp_type) |
src/main_lustre_compiler.ml | ||
---|---|---|
258 | 258 |
let fmt = Format.std_formatter in |
259 | 259 |
Horn_backend.translate fmt basename normalized_prog machine_code |
260 | 260 |
end |
261 |
| _ -> assert false |
|
261 | 262 |
in |
262 | 263 |
report ~level:1 (fun fmt -> fprintf fmt ".. done !@ @]@."); |
263 | 264 |
(* We stop the process here *) |
Also available in: Unified diff
Is it working?