@@ -45,7 +45,7 @@ Reserved Notation "<< k >>" (format "<< k >>").
4545Reserved Notation "g @_ k"
4646 (at level 3, k at level 2, left associativity, format "g @_ k").
4747Reserved Notation "c %:MP" (format "c %:MP").
48- Reserved Notation "''X_{1..' n '}'".
48+ Reserved Notation "''X_{1..' n '}'" (n at level 2) .
4949Reserved Notation "'U_(' n )" (format "'U_(' n )").
5050Reserved Notation "x ^[ f , g ]" (at level 1, format "x ^[ f , g ]").
5151
@@ -245,12 +245,13 @@ Definition mcoeff (x : K) (g : {malg G[K]}) : G := malg_val g x.
245245#[deprecated(since="multinomials 2.5.0", note="Use Malg instead")]
246246Definition mkmalg : {fsfun K -> G with 0} -> {malg G[K]} := @Malg K G.
247247
248- Definition mkmalgU (k : K) (x : G) := [malg y in [fset k] => x].
249-
250248Definition msupp (g : {malg G[K]}) : {fset K} := finsupp (malg_val g).
251249
252250End MalgBaseOp.
253251
252+ HB.lock Definition mkmalgU (K : choiceType) (G : nmodType) (k : K) (x : G) :=
253+ [malg y in [fset k] => x].
254+
254255Arguments mcoeff {K G} x%_monom_scope g%_ring_scope.
255256#[warning="-deprecated-reference"]
256257Arguments mkmalg {K G} _.
@@ -351,7 +352,7 @@ Lemma mcoeffD k : {morph mcoeff k: x y / x + y}. Proof. exact: raddfD. Qed.
351352Lemma mcoeffMn k n : {morph mcoeff k: x / x *+ n} . Proof . exact: raddfMn. Qed .
352353
353354Lemma mcoeffU k x k' : << x *g k >>@_k' = x *+ (k == k').
354- Proof . by rewrite [LHS]fsfunE inE mulrb eq_sym. Qed .
355+ Proof . by rewrite unlock [LHS]fsfunE inE mulrb eq_sym. Qed .
355356
356357Lemma mcoeffUU k x : << x *g k >>@_k = x.
357358Proof . by rewrite mcoeffU eqxx. Qed .
@@ -987,6 +988,9 @@ HB.instance Definition _ :=
987988HB.instance Definition _ :=
988989 GRing.LSemiModule_isLSemiAlgebra.Build R {malg R[K]} (@fgscaleAl K R).
989990
991+ (* FIXME: HB.saturate *)
992+ HB.instance Definition _ := GRing.RMorphism.on (mcoeff 1 : {malg R[K]} -> R).
993+
990994End MalgNzSemiRingTheory.
991995
992996(* -------------------------------------------------------------------- *)
@@ -1295,7 +1299,7 @@ Arguments monalgOver_pred _ _ _ _ /.
12951299
12961300(* -------------------------------------------------------------------- *)
12971301HB.mixin Record isMeasure (M : monomType) (mf : M -> nat) := {
1298- mf0 : mf 1%M = 0%N;
1302+ mf1 : mf 1%M = 0%N;
12991303 mfM : {morph mf : m1 m2 / (m1 * m2)%M >-> (m1 + m2)%N};
13001304 mf_eq0I : forall m, mf m = 0%N -> m = 1%M
13011305}.
@@ -1315,7 +1319,7 @@ Context (M : monomType) (G : nmodType) (mf : measure M).
13151319Implicit Types (g : {malg G[M]}).
13161320
13171321Lemma mf_eq0 m : (mf m == 0%N) = (m == 1%M).
1318- Proof . by apply/eqP/eqP=> [|->]; rewrite ?mf0 // => /mf_eq0I. Qed .
1322+ Proof . by apply/eqP/eqP=> [|->]; rewrite ?mf1 // => /mf_eq0I. Qed .
13191323
13201324Definition mmeasure g := (\max_(m <- msupp g) (mf m).+1)%N.
13211325
@@ -1337,7 +1341,7 @@ Proof. by apply/contraTN=> /mmeasure_mnm_lt; rewrite leqNgt ltnS. Qed.
13371341Lemma mmeasureC c : mmeasure c%:MP = (c != 0%R) :> nat.
13381342Proof .
13391343rewrite mmeasureE msuppC; case: (_ == 0)=> /=.
1340- by rewrite big_nil. by rewrite big_seq_fset1 mf0 .
1344+ by rewrite big_nil. by rewrite big_seq_fset1 mf1 .
13411345Qed .
13421346
13431347Lemma mmeasureD_le g1 g2 :
@@ -1396,6 +1400,9 @@ Canonical cmonom_unlockable k := [unlockable fun cmonom_of_fsfun k].
13961400
13971401End CmonomDef.
13981402
1403+ Arguments cmonom_val : simpl never.
1404+ Bind Scope monom_scope with cmonom.
1405+
13991406Notation "{ 'cmonom' I }" := (cmonom I) : type_scope.
14001407Notation "''X_{1..' n '}'" := (cmonom 'I_n) : type_scope.
14011408Notation "{ 'mpoly' R [ n ] }" := {malg R['X_{1..n}]} : type_scope.
@@ -1413,8 +1420,8 @@ Section CmonomCanonicals.
14131420
14141421Context (I : choiceType).
14151422
1416- HB.instance Definition _ := [isNew for @cmonom_val I].
1417- HB.instance Definition _ := [Choice of cmonom I by <:].
1423+ #[hnf] HB.instance Definition _ := [isNew for @cmonom_val I].
1424+ #[hnf] HB.instance Definition _ := [Choice of cmonom I by <:].
14181425
14191426(* -------------------------------------------------------------------- *)
14201427Implicit Types (m : cmonom I).
@@ -1427,7 +1434,7 @@ Proof.
14271434by rewrite [mkcmonom]unlock.
14281435Qed .
14291436
1430- Lemma cmP m1 m2 : reflect (forall i, m1 i = m2 i ) (m1 == m2).
1437+ Lemma cmP m1 m2 : reflect (m1 =1 m2) (m1 == m2).
14311438Proof . by apply: (iffP eqP) => [->//|eq]; apply/val_inj/fsfunP. Qed .
14321439
14331440Definition onecm : cmonom I := CMonom [fsfun of _ => 0%N].
@@ -1473,12 +1480,16 @@ move: m1 m2; have gen m1 m2 : mulcm m1 m2 = onecm -> m1 = onecm.
14731480by move=> m1 m2 h; split; move: h; last rewrite mulcmC; apply/gen.
14741481Qed .
14751482
1483+ #[hnf]
14761484HB.instance Definition _ := Choice_isMonomialDef.Build (cmonom I)
14771485 mulcmA mul0cm mulcm0 mulcm_eq0.
1486+ #[hnf]
14781487HB.instance Definition _ := MonomialDef_isConomialDef.Build (cmonom I) mulcmC.
14791488
14801489End CmonomCanonicals.
14811490
1491+ HB.instance Definition _ (I : countType) := [Countable of cmonom I by <:].
1492+
14821493(* -------------------------------------------------------------------- *)
14831494Definition mdeg {I : choiceType} (m : cmonom I) :=
14841495 (\sum_(k <- finsupp m) m k)%N.
@@ -1673,6 +1684,8 @@ Canonical fmonom_unlockable k := [unlockable fun fmonom_of_seq k].
16731684
16741685End FmonomDef.
16751686
1687+ Bind Scope monom_scope with fmonom.
1688+
16761689Notation "{ 'fmonom' I }" := (fmonom I) : type_scope.
16771690
16781691Local Notation mkfmonom s := (fmonom_of_seq fmonom_key s).
@@ -1729,6 +1742,8 @@ HB.instance Definition _ := Choice_isMonomialDef.Build (fmonom I)
17291742
17301743End FmonomCanonicals.
17311744
1745+ HB.instance Definition _ (I : countType) := [Countable of fmonom I by <:].
1746+
17321747(* -------------------------------------------------------------------- *)
17331748Definition fdeg (I : choiceType) (m : fmonom I) := size m.
17341749
0 commit comments