Skip to content

Commit 400edcb

Browse files
authored
Merge pull request #27 from math-comp/unitz
Add support for `GRing.unit`
2 parents 8887210 + 1dd2f42 commit 400edcb

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed

theories/zify_algebra.v

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,13 @@ Instance Op_int_exp : BinOp (@GRing.exp _ : int -> nat -> int) :=
9191
{ TBOp := Z.pow; TBOpInj := Op_int_exp_subproof }.
9292
Add Zify BinOp Op_int_exp.
9393

94+
Instance Op_unitz : UnOp (has_quality 1 intUnitRing.unitz : int -> bool) :=
95+
{ TUOp x := (x =? 1)%Z || (x =? - 1)%Z; TUOpInj := ltac:(simpl; lia) }.
96+
Add Zify UnOp Op_unitz.
97+
98+
Instance Op_int_unit : UnOp (has_quality 1 GRing.unit) := Op_unitz.
99+
Add Zify UnOp Op_int_unit.
100+
94101
Instance Op_invz : UnOp intUnitRing.invz :=
95102
{ TUOp := id; TUOpInj _ := erefl }.
96103
Add Zify UnOp Op_invz.
@@ -223,6 +230,13 @@ Instance Op_Z_exp : BinOp (@GRing.exp _ : Z -> nat -> Z) :=
223230
{ TBOp := Z.pow; TBOpInj := Op_Z_exp_subproof }.
224231
Add Zify BinOp Op_Z_exp.
225232

233+
Instance Op_unitZ : UnOp (has_quality 1 ZInstances.unitZ : Z -> bool) :=
234+
{ TUOp x := (x =? 1)%Z || (x =? - 1)%Z; TUOpInj _ := erefl }.
235+
Add Zify UnOp Op_unitZ.
236+
237+
Instance Op_Z_unit : UnOp (has_quality 1 GRing.unit : Z -> bool) := Op_unitZ.
238+
Add Zify UnOp Op_Z_unit.
239+
226240
Instance Op_invZ : UnOp ZInstances.invZ := { TUOp := id; TUOpInj _ := erefl }.
227241
Add Zify UnOp Op_invZ.
228242

@@ -313,7 +327,7 @@ Instance Op_modz : BinOp modz :=
313327
Add Zify BinOp Op_modz.
314328

