Cic.term list (* arguments *)
and proof =
- | NoProof
+ | NoProof (* term is the goal missing a proof *)
| BasicProof of Cic.term
| ProofBlock of
Cic.substitution * UriManager.uri *
let rec string_of_proof = function
- | NoProof -> "NoProof"
+ | NoProof -> "NoProof "
| BasicProof t -> "BasicProof " ^ (CicPp.ppterm t)
| SubProof (t, i, p) ->
Printf.sprintf "SubProof(%s, %s, %s)"
;;
-let build_proof_term proof =
+let build_proof_term ?(noproof=Cic.Implicit None) proof =
let rec do_build_proof proof =
match proof with
| NoProof ->
Printf.fprintf stderr "WARNING: no proof!\n";
- Cic.Implicit None
+ noproof
| BasicProof term -> term
| ProofGoalBlock (proofbit, proof) ->
print_endline "found ProofGoalBlock, going up...";
let meta_convertibility_aux table t1 t2 =
let module C = Cic in
- let print_table t =
- String.concat ", "
- (List.map
- (fun (k, v) -> Printf.sprintf "(%d, %d)" k v) t)
- in
let rec aux ((table_l, table_r) as table) t1 t2 =
match t1, t2 with
| C.Meta (m1, tl1), C.Meta (m2, tl2) ->
let meta_convertibility t1 t2 =
- let f t =
- String.concat ", "
- (List.map
- (fun (k, v) -> Printf.sprintf "(%d, %d)" k v) t)
- in
if t1 = t2 then
true
else
try
- let l, r = meta_convertibility_aux ([], []) t1 t2 in
+ ignore(meta_convertibility_aux ([], []) t1 t2);
true
with NotMetaConvertible ->
false
let candidates =
List.fold_left
(fun l uri ->
- let suri = UriManager.string_of_uri uri in
if UriManager.UriSet.mem uri blacklist then
l
else
;;
-let fix_metas newmeta ((w, p, (ty, left, right, o), menv, args) as equality) =
+let fix_metas newmeta (w, p, (ty, left, right, o), menv, args) =
let table = Hashtbl.create (List.length args) in
let newargs, newmeta =
List.fold_right
(Hashtbl.copy table)
in
let rec fix_proof = function
- | NoProof -> NoProof
+ | NoProof -> NoProof
| BasicProof term -> BasicProof (repl term)
| ProofBlock (subst, eq_URI, namety, bo, (pos, eq), p) ->
let subst' =
type environment = Cic.metasenv * Cic.context * CicUniv.universe_graph;;
-let is_identity ((metasenv, context, ugraph) as env) = function
- | ((_, _, (ty, left, right, _), menv, _) as equality) ->
+let is_identity (metasenv, context, ugraph) = function
+ | (_, _, (ty, left, right, _), menv, _) ->
(left = right ||
(* (meta_convertibility left right) || *)
(fst (CicReduction.are_convertible