avoid duplicating Var when the types do not quite fit -- since this step occurs before type inference
authorblanchet
Mon, 29 Jul 2013 18:06:39 +0200
changeset 52758 7ffcd6f2890d
parent 52757 ea7cf7b14fdd
child 52780 4b6b71fb00d5
child 52782 b11d73dbfb76
avoid duplicating Var when the types do not quite fit -- since this step occurs before type inference
src/HOL/Tools/ATP/atp_proof_reconstruct.ML
--- a/src/HOL/Tools/ATP/atp_proof_reconstruct.ML	Mon Jul 29 17:27:56 2013 +0200
+++ b/src/HOL/Tools/ATP/atp_proof_reconstruct.ML	Mon Jul 29 18:06:39 2013 +0200
@@ -303,8 +303,13 @@
 fun quantify_over_var quant_of var_s t =
   let
     val vars = [] |> Term.add_vars t |> filter (fn ((s, _), _) => s = var_s)
-                  |> map Var
-  in fold_rev quant_of vars t end
+    val normTs = vars |> AList.group (op =) |> map (apsnd hd)
+    fun norm_var_types (Var (x, T)) =
+        Var (x, case AList.lookup (op =) normTs x of
+                  NONE => T
+                | SOME T' => T')
+      | norm_var_types t = t
+  in t |> map_aterms norm_var_types |> fold_rev quant_of (map Var normTs) end
 
 (* Interpret an ATP formula as a HOL term, extracting sort constraints as they
    appear in the formula. *)