Skip to content

Commit 0774db4

Browse files
author
Ioana
committed
code
1 parent 5e3c789 commit 0774db4

21 files changed

+324
-70
lines changed

ast.ml

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
type ('a) link =
1+
type link =
22
| LNK_VALUE of int
33
| FREE
44
| LNK_ANY
55
| LNK_SOME
6-
| LNK_TYPE of 'a (* port *)
7-
* 'a (*agent_type*)
6+
| LNK_TYPE of string (* port *)
7+
* string (*agent_type*)
88

99
type internal = string list
1010

1111
type port = {port_nme:string;
1212
port_int:internal;
13-
port_lnk:string link list;}
13+
port_lnk:link list;}
1414

1515
type agent = (string * port list)
1616

@@ -53,4 +53,35 @@ let print = function
5353
| INIT mix -> Format.printf "\n init "; List.iter (fun a -> print_agent a) mix
5454
| OBS (name,mix) -> Format.printf "\n obs '%s' " name;
5555
List.iter (fun a -> print_agent a) mix
56-
| RULE (name,r) -> Format.printf "\n rule '%s' " name; print_rule r;
56+
| RULE (name,r) -> Format.printf "\n rule '%s' " name; print_rule r
57+
58+
let empty_rule = {lhs =[];rhs=[];bidirectional=false}
59+
60+
let empty = RULE ("empty",empty_rule)
61+
62+
let get_label = function
63+
| INIT mix -> List.fold_left (fun acc (nme,_) -> acc^nme) "" mix
64+
| OBS (name,_) -> name
65+
| RULE (name,_) -> name
66+
67+
let get_rule_by_label nme rules =
68+
List.find
69+
(fun r -> String.equal (get_label r) nme) rules
70+
71+
let get_lhs = function
72+
| INIT mix -> []
73+
| OBS (name,mix) -> mix
74+
| RULE (name,r) -> r.lhs
75+
76+
let get_rhs = function
77+
| INIT mix -> mix
78+
| OBS (name,mix) -> mix
79+
| RULE (name,r) -> r.rhs
80+
81+
let is_init = function
82+
| INIT _ -> true
83+
| OBS _ | RULE _ -> false
84+
85+
let is_obs = function
86+
| OBS _ -> true
87+
| INIT _ | RULE _ -> false

ast.mli

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
type ('a) link =
1+
type link =
22
| LNK_VALUE of int
33
| FREE
44
| LNK_ANY
55
| LNK_SOME
6-
| LNK_TYPE of 'a (* port *)
7-
* 'a (*agent_type*)
6+
| LNK_TYPE of string (* port *)
7+
* string (*agent_type*)
88

99
type internal = string list
1010

1111
type port = {port_nme:string;
1212
port_int:internal;
13-
port_lnk:string link list;}
13+
port_lnk:link list;}
1414

1515
type agent = (string * port list)
1616

@@ -24,4 +24,16 @@ type rule = {
2424
type t = INIT of mixture
2525
| OBS of string*mixture
2626
| RULE of string*rule
27+
28+
val empty : t
29+
30+
val print_port : port -> unit
2731
val print : t -> unit
32+
33+
val get_label : t -> String.t
34+
val get_rule_by_label : String.t -> t list -> t
35+
36+
val get_lhs : t -> mixture
37+
val get_rhs : t -> mixture
38+
val is_init : t -> bool
39+
val is_obs : t -> bool

concret.ml

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,41 @@
11

2-
let decorate s = [s]
3-
42
let linears s =
53
LinearPoset.linearisations(s)
64

7-
let refine (t:Trace.t) (r: (Event.t*Transition.t) list) s id = [Trace.empty]
5+
let concretise (s:LinearPoset.t) (rs:Ast.t list) =
6+
let () = if (!Parameter.debug_mode) then
7+
(Format.printf "concretise linear poset :";
8+
List.iter (fun i -> Format.printf "%d " i) s.LinearPoset.seq) in
9+
let (trace,_) =
10+
List.fold_left
11+
(fun (trace,rf) eid ->
12+
let event = Poset.get_event_by_id eid s.LinearPoset.pos in
13+
let rname = Event.get_label event in
14+
let rule = Ast.get_rule_by_label rname rs in
15+
let m = Transition.get_rhs (Trace.get_first_transition trace) in
16+
let trans = Transition.make m rule (Event.get_quarks event) in
17+
((Trace.add_transition trace trans), ((eid,trans)::rf)))
18+
(* else (raise (ExceptionDefn.NotKappa_Poset *)
19+
(* ("quarks of event "^rname^" not valid")))) *)
20+
(Trace.empty,[]) s.LinearPoset.seq in
21+
trace
22+
23+
let test_concret (s:LinearPoset.t) (rs:Ast.t list) =
24+
let () = if (!Parameter.debug_mode) then
25+
(Format.printf "concretise linear poset :";
26+
List.iter (fun i -> Format.printf "%d " i) s.LinearPoset.seq) in
27+
let event = Poset.get_event_by_id 4 s.LinearPoset.pos in
28+
let rname = Event.get_label event in
29+
let rule = Ast.get_rule_by_label rname rs in
30+
31+
let () = if (!Parameter.debug_mode) then
32+
(Format.printf "info on first event ";
33+
Event.print_event event;
34+
Ast.print rule) in
835

