diff options
| author | Marcos Magueta <maguetamarcos@gmail.com> | 2026-04-03 16:17:38 -0300 |
|---|---|---|
| committer | Marcos Magueta <maguetamarcos@gmail.com> | 2026-04-03 16:17:38 -0300 |
| commit | 63ae3c930de89af6f85229a467caa3f53cb844a2 (patch) | |
| tree | cda4d513672f9fefa09c3a1dff69d8443890e224 /lib/drl_verified/drl_verified.ml | |
| parent | c5bc3a4992b4968780c286a084ad7c02b2b58f1e (diff) | |
| download | Sakura-63ae3c930de89af6f85229a467caa3f53cb844a2.tar.gz Sakura-63ae3c930de89af6f85229a467caa3f53cb844a2.zip | |
format
Diffstat (limited to 'lib/drl_verified/drl_verified.ml')
| -rw-r--r-- | lib/drl_verified/drl_verified.ml | 99 |
1 files changed, 45 insertions, 54 deletions
diff --git a/lib/drl_verified/drl_verified.ml b/lib/drl_verified/drl_verified.ml index b5aeaa7..868af2a 100644 --- a/lib/drl_verified/drl_verified.ml +++ b/lib/drl_verified/drl_verified.ml @@ -1,76 +1,67 @@ - (** val eqb : char list -> char list -> bool **) let rec eqb s1 s2 = match s1 with - | [] -> (match s2 with - | [] -> true - | _::_ -> false) - | c1::s1' -> - (match s2 with - | [] -> false - | c2::s2' -> if (=) c1 c2 then eqb s1' s2' else false) + | [] -> ( match s2 with [] -> true | _ :: _ -> false) + | c1 :: s1' -> ( + match s2 with + | [] -> false + | c2 :: s2' -> if c1 = c2 then eqb s1' s2' else false) type attr_name = char list - type relation = { rel_name : char list; rel_finite : bool } - type database = (char list * relation) list (** val db_lookup : char list -> database -> relation option **) let rec db_lookup name = function -| [] -> None -| p :: rest -> - let (n, r) = p in if eqb name n then Some r else db_lookup name rest + | [] -> None + | p :: rest -> + let n, r = p in + if eqb name n then Some r else db_lookup name rest -type literal = -| LitInt of int -| LitStr of char list -| LitBool of bool +type literal = LitInt of int | LitStr of char list | LitBool of bool type query = -| Base of char list -| Const of (attr_name * literal) list -| Select of query * query -| Join of attr_name list * query * query -| Cartesian of query * query -| Project of attr_name list * query -| Rename of (attr_name * attr_name) list * query -| Union of query * query -| Diff of query * query -| Take of int * query + | Base of char list + | Const of (attr_name * literal) list + | Select of query * query + | Join of attr_name list * query * query + | Cartesian of query * query + | Project of attr_name list * query + | Rename of (attr_name * attr_name) list * query + | Union of query * query + | Diff of query * query + | Take of int * query (** val predicted_finite : database -> query -> bool option **) let rec predicted_finite db = function -| Base name -> - (match db_lookup name db with - | Some r -> Some r.rel_finite - | None -> None) -| Select (_, source) -> predicted_finite db source -| Join (_, q1, q2) -> - (match predicted_finite db q1 with - | Some f1 -> - (match predicted_finite db q2 with - | Some f2 -> Some ((&&) f1 f2) + | Base name -> ( + match db_lookup name db with Some r -> Some r.rel_finite | None -> None) + | Select (_, source) -> predicted_finite db source + | Join (_, q1, q2) -> ( + match predicted_finite db q1 with + | Some f1 -> ( + match predicted_finite db q2 with + | Some f2 -> Some (f1 && f2) + | None -> None) | None -> None) - | None -> None) -| Cartesian (q1, q2) -> - (match predicted_finite db q1 with - | Some f1 -> - (match predicted_finite db q2 with - | Some f2 -> Some ((&&) f1 f2) + | Cartesian (q1, q2) -> ( + match predicted_finite db q1 with + | Some f1 -> ( + match predicted_finite db q2 with + | Some f2 -> Some (f1 && f2) + | None -> None) | None -> None) - | None -> None) -| Project (_, q0) -> predicted_finite db q0 -| Rename (_, q0) -> predicted_finite db q0 -| Union (q1, q2) -> - (match predicted_finite db q1 with - | Some f1 -> - (match predicted_finite db q2 with - | Some f2 -> Some ((&&) f1 f2) + | Project (_, q0) -> predicted_finite db q0 + | Rename (_, q0) -> predicted_finite db q0 + | Union (q1, q2) -> ( + match predicted_finite db q1 with + | Some f1 -> ( + match predicted_finite db q2 with + | Some f2 -> Some (f1 && f2) + | None -> None) | None -> None) - | None -> None) -| Diff (q1, _) -> predicted_finite db q1 -| _ -> Some true + | Diff (q1, _) -> predicted_finite db q1 + | _ -> Some true |
