equal
deleted
inserted
replaced
213 |
213 |
214 |
214 |
215 (** external interface **) |
215 (** external interface **) |
216 |
216 |
217 fun coherent_tac ctxt rules = SUBPROOF (fn {prems, concl, params, context = ctxt', ...} => |
217 fun coherent_tac ctxt rules = SUBPROOF (fn {prems, concl, params, context = ctxt', ...} => |
218 resolve_tac [rulify_elim_conv ctxt' concl RS Drule.equal_elim_rule2] 1 THEN |
218 resolve_tac ctxt' [rulify_elim_conv ctxt' concl RS Drule.equal_elim_rule2] 1 THEN |
219 SUBPROOF (fn {prems = prems', concl, context = ctxt'', ...} => |
219 SUBPROOF (fn {prems = prems', concl, context = ctxt'', ...} => |
220 let |
220 let |
221 val xs = |
221 val xs = |
222 map (term_of o #2) params @ |
222 map (term_of o #2) params @ |
223 map (fn (_, s) => Free (s, the (Variable.default_type ctxt'' s))) |
223 map (fn (_, s) => Free (s, the (Variable.default_type ctxt'' s))) |
225 in |
225 in |
226 (case |
226 (case |
227 valid ctxt'' (map (mk_rule ctxt'') (prems' @ prems @ rules)) (term_of concl) |
227 valid ctxt'' (map (mk_rule ctxt'') (prems' @ prems @ rules)) (term_of concl) |
228 (mk_dom xs) Net.empty 0 0 of |
228 (mk_dom xs) Net.empty 0 0 of |
229 NONE => no_tac |
229 NONE => no_tac |
230 | SOME prf => resolve_tac [thm_of_cl_prf ctxt'' concl [] prf] 1) |
230 | SOME prf => resolve_tac ctxt'' [thm_of_cl_prf ctxt'' concl [] prf] 1) |
231 end) ctxt' 1) ctxt; |
231 end) ctxt' 1) ctxt; |
232 |
232 |
233 val _ = Theory.setup |
233 val _ = Theory.setup |
234 (trace_setup #> |
234 (trace_setup #> |
235 Method.setup @{binding coherent} |
235 Method.setup @{binding coherent} |