]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/paramodulation/inference.ml
Added $Id$ to every .ml file.
[helm.git] / helm / ocaml / paramodulation / inference.ml
index 105b708e92d47d21c4b812d58876f405fe9347bd..5a2fd042d8f2b470d7a69c15a0565171283355b7 100644 (file)
@@ -23,6 +23,8 @@
  * http://cs.unibo.it/helm/.
  *)
 
+(* $Id$ *)
+
 open Utils;;
 
 
@@ -917,8 +919,36 @@ type environment = Cic.metasenv * Cic.context * CicUniv.universe_graph;;
 
 let is_identity ((metasenv, context, ugraph) as env) = function
   | ((_, _, (ty, left, right, _), menv, _) as equality) ->
-      (left = right ||
+      (prerr_endline ("left = "^(CicPp.ppterm left));
+       prerr_endline ("right = "^(CicPp.ppterm right));
+       (left = right ||
           (* (meta_convertibility left right) || *)
           (fst (CicReduction.are_convertible 
-                 ~metasenv:(metasenv @ menv) context left right ugraph)))
+                 ~metasenv:(metasenv @ menv) context left right ugraph))))
+;;
+
+
+let term_of_equality equality =
+  let _, _, (ty, left, right, _), menv, args = equality in
+  let eq i = function Cic.Meta (j, _) -> i = j | _ -> false in
+  let argsno = List.length args in
+  let t =
+    CicSubstitution.lift argsno
+      (Cic.Appl [Cic.MutInd (LibraryObjects.eq_URI (), 0, []); ty; left; right])
+  in
+  snd (
+    List.fold_right
+      (fun a (n, t) ->
+         match a with
+         | Cic.Meta (i, _) ->
+             let name = Cic.Name ("X" ^ (string_of_int n)) in
+             let _, _, ty = CicUtil.lookup_meta i menv in
+             let t = 
+               ProofEngineReduction.replace
+                 ~equality:eq ~what:[i]
+                 ~with_what:[Cic.Rel (argsno - (n - 1))] ~where:t
+             in
+             (n-1, Cic.Prod (name, ty, t))
+         | _ -> assert false)
+      args (argsno, t))
 ;;