# HG changeset patch # User haftmann # Date 1467441665 -7200 # Node ID 5340fb6633d09dcd5a57b50f17638421be71c7f5 # Parent 4fa441c2f20cdc88c1a52f62288c0ab069eec8ef more theorems diff -r 4fa441c2f20c -r 5340fb6633d0 src/HOL/Complete_Lattices.thy --- a/src/HOL/Complete_Lattices.thy Sat Jul 02 08:41:05 2016 +0200 +++ b/src/HOL/Complete_Lattices.thy Sat Jul 02 08:41:05 2016 +0200 @@ -1402,7 +1402,26 @@ lemma UNION_fun_upd: "UNION J (A(i := B)) = UNION (J - {i}) A \ (if i \ J then B else {})" by (auto simp add: set_eq_iff) - + +lemma bij_betw_Pow: + assumes "bij_betw f A B" + shows "bij_betw (image f) (Pow A) (Pow B)" +proof - + from assms have "inj_on f A" + by (rule bij_betw_imp_inj_on) + then have "inj_on f (\Pow A)" + by simp + then have "inj_on (image f) (Pow A)" + by (rule inj_on_image) + then have "bij_betw (image f) (Pow A) (image f ` Pow A)" + by (rule inj_on_imp_bij_betw) + moreover from assms have "f ` A = B" + by (rule bij_betw_imp_surj_on) + then have "image f ` Pow A = Pow B" + by (rule image_Pow_surj) + ultimately show ?thesis by simp +qed + subsubsection \Complement\ diff -r 4fa441c2f20c -r 5340fb6633d0 src/HOL/Finite_Set.thy --- a/src/HOL/Finite_Set.thy Sat Jul 02 08:41:05 2016 +0200 +++ b/src/HOL/Finite_Set.thy Sat Jul 02 08:41:05 2016 +0200 @@ -1250,6 +1250,10 @@ "card A = 0 \ A = {} \ \ finite A" by auto +lemma card_range_greater_zero: + "finite (range f) \ card (range f) > 0" + by (rule ccontr) (simp add: card_eq_0_iff) + lemma card_gt_0_iff: "0 < card A \ A \ {} \ finite A" by (simp add: neq0_conv [symmetric] card_eq_0_iff) diff -r 4fa441c2f20c -r 5340fb6633d0 src/HOL/Fun.thy --- a/src/HOL/Fun.thy Sat Jul 02 08:41:05 2016 +0200 +++ b/src/HOL/Fun.thy Sat Jul 02 08:41:05 2016 +0200 @@ -213,6 +213,20 @@ lemma inj_onD: "inj_on f A \ f x = f y \ x \ A \ y \ A \ x = y" unfolding inj_on_def by blast +lemma inj_on_subset: + assumes "inj_on f A" + assumes "B \ A" + shows "inj_on f B" +proof (rule inj_onI) + fix a b + assume "a \ B" and "b \ B" + with assms have "a \ A" and "b \ A" + by auto + moreover assume "f a = f b" + ultimately show "a = b" using assms + by (auto dest: inj_onD) +qed + lemma comp_inj_on: "inj_on f A \ inj_on g (f ` A) \ inj_on (g \ f) A" by (simp add: comp_def inj_on_def) diff -r 4fa441c2f20c -r 5340fb6633d0 src/HOL/Hilbert_Choice.thy --- a/src/HOL/Hilbert_Choice.thy Sat Jul 02 08:41:05 2016 +0200 +++ b/src/HOL/Hilbert_Choice.thy Sat Jul 02 08:41:05 2016 +0200 @@ -129,8 +129,13 @@ apply (fast intro: someI2) done -lemma inv_id [simp]: "inv id = id" -by (simp add: inv_into_def id_def) +lemma inv_identity [simp]: + "inv (\a. a) = (\a. a)" + by (simp add: inv_def) + +lemma inv_id [simp]: + "inv id = id" + by (simp add: id_def) lemma inv_into_f_f [simp]: "[| inj_on f A; x : A |] ==> inv_into A f (f x) = x" diff -r 4fa441c2f20c -r 5340fb6633d0 src/HOL/List.thy --- a/src/HOL/List.thy Sat Jul 02 08:41:05 2016 +0200 +++ b/src/HOL/List.thy Sat Jul 02 08:41:05 2016 +0200 @@ -3933,6 +3933,14 @@ map f (removeAll x xs) = removeAll (f x) (map f xs)" by (rule map_removeAll_inj_on, erule subset_inj_on, rule subset_UNIV) +lemma length_removeAll_less_eq [simp]: + "length (removeAll x xs) \ length xs" + by (simp add: removeAll_filter_not_eq) + +lemma length_removeAll_less [termination_simp]: + "x \ set xs \ length (removeAll x xs) < length xs" + by (auto dest: length_filter_less simp add: removeAll_filter_not_eq) + subsubsection \@{const replicate}\ diff -r 4fa441c2f20c -r 5340fb6633d0 src/HOL/MacLaurin.thy --- a/src/HOL/MacLaurin.thy Sat Jul 02 08:41:05 2016 +0200 +++ b/src/HOL/MacLaurin.thy Sat Jul 02 08:41:05 2016 +0200 @@ -50,7 +50,8 @@ unfolding atLeast0LessThan[symmetric] by auto have "(\xxx. (fact x) + real x * (fact x) \ 0" by (metis add_pos_pos fact_gt_zero less_add_same_cancel1 less_add_same_cancel2 less_numeral_extra(3) mult_less_0_iff of_nat_less_0_iff) diff -r 4fa441c2f20c -r 5340fb6633d0 src/HOL/Multivariate_Analysis/Brouwer_Fixpoint.thy --- a/src/HOL/Multivariate_Analysis/Brouwer_Fixpoint.thy Sat Jul 02 08:41:05 2016 +0200 +++ b/src/HOL/Multivariate_Analysis/Brouwer_Fixpoint.thy Sat Jul 02 08:41:05 2016 +0200 @@ -46,23 +46,11 @@ apply (metis member_remove remove_def) done -lemma swap_apply1: "Fun.swap x y f x = f y" - by (simp add: Fun.swap_def) - -lemma swap_apply2: "Fun.swap x y f y = f x" - by (simp add: Fun.swap_def) - -lemma lessThan_empty_iff: "{..< n::nat} = {} \ n = 0" - by auto - -lemma Zero_notin_Suc: "0 \ Suc ` A" - by auto - -lemma atMost_Suc_eq_insert_0: "{.. Suc n} = insert 0 (Suc ` {.. n})" - apply auto - apply (case_tac x) - apply auto - done +lemmas swap_apply1 = swap_apply(1) +lemmas swap_apply2 = swap_apply(2) +lemmas lessThan_empty_iff = Iio_eq_empty_iff_nat +lemmas Zero_notin_Suc = zero_notin_Suc_image +lemmas atMost_Suc_eq_insert_0 = Iic_Suc_eq_insert_0 lemma setsum_union_disjoint': assumes "finite A" diff -r 4fa441c2f20c -r 5340fb6633d0 src/HOL/Series.thy --- a/src/HOL/Series.thy Sat Jul 02 08:41:05 2016 +0200 +++ b/src/HOL/Series.thy Sat Jul 02 08:41:05 2016 +0200 @@ -283,9 +283,6 @@ subsection \Infinite summability on topological monoids\ -lemma Zero_notin_Suc: "0 \ Suc ` A" - by auto - context fixes f g :: "nat \ 'a :: {t2_space, topological_comm_monoid_add}" begin @@ -296,7 +293,8 @@ have "(\n. (\i l + f 0" using assms by (auto intro!: tendsto_add simp: sums_def) moreover have "(\ii (\i. \j s + f 0" by (subst LIMSEQ_Suc_iff) (simp add: sums_def) also have "\ \ (\i. (\j s + f 0" - by (simp add: ac_simps setsum.reindex image_iff lessThan_Suc_eq_insert_0) + by (simp add: ac_simps lessThan_Suc_eq_insert_0 image_Suc_lessThan setsum_atLeast1_atMost_eq) also have "\ \ (\n. f (Suc n)) sums s" proof assume "(\i. (\j s + f 0" diff -r 4fa441c2f20c -r 5340fb6633d0 src/HOL/Set.thy --- a/src/HOL/Set.thy Sat Jul 02 08:41:05 2016 +0200 +++ b/src/HOL/Set.thy Sat Jul 02 08:41:05 2016 +0200 @@ -83,6 +83,11 @@ lemma set_eq_iff: "A = B \ (\x. x \ A \ x \ B)" by (auto intro:set_eqI) +lemma Collect_eqI: + assumes "\x. P x = Q x" + shows "Collect P = Collect Q" + using assms by (auto intro: set_eqI) + text \Lifting of predicate class instances\ instantiation set :: (type) boolean_algebra @@ -973,6 +978,11 @@ lemma range_composition: "range (\x. f (g x)) = f ` range g" by auto +lemma range_eq_singletonD: + assumes "range f = {a}" + shows "f x = a" + using assms by auto + subsubsection \Some rules with \if\\ @@ -1860,6 +1870,24 @@ lemma Int_emptyI: "(\x. x \ A \ x \ B \ False) \ A \ B = {}" by blast +lemma in_image_insert_iff: + assumes "\C. C \ B \ x \ C" + shows "A \ insert x ` B \ x \ A \ A - {x} \ B" (is "?P \ ?Q") +proof + assume ?P then show ?Q + using assms by auto +next + assume ?Q + then have "x \ A" and "A - {x} \ B" + by simp_all + from \A - {x} \ B\ have "insert x (A - {x}) \ insert x ` B" + by (rule imageI) + also from \x \ A\ + have "insert x (A - {x}) = A" + by auto + finally show ?P . +qed + hide_const (open) member not_member lemmas equalityI = subset_antisym @@ -1920,4 +1948,3 @@ \ end - diff -r 4fa441c2f20c -r 5340fb6633d0 src/HOL/Set_Interval.thy --- a/src/HOL/Set_Interval.thy Sat Jul 02 08:41:05 2016 +0200 +++ b/src/HOL/Set_Interval.thy Sat Jul 02 08:41:05 2016 +0200 @@ -14,7 +14,7 @@ section \Set intervals\ theory Set_Interval -imports Lattices_Big Nat_Transfer +imports Lattices_Big Divides Nat_Transfer begin context ord @@ -901,6 +901,16 @@ qed qed +corollary image_Suc_lessThan: + "Suc ` {.. {.. \h. bij_betw h {0.. \h. bij_betw h M {0.. finite B \ card A = card B \ EX h. bij_betw h A B" apply(drule ex_bij_betw_finite_nat) @@ -1200,6 +1236,17 @@ ultimately show "(\f. inj_on f A \ f ` A \ B)" by blast qed (insert assms, auto) +lemma subset_eq_range_card: + fixes n :: nat + assumes "N \ {.. n" +proof - + from assms finite_lessThan have "card N \ card {..Intervals of integers\ lemma atLeastLessThanPlusOne_atLeastAtMost_int: "{l..i\n. (\jji = Suc j..n. a i j)" by (induction n) (auto simp: setsum.distrib) -lemma setsum_zero_power' [simp]: - fixes c :: "nat \ 'a::field" - shows "(\i\A. c i * 0^i / d i) = (if finite A \ 0 \ A then c 0 / d 0 else 0)" - using setsum_zero_power [of "\i. c i / d i" A] - by auto +lemma setsum_atLeast1_atMost_eq: + "setsum f {Suc 0..n} = (\k = (\kTelescoping\ @@ -1923,6 +1974,29 @@ qed +subsection \Division remainder\ + +lemma range_mod: + fixes n :: nat + assumes "n > 0" + shows "range (\m. m mod n) = {0.. ?A \ m \ ?B" + proof + assume "m \ ?A" + with assms show "m \ ?B" + by auto + next + assume "m \ ?B" + moreover have "m mod n \ ?A" + by (rule rangeI) + ultimately show "m \ ?A" + by simp + qed +qed + + subsection \Efficient folding over intervals\ function fold_atLeastAtMost_nat where diff -r 4fa441c2f20c -r 5340fb6633d0 src/HOL/Transcendental.thy --- a/src/HOL/Transcendental.thy Sat Jul 02 08:41:05 2016 +0200 +++ b/src/HOL/Transcendental.thy Sat Jul 02 08:41:05 2016 +0200 @@ -272,7 +272,8 @@ have "?s sums y" using sums_if'[OF \f sums y\] . from this[unfolded sums_def, THEN LIMSEQ_Suc] have "(\ n. if even n then f (n div 2) else 0) sums y" - by (simp add: lessThan_Suc_eq_insert_0 image_iff setsum.reindex if_eq sums_def cong del: if_cong) + by (simp add: lessThan_Suc_eq_insert_0 setsum_atLeast1_atMost_eq image_Suc_lessThan + if_eq sums_def cong del: if_cong) } from sums_add[OF g_sums this] show ?thesis unfolding if_sum . qed