Skip to content

Commit 3300872

Browse files
committed
[WIP] replace the infrastructure of mpoly with monalg
1 parent 2bf39ab commit 3300872

2 files changed

Lines changed: 666 additions & 1214 deletions

File tree

src/monalg.v

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ Reserved Notation "<< k >>" (format "<< k >>").
4545
Reserved Notation "g @_ k"
4646
(at level 3, k at level 2, left associativity, format "g @_ k").
4747
Reserved Notation "c %:MP" (format "c %:MP").
48-
Reserved Notation "''X_{1..' n '}'".
48+
Reserved Notation "''X_{1..' n '}'" (n at level 2).
4949
Reserved Notation "'U_(' n )" (format "'U_(' n )").
5050
Reserved Notation "x ^[ f , g ]" (at level 1, format "x ^[ f , g ]").
5151

@@ -239,12 +239,13 @@ Definition mcoeff (x : K) (g : {malg G[K]}) : G := malg_val g x.
239239
#[deprecated(since="multinomials 2.5.0", use=Malg)]
240240
Definition mkmalg : {fsfun K -> G with 0} -> {malg G[K]} := @Malg K G.
241241

242-
Definition mkmalgU (k : K) (x : G) := [malg y in [fset k] => x].
243-
244242
Definition msupp (g : {malg G[K]}) : {fset K} := finsupp (malg_val g).
245243

246244
End MalgBaseOp.
247245

246+
HB.lock Definition mkmalgU (K : choiceType) (G : nmodType) (k : K) (x : G) :=
247+
[malg y in [fset k] => x].
248+
248249
Arguments mcoeff {K G} x%_monom_scope g%_ring_scope.
249250
#[warning="-deprecated-reference"]
250251
Arguments mkmalg {K G} _.
@@ -345,7 +346,7 @@ Lemma mcoeffD k : {morph mcoeff k: x y / x + y}. Proof. exact: raddfD. Qed.
345346
Lemma mcoeffMn k n : {morph mcoeff k: x / x *+ n} . Proof. exact: raddfMn. Qed.
346347

