@@ -22,27 +22,24 @@ Import Order.Theory GRing.Theory Num.Theory SsreflectZifyInstances.
2222(***************************************************************************** *)
2323
2424Instance Inj_int_Z : InjTyp int Z :=
25- { inj := Z_of_int; pred := fun => True; cstr := fun => I }.
25+ { inj := Z_of_int; pred _ := True; cstr _ := I }.
2626Add Zify InjTyp Inj_int_Z.
2727
28- Instance Op_Z_of_int : UnOp Z_of_int := { TUOp := id; TUOpInj := fun => erefl }.
28+ Instance Op_Z_of_int : UnOp Z_of_int := { TUOp := id; TUOpInj _ := erefl }.
2929Add Zify UnOp Op_Z_of_int.
3030
3131Instance Op_int_of_Z : UnOp int_of_Z := { TUOp := id; TUOpInj := int_of_ZK }.
3232Add Zify UnOp Op_int_of_Z.
3333
34- Instance Op_Posz : UnOp Posz := { TUOp := id; TUOpInj := fun => erefl }.
34+ Instance Op_Posz : UnOp Posz := { TUOp := id; TUOpInj _ := erefl }.
3535Add Zify UnOp Op_Posz.
3636
3737Instance Op_Negz : UnOp Negz :=
38- { TUOp := fun x => (- (x + 1))%Z; TUOpInj := ltac:(simpl; lia) }.
38+ { TUOp x := (- (x + 1))%Z; TUOpInj := ltac:(simpl; lia) }.
3939Add Zify UnOp Op_Negz.
4040
41- Lemma Op_int_eq_subproof n m : n = m <-> Z_of_int n = Z_of_int m.
42- Proof . split=> [->|] //; case: n m => ? [] ? ?; f_equal; lia. Qed .
43-
4441Instance Op_int_eq : BinRel (@eq int) :=
45- { TR := @eq Z; TRInj := Op_int_eq_subproof }.
42+ { TR := @eq Z; TRInj := ltac:(by split=> [->|/(can_inj Z_of_intK)]) }.
4643Add Zify BinRel Op_int_eq.
4744
4845Instance Op_int_eq_op : BinOp (@eq_op int_eqType : int -> int -> bool) :=
@@ -76,27 +73,26 @@ Instance Op_int_mulr : BinOp *%R := Op_mulz.
7673Add Zify BinOp Op_int_mulr.
7774
7875Instance Op_int_natmul : BinOp (@GRing.natmul _ : int -> nat -> int) :=
79- { TBOp := Z.mul;
80- TBOpInj := ltac:(move=> ? ?; rewrite /= pmulrn mulrzz; lia) }.
76+ { TBOp := Z.mul; TBOpInj _ _ := ltac:(rewrite /= pmulrn mulrzz; lia) }.
8177Add Zify BinOp Op_int_natmul.
8278
8379Instance Op_int_intmul : BinOp ( *~%R%R : int -> int -> int) :=
84- { TBOp := Z.mul; TBOpInj := ltac:(move=> ? ?; rewrite /= mulrzz; lia) }.
80+ { TBOp := Z.mul; TBOpInj _ _ := ltac:(rewrite /= mulrzz; lia) }.
8581Add Zify BinOp Op_int_intmul.
8682
8783Instance Op_int_scale : BinOp (@GRing.scale _ [lmodType int of int^o]) :=
8884 Op_mulz.
8985Add Zify BinOp Op_int_scale.
9086
91- Lemma Op_int_exp_subproof n m : Z_of_int (n ^+ m) = (Z_of_int n ^ Z.of_nat m)%Z.
87+ Fact Op_int_exp_subproof n m : Z_of_int (n ^+ m) = (Z_of_int n ^ Z.of_nat m)%Z.
9288Proof . rewrite -Zpower_nat_Z; elim: m => //= m <-; rewrite exprS; lia. Qed .
9389
9490Instance Op_int_exp : BinOp (@GRing.exp _ : int -> nat -> int) :=
9591 { TBOp := Z.pow; TBOpInj := Op_int_exp_subproof }.
9692Add Zify BinOp Op_int_exp.
9793
9894Instance Op_invz : UnOp intUnitRing.invz :=
99- { TUOp := id; TUOpInj := fun => erefl }.
95+ { TUOp := id; TUOpInj _ := erefl }.
10096Add Zify UnOp Op_invz.
10197
10298Instance Op_int_inv : UnOp GRing.inv := Op_invz.
@@ -152,30 +148,30 @@ Instance Op_int_gt' : BinOp (<^d%O : rel int^d) := Op_int_gt.
152148Add Zify BinOp Op_int_gt'.
153149
154150Instance Op_int_min : BinOp (Order.min : int -> int -> int) :=
155- { TBOp := Z.min; TBOpInj := ltac:(move => ? ? /=; case: leP ; lia) }.
151+ { TBOp := Z.min; TBOpInj _ _ := ltac:(case: leP => /= ; lia) }.
156152Add Zify BinOp Op_int_min.
157153
158154Instance Op_int_min' : BinOp ((Order.max : int^d -> _) : int -> int -> int) :=
159- { TBOp := Z.min; TBOpInj := ltac:(move => ? ? /=; case: leP ; lia) }.
155+ { TBOp := Z.min; TBOpInj _ _ := ltac:(case: leP => /= ; lia) }.
160156Add Zify BinOp Op_int_min'.
161157
162158Instance Op_int_max : BinOp (Order.max : int -> int -> int) :=
163- { TBOp := Z.max; TBOpInj := ltac:(move => ? ? /=; case: leP ; lia) }.
159+ { TBOp := Z.max; TBOpInj _ _ := ltac:(case: leP => /= ; lia) }.
164160Add Zify BinOp Op_int_max.
165161
166162Instance Op_int_max' : BinOp ((Order.min : int^d -> _) : int -> int -> int) :=
167- { TBOp := Z.max; TBOpInj := ltac:(move => ? ? /=; case: leP ; lia) }.
163+ { TBOp := Z.max; TBOpInj _ _ := ltac:(case: leP => /= ; lia) }.
168164Add Zify BinOp Op_int_max'.
169165
170166Instance Op_int_meet : BinOp (Order.meet : int -> int -> int) :=
171- { TBOp := Z.min; TBOpInj := ltac:(move => ? ? /=; case: leP ; lia) }.
167+ { TBOp := Z.min; TBOpInj _ _ := ltac:(case: leP => /= ; lia) }.
172168Add Zify BinOp Op_int_meet.
173169
174170Instance Op_int_meet' : BinOp (Order.join : int^d -> _) := Op_int_min.
175171Add Zify BinOp Op_int_meet'.
176172
177173Instance Op_int_join : BinOp (Order.join : int -> int -> int) :=
178- { TBOp := Z.max; TBOpInj := ltac:(move => ? ? /=; case: leP ; lia) }.
174+ { TBOp := Z.max; TBOpInj _ _ := ltac:(case: leP => /= ; lia) }.
179175Add Zify BinOp Op_int_join.
180176
181177Instance Op_int_join' : BinOp (Order.meet : int^d -> _) := Op_int_max.
@@ -192,21 +188,21 @@ Instance Op_Z_0 : CstOp (0%R : Z) := { TCst := 0%Z; TCstInj := erefl }.
192188Add Zify CstOp Op_Z_0.
193189
194190Instance Op_Z_add : BinOp (+%R : Z -> Z -> Z) :=
195- { TBOp := Z.add; TBOpInj := fun _ _ => erefl }.
191+ { TBOp := Z.add; TBOpInj _ _ := erefl }.
196192Add Zify BinOp Op_Z_add.
197193
198194Instance Op_Z_opp : UnOp (@GRing.opp _ : Z -> Z) :=
199- { TUOp := Z.opp; TUOpInj := fun => erefl }.
195+ { TUOp := Z.opp; TUOpInj _ := erefl }.
200196Add Zify UnOp Op_Z_opp.
201197
202198Instance Op_Z_1 : CstOp (1%R : Z) := { TCst := 1%Z; TCstInj := erefl }.
203199Add Zify CstOp Op_Z_1.
204200
205201Instance Op_Z_mulr : BinOp ( *%R : Z -> Z -> Z) :=
206- { TBOp := Z.mul; TBOpInj := fun _ _ => erefl }.
202+ { TBOp := Z.mul; TBOpInj _ _ := erefl }.
207203Add Zify BinOp Op_Z_mulr.
208204
209- Lemma Op_Z_natmul_subproof (n : Z) (m : nat) : (n *+ m)%R = (n * Z.of_nat m)%Z.
205+ Fact Op_Z_natmul_subproof (n : Z) (m : nat) : (n *+ m)%R = (n * Z.of_nat m)%Z.
210206Proof . elim: m => [|m]; rewrite (mulr0n, mulrS); lia. Qed .
211207
212208Instance Op_Z_natmul : BinOp (@GRing.natmul _ : Z -> nat -> Z) :=
@@ -220,31 +216,30 @@ Add Zify BinOp Op_Z_intmul.
220216Instance Op_Z_scale : BinOp (@GRing.scale _ [lmodType Z of Z^o]) := Op_Z_mulr.
221217Add Zify BinOp Op_Z_scale.
222218
223- Lemma Op_Z_exp_subproof n m : (n ^+ m)%R = (n ^ Z.of_nat m)%Z.
219+ Fact Op_Z_exp_subproof n m : (n ^+ m)%R = (n ^ Z.of_nat m)%Z.
224220Proof . by rewrite -Zpower_nat_Z; elim: m => //= m <-; rewrite exprS. Qed .
225221
226222Instance Op_Z_exp : BinOp (@GRing.exp _ : Z -> nat -> Z) :=
227223 { TBOp := Z.pow; TBOpInj := Op_Z_exp_subproof }.
228224Add Zify BinOp Op_Z_exp.
229225
230- Instance Op_invZ : UnOp ZInstances.invZ :=
231- { TUOp := id; TUOpInj := fun => erefl }.
226+ Instance Op_invZ : UnOp ZInstances.invZ := { TUOp := id; TUOpInj _ := erefl }.
232227Add Zify UnOp Op_invZ.
233228
234229Instance Op_Z_inv : UnOp (GRing.inv : Z -> Z) :=
235- { TUOp := id; TUOpInj := fun => erefl }.
230+ { TUOp := id; TUOpInj _ := erefl }.
236231Add Zify UnOp Op_Z_inv.
237232
238233Instance Op_Z_normr : UnOp (Num.norm : Z -> Z) :=
239- { TUOp := Z.abs; TUOpInj := fun => erefl }.
234+ { TUOp := Z.abs; TUOpInj _ := erefl }.
240235Add Zify UnOp Op_Z_normr.
241236
242237Instance Op_Z_sgr : UnOp (Num.sg : Z -> Z) :=
243238 { TUOp := Z.sgn; TUOpInj := ltac:(case=> //=; lia) }.
244239Add Zify UnOp Op_Z_sgr.
245240
246241Instance Op_Z_le : BinOp (<=%O : Z -> Z -> bool) :=
247- { TBOp := Z.leb; TBOpInj := fun _ _ => erefl }.
242+ { TBOp := Z.leb; TBOpInj _ _ := erefl }.
248243Add Zify BinOp Op_Z_le.
249244
250245Instance Op_Z_le' : BinOp (>=^d%O : rel Z^d) := Op_Z_le.
@@ -258,7 +253,7 @@ Instance Op_Z_ge' : BinOp (<=^d%O : rel Z^d) := Op_Z_ge.
258253Add Zify BinOp Op_Z_ge'.
259254
260255Instance Op_Z_lt : BinOp (<%O : Z -> Z -> bool) :=
261- { TBOp := Z.ltb; TBOpInj := fun _ _ => erefl }.
256+ { TBOp := Z.ltb; TBOpInj _ _ := erefl }.
262257Add Zify BinOp Op_Z_lt.
263258
264259Instance Op_Z_lt' : BinOp (>^d%O : rel Z^d) := Op_Z_lt.
@@ -272,30 +267,30 @@ Instance Op_Z_gt' : BinOp (<^d%O : rel Z^d) := Op_Z_gt.
272267Add Zify BinOp Op_Z_gt'.
273268
274269Instance Op_Z_min : BinOp (Order.min : Z -> Z -> Z) :=
275- { TBOp := Z.min; TBOpInj := ltac:(move => ? ? /=; case: leP ; lia) }.
270+ { TBOp := Z.min; TBOpInj _ _ := ltac:(case: leP => /= ; lia) }.
276271Add Zify BinOp Op_Z_min.
277272
278273Instance Op_Z_min' : BinOp ((Order.max : Z^d -> _) : Z -> Z -> Z) :=
279- { TBOp := Z.min; TBOpInj := ltac:(move => ? ? /=; case: leP ; lia) }.
274+ { TBOp := Z.min; TBOpInj _ _ := ltac:(case: leP => /= ; lia) }.
280275Add Zify BinOp Op_Z_min'.
281276
282277Instance Op_Z_max : BinOp (Order.max : Z -> Z -> Z) :=
283- { TBOp := Z.max; TBOpInj := ltac:(move => ? ? /=; case: leP ; lia) }.
278+ { TBOp := Z.max; TBOpInj _ _ := ltac:(case: leP => /= ; lia) }.
284279Add Zify BinOp Op_Z_max.
285280
286281Instance Op_Z_max' : BinOp ((Order.min : Z^d -> _) : Z -> Z -> Z) :=
287- { TBOp := Z.max; TBOpInj := ltac:(move => ? ? /=; case: leP ; lia) }.
282+ { TBOp := Z.max; TBOpInj _ _ := ltac:(case: leP => /= ; lia) }.
288283Add Zify BinOp Op_Z_max'.
289284
290285Instance Op_Z_meet : BinOp (Order.meet : Z -> Z -> Z) :=
291- { TBOp := Z.min; TBOpInj := ltac:(move => ? ? /=; case: leP ; lia) }.
286+ { TBOp := Z.min; TBOpInj _ _ := ltac:(case: leP => /= ; lia) }.
292287Add Zify BinOp Op_Z_meet.
293288
294289Instance Op_Z_meet' : BinOp (Order.join : Z^d -> _) := Op_Z_min.
295290Add Zify BinOp Op_Z_meet'.
296291
297292Instance Op_Z_join : BinOp (Order.join : Z -> Z -> Z) :=
298- { TBOp := Z.max; TBOpInj := ltac:(move => ? ? /=; case: leP ; lia) }.
293+ { TBOp := Z.max; TBOpInj _ _ := ltac:(case: leP => /= ; lia) }.
299294Add Zify BinOp Op_Z_join.
300295
301296Instance Op_Z_join' : BinOp (Order.meet : Z^d -> _) := Op_Z_max.
@@ -305,7 +300,7 @@ Add Zify BinOp Op_Z_join'.
305300(* intdiv *)
306301(***************************************************************************** *)
307302
308- Lemma Op_divz_subproof n m :
303+ Fact Op_divz_subproof n m :
309304 Z_of_int (divz n m) = divZ (Z_of_int n) (Z_of_int m).
310305Proof . case: n => [[|n]|n]; rewrite /divz /divZ /= ?addn1 /=; nia. Qed .
311306
@@ -318,19 +313,19 @@ Instance Op_modz : BinOp modz :=
318313Add Zify BinOp Op_modz.
319314
320315Instance Op_dvdz : BinOp dvdz :=
321- { TBOp := fun n m => Z.eqb (modZ m n) 0%Z;
322- TBOpInj := ltac:(move=> ? ? /=; apply/dvdz_mod0P/idP; lia) }.
316+ { TBOp n m := Z.eqb (modZ m n) 0%Z;
317+ TBOpInj _ _ := ltac:(apply/dvdz_mod0P/idP; lia) }.
323318Add Zify BinOp Op_dvdz.
324319
325- Lemma Op_gcdz_subproof n m :
320+ Fact Op_gcdz_subproof n m :
326321 Z_of_int (gcdz n m) = Z.gcd (Z_of_int n) (Z_of_int m).
327322Proof . rewrite /gcdz -Z.gcd_abs_l -Z.gcd_abs_r; lia. Qed .
328323
329324Instance Op_gcdz : BinOp gcdz := { TBOp := Z.gcd; TBOpInj := Op_gcdz_subproof }.
330325Add Zify BinOp Op_gcdz.
331326
332327Instance Op_coprimez : BinOp coprimez :=
333- { TBOp := fun x y => Z.eqb (Z.gcd x y) 1%Z;
328+ { TBOp x y := Z.eqb (Z.gcd x y) 1%Z;
334329 TBOpInj := ltac:(rewrite /= /coprimez; lia) }.
335330Add Zify BinOp Op_coprimez.
336331
0 commit comments