minor performance tuning;
authorwenzelm
Wed, 06 Dec 2023 19:54:38 +0100
changeset 79154 e47db1e15a22
parent 79153 16a144eaf67d
child 79155 53288743c2f0
minor performance tuning;
src/Pure/zterm.ML
--- a/src/Pure/zterm.ML	Wed Dec 06 19:45:53 2023 +0100
+++ b/src/Pure/zterm.ML	Wed Dec 06 19:54:38 2023 +0100
@@ -369,8 +369,14 @@
 fun const_proof thy a A =
   let
     val t = global_zterm_of thy A;
-    val instT = ZTVars.build (ZTVars.add_tvars t) |> ZTVars.map (fn v => fn _ => ZTVar v);
-    val inst = ZVars.build (ZVars.add_vars t) |> ZVars.map (fn v => fn _ => ZVar v);
+    val instT =
+      ZTVars.build (t |> (fold_types o fold_tvars) (fn v => fn tab =>
+        if ZTVars.defined tab v then tab else ZTVars.update (v, ZTVar v) tab));
+    val inst =
+      ZVars.build (t |> fold_aterms (fn a => fn tab =>
+        (case a of
+          ZVar v => if ZVars.defined tab v then tab else ZVars.update (v, a) tab
+        | _ => tab)));
   in ZConstP (a, t, instT, inst) end;
 
 fun axiom_proof thy name = const_proof thy (ZAxiom name);