QuotMain.thy
changeset 575 334b3e9ea3e0
parent 572 a68c51dd85b3
child 576 33ff4b5f1806
equal deleted inserted replaced
574:06e54c862a39 575:334b3e9ea3e0
   795         (Const(@{const_name Trueprop}, _) $ (Const (@{const_name QUOT_TRUE}, _) $ _)) => true
   795         (Const(@{const_name Trueprop}, _) $ (Const (@{const_name QUOT_TRUE}, _) $ _)) => true
   796       | _ => false
   796       | _ => false
   797   in
   797   in
   798     case find_first find_fun asms of
   798     case find_first find_fun asms of
   799       SOME (_ $ (_ $ (f $ a))) => (f, a)
   799       SOME (_ $ (_ $ (f $ a))) => (f, a)
   800     | _ => error "find_qt_asm"
   800     | SOME _ => error "find_qt_asm: no pair"
       
   801     | NONE => error "find_qt_asm: no assumption"
   801   end
   802   end
   802 *}
   803 *}
   803 
   804 
   804 (* It proves the Quotient assumptions by calling quotient_tac *)
   805 (* It proves the Quotient assumptions by calling quotient_tac *)
   805 ML {*
   806 ML {*
   826 ML {*
   827 ML {*
   827 val apply_rsp_tac =
   828 val apply_rsp_tac =
   828   Subgoal.FOCUS (fn {concl, asms, context,...} =>
   829   Subgoal.FOCUS (fn {concl, asms, context,...} =>
   829     case ((HOLogic.dest_Trueprop (term_of concl))) of
   830     case ((HOLogic.dest_Trueprop (term_of concl))) of
   830       ((R2 $ (f $ x) $ (g $ y))) =>
   831       ((R2 $ (f $ x) $ (g $ y))) =>
   831         let
   832         (let
   832           val (asmf, asma) = find_qt_asm (map term_of asms);
   833           val (asmf, asma) = find_qt_asm (map term_of asms);
   833         in
   834         in
   834           if (fastype_of asmf) = (fastype_of f) then no_tac else let
   835           if (fastype_of asmf) = (fastype_of f) then no_tac else let
   835             val ty_a = fastype_of x;
   836             val ty_a = fastype_of x;
   836             val ty_b = fastype_of asma;
   837             val ty_b = fastype_of asma;
   843             val thm = Drule.instantiate' [] t_inst te
   844             val thm = Drule.instantiate' [] t_inst te
   844           in
   845           in
   845             compose_tac (false, thm, 2) 1
   846             compose_tac (false, thm, 2) 1
   846           end
   847           end
   847         end
   848         end
       
   849         handle ERROR "find_qt_asm: no pair" => no_tac)
   848     | _ => no_tac)
   850     | _ => no_tac)
   849 *}
   851 *}
   850 
   852 
   851 ML {*
   853 ML {*
   852 fun SOLVES' tac = tac THEN_ALL_NEW (fn _ => no_tac)
   854 fun SOLVES' tac = tac THEN_ALL_NEW (fn _ => no_tac)