Quot/quotient_tacs.ML
changeset 1137 36d596cb63a2
parent 1128 17ca92ab4660
child 1157 7763756b42cf
equal deleted inserted replaced
1136:10a6ba364ce1 1137:36d596cb63a2
   151 
   151 
   152   5. then simplification like 0
   152   5. then simplification like 0
   153 
   153 
   154   finally jump back to 1
   154   finally jump back to 1
   155 *)
   155 *)
       
   156 
   156 fun regularize_tac ctxt =
   157 fun regularize_tac ctxt =
   157 let
   158 let
   158   val thy = ProofContext.theory_of ctxt
   159   val thy = ProofContext.theory_of ctxt
   159   val ball_pat = @{term "Ball (Respects (R1 ===> R2)) P"}
   160   val ball_pat = @{term "Ball (Respects (R1 ===> R2)) P"}
   160   val bex_pat  = @{term "Bex (Respects (R1 ===> R2)) P"}
   161   val bex_pat  = @{term "Bex (Respects (R1 ===> R2)) P"}
   161   val simproc = Simplifier.simproc_i thy "" [ball_pat, bex_pat] (K (ball_bex_range_simproc))
   162   val simproc = Simplifier.simproc_i thy "" [ball_pat, bex_pat] (K (ball_bex_range_simproc))
   162   val simpset = (mk_minimal_ss ctxt)
   163   val simpset = (mk_minimal_ss ctxt)
   163                        addsimps @{thms ball_reg_eqv bex_reg_eqv babs_reg_eqv babs_simp}
   164                        addsimps @{thms ball_reg_eqv bex_reg_eqv babs_reg_eqv babs_simp}
   164                        addsimprocs [simproc]
   165                        addsimprocs [simproc]
   165                        addSolver equiv_solver addSolver quotient_solver
   166                        addSolver equiv_solver addSolver quotient_solver
   166   val eq_eqvs = map (OF1 @{thm eq_imp_rel}) (equiv_rules_get ctxt)
   167   val eq_imp_rel = @{lemma "equivp R ==> a = b --> R a b" by (simp add: equivp_reflp)}
       
   168   val eq_eqvs = map (OF1 eq_imp_rel) (equiv_rules_get ctxt)
   167 in
   169 in
   168   simp_tac simpset THEN'
   170   simp_tac simpset THEN'
   169   REPEAT_ALL_NEW (CHANGED o FIRST'
   171   REPEAT_ALL_NEW (CHANGED o FIRST'
   170     [resolve_tac @{thms ball_reg_right bex_reg_left bex1_bexeq_reg},
   172     [resolve_tac @{thms ball_reg_right bex_reg_left bex1_bexeq_reg},
   171      resolve_tac (Inductive.get_monos ctxt),
   173      resolve_tac (Inductive.get_monos ctxt),