]> matita.cs.unibo.it Git - helm.git/blob - helm/software/components/binaries/matitaprover/matitaprover.ml
5a438c7b6fa700d9a139669b32765db58530bb60
[helm.git] / helm / software / components / binaries / matitaprover / matitaprover.ml
1 let main () =
2   let problem_file = ref "no-file-given" in
3   let tptppath = ref "./" in
4   Arg.parse [
5    "--tptppath", Arg.String (fun p -> tptppath := p), "[path]  TPTP lib root"
6    ] (fun x -> problem_file := x) "matitaprover [problemfile]";
7   let hypotheses, goals = Tptp_cnf.parse ~tptppath:!tptppath !problem_file in
8   let goal = match goals with [x] -> x | _ -> assert false in
9   let module B : Terms.Blob with type t = Ast.term = struct
10         type t = Ast.term
11         let eq a b = a = b
12         let compare = Pervasives.compare
13         let eqP = Ast.Constant "=="
14         let pp = function
15           | Ast.Constant x -> x
16           | Ast.Variable _ -> assert false
17           | Ast.Function _ -> assert false
18         ;;
19         let embed x = 
20           let rec aux m = function
21             | Ast.Variable name ->
22                 (try m, List.assoc name m
23                  with Not_found -> 
24                     let t = Terms.Var (List.length m) in
25                     (name,t)::m, t)
26             | Ast.Constant _ as t -> m, Terms.Leaf t
27             | Ast.Function (name,args) -> 
28                 let m, args = 
29                   HExtlib.list_mapi_acc 
30                     (fun x _ m -> aux m x) m args
31                 in
32                 m, Terms.Node (Terms.Leaf (Ast.Constant name):: args) 
33           in
34             aux [] x
35         ;;
36         let saturate bo ty = 
37           let vars, ty = embed ty in
38           let _, bo = embed bo in
39           let bo = Terms.Node (bo :: List.map snd (List.rev vars)) in
40           bo, ty
41         ;;
42         let embed t = snd(embed t);;
43
44   end
45   in
46   let module P = Paramod.Paramod(B) in
47   let module Pp = Pp.Pp(B) in
48   let bag = Terms.M.empty, 0 in
49   let bag, g_passives = P.mk_goal bag goal in
50   let bag, passives = 
51     HExtlib.list_mapi_acc (fun x _ b -> P.mk_passive b x) bag hypotheses 
52   in
53   prerr_endline "Facts";
54   prerr_endline (String.concat "\n" (List.map Pp.pp_unit_clause passives));
55   prerr_endline "Goal";
56   prerr_endline (Pp.pp_unit_clause g_passives);
57   ignore(P.paramod bag ~g_passives:[g_passives] ~passives);
58   ()
59 ;;
60
61 main ()