Skip to content

Commit 2ea2fc4

Browse files
author
Ioana
committed
concretisation
1 parent acaa054 commit 2ea2fc4

15 files changed

+497
-250
lines changed

concret.ml

Lines changed: 318 additions & 61 deletions
Large diffs are not rendered by default.

concret.mli

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11

2-
val concret : Poset.t -> Signature.s -> TraceConcret.s
32
val context_of_application :
4-
Poset.t -> Poset.t -> Signature.s -> Model.t -> unit
3+
Event.t -> Poset.t -> Event.t -> Poset.t -> Signature.s -> Model.t -> unit

domain.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ let add_posets p current_posets =
3939
{ poset_list = p::current_posets.poset_list;
4040
event_list = p.Poset.events@current_posets.event_list; }
4141

42-
let set_posets file_list sigs =
42+
let set_posets file_list env =
4343
let posets : t = { poset_list = []; event_list = []; } in
4444
let posets_file =
4545
List.fold_left
4646
(fun t file ->
47-
let s = Poset.read_poset_from_file file sigs in
47+
let s = Poset.read_poset_from_file file env in
4848
add_posets s t) posets file_list in
4949
let () = if (!Param.debug_mode)
5050
then (Format.printf "\nset_posets";

domain.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ val print_posets: t -> unit
1515
val print_domain : domain -> unit
1616
val print_domain_list : domain list -> unit
1717

18-
val set_posets : string list -> Model.t -> t
18+
val set_posets : string list -> Model.t option -> t
1919

2020
val get_poset_from_filename : string -> domain list -> domain

event.ml

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,37 @@ open Lib
33

44
type t = {
55
event_id : int; (* local id inside a story *)
6-
event_label : string;
6+
rule_id : int; (* id of primitive rule *)
7+
event_label : string; (*label of corresponding ast rule *)
78
step : Trace.step ;
89
}
910

10-
let get_id e = e.event_id
11-
let get_label e = e.event_label
12-
let get_step e = e.step
11+
let id e = e.event_id
12+
let rule_id e = e.rule_id
13+
let label e = e.event_label
14+
let step e = e.step
1315

1416
let test_event event_id event_label =
15-
{ event_id; event_label; step = Trace.Dummy "none"; }
17+
{ event_id; rule_id = -1; event_label; step = Trace.Dummy "none"; }
1618

1719
let print_event e =
1820
Format.printf "\n(%i, %s) " (e.event_id) (e.event_label)
1921

2022
let print_complete_event e =
2123
print_event e;Trace.print_step (Format.std_formatter) e.step;Format.printf"\n"
2224

25+
let rule_id_of_json = function
26+
| Trace.Rule (id,_,_) -> id
27+
| Trace.Pert _ -> -1
28+
| Trace.Init _ -> -2
29+
| Trace.Obs _ -> -3
30+
| Trace.Dummy _ | Trace.Subs _ -> -4
31+
2332
let nodes_of_json env = function
2433
| `List [`Int id; step_json] ->
2534
let step = Trace.step_of_yojson step_json in
26-
let env = Some env in
2735
let () = Trace.print_label_of_step ?env (Format.str_formatter) step in
28-
let label = Format.flush_str_formatter () in
29-
{ event_id = id; event_label = label; step;}
36+
let event_label = Format.flush_str_formatter () in
37+
let rule_id = rule_id_of_json step in
38+
{ event_id = id; rule_id; event_label; step;}
3039
| x -> raise (Yojson.Basic.Util.Type_error ("Incorrect node of json",x))

event.mli

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
open Yojson
22

33
type t = {
4-
event_id : int; (* local id inside a story *)
4+
event_id : int;
5+
rule_id : int;
56
event_label : string;
67
step : Trace.step ;
78
}
89

9-
val nodes_of_json : Model.t -> Yojson.Basic.json -> t
10+
val nodes_of_json : Model.t option -> Yojson.Basic.json -> t
1011

11-
val get_id : t -> int
12-
val get_label : t -> string
13-
val get_step : t -> Trace.step
12+
val id : t -> int
13+
val label : t -> string
14+
val step : t -> Trace.step
15+
val rule_id : t -> int
1416

1517
val print_event : t -> unit
1618
val test_event : int -> string -> t

formulas.ml

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ let denotations (_,_,domain as m) fm =
174174
(**** Interpretation ****)
175175

176176
let label x = match x with
177-
| Domain.Ev e -> (Event.get_label e)
177+
| Domain.Ev e -> (Event.label e)
178178
| Domain.Pos _ ->
179179
raise (ExceptDefn.Malformed_Args("label"))
180180

@@ -203,15 +203,23 @@ let membership = function
203203
(Domain.Ev e, Domain.Pos p) -> List.mem e (p.Poset.events)
204204
| _ -> raise (ExceptDefn.Malformed_Args("membership"))
205205

