1(* Title: HOL/Metis.thy 2 Author: Lawrence C. Paulson, Cambridge University Computer Laboratory 3 Author: Jia Meng, Cambridge University Computer Laboratory and NICTA 4 Author: Jasmin Blanchette, TU Muenchen 5*) 6 7section \<open>Metis Proof Method\<close> 8 9theory Metis 10imports ATP 11begin 12 13ML_file "~~/src/Tools/Metis/metis.ML" 14 15 16subsection \<open>Literal selection and lambda-lifting helpers\<close> 17 18definition select :: "'a \<Rightarrow> 'a" where 19"select = (\<lambda>x. x)" 20 21lemma not_atomize: "(\<not> A \<Longrightarrow> False) \<equiv> Trueprop A" 22by (cut_tac atomize_not [of "\<not> A"]) simp 23 24lemma atomize_not_select: "(A \<Longrightarrow> select False) \<equiv> Trueprop (\<not> A)" 25unfolding select_def by (rule atomize_not) 26 27lemma not_atomize_select: "(\<not> A \<Longrightarrow> select False) \<equiv> Trueprop A" 28unfolding select_def by (rule not_atomize) 29 30lemma select_FalseI: "False \<Longrightarrow> select False" by simp 31 32definition lambda :: "'a \<Rightarrow> 'a" where 33"lambda = (\<lambda>x. x)" 34 35lemma eq_lambdaI: "x \<equiv> y \<Longrightarrow> x \<equiv> lambda y" 36unfolding lambda_def by assumption 37 38 39subsection \<open>Metis package\<close> 40 41ML_file "Tools/Metis/metis_generate.ML" 42ML_file "Tools/Metis/metis_reconstruct.ML" 43ML_file "Tools/Metis/metis_tactic.ML" 44 45hide_const (open) select fFalse fTrue fNot fComp fconj fdisj fimplies fAll fEx fequal lambda 46hide_fact (open) select_def not_atomize atomize_not_select not_atomize_select select_FalseI 47 fFalse_def fTrue_def fNot_def fconj_def fdisj_def fimplies_def fAll_def fEx_def fequal_def 48 fTrue_ne_fFalse fNot_table fconj_table fdisj_table fimplies_table fAll_table fEx_table 49 fequal_table fAll_table fEx_table fNot_law fComp_law fconj_laws fdisj_laws fimplies_laws 50 fequal_laws fAll_law fEx_law lambda_def eq_lambdaI 51 52end 53