X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=ocaml%2Flambda4.ml;h=02ac1e018ff96f1cb1d9cacb8e85dc58be733adb;hb=f7a60345135a4032bf63a7dc650bcc9fe30aa30a;hp=5422704a52f82a2b00c30323d647e7d2ab41e30f;hpb=608c40045f651c6402b17c437f997de4d63f6afd;p=fireball-separation.git diff --git a/ocaml/lambda4.ml b/ocaml/lambda4.ml index 5422704..02ac1e0 100644 --- a/ocaml/lambda4.ml +++ b/ocaml/lambda4.ml @@ -27,10 +27,14 @@ type problem = ; sigma: (int * nf) list (* the computed substitution *) ; deltas: discriminating_set ref list (* collection of all branches *) ; initialSpecialK: int + ; label : string + ; var_names : string list (* names of the original free variables *) ; trail: discriminating_set list list };; +let label_of_problem {label} = label;; + (* exceptions *) exception Pacman exception Bottom @@ -75,7 +79,7 @@ let string_of_measure = string_of_int;; let string_of_problem label ({freshno; div; conv; ps; deltas} as p) = Console.print_hline (); - prerr_string ("\n(* DISPLAY PROBLEM (" ^ label ^ ") - "); + prerr_string ("\n(* DISPLAY PROBLEM (" ^ p.label ^ " - " ^ label ^ ") "); let nl = "\n" in let deltas = String.concat (nl^" ") (List.map (fun r -> String.concat " <> " (List.map (fun (i,_) -> string_of_int i) !r)) deltas) in let l = Array.to_list (Array.init (freshno + 1) string_of_var) in @@ -806,6 +810,27 @@ let append_zero = | `N _ -> raise (Parser.ParsingError " numbers in ps") ;; +let tmp (label, div, conv, nums, var_names) = + (* DA SPOSTARE NEI TEST: *) + let ps = List.map append_zero nums in (* crea lista applicando zeri o dummies *) + let ps = sort_uniq ~compare:eta_compare (ps :> nf list) in + let ps = List.map (cast_to_i_n_var) ps in + + (* TODO: *) + (* replace div with bottom in problem??? *) + let all_tms = (match div with None -> [] | Some div -> [(div :> i_n_var)]) @ nums @ conv in + if all_tms = [] then failwith "FIXME: empty problem"; + let initialSpecialK = compute_special_k (Listx.from_list (all_tms :> nf list)) in + let freshno = List.length var_names in + let deltas = + let dummy = `Var (max_int / 2, -666) in + [ ref (Array.to_list (Array.init (List.length ps) (fun i -> i, dummy))) ] in + let trail = [] in + let sigma = [] in + let p = {freshno; div; conv; ps; sigma; deltas; initialSpecialK; trail; var_names; label} in + p, check p +;; + let problem_of ~div ~conv ~nums = let all_tms = (match div with None -> [] | Some div -> [div]) @ nums @ conv in let all_tms, var_names = Parser.parse' all_tms in @@ -829,20 +854,5 @@ let problem_of ~div ~conv ~nums = | #i_n_var as y -> y | _ -> raise (Parser.ParsingError "A term in num is not i_n_var") ) ps in - (* DA SPOSTARE NEI TEST: *) - let ps = List.map append_zero ps in (* crea lista applicando zeri o dummies *) - let ps = sort_uniq ~compare:eta_compare (ps :> nf list) in - let ps = List.map (cast_to_i_n_var) ps in - - (* TODO: *) - (* replace div with bottom in problem??? *) - - let special_k = compute_special_k (Listx.from_list all_tms) in (* compute initial special K *) - let freshno = List.length var_names in - let deltas = - let dummy = `Var (max_int / 2, -666) in - [ ref (Array.to_list (Array.init (List.length ps) (fun i -> i, dummy))) ] in - let trail = [] in - let p = {freshno; div; conv; ps; sigma=[] ; deltas; initialSpecialK=special_k; trail} in - p, check p + tmp("missing label", div, conv, ps, var_names) ;;