File: bug_16803.v

package info (click to toggle)
rocq-stdlib 9.0.0-3
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 11,828 kB
  • sloc: python: 2,928; sh: 444; makefile: 319; javascript: 24; ml: 2
file content (102 lines) | stat: -rw-r--r-- 1,926 bytes parent folder | download
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.