@@ -44,7 +44,7 @@ Reserved Notation "<< k >>" (format "<< k >>").
4444Reserved Notation "g @_ k"
4545 (at level 3, k at level 2, left associativity, format "g @_ k").
4646Reserved Notation "c %:MP" (format "c %:MP").
47- Reserved Notation "''X_{1..' n '}'".
47+ Reserved Notation "''X_{1..' n '}'" (n at level 2) .
4848Reserved Notation "'U_(' n )" (format "'U_(' n )").
4949Reserved Notation "x ^[ f , g ]" (at level 1, format "x ^[ f , g ]").
5050
@@ -238,7 +238,7 @@ Definition mcoeff (x : K) (g : {malg G[K]}) : G := malg_val g x.
238238
239239Definition mkmalg : {fsfun K -> G with 0} -> {malg G[K]} := @Malg K G.
240240
241- Definition mkmalgU (k : K) (x : G) := mkmalg [fsfun y => [fmap].[k <- x] y ].
241+ Definition mkmalgU (k : K) (x : G) := mkmalg [fsfun y : [fset k] => x ].
242242
243243Definition msupp (g : {malg G[K]}) : {fset K} := finsupp (malg_val g).
244244
@@ -346,7 +346,7 @@ Lemma mcoeffD k : {morph mcoeff k: x y / x + y}. Proof. exact: raddfD. Qed.
346346Lemma mcoeffMn k n : {morph mcoeff k: x / x *+ n} . Proof . exact: raddfMn. Qed .
347347
348348Lemma mcoeffU k x k' : << x *g k >>@_k' = x *+ (k == k').
349- Proof . by rewrite mcoeff_fnd fnd_set fnd_fmap0; case: eqVneq . Qed .
349+ Proof . by rewrite [LHS]fsfunE inE mulrb eq_sym . Qed .
350350
351351Lemma mcoeffUU k x : << x *g k >>@_k = x.
352352Proof . by rewrite mcoeffU eqxx. Qed .
@@ -982,6 +982,9 @@ HB.instance Definition _ :=
982982HB.instance Definition _ :=
983983 GRing.LSemiModule_isLSemiAlgebra.Build R {malg R[K]} (@fgscaleAl K R).
984984
985+ (* FIXME: HB.saturate *)
986+ HB.instance Definition _ := GRing.RMorphism.on (mcoeff 1 : {malg R[K]} -> R).
987+
985988End MalgNzSemiRingTheory.
986989
987990(* -------------------------------------------------------------------- *)
@@ -1290,7 +1293,7 @@ Arguments monalgOver_pred _ _ _ _ /.
12901293
12911294(* -------------------------------------------------------------------- *)
12921295HB.mixin Record isMeasure (M : monomType) (mf : M -> nat) := {
1293- mf0 : mf 1%M = 0%N;
1296+ mf1 : mf 1%M = 0%N;
12941297 mfM : {morph mf : m1 m2 / (m1 * m2)%M >-> (m1 + m2)%N};
12951298 mf_eq0I : forall m, mf m = 0%N -> m = 1%M
12961299}.
@@ -1310,7 +1313,7 @@ Context (M : monomType) (G : nmodType) (mf : measure M).
13101313Implicit Types (g : {malg G[M]}).
13111314
13121315Lemma mf_eq0 m : (mf m == 0%N) = (m == 1%M).
1313- Proof . by apply/eqP/eqP=> [|->]; rewrite ?mf0 // => /mf_eq0I. Qed .
1316+ Proof . by apply/eqP/eqP=> [|->]; rewrite ?mf1 // => /mf_eq0I. Qed .
13141317
13151318Definition mmeasure g := (\max_(m <- msupp g) (mf m).+1)%N.
13161319
@@ -1332,7 +1335,7 @@ Proof. by apply/contraTN=> /mmeasure_mnm_lt; rewrite leqNgt ltnS. Qed.
13321335Lemma mmeasureC c : mmeasure c%:MP = (c != 0%R) :> nat.
13331336Proof .
13341337rewrite mmeasureE msuppC; case: (_ == 0)=> /=.
1335- by rewrite big_nil. by rewrite big_seq_fset1 mf0 .
1338+ by rewrite big_nil. by rewrite big_seq_fset1 mf1 .
13361339Qed .
13371340
13381341Lemma mmeasureD_le g1 g2 :
@@ -1389,6 +1392,8 @@ Canonical cmonom_unlockable k := [unlockable fun cmonom_of_fsfun k].
13891392
13901393End CmonomDef.
13911394
1395+ Bind Scope monom_scope with cmonom.
1396+
13921397Notation "{ 'cmonom' I }" := (cmonom I) : type_scope.
13931398Notation "''X_{1..' n '}'" := (cmonom 'I_n) : type_scope.
13941399Notation "{ 'mpoly' R [ n ] }" := {malg R['X_{1..n}]} : type_scope.
@@ -1404,16 +1409,16 @@ Section CmonomCanonicals.
14041409
14051410Context (I : choiceType).
14061411
1407- HB.instance Definition _ := [isNew for @cmonom_val I].
1408- HB.instance Definition _ := [Choice of cmonom I by <:].
1412+ #[hnf] HB.instance Definition _ := [isNew for @cmonom_val I].
1413+ #[hnf] HB.instance Definition _ := [Choice of cmonom I by <:].
14091414
14101415(* -------------------------------------------------------------------- *)
14111416Implicit Types (m : cmonom I).
14121417
14131418Lemma cmE (f : {fsfun of _ : I => 0%N}) : mkcmonom f =1 CMonom f.
14141419Proof . by rewrite unlock. Qed .
14151420
1416- Lemma cmP m1 m2 : reflect (forall i, m1 i = m2 i ) (m1 == m2).
1421+ Lemma cmP m1 m2 : reflect (m1 =1 m2) (m1 == m2).
14171422Proof . by apply: (iffP eqP) => [->//|eq]; apply/val_inj/fsfunP. Qed .
14181423
14191424Definition onecm : cmonom I := mkcmonom [fsfun of _ => 0%N].
@@ -1459,12 +1464,16 @@ move: m1 m2; have gen m1 m2 : mulcm m1 m2 = onecm -> m1 = onecm.
14591464by move=> m1 m2 h; split; move: h; last rewrite mulcmC; apply/gen.
14601465Qed .
14611466
1467+ #[hnf]
14621468HB.instance Definition _ := Choice_isMonomialDef.Build (cmonom I)
14631469 mulcmA mul0cm mulcm0 mulcm_eq0.
1470+ #[hnf]
14641471HB.instance Definition _ := MonomialDef_isConomialDef.Build (cmonom I) mulcmC.
14651472
14661473End CmonomCanonicals.
14671474
1475+ HB.instance Definition _ (I : countType) := [Countable of cmonom I by <:].
1476+
14681477(* -------------------------------------------------------------------- *)
14691478Definition mdeg {I : choiceType} (m : cmonom I) :=
14701479 (\sum_(k <- finsupp m) m k)%N.
@@ -1659,6 +1668,8 @@ Canonical fmonom_unlockable k := [unlockable fun fmonom_of_seq k].
16591668
16601669End FmonomDef.
16611670
1671+ Bind Scope monom_scope with fmonom.
1672+
16621673Notation "{ 'fmonom' I }" := (fmonom I) : type_scope.
16631674
16641675Local Notation mkfmonom s := (fmonom_of_seq fmonom_key s).
@@ -1715,6 +1726,8 @@ HB.instance Definition _ := Choice_isMonomialDef.Build (fmonom I)
17151726
17161727End FmonomCanonicals.
17171728
1729+ HB.instance Definition _ (I : countType) := [Countable of fmonom I by <:].
1730+
17181731(* -------------------------------------------------------------------- *)
17191732Definition fdeg (I : choiceType) (m : fmonom I) := size m.
17201733
0 commit comments