347348
Lemma mcoeffU k x k' : << x *g k >>@_k' = x *+ (k == k').
348-
Proof. by rewrite [LHS]fsfunE inE mulrb eq_sym. Qed.
349+
Proof. by rewrite unlock [LHS]fsfunE inE mulrb eq_sym. Qed.
349350

350351
Lemma mcoeffUU k x : << x *g k >>@_k = x.
351352
Proof. by rewrite mcoeffU eqxx. Qed.
@@ -981,6 +982,9 @@ HB.instance Definition _ :=
981982
HB.instance Definition _ :=
982983
GRing.LSemiModule_isLSemiAlgebra.Build R {malg R[K]} (@fgscaleAl K R).
983984

985+
(* FIXME: HB.saturate *)
986+
HB.instance Definition _ := GRing.RMorphism.on (mcoeff 1 : {malg R[K]} -> R).
987+
984988
End MalgNzSemiRingTheory.
985989

986990
(* -------------------------------------------------------------------- *)
@@ -1289,7 +1293,7 @@ Arguments monalgOver_pred _ _ _ _ /.
12891293

12901294
(* -------------------------------------------------------------------- *)
12911295
HB.mixin Record isMeasure (M : monomType) (mf : M -> nat) := {
1292-
mf0 : mf 1%M = 0%N;
1296+
mf1 : mf 1%M = 0%N;
12931297
mfM : {morph mf : m1 m2 / (m1 * m2)%M >-> (m1 + m2)%N};
12941298
mf_eq0I : forall m, mf m = 0%N -> m = 1%M
12951299
}.
@@ -1309,7 +1313,7 @@ Context (M : monomType) (G : nmodType) (mf : measure M).
13091313
Implicit Types (g : {malg G[M]}).
13101314

13111315
Lemma mf_eq0 m : (mf m == 0%N) = (m == 1%M).
1312-
Proof. by apply/eqP/eqP=> [|->]; rewrite ?mf0 // => /mf_eq0I. Qed.
1316+
Proof. by apply/eqP/eqP=> [|->]; rewrite ?mf1 // => /mf_eq0I. Qed.
13131317

13141318
Definition mmeasure g := (\max_(m <- msupp g) (mf m).+1)%N.
13151319

@@ -1331,7 +1335,7 @@ Proof. by apply/contraTN=> /mmeasure_mnm_lt; rewrite leqNgt ltnS. Qed.
13311335
Lemma mmeasureC c : mmeasure c%:MP = (c != 0%R) :> nat.
13321336
Proof.
13331337
rewrite mmeasureE msuppC; case: (_ == 0)=> /=.
1334-
by rewrite big_nil. by rewrite big_seq_fset1 mf0.
1338+
by rewrite big_nil. by rewrite big_seq_fset1 mf1.
13351339
Qed.
13361340

13371341
Lemma mmeasureD_le g1 g2 :
@@ -1390,6 +1394,9 @@ Canonical cmonom_unlockable k := [unlockable fun cmonom_of_fsfun k].
13901394

13911395
End CmonomDef.
13921396

1397+
Arguments cmonom_val : simpl never.
1398+
Bind Scope monom_scope with cmonom.
1399+
13931400
Notation "{ 'cmonom' I }" := (cmonom I) : type_scope.
13941401
Notation "''X_{1..' n '}'" := (cmonom 'I_n) : type_scope.
13951402
Notation "{ 'mpoly' R [ n ] }" := {malg R['X_{1..n}]} : type_scope.
@@ -1407,8 +1414,8 @@ Section CmonomCanonicals.
14071414

14081415
Context (I : choiceType).
14091416

1410-
HB.instance Definition _ := [isNew for @cmonom_val I].
1411-
HB.instance Definition _ := [Choice of cmonom I by <:].
1417+
#[hnf] HB.instance Definition _ := [isNew for @cmonom_val I].
1418+
#[hnf] HB.instance Definition _ := [Choice of cmonom I by <:].
14121419

14131420
(* -------------------------------------------------------------------- *)
14141421
Implicit Types (m : cmonom I).
@@ -1421,7 +1428,7 @@ Proof.
14211428
by rewrite [mkcmonom]unlock.
14221429
Qed.
14231430

1424-
Lemma cmP m1 m2 : reflect (forall i, m1 i = m2 i) (m1 == m2).
1431+
Lemma cmP m1 m2 : reflect (m1 =1 m2) (m1 == m2).
14251432
Proof. by apply: (iffP eqP) => [->//|eq]; apply/val_inj/fsfunP. Qed.
14261433

14271434
Definition onecm : cmonom I := CMonom [fsfun of _ => 0%N].
@@ -1467,12 +1474,16 @@ move: m1 m2; have gen m1 m2 : mulcm m1 m2 = onecm -> m1 = onecm.
14671474
by move=> m1 m2 h; split; move: h; last rewrite mulcmC; apply/gen.
14681475
Qed.
14691476

1477+
#[hnf]
14701478
HB.instance Definition _ := Choice_isMonomialDef.Build (cmonom I)
14711479
mulcmA mul0cm mulcm0 mulcm_eq0.
1480+
#[hnf]
14721481
HB.instance Definition _ := MonomialDef_isConomialDef.Build (cmonom I) mulcmC.
14731482

14741483
End CmonomCanonicals.
14751484

1485+
HB.instance Definition _ (I : countType) := [Countable of cmonom I by <:].
1486+
14761487
(* -------------------------------------------------------------------- *)
14771488
Definition mdeg {I : choiceType} (m : cmonom I) :=
14781489
(\sum_(k <- finsupp m) m k)%N.
@@ -1694,6 +1705,8 @@ Canonical fmonom_unlockable k := [unlockable fun fmonom_of_seq k].
16941705

16951706
End FmonomDef.
16961707

1708+
Bind Scope monom_scope with fmonom.
1709+
16971710
Notation "{ 'fmonom' I }" := (fmonom I) : type_scope.
16981711

16991712
Local Notation mkfmonom s := (fmonom_of_seq fmonom_key s).
@@ -1750,6 +1763,8 @@ HB.instance Definition _ := Choice_isMonomialDef.Build (fmonom I)
17501763

17511764
End FmonomCanonicals.
17521765

1766+
HB.instance Definition _ (I : countType) := [Countable of fmonom I by <:].
1767+
17531768
(* -------------------------------------------------------------------- *)
17541769
Definition fdeg (I : choiceType) (m : fmonom I) := size m.
17551770

0 commit comments

Comments
 (0)