wenzelm@7701: (* Title: HOL/Recdef.thy wenzelm@7701: ID: $Id$ wenzelm@10773: Author: Konrad Slind and Markus Wenzel, TU Muenchen wenzelm@12023: *) wenzelm@5123: wenzelm@12023: header {* TFL: recursive function definitions *} wenzelm@7701: nipkow@15131: theory Recdef nipkow@15140: imports Wellfounded_Relations Datatype wenzelm@7701: files wenzelm@10773: ("../TFL/utils.ML") wenzelm@10773: ("../TFL/usyntax.ML") wenzelm@10773: ("../TFL/dcterm.ML") wenzelm@10773: ("../TFL/thms.ML") wenzelm@10773: ("../TFL/rules.ML") wenzelm@10773: ("../TFL/thry.ML") wenzelm@10773: ("../TFL/tfl.ML") wenzelm@10773: ("../TFL/post.ML") nipkow@15131: ("Tools/recdef_package.ML") nipkow@15131: begin wenzelm@10773: wenzelm@10773: lemma tfl_eq_True: "(x = True) --> x" wenzelm@10773: by blast wenzelm@10773: wenzelm@10773: lemma tfl_rev_eq_mp: "(x = y) --> y --> x"; wenzelm@10773: by blast wenzelm@10773: wenzelm@10773: lemma tfl_simp_thm: "(x --> y) --> (x = x') --> (x' --> y)" wenzelm@10773: by blast wenzelm@6438: wenzelm@10773: lemma tfl_P_imp_P_iff_True: "P ==> P = True" wenzelm@10773: by blast wenzelm@10773: wenzelm@10773: lemma tfl_imp_trans: "(A --> B) ==> (B --> C) ==> (A --> C)" wenzelm@10773: by blast wenzelm@10773: wenzelm@12023: lemma tfl_disj_assoc: "(a \ b) \ c == a \ (b \ c)" wenzelm@10773: by simp wenzelm@10773: wenzelm@12023: lemma tfl_disjE: "P \ Q ==> P --> R ==> Q --> R ==> R" wenzelm@10773: by blast wenzelm@10773: wenzelm@12023: lemma tfl_exE: "\x. P x ==> \x. P x --> Q ==> Q" wenzelm@10773: by blast wenzelm@10773: wenzelm@10773: use "../TFL/utils.ML" wenzelm@10773: use "../TFL/usyntax.ML" wenzelm@10773: use "../TFL/dcterm.ML" wenzelm@10773: use "../TFL/thms.ML" wenzelm@10773: use "../TFL/rules.ML" wenzelm@10773: use "../TFL/thry.ML" wenzelm@10773: use "../TFL/tfl.ML" wenzelm@10773: use "../TFL/post.ML" wenzelm@10773: use "Tools/recdef_package.ML" wenzelm@6438: setup RecdefPackage.setup wenzelm@6438: wenzelm@9855: lemmas [recdef_simp] = wenzelm@9855: inv_image_def wenzelm@9855: measure_def wenzelm@9855: lex_prod_def nipkow@11284: same_fst_def wenzelm@9855: less_Suc_eq [THEN iffD2] wenzelm@9855: oheimb@11165: lemmas [recdef_cong] = if_cong image_cong wenzelm@9855: wenzelm@9855: lemma let_cong [recdef_cong]: wenzelm@9855: "M = N ==> (!!x. x = N ==> f x = g x) ==> Let M f = Let N g" wenzelm@9855: by (unfold Let_def) blast wenzelm@9855: wenzelm@9855: lemmas [recdef_wf] = wenzelm@9855: wf_trancl wenzelm@9855: wf_less_than wenzelm@9855: wf_lex_prod wenzelm@9855: wf_inv_image wenzelm@9855: wf_measure wenzelm@9855: wf_pred_nat nipkow@10653: wf_same_fst wenzelm@9855: wf_empty wenzelm@9855: wenzelm@6438: end