1
|
open Lustre_types
|
2
|
|
3
|
type register_t = ResetFlag | StateVar of var_decl
|
4
|
|
5
|
type left_v
|
6
|
|
7
|
type right_v
|
8
|
|
9
|
type ('a, _) expression_t =
|
10
|
| Val : 'a -> ('a, right_v) expression_t
|
11
|
| Tag : ident -> ('a, right_v) expression_t
|
12
|
| Var : var_decl -> ('a, left_v) expression_t
|
13
|
| Memory : register_t -> ('a, left_v) expression_t
|
14
|
|
15
|
(** TODO: why moving this elsewhere makes the exhaustiveness check fail? *)
|
16
|
let type_of_l_value : type a. (a, left_v) expression_t -> Types.type_expr =
|
17
|
function
|
18
|
| Var v ->
|
19
|
v.var_type
|
20
|
| Memory ResetFlag ->
|
21
|
Type_predef.type_bool
|
22
|
| Memory (StateVar v) ->
|
23
|
v.var_type
|
24
|
|
25
|
type ('a, 'b) expressions_t = ('a, 'b) expression_t list
|
26
|
|
27
|
type 'a predicate_t =
|
28
|
| Transition :
|
29
|
ident (* node name *)
|
30
|
* ident option
|
31
|
(* instance *)
|
32
|
* int option
|
33
|
(* transition index *)
|
34
|
* ('a, 'b) expressions_t
|
35
|
(* inputs *)
|
36
|
* ('a, 'b) expressions_t
|
37
|
(* locals *)
|
38
|
* ('a, 'b) expressions_t
|
39
|
(* outputs *)
|
40
|
* bool (* reset *)
|
41
|
* Utils.ISet.t (* memory footprint *)
|
42
|
-> 'a predicate_t
|
43
|
| Reset of ident * ident * 'a
|
44
|
| MemoryPack of ident * ident option * int option
|
45
|
| Initialization
|
46
|
| ResetCleared of ident
|
47
|
|
48
|
type 'a formula_t =
|
49
|
| True
|
50
|
| False
|
51
|
| Equal : ('a, left_v) expression_t * ('a, 'b) expression_t -> 'a formula_t
|
52
|
| And of 'a formula_t list
|
53
|
| Or of 'a formula_t list
|
54
|
| Imply of 'a formula_t * 'a formula_t
|
55
|
| Exists of var_decl list * 'a formula_t
|
56
|
| Forall of var_decl list * 'a formula_t
|
57
|
| Ternary :
|
58
|
('a, 'b) expression_t * 'a formula_t * 'a formula_t
|
59
|
-> 'a formula_t
|
60
|
| Predicate : 'a predicate_t -> 'a formula_t
|
61
|
| StateVarPack of register_t
|
62
|
| ExistsMem of ident * 'a formula_t * 'a formula_t
|
63
|
|
64
|
(* type 'a simulation_t = {
|
65
|
* sname: node_desc;
|
66
|
* sindex: option int;
|
67
|
* sformula: 'a formula_t;
|
68
|
* } *)
|
69
|
|
70
|
type 'a memory_pack_t = {
|
71
|
mpname : node_desc;
|
72
|
mpindex : int option;
|
73
|
mpformula : 'a formula_t;
|
74
|
}
|
75
|
|
76
|
type 'a transition_t = {
|
77
|
tname : node_desc;
|
78
|
tindex : int option;
|
79
|
tinputs : var_decl list;
|
80
|
tlocals : var_decl list;
|
81
|
toutputs : var_decl list;
|
82
|
tformula : 'a formula_t;
|
83
|
tfootprint : Utils.ISet.t;
|
84
|
}
|