src/HOL/Tools/Predicate_Compile/predicate_compile_proof.ML
changeset 52732 b4da1f2ec73f
parent 52230 1105b3b5aa77
child 54742 7a86358a3c0b
equal deleted inserted replaced
52731:dacd47a0633f 52732:b4da1f2ec73f
    81     | Free _ =>
    81     | Free _ =>
    82       Subgoal.FOCUS_PREMS (fn {context, params = params, prems, asms, concl, schematics} =>
    82       Subgoal.FOCUS_PREMS (fn {context, params = params, prems, asms, concl, schematics} =>
    83         let
    83         let
    84           val prems' = maps dest_conjunct_prem (take nargs prems)
    84           val prems' = maps dest_conjunct_prem (take nargs prems)
    85         in
    85         in
    86           Simplifier.rewrite_goal_tac
    86           rewrite_goal_tac (map (fn th => th RS @{thm sym} RS @{thm eq_reflection}) prems') 1
    87             (map (fn th => th RS @{thm sym} RS @{thm eq_reflection}) prems') 1
       
    88         end) ctxt 1
    87         end) ctxt 1
    89     | Abs _ => raise Fail "prove_param: No valid parameter term"
    88     | Abs _ => raise Fail "prove_param: No valid parameter term"
    90   in
    89   in
    91     REPEAT_DETERM (rtac @{thm ext} 1)
    90     REPEAT_DETERM (rtac @{thm ext} 1)
    92     THEN print_tac options "prove_param"
    91     THEN print_tac options "prove_param"
   167              THEN asm_simp_tac (put_simpset HOL_basic_ss' ctxt) 1
   166              THEN asm_simp_tac (put_simpset HOL_basic_ss' ctxt) 1
   168              THEN TRY (
   167              THEN TRY (
   169                 let
   168                 let
   170                   val prems' = maps dest_conjunct_prem (take nargs prems)
   169                   val prems' = maps dest_conjunct_prem (take nargs prems)
   171                 in
   170                 in
   172                   Simplifier.rewrite_goal_tac
   171                   rewrite_goal_tac
   173                     (map (fn th => th RS @{thm sym} RS @{thm eq_reflection}) prems') 1
   172                     (map (fn th => th RS @{thm sym} RS @{thm eq_reflection}) prems') 1
   174                 end
   173                 end
   175              THEN REPEAT_DETERM (rtac @{thm refl} 1))
   174              THEN REPEAT_DETERM (rtac @{thm refl} 1))
   176              THEN print_tac options "after if simp; in SUBPROOF") ctxt 1))))
   175              THEN print_tac options "after if simp; in SUBPROOF") ctxt 1))))
   177     THEN print_tac options "after if simplification"
   176     THEN print_tac options "after if simplification"
   208       THEN Subgoal.FOCUS_PREMS
   207       THEN Subgoal.FOCUS_PREMS
   209              (fn {context, params, prems, asms, concl, schematics} =>
   208              (fn {context, params, prems, asms, concl, schematics} =>
   210               let
   209               let
   211                 val prems' = maps dest_conjunct_prem (take nargs prems)
   210                 val prems' = maps dest_conjunct_prem (take nargs prems)
   212               in
   211               in
   213                 Simplifier.rewrite_goal_tac
   212                 rewrite_goal_tac (map (fn th => th RS @{thm sym} RS @{thm eq_reflection}) prems') 1
   214                   (map (fn th => th RS @{thm sym} RS @{thm eq_reflection}) prems') 1
       
   215               end) ctxt 1
   213               end) ctxt 1
   216       THEN (rtac (if null clause_out_ts then @{thm singleI_unit} else @{thm singleI}) 1)
   214       THEN (rtac (if null clause_out_ts then @{thm singleI_unit} else @{thm singleI}) 1)
   217     | prove_prems out_ts ((p, deriv) :: ps) =
   215     | prove_prems out_ts ((p, deriv) :: ps) =
   218       let
   216       let
   219         val premposition = (find_index (equal p) clauses) + nargs
   217         val premposition = (find_index (equal p) clauses) + nargs