1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
From Stdlib Require Import Lia.
From Stdlib Require Import ZArith.
Import ZifyClasses.
Module Test1.
Record Z2@{u} : Type@{u} := MkZ2 { unZ2 : Z }.
Global Instance Inj_Z2_Z : InjTyp Z2 Z :=
{ inj := unZ2
; pred := fun _ => True
; cstr := fun _ => I
}.
Add Zify InjTyp Inj_Z2_Z.
Lemma eq_Z2_inj :
forall (n m : Z2),
n = m <-> unZ2 n = unZ2 m.
Proof.
Admitted.
Global Instance Op_eq : BinRel (@eq Z2) :=
{ TR := @eq Z
; TRInj := eq_Z2_inj
}.
Add Zify BinRel Op_eq.
Theorem lia_refl_ex : forall (a b : Z2), a = a.
Proof.
lia.
Defined.
Fail Constraint mkrel.u0 < unZ2.u.
End Test1.
Module Test2.
(* we need a separate copy of Z2 to test a different case because
otherwise the constraint is set in one of the tests *)
Record Z2@{u} : Type@{u} := MkZ2 { unZ2 : Z }.
Global Instance Inj_Z2_Z : InjTyp Z2 Z :=
{ inj := unZ2
; pred := fun _ => True
; cstr := fun _ => I
}.
Add Zify InjTyp Inj_Z2_Z.
Lemma eq_Z2_inj :
forall (n m : Z2),
n = m <-> unZ2 n = unZ2 m.
Proof.
Admitted.
Global Instance Op_eq : BinRel (@eq Z2) :=
{ TR := @eq Z
; TRInj := eq_Z2_inj
}.
Add Zify BinRel Op_eq.
Theorem lia_refl_ex : forall (a b : Z2), a = b -> True.
Proof.
zify.
exact I.
Defined.
Fail Constraint mkrel.u0 < Z2.u.
End Test2.
Module Test3.
Record Z2@{u} : Type@{u} := MkZ2 { unZ2 : Z }.
Global Instance Inj_Z2_Z : InjTyp Z2 Z :=
{ inj := unZ2
; pred := fun _ => True
; cstr := fun _ => I
}.
Add Zify InjTyp Inj_Z2_Z.
Lemma eq_Z2_inj :
forall (n m : Z2),
n = m <-> unZ2 n = unZ2 m.
Proof.
Admitted.
Global Instance Op_eq : BinRel (@eq Z2) :=
{ TR := @eq Z
; TRInj := eq_Z2_inj
}.
Add Zify BinRel Op_eq.
Constraint mkrel.u0 < Z2.u.
Theorem lia_refl_ex : forall (a b : Z2), a = a.
Proof.
Fail lia.
Abort.
End Test3.
|