206-
let equal_posets = function
206+
let morphisms_posets f = function
207207
(Domain.Pos p1, Domain.Pos p2) ->
208208
(match (p1.Poset.kappa, p2.Poset.kappa) with
209209
| (true, true) ->
210-
Morphism.isomorphism (Poset.remove_obs(p1)) (Poset.remove_obs(p2))
211-
| (true, false) -> Morphism.isomorphism (Poset.remove_obs(p1)) p2
212-
| (false, true) -> Morphism.isomorphism p1 (Poset.remove_obs(p2))
213-
| (false, false) -> Morphism.isomorphism p1 p2 )
214-
| _ -> raise(ExceptDefn.Malformed_Args("equal posets"))
210+
let () = if (!Param.debug_mode) then
211+
(Format.printf "kappa posets - remove obs@.") in
212+
f (Poset.remove_event p1 (Poset.obs p1))
213+
(Poset.remove_event p2 (Poset.obs p2))
214+
| (true, false) ->
215+
f (Poset.remove_event p1 (Poset.obs p1)) p2
216+
| (false, true) ->
217+
f p1 (Poset.remove_event p2 (Poset.obs p2))
218+
| (false, false) -> f p1 p2)
219+
| _ -> raise(ExceptDefn.Malformed_Args("morphisms posets"))
220+
221+
let equal_posets = morphisms_posets Morphism.isomorphism
222+
let sub_poset = morphisms_posets Morphism.morphism
215223

216224
let equal_events = function
217225
(Domain.Ev e1, Domain.Ev e2) ->
@@ -222,19 +230,6 @@ let equal_events = function
222230
else false
223231
| _ -> raise(ExceptDefn.Malformed_Args("equal events"))
224232

225-
let sub_poset = function
226-
(Domain.Pos p1, Domain.Pos p2) ->
227-
(match (p1.Poset.kappa, p2.Poset.kappa) with
228-
| (true, true) ->
229-
let () = if (!Param.debug_mode) then
230-
(Format.printf
231-
"sub_poset: posets are kappa type - remove obs\n";) in
232-
Morphism.morphism (Poset.remove_obs(p1)) (Poset.remove_obs(p2))
233-
| (true, false) -> Morphism.morphism (Poset.remove_obs(p1)) p2
234-
| (false, true) -> Morphism.morphism p1 (Poset.remove_obs(p2))
235-
| (false, false) -> Morphism.morphism p1 p2 )
236-
| _ -> raise(ExceptDefn.Malformed_Args("sub_posets"))
237-
238233
let intro = function
239234
Domain.Pos p -> Poset.intro p
240235
| _ -> raise (ExceptDefn.Malformed_Args("intro"))
@@ -246,7 +241,9 @@ let obs = function
246241
let negative_influence env = function
247242
(Domain.Ev e1, Domain.Pos p1, Domain.Ev e2, Domain.Pos p2) ->
248243
let sigs = Model.signatures env in
249-
let () = Concret.context_of_application p1 p2 sigs env in
244+
(* let past1 = Poset.past e1 p1 in
245+
let past2 = Poset.past e2 p2 in*)
246+
let () = Concret.context_of_application e1 p1 e2 p2 sigs env in
250247
true
251248
| _ -> raise(ExceptDefn.Malformed_Args("negative_influence"))
252249

main.ml

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,6 @@ let options = [
99
("-env", Arg.Set_string env_file, "file name for environment");
1010
("-debug", Arg.Set debug_mode, "print internal info");]
1111

12-
let test_z3 t =
13-
let posets = Domain.get_posets t in
14-
let p1 = List.nth posets 0 in
15-
let p2 = List.nth posets 3 in
16-
Z3morphism.get_morphism p1 p2
17-
1812
let test_subset t =
1913
let posets = Domain.get_posets t in
2014
let p1 = List.nth posets 2 in
@@ -35,6 +29,16 @@ let test_subset t =
3529
Formulas.R("sub_posets", [Formulas.Var "x"; Formulas.Var "y"]))) in
3630
(valuation,fm)
3731

32+
let fm_neg =
33+
Formulas.Exists
34+
("e2","Event",
35+
Formulas.Exists
36+
("e1","Event",
37+
(Formulas.Atom(
38+
Formulas.R("negative_influence",
39+
[Formulas.Var "e1"; Formulas.Var "s1";
40+
Formulas.Var "e2"; Formulas.Var "s2"])))))
41+
3842
let empty_valuation = function
3943
_ -> failwith "empty valuation"
4044

