diff --git a/thys/Implicational_Logic/Implicational_Logic_Sequent_Calculus.thy b/thys/Implicational_Logic/Implicational_Logic_Sequent_Calculus.thy new file mode 100644 --- /dev/null +++ b/thys/Implicational_Logic/Implicational_Logic_Sequent_Calculus.thy @@ -0,0 +1,204 @@ +theory Implicational_Logic_Sequent_Calculus imports Main begin + +datatype form = + Pro nat (\\\) | + Imp form form (infixr \\\ 100) + +primrec semantics (infix \\\ 50) where + \I \ \n = I n\ | + \I \ p \ q = (I \ p \ I \ q)\ + +abbreviation sc (\\_\\) where \\I\ X Y \ (\p \ set X. I \ p) \ (\q \ set Y. I \ q)\ + +inductive SC (infix \\\ 50) where + Imp_L: \p \ q # X \ Y\ if \X \ p # Y\ and \q # X \ Y\ | + Imp_R: \X \ p \ q # Y\ if \p # X \ q # Y\ | + Set_L: \X' \ Y\ if \X \ Y\ and \set X' = set X\ | + Set_R: \X \ Y'\ if \X \ Y\ and \set Y' = set Y\ | + Basic: \p # _ \ p # _\ + +function mp where + \mp A B (p \ q # C) [] = (mp A B C [p] \ mp A B (q # C) [])\ | + \mp A B C (p \ q # D) = mp A B (p # C) (q # D)\ | + \mp A B [] [] = (set A \ set B \ {})\ | + \mp A B (\n # C) [] = mp (n # A) B C []\ | + \mp A B C (\n # D) = mp A (n # B) C D\ + by pat_completeness simp_all + +termination + by (relation \measure (\(_, _, C, D). 2 * (\p \ C @ D. size p) + size (C @ D))\) simp_all + +lemma main: \(\I. \I\ (map \ A @ C) (map \ B @ D)) \ mp A B C D\ + by (induct rule: mp.induct) (auto 5 2) + +definition prover (\\\) where \\ p \ mp [] [] [] [p]\ + +theorem prover_correct: \\ p \ (\I. I \ p)\ + unfolding prover_def by (simp flip: main) + +export_code \ in SML + +lemma MP: \mp A B C D \ set X \ set (map \ A @ C) \ set Y \ set (map \ B @ D) \ X \ Y\ +proof (induct A B C D arbitrary: X Y rule: mp.induct[case_names Imp_L Imp_R Basic]) + case (Imp_L A B p q C) + have + \set (map \ A @ C) \ set X\ + \set (map \ B) \ set Y\ + using Imp_L(4,5) by auto + moreover from this have + \set (map \ A @ C) \ set (q # X)\ + \set (map \ B) \ set (p # Y)\ + by auto + ultimately have \p \ q # X \ Y\ + using Imp_L(1-3) SC.Imp_L by simp + then show ?case + using Imp_L(4) Set_L by fastforce +next + case (Imp_R A B C p q D) + have + \set (map \ A @ C) \ set (p # X)\ + \set (map \ B @ D) \ set (q # Y)\ + using Imp_R(3,4) by auto + then have \X \ p \ q # Y\ + using Imp_R(1,2) SC.Imp_R by simp + then show ?case + using Imp_R(4) Set_R by fastforce +next + case (Basic A B) + obtain n where + \n \ set A\ + \n \ set B\ + using Basic(1) by auto + then have + \set (\n # X) = set X\ + \set (\n # Y) = set Y\ + using Basic(2,3) by auto + then show ?case + using Set_L Set_R SC.Basic by metis +qed simp_all + +theorem OK: \(\I. \I\ X Y) \ X \ Y\ + by (rule, use MP main[of \[]\ _ \[]\ _] in simp, induct rule: SC.induct) auto + +corollary \[] \ [p] \ (\I. I \ p)\ + using OK by force + +proposition \[] \ [p \ p]\ +proof - + from Imp_R have ?thesis if \[p] \ [p]\ + using that by force + with Basic show ?thesis + by force +qed + +proposition \[] \ [p \ (p \ q) \ q]\ +proof - + from Imp_R have ?thesis if \[p] \ [(p \ q) \ q]\ + using that by force + with Imp_R have ?thesis if \[p \ q, p] \ [q]\ + using that by force + with Imp_L have ?thesis if \[p] \ [p, q]\ and \[q, p] \ [q]\ + using that by force + with Basic show ?thesis + by force +qed + +proposition \[] \ [p \ q \ q \ p]\ +proof - + from Imp_R have ?thesis if \[p] \ [q \ q \ p]\ + using that by force + with Imp_R have ?thesis if \[q, p] \ [q \ p]\ + using that by force + with Imp_R have ?thesis if \[q, q, p] \ [p]\ + using that by force + with Set_L have ?thesis if \[p, q] \ [p]\ + using that by force + with Basic show ?thesis + by force +qed + +proposition \[] \ [(p \ q) \ p \ q]\ +proof - + from Imp_R have ?thesis if \[p \ q] \ [p \ q]\ + using that by force + with Basic show ?thesis + by force +qed + +proposition \[] \ [p \ p \ q \ q]\ +proof - + from Imp_R have ?thesis if \[p] \ [p \ q \ q]\ + using that by force + with Imp_R have ?thesis if \[p, p] \ [q \ q]\ + using that by force + with Imp_R have ?thesis if \[q, p, p] \ [q]\ + using that by force + with Basic show ?thesis + by force +qed + +proposition \[] \ [(p \ p \ q) \ p \ q]\ +proof - + from Imp_R have ?thesis if \[p \ p \ q] \ [p \ q]\ + using that by force + with Imp_R have ?thesis if \[p, p \ p \ q] \ [q]\ + using that by force + with Set_L have ?thesis if \[p \ p \ q, p] \ [q]\ + using that by force + with Imp_L have ?thesis if \[p] \ [p, q]\ and \[p \ q, p] \ [q]\ + using that by force + with Imp_L have ?thesis if \[p] \ [p, q]\ and \[q, p] \ [q]\ and \[p] \ [p, q]\ + using that by force + with Basic show ?thesis + by force +qed + +proposition \[] \ [p \ q \ p]\ +proof - + from Imp_R have ?thesis if \[p] \ [q \ p]\ + using that by force + with Imp_R have ?thesis if \[q, p] \ [p]\ + using that by force + with Set_L have ?thesis if \[p, q] \ [p]\ + using that by force + with Basic show ?thesis + by force +qed + +proposition \[] \ [(p \ r) \ (r \ q) \ p \ q]\ +proof - + from Imp_R have ?thesis if \[p \ r] \ [(r \ q) \ p \ q]\ + using that by force + with Imp_R have ?thesis if \[r \ q, p \ r] \ [p \ q]\ + using that by force + with Imp_R have ?thesis if \[p, r \ q, p \ r] \ [q]\ + using that by force + with Set_L have ?thesis if \[r \ q, p \ r, p] \ [q]\ + using that by force + with Imp_L have ?thesis if \[p \ r, p] \ [r, q]\ and \[q, p \ r, p] \ [q]\ + using that by force + with Basic have ?thesis if \[p \ r, p] \ [r, q]\ + using that by force + with Imp_L have ?thesis if \[p] \ [p, r, q]\ and \[r, p] \ [r, q]\ + using that by force + with Basic show ?thesis + by force +qed + +proposition \[] \ [((p \ q) \ p) \ p]\ +proof - + from Imp_R have ?thesis if \[(p \ q) \ p] \ [p]\ + using that by force + with Imp_L have ?thesis if \[] \ [p \ q, p]\ and \[p] \ [p]\ + using that by force + with Basic have ?thesis if \[] \ [p \ q, p]\ + using that by force + with Imp_R have ?thesis if \[p] \ [q, p]\ + using that by force + with Set_R have ?thesis if \[p] \ [p, q]\ + using that by force + with Basic show ?thesis + by force +qed + +end diff --git a/thys/Implicational_Logic/ROOT b/thys/Implicational_Logic/ROOT --- a/thys/Implicational_Logic/ROOT +++ b/thys/Implicational_Logic/ROOT @@ -1,9 +1,10 @@ chapter AFP session Implicational_Logic = HOL + options [timeout = 3600] theories Implicational_Logic Implicational_Logic_Appendix + Implicational_Logic_Sequent_Calculus document_files "root.tex"