39 not_to_imp (converts the assumption ~P to P-->False), and not_impE |
39 not_to_imp (converts the assumption ~P to P-->False), and not_impE |
40 (handles double negations). Could instead rewrite by not_def as the first |
40 (handles double negations). Could instead rewrite by not_def as the first |
41 step of an intuitionistic proof. |
41 step of an intuitionistic proof. |
42 *) |
42 *) |
43 val safe_brls = sort (make_ord lessb) |
43 val safe_brls = sort (make_ord lessb) |
44 [ (true,FalseE), (false,TrueI), (false,refl), |
44 [ (true, thm "FalseE"), (false, thm "TrueI"), (false, thm "refl"), |
45 (false,impI), (false,notI), (false,allI), |
45 (false, thm "impI"), (false, thm "notI"), (false, thm "allI"), |
46 (true,conjE), (true,exE), |
46 (true, thm "conjE"), (true, thm "exE"), |
47 (false,conjI), (true,conj_impE), |
47 (false, thm "conjI"), (true, thm "conj_impE"), |
48 (true,disj_impE), (true,disjE), |
48 (true, thm "disj_impE"), (true, thm "disjE"), |
49 (false,iffI), (true,iffE), (true,not_to_imp) ]; |
49 (false, thm "iffI"), (true, thm "iffE"), (true, thm "not_to_imp") ]; |
50 |
50 |
51 val haz_brls = |
51 val haz_brls = |
52 [ (false,disjI1), (false,disjI2), (false,exI), |
52 [ (false, thm "disjI1"), (false, thm "disjI2"), (false, thm "exI"), |
53 (true,allE), (true,not_impE), (true,imp_impE), (true,iff_impE), |
53 (true, thm "allE"), (true, thm "not_impE"), (true, thm "imp_impE"), (true, thm "iff_impE"), |
54 (true,all_impE), (true,ex_impE), (true,impE) ]; |
54 (true, thm "all_impE"), (true, thm "ex_impE"), (true, thm "impE") ]; |
55 |
55 |
56 val haz_dup_brls = |
56 val haz_dup_brls = |
57 [ (false,disjI1), (false,disjI2), (false,exI), |
57 [ (false, thm "disjI1"), (false, thm "disjI2"), (false, thm "exI"), |
58 (true,all_dupE), (true,not_impE), (true,imp_impE), (true,iff_impE), |
58 (true, thm "all_dupE"), (true, thm "not_impE"), (true, thm "imp_impE"), (true, thm "iff_impE"), |
59 (true,all_impE), (true,ex_impE), (true,impE) ]; |
59 (true, thm "all_impE"), (true, thm "ex_impE"), (true, thm "impE") ]; |
60 |
60 |
61 (*0 subgoals vs 1 or more: the p in safep is for positive*) |
61 (*0 subgoals vs 1 or more: the p in safep is for positive*) |
62 val (safe0_brls, safep_brls) = |
62 val (safe0_brls, safep_brls) = |
63 List.partition (curry (op =) 0 o subgoals_of_brl) safe_brls; |
63 List.partition (curry (op =) 0 o subgoals_of_brl) safe_brls; |
64 |
64 |