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] |