@@ -189,7 +189,7 @@ Reserved Notation "[ 'multinom' F | i < n ]"
189
189
(at level 0, i at level 0,
190
190
format "[ '[hv' 'multinom' F '/' | i < n ] ']'").
191
191
Reserved Notation "'U_(' n )"
192
- (at level 0, n at level 2, no associativity).
192
+ (at level 0, n at level 2, no associativity, format "'U_(' n )" ).
193
193
Reserved Notation "{ 'mpoly' T [ n ] }"
194
194
(at level 0, T, n at level 2, format "{ 'mpoly' T [ n ] }").
195
195
Reserved Notation "[ 'mpoly' D ]"
@@ -569,6 +569,13 @@ Proof. by rewrite -!mdeg_eq0 mdegD addn_eq0. Qed.
569
569
Lemma mnm1_eq0 i : (U_(i) == 0 :> 'X_{1..n})%MM = false.
570
570
Proof . by rewrite -mdeg_eq0 mdeg1. Qed .
571
571
572
+ Lemma eq_mnm1 (i j : 'I_n) : (U_(i)%MM == U_(j)%MM) = (i == j).
573
+ Proof .
574
+ case: (altP (i =P j)) => [->|/negbTE neq]; first by rewrite eqxx.
575
+ apply/negbTE/negP => /eqP; rewrite mnmP => /(_ j).
576
+ by rewrite !mnm1E eqxx neq.
577
+ Qed .
578
+
572
579
Lemma mdeg_eq1 (m : 'X_{1..n}) :
573
580
(mdeg m == 1)%N = [exists i : 'I_n, m == U_(i)%MM].
574
581
Proof .
@@ -990,14 +997,14 @@ Variable R : ringType.
990
997
991
998
Implicit Types p q r : {mpoly R[n]}.
992
999
1000
+ Lemma nvar0_mnmE : @all_equal_to 'X_{1..0} 0%MM.
1001
+ Proof . by move=> mon; apply/mnmP; case. Qed .
1002
+
993
1003
Lemma nvar0_mpolyC (p : {mpoly R[0]}): p = (p@_0%MM)%:MP.
994
- Proof .
995
- apply/mpolyP=> m; rewrite mcoeffC; suff ->: m = 0%MM.
996
- by rewrite eqxx mulr1. by apply/mnmP; case.
997
- Qed .
1004
+ Proof . by apply/mpolyP=> m; rewrite mcoeffC nvar0_mnmE eqxx mulr1. Qed .
998
1005
999
1006
Lemma nvar0_mpolyC_eq p : n = 0%N -> p = (p@_0%MM)%:MP.
1000
- Proof . move=> z_p; move:p; rewrite z_p; apply/nvar0_mpolyC. Qed .
1007
+ Proof . by move=> z_p; move:p; rewrite z_p; apply/nvar0_mpolyC. Qed .
1001
1008
End NVar0.
1002
1009
1003
1010
(* -------------------------------------------------------------------- *)
@@ -1847,6 +1854,9 @@ Proof. by rewrite msuppX mem_seq1; apply: (iffP eqP). Qed.
1847
1854
Lemma mcoeffX m k : 'X_[m]@_k = (m == k)%:R.
1848
1855
Proof . by rewrite unlock /mpolyX_def mcoeff_MPoly coeffU mul1r. Qed .
1849
1856
1857
+ Lemma mcoeffXU (i j : 'I_n) : ('X_i : {mpoly R[n]})@_U_(j) = (i == j)%:R.
1858
+ Proof . by rewrite mcoeffX eq_mnm1. Qed .
1859
+
1850
1860
Lemma mmeasureX mf m : mmeasure mf 'X_[R, m] = (mf m).+1.
1851
1861
Proof . by rewrite mmeasureE msuppX big_seq1. Qed .
1852
1862
@@ -5128,6 +5138,7 @@ case: (ssrnat.leqP k (mf m)) => [|lt_mk].
5128
5138
rewrite (eq_bigl (fun i : 'I_k => i == Ordinal lt_mk)).
5129
5139
by rewrite big_pred1_eq. by move=> i /=; rewrite eq_sym.
5130
5140
Qed .
5141
+
5131
5142
End ProjHomog.
5132
5143
5133
5144
(* -------------------------------------------------------------------- *)
@@ -5326,6 +5337,32 @@ Canonical dhomog_vectType :=
5326
5337
Eval hnf in VectType R (dhomog n.+1 R d) dhomog_vectMixin.
5327
5338
End MPolyHomogVec.
5328
5339
5340
+ (* -------------------------------------------------------------------- *)
5341
+ Section MSymHomog.
5342
+
5343
+ Variable n : nat.
5344
+ Variable R : comRingType.
5345
+ Implicit Types p q r : {mpoly R[n]}.
5346
+
5347
+ Lemma msym_pihomog d p (s : 'S_n) :
5348
+ msym s (pihomog [measure of mdeg] d p) = pihomog [measure of mdeg] d (msym s p).
5349
+ Proof .
5350
+ rewrite (mpolyE p) ![_ (\sum_(m <- msupp p) _)]linear_sum /=.
5351
+ rewrite [msym s _]linear_sum linear_sum /=.
5352
+ apply eq_bigr => m _; rewrite !linearZ /=; congr (_ *: _).
5353
+ rewrite msymX !pihomogX /=.
5354
+ have -> : mdeg [multinom m ((s^-1)%g i) | i < n] = mdeg m.
5355
+ rewrite /mdeg; apply perm_big.
5356
+ by apply/tuple_permP; exists (s^-1)%g.
5357
+ by case: (mdeg m == d); rewrite ?msym0 ?msymX.
5358
+ Qed .
5359
+
5360
+ Lemma pihomog_sym d p :
5361
+ p \is symmetric -> pihomog [measure of mdeg] d p \is symmetric.
5362
+ Proof . by move=> /issymP Hp; apply/issymP => s; rewrite msym_pihomog Hp. Qed .
5363
+
5364
+ End MSymHomog.
5365
+
5329
5366
(* -------------------------------------------------------------------- *)
5330
5367
Section MESymFundamentalHomog.
5331
5368
Variable n : nat.
0 commit comments