@@ -84,33 +88,21 @@ let () =
8488
let () = set_flags () in
8589
let json = Yojson.Basic.from_file (!env_file) in
8690
let env = Model.of_yojson json in
87-
let posets = Domain.set_posets (!files) env in
91+
let posets = Domain.set_posets (!files) (Some env) in
8892
let () = if (!Param.debug_mode) then Format.printf "read posets\n" in
89-
let fm_neg =
90-
Formulas.Exists
91-
("e2","Event",
92-
Formulas.Exists
93-
("e1","Event",
94-
(Formulas.Atom(
95-
Formulas.R("negative_influence",
96-
[Formulas.Var "e1"; Formulas.Var "s1";
97-
Formulas.Var "e2"; Formulas.Var "s2"]))))) in
98-
9993
let m = Formulas.interpretation env posets in
10094
let () = Format.printf "\n evaluate formula\n" in
10195
(evaluate fm_neg m empty_valuation)
10296

103-
(* test_z3 posets*)
104-
(*
105-
let m = Formulas.interpretation posets in
97+
98+
(* test_z3 posets*)
99+
(* let () = parse_fm () in
106100
List.iteri
107101
(fun i fm ->
108102
Format.printf "\n evaluate formula %i:\n" i;
109103
(evaluate fm m empty_valuation))
110-
(!read_fm)
111-
*)
112-
(*
104+
(!read_fm)*)
105+
(*
113106
let (valuation,fm) = test_subset posets in
114107
if (Formulas.holds m valuation fm) then Format.printf"true\n"
115-
else Format.printf "false\n"
116-
*)
108+
else Format.printf "false\n"*)

morphism.ml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ let check_combination p1 p2 =
6363

6464
let gen_all_morphs p1 p2 =
6565
let l1 =
66-
List.map (fun e -> (Event.get_id e, Event.get_label e)) p1.Poset.events in
66+
List.map (fun e -> (Event.id e, Event.label e)) p1.Poset.events in
6767
let l2 =
68-
List.map (fun e -> (Event.get_id e, Event.get_label e)) p2.Poset.events in
68+
List.map (fun e -> (Event.id e, Event.label e)) p2.Poset.events in
6969
let combins = combinations (List.length l1) l2 in
7070
List.flatten
7171
(List.map
@@ -77,9 +77,9 @@ let gen_all_morphs p1 p2 =
7777
let check_labels m p1 p2 =
7878
List.fold_left
7979
(fun ok_so_far (id1,id2) ->
80-
let e1 = List.find (fun e -> (Event.get_id e) = id1) p1.Poset.events in
81-
let e2 = List.find (fun e -> (Event.get_id e) = id2) p2.Poset.events in
82-
ok_so_far && ((Event.get_label e1)= (Event.get_label e2)))
80+
let e1 = List.find (fun e -> (Event.id e) = id1) p1.Poset.events in
81+
let e2 = List.find (fun e -> (Event.id e) = id2) p2.Poset.events in
82+
ok_so_far && ((Event.label e1)= (Event.label e2)))
8383
true (IntMap.bindings m)
8484

8585
let check_prec m p1 p2 =

poset.ml

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ let empty_poset =
1717
let get_events_from_poset p = p.events
1818

1919
let get_event_by_id i p =
20-
List.find (fun e -> (Event.get_id e) = i) (get_events_from_poset p)
20+
List.find (fun e -> (Event.id e) = i) (get_events_from_poset p)
2121

2222
let get_events_by_id_list ls p =
23-
List.filter (fun e -> List.mem (Event.get_id e) ls) p.events
23+
List.filter (fun e -> List.mem (Event.id e) ls) p.events
2424

2525
let print_poset p =
2626
Format.printf "events (id, label) : \n";
@@ -41,15 +41,15 @@ let edges_of_json json =
4141
let e2 = member "to" json |> to_int in
4242
(e1,e2)) json
4343

