src/Tools/coherent.ML
changeset 59498 50b60f501b05
parent 59058 a78612c67ec0
child 59582 0fbed69ff081
equal deleted inserted replaced
59497:0c5cd369a643 59498:50b60f501b05
   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}