src/HOL/Tools/Function/scnp_reconstruct.ML
changeset 35624 c4e29a0bb8c1
parent 34228 bc0cea4cae52
child 36521 73ed9f18fdd3
equal deleted inserted replaced
35623:b0de8551fadf 35624:c4e29a0bb8c1
   121   end
   121   end
   122 
   122 
   123 (* General reduction pair application *)
   123 (* General reduction pair application *)
   124 fun rem_inv_img ctxt =
   124 fun rem_inv_img ctxt =
   125   let
   125   let
   126     val unfold_tac = LocalDefs.unfold_tac ctxt
   126     val unfold_tac = Local_Defs.unfold_tac ctxt
   127   in
   127   in
   128     rtac @{thm subsetI} 1
   128     rtac @{thm subsetI} 1
   129     THEN etac @{thm CollectE} 1
   129     THEN etac @{thm CollectE} 1
   130     THEN REPEAT (etac @{thm exE} 1)
   130     THEN REPEAT (etac @{thm exE} 1)
   131     THEN unfold_tac @{thms inv_image_def}
   131     THEN unfold_tac @{thms inv_image_def}
   257                   else if qs = lq then rtac wmsI2'' 1
   257                   else if qs = lq then rtac wmsI2'' 1
   258                   else rtac wmsI1 1)
   258                   else rtac wmsI1 1)
   259             THEN mset_pwleq_tac 1
   259             THEN mset_pwleq_tac 1
   260             THEN EVERY (map2 (less_proof false) qs ps)
   260             THEN EVERY (map2 (less_proof false) qs ps)
   261             THEN (if strict orelse qs <> lq
   261             THEN (if strict orelse qs <> lq
   262                   then LocalDefs.unfold_tac ctxt set_of_simps
   262                   then Local_Defs.unfold_tac ctxt set_of_simps
   263                        THEN steps_tac MAX true
   263                        THEN steps_tac MAX true
   264                        (subtract (op =) qs lq) (subtract (op =) ps lp)
   264                        (subtract (op =) qs lq) (subtract (op =) ps lp)
   265                   else all_tac)
   265                   else all_tac)
   266           end
   266           end
   267       in
   267       in
   288          THEN (rtac @{thm reduction_pair_lemma} 1)
   288          THEN (rtac @{thm reduction_pair_lemma} 1)
   289          THEN (rtac @{thm rp_inv_image_rp} 1)
   289          THEN (rtac @{thm rp_inv_image_rp} 1)
   290          THEN (rtac (order_rpair ms_rp label) 1)
   290          THEN (rtac (order_rpair ms_rp label) 1)
   291          THEN PRIMITIVE (instantiate' [] [SOME level_mapping])
   291          THEN PRIMITIVE (instantiate' [] [SOME level_mapping])
   292          THEN unfold_tac @{thms rp_inv_image_def} (simpset_of ctxt)
   292          THEN unfold_tac @{thms rp_inv_image_def} (simpset_of ctxt)
   293          THEN LocalDefs.unfold_tac ctxt
   293          THEN Local_Defs.unfold_tac ctxt
   294            (@{thms split_conv} @ @{thms fst_conv} @ @{thms snd_conv})
   294            (@{thms split_conv} @ @{thms fst_conv} @ @{thms snd_conv})
   295          THEN REPEAT (SOMEGOAL (resolve_tac [@{thm Un_least}, @{thm empty_subsetI}]))
   295          THEN REPEAT (SOMEGOAL (resolve_tac [@{thm Un_least}, @{thm empty_subsetI}]))
   296          THEN EVERY (map (prove_lev true) sl)
   296          THEN EVERY (map (prove_lev true) sl)
   297          THEN EVERY (map (prove_lev false) (subtract (op =) sl (0 upto length cs - 1))))
   297          THEN EVERY (map (prove_lev false) (subtract (op =) sl (0 upto length cs - 1))))
   298     end
   298     end