src/HOL/Tools/Metis/metis_reconstruct.ML
changeset 43093 40e50afbc203
parent 43092 93ec303e1917
child 43094 269300fb83d0
equal deleted inserted replaced
43092:93ec303e1917 43093:40e50afbc203
   210         | cvt t = (trace_msg ctxt (fn () =>
   210         | cvt t = (trace_msg ctxt (fn () =>
   211                    "hol_term_from_metis_FT bad term: " ^ Metis_Term.toString t);
   211                    "hol_term_from_metis_FT bad term: " ^ Metis_Term.toString t);
   212                    hol_term_from_metis_PT ctxt t)
   212                    hol_term_from_metis_PT ctxt t)
   213   in fol_tm |> cvt end
   213   in fol_tm |> cvt end
   214 
   214 
   215 fun hol_term_from_metis FT = hol_term_from_metis_FT
   215 fun hol_term_from_metis FO = hol_term_from_metis_PT
   216   | hol_term_from_metis _ = hol_term_from_metis_PT
   216   | hol_term_from_metis HO = hol_term_from_metis_PT
       
   217   | hol_term_from_metis FT = hol_term_from_metis_FT
       
   218 (*  | hol_term_from_metis New = ###*)
   217 
   219 
   218 fun hol_terms_from_metis ctxt mode old_skolems fol_tms =
   220 fun hol_terms_from_metis ctxt mode old_skolems fol_tms =
   219   let val ts = map (hol_term_from_metis mode ctxt) fol_tms
   221   let val ts = map (hol_term_from_metis mode ctxt) fol_tms
   220       val _ = trace_msg ctxt (fn () => "  calling type inference:")
   222       val _ = trace_msg ctxt (fn () => "  calling type inference:")
   221       val _ = app (fn t => trace_msg ctxt
   223       val _ = app (fn t => trace_msg ctxt
   451 val subst_em = @{lemma "s = t ==> P s ==> ~ P t ==> False" by simp}
   453 val subst_em = @{lemma "s = t ==> P s ==> ~ P t ==> False" by simp}
   452 val ssubst_em = @{lemma "s = t ==> P t ==> ~ P s ==> False" by simp}
   454 val ssubst_em = @{lemma "s = t ==> P t ==> ~ P s ==> False" by simp}
   453 
   455 
   454 val metis_eq = Metis_Term.Fn ("=", []);
   456 val metis_eq = Metis_Term.Fn ("=", []);
   455 
   457 
   456 fun get_ty_arg_size _ (Const (@{const_name HOL.eq}, _)) = 0  (*equality has no type arguments*)
   458 (* Equality has no type arguments *)
   457   | get_ty_arg_size thy (Const (c, _)) = (num_type_args thy c handle TYPE _ => 0)
   459 fun get_ty_arg_size _ (Const (@{const_name HOL.eq}, _)) = 0
   458   | get_ty_arg_size _ _ = 0;
   460   | get_ty_arg_size thy (Const (s, _)) =
       
   461     (num_type_args thy s handle TYPE _ => 0)
       
   462   | get_ty_arg_size _ _ = 0
   459 
   463 
   460 fun equality_inf ctxt mode skolem_params (pos, atm) fp fr =
   464 fun equality_inf ctxt mode skolem_params (pos, atm) fp fr =
   461   let val thy = Proof_Context.theory_of ctxt
   465   let val thy = Proof_Context.theory_of ctxt
   462       val m_tm = Metis_Term.Fn atm
   466       val m_tm = Metis_Term.Fn atm
   463       val [i_atm,i_tm] = hol_terms_from_metis ctxt mode skolem_params [m_tm, fr]
   467       val [i_atm,i_tm] = hol_terms_from_metis ctxt mode skolem_params [m_tm, fr]