9-
let concretise (s:LinearPoset.t) id concretisations1 =
10-
List.fold_left
11-
(fun concretisations2
12-
(t,r) -> refine t r s id) [] concretisations1
36+
let trans = Transition.make [] rule (Event.get_quarks event) in
37+
let () = if (!Parameter.debug_mode) then
38+
Transition.print trans in
39+
Trace.empty
1340

14-
let concret (s:Poset.t) = concretise (linears s) 0 []
41+
let concret (s:Poset.t) (rs:Ast.t list) = concretise (linears s) rs

concret.mli

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

2-
val concret : Poset.t -> Trace.t list
2+
val concret : Poset.t -> Ast.t list -> Trace.t

domain.ml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ let set_posets file_list =
5151
(fun t file ->
5252
let s = Poset.read_poset_from_file file in
5353
add_posets s t) posets file_list in
54-
let posets' = add_posets (Poset.test_poset) posets_file in
54+
(*let posets' = add_posets (Poset.test_poset) posets_file in*)
5555
let () = if (!Parameter.debug_mode)
5656
then (Format.printf "set_posets: \n";
57-
print_posets posets') in
58-
posets'
57+
print_posets posets_file) in
58+
posets_file

event.ml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
open Yojson
2+
open Lib
3+
4+
(*module IntMap = Map.Make(struct type t = int let compare = compare end)*)
25

36
type quark =
47
| Tested of (int*int*int)
@@ -13,6 +16,7 @@ type t = {
1316

1417
let get_id e = e.event_id
1518
let get_label e = e.event_label
19+
let get_quarks e = e.quarks
1620

1721
let test_event event_id event_label =
1822
{ event_id; event_label; quarks = []; }
@@ -66,3 +70,48 @@ let nodes_of_json (node:Yojson.Basic.json) =
6670
List.map (fun q -> quarks_of_json q) ql in
6771
{ event_id = id; event_label = init_label; quarks = quarks_ls; }
6872
| _ -> raise (Yojson.Basic.Util.Type_error ("Not in the cflow format",`Null))
73+
74+
let quarks_tested qs =
75+
List.filter (function
76+
Tested _ -> true
77+
| Modified _ | TestedMod _ -> false) qs
78+
79+
let quarks_testedMod qs =
80+
List.filter (function
81+
TestedMod _ -> true
82+
| Modified _ | Tested _ -> false) qs
83+
84+
let quarks_modified qs =
85+
List.filter (function
86+
Modified _ -> true
87+
| Tested _ | TestedMod _ -> false) qs
88+
89+
let get_nodes qs =
90+
List.fold_left
91+
(fun nodes -> function
92+
| Modified (ni,pi,il)| Tested (ni,pi,il)| TestedMod (ni,pi,il) ->
93+
if (List.mem ni nodes) then nodes else ni::nodes) [] qs
94+
95+
let get_nodes_ports qs =
96+
let n = List.length (get_nodes qs) in
97+
let myhash = Hashtbl.create n in
98+
99+
let build_port_list n p qs =
100+
let (qs_np,rest)=
101+
List.partition
102+
(function
103+
| Modified (ni,pi,_)| Tested (ni,pi,_)| TestedMod (ni,pi,_) ->
104+
(n=ni)&&(p=pi)) qs in
105+
let plist =
106+
List.map
107+
(function Modified t| Tested t| TestedMod t -> Lib.thd t) qs_np in
108+
(plist,rest) in
109+
110+
let rec build_map qs = match qs with
111+
| [] -> myhash
112+
| q::rs -> match q with
113+
| Modified (ni,pi,_)| Tested (ni,pi,_)| TestedMod (ni,pi,_) ->
114+
let (port,rest) = build_port_list ni pi qs in
115+
let () = if (pi >= 0) then Hashtbl.add myhash ni (pi,port) in
116+
build_map rest in
117+
build_map qs

event.mli

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

3+
(*module IntMap : Map.S with type key = int*)
4+
35
type quark =
46
| Tested of (int*int*int)
57
| Modified of (int*int*int)
@@ -15,6 +17,13 @@ val nodes_of_json : Yojson.Basic.json -> t
1517

1618
val get_id : t -> int
1719
val get_label : t -> string
20+
val get_quarks : t -> quark list
1821

1922
val print_event : t -> unit
2023
val test_event : int -> string -> t
24+
25+
val quarks_tested : quark list -> quark list
26+
val quarks_testedMod : quark list -> quark list
27+
val quarks_modified : quark list -> quark list
28+
val get_nodes : quark list -> int list
29+
val get_nodes_ports : quark list -> (int, (int*int list)) Hashtbl.t

exceptionDefn.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
exception Syntax_Error of string
2+
exception Not_Supported of string
3+
exception NotKappa_Poset of string
24
exception Malformed_Decl of string
35
exception Malformed_Args of string
46
exception Internal_Error of string
57
exception Uninterpreted_Variable of string
68
exception Uninterpreted_Predicate of string
79
exception Uninterpreted_Function of string
10+
exception Mappings of unit

formulas.ml

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,6 @@ let denotations (_,_,domain as m) fm =
167167
vals
168168
(List.filter (fun d -> domain_match_sort d "Poset") domain)
169169
| [] ->
170-
(* let () = if (!Parameter.debug_mode) then
171-
Format.printf "holds test for valuation ";
172-
print_valuation v (vars) in*)
173170
if (holds m valuation fm) then (valuation::vals) else (vals) in
174171
let default_valuation x = raise (ExceptionDefn.Uninterpreted_Variable(x)) in
175172
denote_var (free_var fm) default_valuation []
@@ -246,17 +243,15 @@ let obs = function
246243
Domain.Pos p -> p
247244
| _ -> raise (ExceptionDefn.Malformed_Args("obs"))
248245

249-
let negative_influence = function
250-
(Domain.Ev e1, Domain.Pos p1, Domain.Ev e2, Domain.Pos p2) ->
251-
let bla = Concret.concret p1 in
246+
let negative_influence rules = function
247+
(Domain.Pos p1, Domain.Pos p2) ->
248+
let t = Concret.concret p1 rules in
249+
let () = if (!Parameter.debug_mode) then Trace.print t in
252250
true
253251
| _ -> raise(ExceptionDefn.Malformed_Args("negative_influence"))
254252

255253
let id_label_event str = function
256-
[e] ->
257-
(* let () = if (!Parameter.debug_mode) then
258-
Format.printf "id_label_event %s\n" str in*)
259-
((label e) = str)
254+
[e] -> ((label e) = str)
260255
| _ -> raise (ExceptionDefn.Malformed_Args("id_label_event"))
261256

262257
let check_pred p =
@@ -265,7 +260,7 @@ let check_pred p =
265260
(String.equal is_label "label")
266261
else false
267262

268-
let interpretation t =
263+
let interpretation t rules =
269264
let domain = (List.map (fun p -> Domain.Pos(p)) (Domain.get_posets(t)))@
270265
(List.map (fun e -> Domain.Ev(e)) (Domain.get_events(t))) in
271266
let func f args =
@@ -288,7 +283,7 @@ let interpretation t =
288283
| ("equal_posets", [p1;p2]) -> equal_posets (p1,p2)
289284
| ("equal_events", [e1;e2]) -> equal_events (e1,e2)
290285
| ("sub_posets", [p1;p2]) -> sub_poset (p1,p2)
291-
| ("negative_influence", [x1;p1;x2;p2]) ->
292-
negative_influence (x1,p1,x2,p2)
286+
| ("negative_influence", [p1;p2]) ->
287+
negative_influence rules (p1,p2)
293288
| _ -> raise (ExceptionDefn.Uninterpreted_Predicate(p)) in
294289
(func,pred,domain)

formulas.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ val holds : (string -> Domain.domain list -> Domain.domain) *
2121
(Domain.domain list) ->
2222
(string -> Domain.domain) -> Domain.domain fol formula -> bool
2323

24-
val interpretation : Domain.t ->
24+
val interpretation : Domain.t -> Ast.t list ->
2525
(string -> Domain.domain list -> Domain.domain) *
2626
(string -> Domain.domain list -> bool) *
2727
Domain.domain list

0 commit comments

Comments
 (0)