forked from cubicle-model-checker/cubicle
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathforward.mli
81 lines (59 loc) · 2.92 KB
/
forward.mli
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
(**************************************************************************)
(* *)
(* Cubicle *)
(* *)
(* Copyright (C) 2011-2014 *)
(* *)
(* Sylvain Conchon and Alain Mebsout *)
(* Universite Paris-Sud 11 *)
(* *)
(* *)
(* This file is distributed under the terms of the Apache Software *)
(* License version 2.0 *)
(* *)
(**************************************************************************)
open Ast
open Types
(** Symbolic forward exploration *)
module HSA : Hashtbl.S with type key = SAtom.t
module MA : Map.S with type key = Atom.t
(** the type of instantiated transitions *)
type inst_trans =
{
i_reqs : SAtom.t;
i_udnfs : SAtom.t list list;
i_actions : SAtom.t;
i_touched_terms : Term.Set.t;
}
type possible_result =
| Reach of (SAtom.t * transition_info * Variable.subst * SAtom.t) list
| Spurious of trace
| Unreach
(* val search : Hstring.t list -> t_system -> SAtom.t list *)
val all_var_terms : Variable.t list -> t_system -> Term.Set.t
val search : Hstring.t list -> t_system -> unit HSA.t
val search_stateless : Hstring.t list -> t_system -> (SAtom.t * Term.Set.t) MA.t
(** instantiate transitions with a list of possible parameters *)
val instantiate_transitions : Variable.t list -> Variable.t list ->
transition list -> inst_trans list
val abstract_others : SAtom.t -> Hstring.t list -> SAtom.t
val reachable_on_trace_from_init :
t_system -> Node.t -> trace -> possible_result
(** check if the history of a node is spurious *)
val spurious : Node.t -> bool
(** check if an error trace is spurious *)
val spurious_error_trace : t_system -> Node.t -> bool
(** check if an error trace is spurious due to the {b Crash Failure Model } *)
val spurious_due_to_cfm : t_system -> Node.t -> bool
(** Replays the history of a faulty node and returns (possibly) an error
trace *)
val replay_history :
t_system -> Node.t ->
(SAtom.t * transition_info * Variable.subst * SAtom.t) list option
(** check if an error trace is spurious due to the {b Crash Failure Model } *)
val conflicting_from_trace : t_system -> trace -> SAtom.t list
(** put a universal guard in disjunctive normal form *)
val uguard_dnf :
Variable.subst ->
Variable.t list -> Variable.t list ->
(Variable.t * SAtom.t list) list -> SAtom.t list list