@@ -33,7 +33,7 @@ Proof. by rewrite mulnC -mul_bin_diag bin1 mulnC. Qed.
33
33
34
34
Lemma mul_Sm_binm_1 n p: n * 'C(n+p,p) = p.+1 * 'C(n+p,p.+1).
35
35
Proof .
36
- case: n => [| n]; first by rewrite add0n mul0n bin_small// .
36
+ case: n => [| n]; first by rewrite add0n mul0n bin_small // muln0 .
37
37
rewrite -binom_mn_n addSn -mul_bin_diag -mul_bin_diag binom_mn_n //.
38
38
Qed .
39
39
@@ -257,7 +257,7 @@ Lemma stir1_S n m : 'So(n.+1, m.+1) = n * 'So(n, m.+1) + 'So(n, m).
257
257
Proof . done. Qed .
258
258
259
259
Lemma stir1_Sn1 n : 'So(n.+1,1) = n `!.
260
- Proof . by elim:n => // n Hr; rewrite stir1_S stir1_n0 Hr. Qed .
260
+ Proof . by elim:n => // n Hr; rewrite stir1_S stir1_n0 Hr addn0 . Qed .
261
261
262
262
Lemma stir_Sn1 n : 'St(n.+1,1) = 1.
263
263
Proof . by elim:n => // n Hr; rewrite stirS Hr stirn0. Qed .
@@ -387,7 +387,7 @@ move:p; elim: n.
387
387
move => n Hrec p.
388
388
case (ltnP n.+1 p) => ltnp.
389
389
move : (ltnp); rewrite - subn_eq0 => /eqP ->; rewrite nbsurjn0 big1 //.
390
- move => [i lin] _; rewrite bin_small //; apply: (leq_trans lin ltnp).
390
+ move => [i lin] _; rewrite bin_small ?muln0 //. apply: (leq_trans lin ltnp).
391
391
move: ltnp; case: p.
392
392
move => _; rewrite subn0 nbsurj_nn - euler_sum; apply: eq_bigr.
393
393
by move => i _; rewrite bin0 muln1.
415
415
(* Worpitzky *)
416
416
Lemma euler_sum_pow k n : k ^n.+1 = \sum_(i<n.+1) 'Eu(n.+1,i) * 'C(k+i,n.+1).
417
417
Proof .
418
- elim:n; first by rewrite big_ord_recl big_ord0 mul1n // addn0 bin1 //.
418
+ elim:n; first by rewrite big_ord_recl big_ord0 mul1n // addn0 bin1 // addn0 .
419
419
move => n Hrec.
420
420
rewrite big_ord_recl // addn0 eulern0 mul1n.
421
421
transitivity (\sum_(i < n.+2) i.+1 * 'Eu(n.+1, i) * 'C(k + i, n.+2)
@@ -436,7 +436,7 @@ Lemma sum_pow_euler n k:
436
436
Proof .
437
437
move: k; elim :n.
438
438
move => k;rewrite big_ord0 big1 // => [] [i lin] _ /=.
439
- by rewrite bin_small // add0n leqW //.
439
+ by rewrite bin_small ?muln0 // add0n leqW //.
440
440
move => n IHn k; rewrite big_ord_recr /= IHn euler_sum_pow - big_split /=.
441
441
by apply: eq_bigr => i _; rewrite - mulnDr (addSn n) binS.
442
442
Qed .
@@ -799,21 +799,21 @@ Definition br m p := \sum_(k<m.+1) 'C(m,k) * 'St(k,p).
799
799
Lemma foo1 n: br n n = 'St(n.+1,n.+1).
800
800
Proof .
801
801
rewrite /br big_ord_recr /= binn 2!stir_nn big1 // => i _.
802
- by rewrite stir_small1.
802
+ by rewrite stir_small1 ?muln0 .
803
803
Qed .
804
804
805
805
806
806
Lemma foo2 n: br n.+1 n = 'St(n.+2,n.+1).
807
807
Proof .
808
808
rewrite /br 2!big_ord_recr /= binn mul1n big1; last first.
809
- by move => i _; rewrite stir_small1.
809
+ by move => i _; rewrite stir_small1 ?muln0 .
810
810
by rewrite add0n stirS binSn 2!stir_nn.
811
811
Qed .
812
812
813
813
Lemma foo3 n: br n.+2 n = 'St(n.+3,n.+1).
814
814
Proof .
815
815
rewrite /br 3!big_ord_recr /= binn mul1n big1; last first.
816
- by move => i ; rewrite stir_small1.
816
+ by move => i ; rewrite stir_small1 ?muln0 .
817
817
rewrite add0n stirS binS binn mulnDl mul1n -addnA binSn stir_nn muln1.
818
818
rewrite addnA addnA stir_Snn (_: 'C(n.+2, n) + 'C(n.+1, 2) = n.+1 *n.+1).
819
819
rewrite - mulnDr stirS stir_nn muln1 stir_Snn //.
@@ -838,7 +838,8 @@ Lemma sum_nbsurj n k: \sum_(i<k.+1) 'Sj(k,i) * 'C(n,i) = n ^k.
838
838
Proof .
839
839
move:n; elim:k; first by move => n; rewrite big_ord_recr big_ord0 nbsurj00 bin0.
840
840
move => k Hrec n; case:n.
841
- by rewrite expnS mul0n big1 // => [] [i _] _ /=; case i.
841
+ rewrite expnS mul0n big1 //= => [] [i _] _ /=; case i => //.
842
+ by move => n; have ->: 'C(0, n.+1) = 0 by []; rewrite muln0.
842
843
move => n; rewrite expnS - Hrec big_ord_recl nbsurjn0 mul0n add0n.
843
844
transitivity (n.+1 * \sum_(i < k.+1) (('Sj(k, i) + 'Sj(k, i.+1)) * 'C(n, i))).
844
845
rewrite big_distrr; apply: eq_bigr; move => [i lik] _ //=.
859
860
860
861
Lemma sum_pow n k: \sum_(i<n) i ^k = \sum_(i<k.+1) 'Sj(k,i) * 'C(n,i.+1).
861
862
Proof .
862
- elim:n => [| n Hrec]; first by rewrite big_ord0 big1 //.
863
+ elim:n => [| n Hrec].
864
+ rewrite big_ord0 big1 //; case => i Hi _.
865
+ by have ->: 'C(0,i.+1) = 0 by []; rewrite muln0.
863
866
rewrite big_ord_recr /= - sum_nbsurj Hrec - big_split //.
864
867
by apply: eq_bigr =>i _ /=; rewrite - mulnDr.
865
868
Qed .
@@ -1350,15 +1353,15 @@ rewrite [X in _ = X] (_: _ = \sum_(i < n.*2.-1 | ~~ odd i) 'C(n, i)).
1350
1353
have -> : (m.+2).*2.-1 = m.+3 + ( (m.+2).*2.-1 - m.+3).
1351
1354
symmetry;apply: subnKC; rewrite 2! doubleS -pred_Sn 3! ltnS.
1352
1355
rewrite -addnn; apply : leq_addr.
1353
- rewrite big_split_ord /= [in X in _ = _ + X] big1 //.
1356
+ rewrite big_split_ord /= [in X in _ = _ + X] big1 ?addn0 //.
1354
1357
move => i _; rewrite bin_small ? if_same //.
1355
1358
by rewrite 3!addSn 3! ltnS leq_addr.
1356
1359
transitivity (\sum_(i < n.*2 | odd i) 'C(n, i)).
1357
1360
rewrite big_mkcond [in X in _ = X] big_mkcond /=.
1358
1361
move: np; case :n => // m _.
1359
1362
have -> : (m.+1).*2 = m.+2 + ( (m.+1).*2 - m.+2).
1360
1363
symmetry;apply: subnKC; rewrite doubleS !ltnS -addnn; apply : leq_addr.
1361
- rewrite big_split_ord /= [in X in _ = _ + X] big1 //.
1364
+ rewrite big_split_ord /= [in X in _ = _ + X] big1 ?addn0 //.
1362
1365
move => i _; rewrite bin_small ? if_same //.
1363
1366
by rewrite addnC ! addnS ! ltnS; apply : leq_addl.
1364
1367
transitivity (\sum_(i<n) ('C(n, i.*2.+1))).
@@ -1964,7 +1967,7 @@ Definition DP_Fcount (l:seq bool) := count_mem false l.
1964
1967
Definition DP_balanced l := (DP_Tcount l == DP_Fcount l).
1965
1968
1966
1969
Lemma DP_count l: DP_Tcount l + DP_Fcount l = size l.
1967
- Proof . by elim:l => // a l /= <-; case:a. Qed .
1970
+ Proof . by elim:l => // a l /= <-; case:a; rewrite add1n //= add0n addnS . Qed .
1968
1971
1969
1972
Lemma DP_count' m n l: size l = m + n ->
1970
1973
(DP_Tcount l == m) = (DP_Fcount l == n).
@@ -2095,7 +2098,7 @@ Qed.
2095
2098
2096
2099
Lemma set_to_listK m (X: {set 'I_m}) : (list_to_set m (char_seq X)) = X.
2097
2100
Proof .
2098
- by apply/setP => i; rewrite inE char_seq_prop (val_inj (Ordinal (ltn_ord i)) i).
2101
+ by apply/setP => i; rewrite inE char_seq_prop (@ val_inj _ _ _ (Ordinal (ltn_ord i)) i).
2099
2102
Qed .
2100
2103
2101
2104
Lemma set_to_list_cardinal m (X: {set 'I_m}) :
@@ -3376,8 +3379,8 @@ rewrite big_ord_recl /= bin0 nder0 mul1n (bigID (fun i : 'I_n.+1 => odd i)) /=.
3376
3379
have ->: \sum_(i < n.+1 | odd i) 'C(n.+1, bump 0 i) * nder (bump 0 i) =
3377
3380
\sum_(i < n.+1 | odd i) 'C(n.+1,i.+1) +
3378
3381
\sum_(i < n.+1 | odd i) 'C(n.+1,i.+1) * ((i.+1) *(nder i)).
3379
- rewrite addnC -big_split /=.
3380
- by apply:eq_big=> //[[i lin]] /= oi; rewrite nderS' oi.
3382
+ rewrite addnC -big_split /=.
3383
+ by apply:eq_big=> //[[i lin]] /= oi; rewrite nderS' oi /bump add1n addnC mulnS .
3381
3384
rewrite 2! addnA.
3382
3385
have <-: 2^n = 1 + \sum_(i < n.+1 | odd i) 'C(n.+1, i.+1).
3383
3386
rewrite - (F25 np) big_mkcond big_ord_recl /= bin0 // -big_mkcond; congr addn.
@@ -3479,7 +3482,6 @@ move /eqP; case; rewrite - ffunP; move => t; rewrite /f0 ffunE.
3479
3482
by apply: val_inj; case: (g t); case.
3480
3483
Qed .
3481
3484
3482
-
3483
3485
Lemma G3_e (m n: nat): #|[set f:Ftype m.+1 n | monomial_eq f ]|
3484
3486
= #|[set f:Ftype m n | monomial_le f ]|.
3485
3487
Proof .
@@ -3491,7 +3493,9 @@ have restr_pr1: forall f: T, monomial_eq f ->
3491
3493
rewrite -{1}le1 big_ord_recr /restr; congr( _ + _) =>//=.
3492
3494
by apply: congr_big => // i _ /=; rewrite ffunE.
3493
3495
have restr_pr2: forall f: T, monomial_eq f -> monomial_le (restr f).
3494
- move => f feq; rewrite /monomial_le {3} (restr_pr1 _ feq); apply: leq_addr.
3496
+ move => f feq; rewrite /monomial_le; move: (restr_pr1 _ feq).
3497
+ move: (\sum_(i < m) restr f i) => n0 Hn.
3498
+ by rewrite Hn; apply: leq_addr.
3495
3499
have restr_inj: {in [pred f | (monomial_eq f)] &, injective restr}.
3496
3500
move => f1 f2.
3497
3501
rewrite !inE => meq1 meq2 sr;rewrite - ffunP => i.
@@ -3508,7 +3512,8 @@ apply:eq_card => f; rewrite in_set in_set; apply /imsetP.
3508
3512
case: ifP => lef; last first.
3509
3513
by move=> [x]; rewrite inE => meq fr; move:lef; rewrite fr restr_pr2.
3510
3514
move: (leq_subr (\sum_(i < m) f i) n); rewrite -ltnS => le2.
3511
- pose g := [ffun i:'I_(m.+1) => if (unlift ord_max i) is Some j then f j
3515
+ pose g : {ffun ordinal_finType m.+1 -> ordinal_finType n.+1} :=
3516
+ [ffun i:'I_(m.+1) => if (unlift ord_max i) is Some j then f j
3512
3517
else (Ordinal le2)].
3513
3518
have gi : forall i: 'I_m, g (widen_ord (leqnSn m) i) = f i.
3514
3519
move => i; rewrite /g ffunE.
0 commit comments