src/HOL/Tools/Metis/metis_reconstruct.ML
changeset 42341 5a00af7f4978
parent 42339 0e5d1e5e1177
child 42342 6babd86a54a4
     1.1 --- a/src/HOL/Tools/Metis/metis_reconstruct.ML	Thu Apr 14 11:24:04 2011 +0200
     1.2 +++ b/src/HOL/Tools/Metis/metis_reconstruct.ML	Thu Apr 14 11:24:04 2011 +0200
     1.3 @@ -18,7 +18,7 @@
     1.4    val lookth : (Metis_Thm.thm * 'a) list -> Metis_Thm.thm -> 'a
     1.5    val untyped_aconv : term -> term -> bool
     1.6    val replay_one_inference :
     1.7 -    Proof.context -> mode -> (string * term) list * int Unsynchronized.ref
     1.8 +    Proof.context -> mode -> (string * term) list
     1.9      -> Metis_Thm.thm * Metis_Proof.inference -> (Metis_Thm.thm * thm) list
    1.10      -> (Metis_Thm.thm * thm) list
    1.11    val discharge_skolem_premises :
    1.12 @@ -95,7 +95,7 @@
    1.13          | NONE    => raise Fail ("hol_type_from_metis_term: " ^ x));
    1.14  
    1.15  (*Maps metis terms to isabelle terms*)
    1.16 -fun hol_term_from_metis_PT ctxt new_skolem_var_count fol_tm =
    1.17 +fun hol_term_from_metis_PT ctxt fol_tm =
    1.18    let val thy = ProofContext.theory_of ctxt
    1.19        val _ = trace_msg ctxt (fn () => "hol_term_from_metis_PT: " ^
    1.20                                         Metis_Term.toString fol_tm)
    1.21 @@ -128,11 +128,9 @@
    1.22                      val nterms = length ts - ntypes
    1.23                      val tts = map tm_to_tt ts
    1.24                      val tys = types_of (List.take(tts,ntypes))
    1.25 -                    val j = !new_skolem_var_count + 0 (* FIXME ### *)
    1.26 -                    val _ = new_skolem_var_count := j
    1.27                      val t =
    1.28                        if String.isPrefix new_skolem_const_prefix c then
    1.29 -                        Var ((new_skolem_var_name_from_const c, j),
    1.30 +                        Var ((new_skolem_var_name_from_const c, 1),
    1.31                               Type_Infer.paramify_vars (tl tys ---> hd tys))
    1.32                        else
    1.33                          Const (c, dummyT)
    1.34 @@ -166,7 +164,7 @@
    1.35    end
    1.36  
    1.37  (*Maps fully-typed metis terms to isabelle terms*)
    1.38 -fun hol_term_from_metis_FT ctxt new_skolem_var_count fol_tm =
    1.39 +fun hol_term_from_metis_FT ctxt fol_tm =
    1.40    let val _ = trace_msg ctxt (fn () => "hol_term_from_metis_FT: " ^
    1.41                                         Metis_Term.toString fol_tm)
    1.42        fun do_const c =
    1.43 @@ -204,17 +202,17 @@
    1.44                  SOME v => Free (v, dummyT)
    1.45                | NONE => (trace_msg ctxt (fn () =>
    1.46                                        "hol_term_from_metis_FT bad const: " ^ x);
    1.47 -                         hol_term_from_metis_PT ctxt new_skolem_var_count t))
    1.48 +                         hol_term_from_metis_PT ctxt t))
    1.49          | cvt t = (trace_msg ctxt (fn () =>
    1.50                     "hol_term_from_metis_FT bad term: " ^ Metis_Term.toString t);
    1.51 -                   hol_term_from_metis_PT ctxt new_skolem_var_count t)
    1.52 +                   hol_term_from_metis_PT ctxt t)
    1.53    in fol_tm |> cvt end
    1.54  
    1.55  fun hol_term_from_metis FT = hol_term_from_metis_FT
    1.56    | hol_term_from_metis _ = hol_term_from_metis_PT
    1.57  
    1.58 -fun hol_terms_from_metis ctxt mode (old_skolems, new_skolem_var_count) fol_tms =
    1.59 -  let val ts = map (hol_term_from_metis mode ctxt new_skolem_var_count) fol_tms
    1.60 +fun hol_terms_from_metis ctxt mode old_skolems fol_tms =
    1.61 +  let val ts = map (hol_term_from_metis mode ctxt) fol_tms
    1.62        val _ = trace_msg ctxt (fn () => "  calling type inference:")
    1.63        val _ = app (fn t => trace_msg ctxt
    1.64                                       (fn () => Syntax.string_of_term ctxt t)) ts
    1.65 @@ -271,7 +269,7 @@
    1.66     sorts. Instead we try to arrange that new TVars are distinct and that types
    1.67     can be inferred from terms. *)
    1.68  
    1.69 -fun inst_inf ctxt mode (old_skolems, new_skolem_var_count) thpairs fsubst th =
    1.70 +fun inst_inf ctxt mode old_skolems thpairs fsubst th =
    1.71    let val thy = ProofContext.theory_of ctxt
    1.72        val i_th = lookth thpairs th
    1.73        val i_th_vars = Term.add_vars (prop_of i_th) []
    1.74 @@ -279,7 +277,7 @@
    1.75        fun subst_translation (x,y) =
    1.76          let val v = find_var x
    1.77              (* We call "reveal_old_skolem_terms" and "infer_types" below. *)
    1.78 -            val t = hol_term_from_metis mode ctxt new_skolem_var_count y
    1.79 +            val t = hol_term_from_metis mode ctxt y
    1.80          in  SOME (cterm_of thy (Var v), t)  end
    1.81          handle Option.Option =>
    1.82                 (trace_msg ctxt (fn () => "\"find_var\" failed for " ^ x ^