diff -r 653de351d21c -r 901a6696cdd8 src/Sequents/ILL.thy --- a/src/Sequents/ILL.thy Sat Feb 01 00:32:32 2014 +0000 +++ b/src/Sequents/ILL.thy Sat Feb 01 17:56:03 2014 +0100 @@ -126,23 +126,25 @@ ML {* -val lazy_cs = empty_pack - add_safes [@{thm tensl}, @{thm conjr}, @{thm disjl}, @{thm promote0}, - @{thm context2}, @{thm context3}] - add_unsafes [@{thm identity}, @{thm zerol}, @{thm conjll}, @{thm conjlr}, - @{thm disjrl}, @{thm disjrr}, @{thm impr}, @{thm tensr}, @{thm impl}, - @{thm derelict}, @{thm weaken}, @{thm promote1}, @{thm promote2}, - @{thm context1}, @{thm context4a}, @{thm context4b}]; - -fun prom_tac n = - REPEAT (resolve_tac [@{thm promote0}, @{thm promote1}, @{thm promote2}] n) + val lazy_pack = + Cla.put_pack Cla.empty_pack @{context} + |> fold_rev Cla.add_safe @{thms tensl conjr disjl promote0 context2 context3} + |> fold_rev Cla.add_unsafe @{thms + identity zerol conjll conjlr + disjrl disjrr impr tensr impl + derelict weaken promote1 promote2 + context1 context4a context4b} + |> Cla.get_pack; + + fun promote_tac i = + REPEAT (resolve_tac @{thms promote0 promote1 promote2} i); *} -method_setup best_lazy = - {* Scan.succeed (K (SIMPLE_METHOD' (best_tac lazy_cs))) *} - "lazy classical reasoning" +method_setup best_lazy = {* + Scan.succeed (fn ctxt => SIMPLE_METHOD' (Cla.best_tac (Cla.put_pack lazy_pack ctxt))) +*} "lazy classical reasoning" -lemma aux_impl: "$F, $G |- A ==> $F, !(A -o B), $G |- B" +lemma aux_impl: "$F, $G |- A \ $F, !(A -o B), $G |- B" apply (rule derelict) apply (rule impl) apply (rule_tac [2] identity) @@ -150,7 +152,7 @@ apply assumption done -lemma conj_lemma: " $F, !A, !B, $G |- C ==> $F, !(A && B), $G |- C" +lemma conj_lemma: " $F, !A, !B, $G |- C \ $F, !(A && B), $G |- C" apply (rule contract) apply (rule_tac A = " (!A) >< (!B) " in cut) apply (rule_tac [2] tensr) @@ -170,13 +172,13 @@ apply (rule context1) done -lemma impr_contract: "!A, !A, $G |- B ==> $G |- (!A) -o B" +lemma impr_contract: "!A, !A, $G |- B \ $G |- (!A) -o B" apply (rule impr) apply (rule contract) apply assumption done -lemma impr_contr_der: "A, !A, $G |- B ==> $G |- (!A) -o B" +lemma impr_contr_der: "A, !A, $G |- B \ $G |- (!A) -o B" apply (rule impr) apply (rule contract) apply (rule derelict) @@ -207,7 +209,7 @@ apply (rule context1) done -lemma mp_rule1: "$F, B, $G, $H |- C ==> $F, A, $G, A -o B, $H |- C" +lemma mp_rule1: "$F, B, $G, $H |- C \ $F, A, $G, A -o B, $H |- C" apply (rule_tac A = "B" in cut) apply (rule_tac [2] ll_mp) prefer 2 apply (assumption) @@ -216,7 +218,7 @@ apply (rule context1) done -lemma mp_rule2: "$F, B, $G, $H |- C ==> $F, A -o B, $G, A, $H |- C" +lemma mp_rule2: "$F, B, $G, $H |- C \ $F, A -o B, $G, A, $H |- C" apply (rule_tac A = "B" in cut) apply (rule_tac [2] ll_mp) prefer 2 apply (assumption) @@ -228,7 +230,7 @@ lemma or_to_and: "!((!(A ++ B)) -o 0) |- !( ((!A) -o 0) && ((!B) -o 0))" by best_lazy -lemma o_a_rule: "$F, !( ((!A) -o 0) && ((!B) -o 0)), $G |- C ==> +lemma o_a_rule: "$F, !( ((!A) -o 0) && ((!B) -o 0)), $G |- C \ $F, !((!(A ++ B)) -o 0), $G |- C" apply (rule cut) apply (rule_tac [2] or_to_and) @@ -256,7 +258,7 @@ apply best_lazy done -lemma a_not_a_rule: "$J1, !A -o 0, $J2 |- B ==> $J1, !A -o (!A -o 0), $J2 |- B" +lemma a_not_a_rule: "$J1, !A -o 0, $J2 |- B \ $J1, !A -o (!A -o 0), $J2 |- B" apply (rule_tac A = "!A -o 0" in cut) apply (rule_tac [2] a_not_a) prefer 2 apply (assumption) @@ -264,20 +266,25 @@ done ML {* -val safe_cs = lazy_cs add_safes [@{thm conj_lemma}, @{thm ll_mp}, @{thm contrad1}, - @{thm contrad2}, @{thm mp_rule1}, @{thm mp_rule2}, @{thm o_a_rule}, - @{thm a_not_a_rule}] - add_unsafes [@{thm aux_impl}]; + val safe_pack = + Cla.put_pack lazy_pack @{context} + |> fold_rev Cla.add_safe @{thms conj_lemma ll_mp contrad1 + contrad2 mp_rule1 mp_rule2 o_a_rule a_not_a_rule} + |> Cla.add_unsafe @{thm aux_impl} + |> Cla.get_pack; -val power_cs = safe_cs add_unsafes [@{thm impr_contr_der}]; + val power_pack = + Cla.put_pack safe_pack @{context} + |> Cla.add_unsafe @{thm impr_contr_der} + |> Cla.get_pack; *} method_setup best_safe = - {* Scan.succeed (K (SIMPLE_METHOD' (best_tac safe_cs))) *} + {* Scan.succeed (fn ctxt => SIMPLE_METHOD' (Cla.best_tac (Cla.put_pack safe_pack ctxt))) *} method_setup best_power = - {* Scan.succeed (K (SIMPLE_METHOD' (best_tac power_cs))) *} + {* Scan.succeed (fn ctxt => SIMPLE_METHOD' (Cla.best_tac (Cla.put_pack power_pack ctxt))) *} (* Some examples from Troelstra and van Dalen *)