@@ -189,7 +189,7 @@ Reserved Notation "[ 'multinom' F | i < n ]"
189189 (at level 0, i at level 0,
190190 format "[ '[hv' 'multinom' F '/' | i < n ] ']'").
191191Reserved 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 )" ).
193193Reserved Notation "{ 'mpoly' T [ n ] }"
194194 (at level 0, T, n at level 2, format "{ 'mpoly' T [ n ] }").
195195Reserved Notation "[ 'mpoly' D ]"
@@ -569,6 +569,13 @@ Proof. by rewrite -!mdeg_eq0 mdegD addn_eq0. Qed.
569569Lemma mnm1_eq0 i : (U_(i) == 0 :> 'X_{1..n})%MM = false.
570570Proof . by rewrite -mdeg_eq0 mdeg1. Qed .
571571
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+
572579Lemma mdeg_eq1 (m : 'X_{1..n}) :
573580 (mdeg m == 1)%N = [exists i : 'I_n, m == U_(i)%MM].
574581Proof .
@@ -990,14 +997,14 @@ Variable R : ringType.
990997
991998Implicit Types p q r : {mpoly R[n]}.
992999
1000+ Lemma nvar0_mnmE : @all_equal_to 'X_{1..0} 0%MM.
1001+ Proof . by move=> mon; apply/mnmP; case. Qed .
1002+
9931003Lemma 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 .
9981005
9991006Lemma 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 .
10011008End NVar0.
10021009
10031010(* -------------------------------------------------------------------- *)
@@ -1847,6 +1854,9 @@ Proof. by rewrite msuppX mem_seq1; apply: (iffP eqP). Qed.
18471854Lemma mcoeffX m k : 'X_[m]@_k = (m == k)%:R.
18481855Proof . by rewrite unlock /mpolyX_def mcoeff_MPoly coeffU mul1r. Qed .
18491856
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+
18501860Lemma mmeasureX mf m : mmeasure mf 'X_[R, m] = (mf m).+1.
18511861Proof . by rewrite mmeasureE msuppX big_seq1. Qed .
18521862
@@ -5128,6 +5138,7 @@ case: (ssrnat.leqP k (mf m)) => [|lt_mk].
51285138rewrite (eq_bigl (fun i : 'I_k => i == Ordinal lt_mk)).
51295139 by rewrite big_pred1_eq. by move=> i /=; rewrite eq_sym.
51305140Qed .
5141+
51315142End ProjHomog.
51325143
51335144(* -------------------------------------------------------------------- *)
@@ -5326,6 +5337,32 @@ Canonical dhomog_vectType :=
53265337 Eval hnf in VectType R (dhomog n.+1 R d) dhomog_vectMixin.
53275338End MPolyHomogVec.
53285339
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+
53295366(* -------------------------------------------------------------------- *)
53305367Section MESymFundamentalHomog.
53315368Variable n : nat.
0 commit comments