src/FOL/FOL.thy
changeset 59940 087d81f5213e
parent 59780 23b67731f4f0
child 59942 6a3098313acf
equal deleted inserted replaced
59939:7d46aa03696e 59940:087d81f5213e
   382 
   382 
   383 subsection {* Proof by cases and induction *}
   383 subsection {* Proof by cases and induction *}
   384 
   384 
   385 text {* Proper handling of non-atomic rule statements. *}
   385 text {* Proper handling of non-atomic rule statements. *}
   386 
   386 
   387 definition "induct_forall(P) == \<forall>x. P(x)"
   387 context
   388 definition "induct_implies(A, B) == A \<longrightarrow> B"
   388 begin
   389 definition "induct_equal(x, y) == x = y"
   389 
   390 definition "induct_conj(A, B) == A \<and> B"
   390 restricted definition "induct_forall(P) == \<forall>x. P(x)"
       
   391 restricted definition "induct_implies(A, B) == A \<longrightarrow> B"
       
   392 restricted definition "induct_equal(x, y) == x = y"
       
   393 restricted definition "induct_conj(A, B) == A \<and> B"
   391 
   394 
   392 lemma induct_forall_eq: "(!!x. P(x)) == Trueprop(induct_forall(\<lambda>x. P(x)))"
   395 lemma induct_forall_eq: "(!!x. P(x)) == Trueprop(induct_forall(\<lambda>x. P(x)))"
   393   unfolding atomize_all induct_forall_def .
   396   unfolding atomize_all induct_forall_def .
   394 
   397 
   395 lemma induct_implies_eq: "(A ==> B) == Trueprop(induct_implies(A, B))"
   398 lemma induct_implies_eq: "(A ==> B) == Trueprop(induct_implies(A, B))"
   403 
   406 
   404 lemmas induct_atomize = induct_forall_eq induct_implies_eq induct_equal_eq induct_conj_eq
   407 lemmas induct_atomize = induct_forall_eq induct_implies_eq induct_equal_eq induct_conj_eq
   405 lemmas induct_rulify [symmetric] = induct_atomize
   408 lemmas induct_rulify [symmetric] = induct_atomize
   406 lemmas induct_rulify_fallback =
   409 lemmas induct_rulify_fallback =
   407   induct_forall_def induct_implies_def induct_equal_def induct_conj_def
   410   induct_forall_def induct_implies_def induct_equal_def induct_conj_def
   408 
       
   409 hide_const induct_forall induct_implies induct_equal induct_conj
       
   410 
       
   411 
   411 
   412 text {* Method setup. *}
   412 text {* Method setup. *}
   413 
   413 
   414 ML_file "~~/src/Tools/induct.ML"
   414 ML_file "~~/src/Tools/induct.ML"
   415 ML {*
   415 ML {*
   425   );
   425   );
   426 *}
   426 *}
   427 
   427 
   428 declare case_split [cases type: o]
   428 declare case_split [cases type: o]
   429 
   429 
       
   430 end
       
   431 
   430 ML_file "~~/src/Tools/case_product.ML"
   432 ML_file "~~/src/Tools/case_product.ML"
   431 
   433 
   432 
   434 
   433 hide_const (open) eq
   435 hide_const (open) eq
   434 
   436