44-
let read_poset_from_file file sigs =
44+
let read_poset_from_file file env =
4545
let json = Yojson.Basic.from_file file in
4646
let open Yojson.Basic.Util in
4747
let nodes = json |> member "nodes" |> to_list in
4848
let edges_cause = json |> member "cause" |> to_list in
4949
let edges_inhibit = json |> member "inhibit" |> to_list in
5050
{ kappa = true;
5151
filename = Some file;
52-
events = List.mapi (fun i l -> Event.nodes_of_json sigs l) nodes;
52+
events = List.mapi (fun i l -> Event.nodes_of_json env l) nodes;
5353
prec_1 = edges_of_json edges_cause;
5454
prec_star = None;
5555
inhibit = edges_of_json edges_inhibit}
@@ -70,7 +70,7 @@ let intro p =
7070
let intros =
7171
List.filter
7272
(fun e ->
73-
not(List.exists (fun (i1,i2) -> (Event.get_id e) = i2) p.prec_1))
73+
not(List.exists (fun (i1,i2) -> (Event.id e) = i2) p.prec_1))
7474
p.events in
7575
let () = if (!Param.debug_mode)
7676
then (Format.printf "intro events of poset: \n";
@@ -80,16 +80,16 @@ let intro p =
8080
get_poset_of_events(intros)
8181

8282
(* specialised to the case of one obs - the last one in the list *)
83-
let remove_obs p =
84-
if (p.kappa) then
85-
(let obs_id = List.length p.events in
86-
let events =
87-
List.filter (fun e -> not ((Event.get_id e) = obs_id)) p.events in
88-
let prec_1 = List.filter (fun (e1,e2) -> not (e2 = obs_id) ) p.prec_1 in
89-
let inhibit = List.filter (fun (e1,e2) -> not (e2 = obs_id) ) p.inhibit in
90-
{ kappa = false; filename = p.filename; events; prec_1;
91-
prec_star= None;inhibit; })
92-
else raise (ExceptDefn.Internal_Error("should not be possible"))
83+
let obs p =
84+
if (p.kappa) then List.length p.events
85+
else raise (ExceptDefn.Internal_Error("obs of non kappa poset"))
86+
87+
let remove_event p eid =
88+
let neither (e1,e2) = not((e1 = eid)||(e2 = eid)) in
89+
let events = List.filter (fun e -> not ((Event.id e) = eid)) p.events in
90+
let prec_1 = List.filter neither p.prec_1 in
91+
let inhibit = List.filter neither p.inhibit in
92+
{kappa = false;filename = p.filename; events; prec_1;prec_star= None;inhibit}
9393

9494
let sort_prec ls =
9595
let rec verif_sort = function
@@ -102,29 +102,28 @@ let sort_prec ls =
102102

103103
(* id of events in interval [0,length(events)] *)
104104
let get_enriched p =
105-
let arr = Array.make ((List.length p.events)+1) [] in
106-
let sorted = sort_prec p.prec_1 in
107-
let () =
108-
List.iter
109-
(fun (e1,e2) ->
110-
let l2 =
111-
List.fold_left
112-
(fun acc e -> if (List.mem e acc) then acc else e::acc)
113-
arr.(e1) arr.(e2) in
114-
arr.(e1) <- e2::l2) sorted in
115-
arr
105+
match p.prec_star with
106+
| Some enr -> enr
107+
| None ->
108+
let arr = Array.make ((List.length p.events)+1) [] in
109+
let sorted = sort_prec p.prec_1 in
110+
let () =
111+
List.iter
112+
(fun (e1,e2) ->
113+
let l2 =
114+
List.fold_left
115+
(fun acc e -> if (List.mem e acc) then acc else e::acc)
116+
arr.(e1) arr.(e2) in
117+
arr.(e1) <- e2::l2) sorted in
118+
let () = p.prec_star <- Some arr in
119+
arr
116120

117121
let check_prec_1 e1 e2 p =
118122
(List.mem e1 p.events)&& (List.mem e2 p.events)&&
119123
(List.mem (e1.Event.event_id, e2.Event.event_id) p.prec_1)
120124

121125
let check_prec_star e1 e2 p =
122-
let enrich = match p.prec_star with
123-
| None ->
124-
let enr = get_enriched p in
125-
let () = p.prec_star <- Some enr in
126-
enr
127-
| Some enr -> enr in
126+
let enrich = get_enriched p in
128127
let () =
129128
if (!Param.debug_mode) then
130129
(Format.printf "check_prec_star \n";
@@ -135,3 +134,19 @@ let check_prec_star e1 e2 p =
135134
Format.printf "%d =< %d" (e1.Event.event_id) (e2.Event.event_id) ) in
136135
(List.mem e1 p.events)&& (List.mem e2 p.events)&&
137136
(List.mem (e2.Event.event_id) enrich.(e1.Event.event_id))
137+
138+
(*check it !!*)
139+
let past e p =
140+
let enrich = get_enriched p in
141+
let eid = Event.id e in
142+
let events = get_events_by_id_list enrich.(eid) p in
143+
let list_mem (e1,e2) =
144+
(List.mem e1 enrich.(eid))&&(List.mem e1 enrich.(eid)) in
145+
let prec_1 = List.filter list_mem p.prec_1 in
146+
let inhibit = List.filter list_mem p.inhibit in
147+
{kappa = false;filename = p.filename; events; prec_1;prec_star= None;inhibit}
148+
149+
let same_poset p1 p2 =
150+
match (p1.filename,p2.filename) with
151+
| (None, _) | (_, None) -> false
152+
| (Some f1, Some f2) -> ((String.compare f1 f2)=0)

0 commit comments

Comments
 (0)