equal
deleted
inserted
replaced
730 (* (except when bound by outermost meta-quantifiers) *) |
730 (* (except when bound by outermost meta-quantifiers) *) |
731 no_tac |
731 no_tac |
732 end) |
732 end) |
733 in |
733 in |
734 EVERY' [ |
734 EVERY' [ |
735 REPEAT_DETERM o eresolve_tac [rev_mp], |
735 REPEAT_DETERM o eresolve_tac ctxt [rev_mp], |
736 cond_split_tac, |
736 cond_split_tac, |
737 resolve_tac @{thms ccontr}, |
737 resolve_tac ctxt @{thms ccontr}, |
738 prem_nnf_tac ctxt, |
738 prem_nnf_tac ctxt, |
739 TRY o REPEAT_ALL_NEW (DETERM o (eresolve_tac [conjE, exE] ORELSE' eresolve_tac [disjE])) |
739 TRY o REPEAT_ALL_NEW |
|
740 (DETERM o (eresolve_tac ctxt [conjE, exE] ORELSE' eresolve_tac ctxt [disjE])) |
740 ] |
741 ] |
741 end; |
742 end; |
742 |
743 |
743 end; (* local *) |
744 end; (* local *) |
744 |
745 |
751 let |
752 let |
752 val split_thms = filter (is_split_thm ctxt) (#splits (get_arith_data ctxt)) |
753 val split_thms = filter (is_split_thm ctxt) (#splits (get_arith_data ctxt)) |
753 fun is_relevant t = is_some (decomp ctxt t) |
754 fun is_relevant t = is_some (decomp ctxt t) |
754 in |
755 in |
755 DETERM ( |
756 DETERM ( |
756 TRY (filter_prems_tac is_relevant i) |
757 TRY (filter_prems_tac ctxt is_relevant i) |
757 THEN ( |
758 THEN ( |
758 (TRY o REPEAT_ALL_NEW (split_once_tac ctxt split_thms)) |
759 (TRY o REPEAT_ALL_NEW (split_once_tac ctxt split_thms)) |
759 THEN_ALL_NEW |
760 THEN_ALL_NEW |
760 (CONVERSION Drule.beta_eta_conversion |
761 (CONVERSION Drule.beta_eta_conversion |
761 THEN' |
762 THEN' |
762 (TRY o (eresolve_tac [notE] THEN' eq_assume_tac))) |
763 (TRY o (eresolve_tac ctxt [notE] THEN' eq_assume_tac))) |
763 ) i |
764 ) i |
764 ) |
765 ) |
765 end; |
766 end; |
766 |
767 |
767 end; (* LA_Data *) |
768 end; (* LA_Data *) |
832 in |
833 in |
833 |
834 |
834 fun refute_tac ctxt test prep_tac ref_tac = |
835 fun refute_tac ctxt test prep_tac ref_tac = |
835 let val refute_prems_tac = |
836 let val refute_prems_tac = |
836 REPEAT_DETERM |
837 REPEAT_DETERM |
837 (eresolve_tac [@{thm conjE}, @{thm exE}] 1 ORELSE |
838 (eresolve_tac ctxt [@{thm conjE}, @{thm exE}] 1 ORELSE |
838 filter_prems_tac test 1 ORELSE |
839 filter_prems_tac ctxt test 1 ORELSE |
839 eresolve_tac @{thms disjE} 1) THEN |
840 eresolve_tac ctxt @{thms disjE} 1) THEN |
840 (DETERM (eresolve_tac @{thms notE} 1 THEN eq_assume_tac 1) ORELSE |
841 (DETERM (eresolve_tac ctxt @{thms notE} 1 THEN eq_assume_tac 1) ORELSE |
841 ref_tac 1); |
842 ref_tac 1); |
842 in EVERY'[TRY o filter_prems_tac test, |
843 in EVERY'[TRY o filter_prems_tac ctxt test, |
843 REPEAT_DETERM o eresolve_tac @{thms rev_mp}, prep_tac, |
844 REPEAT_DETERM o eresolve_tac ctxt @{thms rev_mp}, prep_tac, |
844 resolve_tac @{thms ccontr}, prem_nnf_tac ctxt, |
845 resolve_tac ctxt @{thms ccontr}, prem_nnf_tac ctxt, |
845 SELECT_GOAL (DEPTH_SOLVE refute_prems_tac)] |
846 SELECT_GOAL (DEPTH_SOLVE refute_prems_tac)] |
846 end; |
847 end; |
847 |
848 |
848 end; |
849 end; |
849 |
850 |
873 in |
874 in |
874 |
875 |
875 fun gen_tac ex ctxt = |
876 fun gen_tac ex ctxt = |
876 FIRST' [simple_tac ctxt, |
877 FIRST' [simple_tac ctxt, |
877 Object_Logic.full_atomize_tac ctxt THEN' |
878 Object_Logic.full_atomize_tac ctxt THEN' |
878 (REPEAT_DETERM o resolve_tac [impI]) THEN' raw_tac ctxt ex]; |
879 (REPEAT_DETERM o resolve_tac ctxt [impI]) THEN' raw_tac ctxt ex]; |
879 |
880 |
880 val tac = gen_tac true; |
881 val tac = gen_tac true; |
881 |
882 |
882 end; |
883 end; |
883 |
884 |