@@ -108,7 +108,7 @@ End prime_seq.
108108Section dvg_sum_inv_prime_seq.
109109
110110Let P (k N : nat) :=
111- [set n : 'I_N.+1 |all (fun p => p < prime_seq k) (primes n)]%SET.
111+ [set n : 'I_N.+1 | all (fun p => p < prime_seq k) (primes n)]%SET.
112112Let G (k N : nat) := ~: P k N.
113113
114114Let cardPcardG k N : #|G k N| + #|P k N| = N.+1.
@@ -121,13 +121,13 @@ Qed.
121121
122122Let cardG (R : realType) (k N : nat) :
123123 (\sum_(k <= k0 <oo) ((prime_seq k0)%:R^-1 : R)%:E < (2^-1)%:E)%E
124- -> k <= N.+1 -> ~~ odd N -> N > 0 -> (#|G k N| < (N./2)) .
124+ -> N > 0 -> (#|G k N|%:R < (N%:R / 2) :> R)%R .
125125Proof .
126126set E := fun i => [set n : 'I_N.+1 | (prime_seq i) \in (primes n)].
127127set Parts := fun i => [set ([set x in [seq (insubd ord0 x : 'I_N.+1) |
128128 x <- iota ((val y).+1 - (prime_seq i)) (prime_seq i)]]
129129 : {set 'I_N.+1}) | y in (E i)]%SET.
130- move=> Rklthalf kleqN1 evenN Nneq0.
130+ move=> Rklthalf Nneq0.
131131suff cardEi : forall i, k <= i ->
132132 (#|E i|%:R <= N%:R / (prime_seq i)%:R :>R)%R => [|i klti].
133133 have -> : G k N = \bigcup_(k <= i < N.+1) E i.
@@ -150,23 +150,17 @@ suff cardEi : forall i, k <= i ->
150150 exact/mono_leq_infl/leq_prime_seq.
151151 exists (Ordinal ileqN) => /=; first by rewrite -leq_prime_seq.
152152 by rewrite inE mem_primes xneq0 pidvdx/= andbT -mem_prime_seq inE.
153- apply: (leq_ltn_trans (card_big_setU _ _ E)).
154- rewrite -(ltr_nat R).
153+ apply: (le_lt_trans (ler_wpMn2l ler01 (card_big_setU _ _ E))).
155154 apply: (@le_lt_trans _ _ (N%:R * \sum_(k <= i < N.+1) (prime_seq i)%:R^-1)%R).
156155 rewrite mulr_sumr raddf_sum /= ler_sum_nat// => i /andP[+ _].
157156 exact: cardEi.
158- have SnleqlimSn: ((\sum_(k <= i < N.+1) (prime_seq i)%:R^-1)%:E <=
159- \sum_(k <= i <oo) ((prime_seq i)%:R^-1 : R)%:E)%E.
160- rewrite (nneseries_split _ (N.+1 - k)) => [i leqi|].
161- by rewrite lee_fin invr_ge0.
162- rewrite subnKC // raddf_sum leeDl//; apply/nneseries_ge0 => n _ _.
163- by rewrite lee_fin invr_ge0.
164157 rewrite -lte_fin.
165158 apply: (@le_lt_trans _ _ (N%:R%:E * \sum_(k <= i <oo) (prime_seq i)%:R^-1%:E)%E).
166- rewrite EFinM lee_pmul ?lee_fin// => //.
167- by apply: sumr_ge0 => i _; rewrite invr_ge0.
168- rewrite -divn2 natf_div ?dvdn2// EFinM -lte_pdivrMl ?ltr0n//.
169- by rewrite muleA -EFinM mulVf ?mul1e// pnatr_eq0 -lt0n.
159+ rewrite EFinM lee_pmul ?lee_fin//; first by rewrite sumr_ge0.
160+ rewrite raddf_sum; apply: nneseries_lim_ge => n _ _.
161+ by rewrite lee_fin invr_ge0.
162+ rewrite EFinM -lte_pdivrMl ?ltr0n// muleA -EFinM mulVf ?mul1e//.
163+ by rewrite pnatr_eq0 -lt0n.
170164rewrite ler_pdivlMr.
171165 rewrite ltr0n.
172166 have : prime_seq i \in range prime_seq by rewrite inE.
@@ -179,31 +173,28 @@ have Eigtpi x3 : x3 \in E i -> prime_seq i - x3.+1 = 0.
179173 move: x3inEi; rewrite /E inE mem_primes -mem_prime_seq mem_range.
180174 by case: (x3 > 0).
181175have: finset.trivIset (Parts i).
182- apply/finset.trivIsetP => A B /imsetP [] x xinEi + /imsetP [] y yinEi.
183- wlog xley : x y xinEi yinEi A B / x <= y.
184- move: (leq_total x y) => /orP [xley Hw| ylex Hw Adef Bdef ].
176+ apply/finset.trivIsetP => _ _ /imsetP [] x xinEi -> /imsetP [] y yinEi -> .
177+ wlog : x y xinEi yinEi / x <= y.
178+ move: (leq_total x y) => /orP [xley Hw| ylex Hw].
185179 exact: (Hw x y).
186180 by rewrite eq_sym disjoint_sym; apply: (Hw y x).
187- have [-> <- ->| xneqy] := eqVneq x y; first by rewrite eqxx.
188- rewrite -setI_eq0 => -> -> AneqB /=; rewrite -finset.subset0.
189- apply/fintype.subsetP; rewrite /sub_mem => x0.
190- rewrite finset.in_setI => /andP. rewrite finset.inE => -[].
191- rewrite finset.inE => /mapP -[] x1 x1iniota -> /mapP -[] x2 x2iniota
192- /(congr1 val).
193- rewrite !val_insubd. move: x1iniota x2iniota.
181+ rewrite -[x <= y]/(x <= y)%O.
182+ rewrite le_eqVlt => /predU1P[->|xy _]; first by rewrite eqxx.
183+ rewrite -setI_eq0 -finset.subset0.
184+ apply/fintype.subsetP => x0.
185+ rewrite finset.in_setI !inE => /andP[] /mapP[]/= x1 x1x -> /mapP[]/= x2 x2y.
186+ move=> /(congr1 val); rewrite !val_insubd; move: x1x x2y.
194187 rewrite !mem_iota !addnCB (Eigtpi x) // (Eigtpi y) // !addn0 !ltnS.
195- move=> /andP [] x1ge x1lt /andP [] x2ge x2lt.
196- rewrite (leq_trans x1lt (ltn_ord x)) (leq_trans x2lt (ltn_ord y)) => x12.
197- have: y.+1 - (prime_seq i) >= x.+1.
198- rewrite -(leq_add2r (prime_seq i)) -(@leq_sub2rE x.+1).
199- by rewrite addnCB (Eigtpi y) // addn0.
200- rewrite addnCB (Eigtpi y) // addn0 -addnBAC // subnn add0n subSS.
201- apply: dvdn_leq; first by rewrite subn_gt0 ltn_neqAle; apply/andP.
202- suff pidvdEi x3 : x3 \in E i -> prime_seq i %| x3.
203- by apply: dvdn_sub; apply: (pidvdEi _).
204- by rewrite /E inE mem_primes -mem_prime_seq mem_range; case: (x3 > 0).
205- move=> /(fun H => leq_trans H x2ge) /(leq_ltn_trans x1lt).
206- by rewrite x12 ltnn.
188+ have xiN (a : 'I_N.+1) (b : nat) : b <= a -> b <= N.
189+ by move/leq_trans; apply; rewrite -ltnS.
190+ move=> /andP [] _ /[dup] + /xiN -> /andP [] + /xiN -> x1eqx2.
191+ rewrite -x1eqx2 => /(leq_trans _)/[apply].
192+ rewrite -(leq_add2r (prime_seq i)) addnCB Eigtpi// addn0.
193+ rewrite -(@leq_sub2rE x) ?leq_addr// subDnCA// subnn addn0 (subSn (ltW xy)).
194+ rewrite ltnNge dvdn_leq// ?subn_gt0//.
195+ have dvdni z : z \in E i -> prime_seq i %| z.
196+ by rewrite inE mem_primes => /andP[] _ /andP[].
197+ by apply: dvdn_sub; apply: dvdni.
207198set i1toN := [set : 'I_N.+1] :\ ord0.
208199have cardNeqN: #|i1toN| = N.
209200 rewrite /i1toN. apply/eqP.
@@ -283,35 +274,24 @@ Qed.
283274Let cardP (k : nat) : #|P k (2 ^ (k.*2 + 2))| <= (2 ^ (k.*2 + 1)).+1.
284275Proof .
285276set N := 2 ^ (k.*2 + 2).
286- set P' := fun k N => P k N :\ ord0.
277+ pose P' k N := P k N :\ ord0.
287278set A := k.-tuple bool.
288279set B := 'I_(2 ^ (k + 1)).+1.
289- set a := fun n i => odd (logn (prime_seq i) n).
280+ pose a n i := odd (logn (prime_seq i) n).
290281have eqseq : forall n k, n < k ->
291- [seq i <- [seq prime_seq i | i <- index_iota 0 k] | i \in primes n]
282+ [seq i <- [seq prime_seq i | i <- index_iota 0 k] | i \in primes n]
292283 = primes n.
293284 move=> + k0; case=> [|n nlek]; first by rewrite filter_pred0.
294285 apply: lt_sorted_eq => [||elt].
295286 - apply: lt_sorted_filter.
296287 rewrite sorted_map.
297288 apply: (@sub_sorted _ ltn); last exact: iota_ltn_sorted.
298- rewrite ltEnat => i j /=.
299- by rewrite (leqW_mono leq_prime_seq).
289+ by rewrite ltEnat => i j /=; rewrite (leqW_mono leq_prime_seq).
300290 - exact: sorted_primes.
301- rewrite mem_filter andb_idr// => eltinprimesn.
302- suff: prime elt /\ elt < prime_seq k0.
303- rewrite -mem_prime_seq inE => /= -[[i _ <-]] pilepk.
304- rewrite map_comp; apply: map_f.
305- by rewrite map_id_in // mem_iota /= add0n subn0 -(leqW_mono leq_prime_seq).
306- split.
307- by apply/(@allP _ _ (primes n.+1)); first exact: all_prime_primes.
308- apply: (@leq_ltn_trans n.+1).
309- rewrite dvdn_leq//.
310- move: eltinprimesn.
311- by rewrite mem_primes => /andP[_ /andP[]].
312- apply: (@leq_ltn_trans k0.-1); first by rewrite ltn_predRL.
313- rewrite prednK ?(ltn_trans _ nlek)//.
314- exact/mono_leq_infl/leq_prime_seq.
291+ rewrite mem_filter andb_idr// mem_primes -mem_prime_seq => /andP[].
292+ rewrite inE => -[] i _ <- /andP[] _ /dvdn_leq/wrap[]// idn.
293+ apply: map_f; rewrite mem_iota leq0n/= add0n subn0.
294+ exact/(leq_ltn_trans _ nlek)/(leq_trans _ idn)/mono_leq_infl/leq_prime_seq.
315295have binB (n : 'I_N.+1) :
316296 (\prod_(i < k) (prime_seq i) ^ (logn (prime_seq i) n)./2) <
317297 (2 ^ (k + 1)).+1.
@@ -334,13 +314,9 @@ have binB (n : 'I_N.+1) :
334314 (prime_seq i) ^ logn (prime_seq i) n)) -(big_map prime_seq predT
335315 (fun i => i ^ logn i n)) /=.
336316 rewrite (bigID (mem (primes n))) /=.
337- rewrite [X in _ * X]big1 => [i inotinprimesn|].
338- have [/predU1P[->|/eqP->]//|] := boolP ((i == 0) || (i == 1)).
339- move=> /norP[ineq0 ineq1].
340- rewrite -(expn0 i); apply/eqP; rewrite eqn_exp2l.
341- by rewrite ltn_neqAle lt0n ineq0 eq_sym ineq1.
342- apply/eqP; move: inotinprimesn.
343- by rewrite -logn_gt0 lt0n negbK => /eqP.
317+ rewrite [X in _ * X]big1 => [[//|][//|] i ip|].
318+ apply/eqP; rewrite -(expn0 i.+2) eqn_exp2l//.
319+ by move: ip; rewrite -logn_gt0 lt0n negbK.
344320 rewrite muln1 -big_filter.
345321 have [nltk|klen] := ltnP n k; first by rewrite (eqseq n).
346322 rewrite -[in X in _ <= X](eqseq n n.+1); first exact: ltnSn.
@@ -434,21 +410,17 @@ rewrite lte_subel_addl; first by rewrite leqlimnSn.
434410rewrite -lteBlDr; first exact/sum_fin_numP.
435411rewrite (nneseries_split _ k); first by move=> k0 _; exact: unpos.
436412rewrite /Sn add0n addrAC subee; first exact/sum_fin_numP.
437- rewrite add0e => Rklthalf.
413+ rewrite add0e div1r => Rklthalf.
438414suff: N.+1 < N.+1 by rewrite ltnn.
439415rewrite -[X in X < _](cardPcardG k N).
440416have Neq : N./2 + (2 ^ (k.*2 + 1)).+1 = N.+1.
441- rewrite addnC addSn /N -divn2.
442- rewrite -[X in _ %/ X]expn1 -expnB //; first by rewrite addn2.
443- rewrite -addnBA /subn //= addnn.
444- by rewrite -mul2n -expnS -[X in 2 ^ X]addn1 -addnA.
417+ by rewrite /N 2!addnS expnS mul2n doubleK addnn.
445418rewrite -[X in _ < X]Neq -addSn.
446419apply: leq_add; last exact: cardP.
447- apply: (@cardG R); first by move: Rklthalf; rewrite /un div1r.
448- - rewrite /N; apply/leqW/(leq_trans (ltnW (ltn_expl k (ltnSn 1)))).
449- by rewrite leq_exp2l// -addnn -addnA leq_addr.
450- - by rewrite /N addn2 expnS mul2n odd_double.
451- - by rewrite /N expn_gt0.
420+ rewrite -(ltr_nat R).
421+ have -> : (N./2%:R = N%:R / 2 :> R)%R.
422+ by rewrite /N addnS expnS [in LHS]mul2n doubleK natrM mulrC mulKf.
423+ by apply: (@cardG R) => //; rewrite /N expn_gt0.
452424Qed .
453425
454426End dvg_sum_inv_prime_seq.
0 commit comments