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