315329
Instance Op_dvdz : BinOp dvdz :=
316-
{ TBOp n m := Z.eqb (modZ m n) 0%Z;
330+
{ TBOp n m := (modZ m n =? 0)%Z;
317331
TBOpInj _ _ := ltac:(apply/dvdz_mod0P/idP; lia) }.
318332
Add Zify BinOp Op_dvdz.
319333

@@ -325,7 +339,7 @@ Instance Op_gcdz : BinOp gcdz := { TBOp := Z.gcd; TBOpInj := Op_gcdz_subproof }.
325339
Add Zify BinOp Op_gcdz.
326340

327341
Instance Op_coprimez : BinOp coprimez :=
328-
{ TBOp x y := Z.eqb (Z.gcd x y) 1%Z;
342+
{ TBOp x y := (Z.gcd x y =? 1)%Z;
329343
TBOpInj := ltac:(rewrite /= /coprimez; lia) }.
330344
Add Zify BinOp Op_coprimez.
331345

@@ -348,6 +362,8 @@ Add Zify BinOp Op_int_natmul.
348362
Add Zify BinOp Op_int_intmul.
349363
Add Zify BinOp Op_int_scale.
350364
Add Zify BinOp Op_int_exp.
365+
Add Zify UnOp Op_unitz.
366+
Add Zify UnOp Op_int_unit.
351367
Add Zify UnOp Op_invz.
352368
Add Zify UnOp Op_int_inv.
353369
Add Zify UnOp Op_absz.
@@ -382,6 +398,8 @@ Add Zify BinOp Op_Z_natmul.
382398
Add Zify BinOp Op_Z_intmul.
383399
Add Zify BinOp Op_Z_scale.
384400
Add Zify BinOp Op_Z_exp.
401+
Add Zify UnOp Op_unitZ.
402+
Add Zify UnOp Op_Z_unit.
385403
Add Zify UnOp Op_invZ.
386404
Add Zify UnOp Op_Z_inv.
387405
Add Zify UnOp Op_Z_normr.

theories/zify_ssreflect.v

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Add Zify UnOp Op_nat_inj.
2727
(******************************************************************************)
2828

2929
Instance Op_addb : BinOp addb :=
30-
{ TBOp x y := Bool.eqb x (negb y); TBOpInj := ltac:(by case=> [][]) }.
30+
{ TBOp x y := Bool.eqb x (~~ y); TBOpInj := ltac:(by case=> [][]) }.
3131
Add Zify BinOp Op_addb.
3232

3333
Instance Op_eqb : BinOp eqb :=
@@ -338,13 +338,11 @@ Instance Op_modn : BinOp modn :=
338338
Add Zify BinOp Op_modn.
339339

340340
Instance Op_dvdn : BinOp dvdn :=
341-
{ TBOp x y := Z.eqb (modZ y x) 0%Z;
342-
TBOpInj := ltac:(rewrite /dvdn; lia) }.
341+
{ TBOp x y := (modZ y x =? 0)%Z; TBOpInj := ltac:(rewrite /dvdn; lia) }.
343342
Add Zify BinOp Op_dvdn.
344343

345344
Instance Op_odd : UnOp odd :=
346-
{ TUOp x := Z.eqb (modZ x 2) 1%Z;
347-
TUOpInj n := ltac:(case: odd (modn2 n); lia) }.
345+
{ TUOp x := (modZ x 2 =? 1)%Z; TUOpInj n := ltac:(case: odd (modn2 n); lia) }.
348346
Add Zify UnOp Op_odd.
349347

350348
Instance Op_half : UnOp half :=
@@ -384,7 +382,7 @@ Instance Op_lcmn : BinOp lcmn := { TBOp := Z.lcm; TBOpInj := Op_lcmn_subproof }.
384382
Add Zify BinOp Op_lcmn.
385383

386384
Instance Op_coprime : BinOp coprime :=
387-
{ TBOp x y := Z.eqb (Z.gcd x y) 1%Z;
385+
{ TBOp x y := (Z.gcd x y =? 1)%Z;
388386
TBOpInj := ltac:(rewrite /= /coprime; lia) }.
389387
Add Zify BinOp Op_coprime.
390388

@@ -399,22 +397,22 @@ Instance Op_natdvd_le' : BinOp (>=^d%O : rel natdvd^d) := Op_dvdn.
399397
Add Zify BinOp Op_natdvd_le'.
400398

401399
Instance Op_natdvd_ge : BinOp ((>=%O : rel natdvd) : nat -> nat -> bool) :=
402-
{ TBOp x y := Z.eqb (modZ x y) 0%Z; TBOpInj := ltac:(simpl; lia) }.
400+
{ TBOp x y := (modZ x y =? 0)%Z; TBOpInj := ltac:(simpl; lia) }.
403401
Add Zify BinOp Op_natdvd_ge.
404402

405403
Instance Op_natdvd_ge' : BinOp (<=^d%O : rel natdvd^d) := Op_natdvd_ge.
406404
Add Zify BinOp Op_natdvd_ge'.
407405

408406
Instance Op_natdvd_lt : BinOp ((<%O : rel natdvd) : nat -> nat -> bool) :=
409-
{ TBOp x y := negb (Z.eqb y x) && Z.eqb (modZ y x) 0%Z;
407+
{ TBOp x y := ~~ (y =? x)%Z && (modZ y x =? 0)%Z;
410408
TBOpInj _ _ := ltac:(rewrite /= sdvdEnat; lia) }.
411409
Add Zify BinOp Op_natdvd_lt.
412410

413411
Instance Op_natdvd_lt' : BinOp (>^d%O : rel natdvd^d) := Op_natdvd_lt.
414412
Add Zify BinOp Op_natdvd_lt'.
415413

416414
Instance Op_natdvd_gt : BinOp ((>%O : rel natdvd) : nat -> nat -> bool) :=
417-
{ TBOp x y := negb (Z.eqb x y) && Z.eqb (modZ x y) 0%Z;
415+
{ TBOp x y := ~~ (x =? y)%Z && (modZ x y =? 0)%Z;
418416
TBOpInj _ _ := ltac:(rewrite /= sdvdEnat; lia) }.
419417
Add Zify BinOp Op_natdvd_gt.
420418

0 commit comments

Comments
 (0)