Library Coq.ZArith.Zcompare
Binary Integers : results about Z.compare Initial author: Pierre Crégut (CNET, Lannion, France
THIS FILE IS DEPRECATED. It is now almost entirely made of compatibility formulations for results already present in BinInt.Z.
Require
Export
BinPos
BinInt
.
Require
Import
Lt
Gt
Plus
Mult
.
Local
Open
Scope
Z_scope
.
Comparison on integers
Lemma
Zcompare_Gt_Lt_antisym
:
forall
n
m
:
Z
,
(
n
?=
m
)
=
Gt
<->
(
m
?=
n
)
=
Lt
.
Lemma
Zcompare_antisym
n
m
:
CompOpp
(
n
?=
m
)
=
(
m
?=
n
)
.
Transitivity of comparison
Lemma
Zcompare_Lt_trans
:
forall
n
m
p
:
Z
,
(
n
?=
m
)
=
Lt
->
(
m
?=
p
)
=
Lt
->
(
n
?=
p
)
=
Lt
.
Lemma
Zcompare_Gt_trans
:
forall
n
m
p
:
Z
,
(
n
?=
m
)
=
Gt
->
(
m
?=
p
)
=
Gt
->
(
n
?=
p
)
=
Gt
.
Comparison and opposite
Lemma
Zcompare_opp
n
m
:
(
n
?=
m
)
=
(
-
m
?=
-
n
)
.
Comparison first-order specification
Lemma
Zcompare_Gt_spec
n
m
:
(
n
?=
m
)
=
Gt
->
exists
h
,
n
+
-
m
=
Zpos
h
.
Comparison and addition
Lemma
Zcompare_plus_compat
n
m
p
:
(
p
+
n
?=
p
+
m
)
=
(
n
?=
m
)
.
Lemma
Zplus_compare_compat
(
r
:
comparison
) (
n
m
p
q
:
Z
) :
(
n
?=
m
)
=
r
->
(
p
?=
q
)
=
r
->
(
n
+
p
?=
m
+
q
)
=
r
.
Lemma
Zcompare_succ_Gt
n
:
(
Z.succ
n
?=
n
)
=
Gt
.
Lemma
Zcompare_Gt_not_Lt
n
m
:
(
n
?=
m
)
=
Gt
<->
(
n
?=
m
+
1
)
<>
Lt
.
Successor and comparison
Lemma
Zcompare_succ_compat
n
m
:
(
Z.succ
n
?=
Z.succ
m
)
=
(
n
?=
m
)
.
Multiplication and comparison
Lemma
Zcompare_mult_compat
:
forall
(
p
:
positive
) (
n
m
:
Z
),
(
Zpos
p
*
n
?=
Zpos
p
*
m
)
=
(
n
?=
m
)
.
Lemma
Zmult_compare_compat_l
n
m
p
:
p
>
0 ->
(
n
?=
m
)
=
(
p
*
n
?=
p
*
m
)
.
Lemma
Zmult_compare_compat_r
n
m
p
:
p
>
0 ->
(
n
?=
m
)
=
(
n
*
p
?=
m
*
p
)
.
Relating
x
?=
y
to
=
,
<=
,
<
,
>=
or
>
Lemma
Zcompare_elim
:
forall
(
c1
c2
c3
:
Prop
) (
n
m
:
Z
),
(
n
=
m
->
c1
) ->
(
n
<
m
->
c2
) ->
(
n
>
m
->
c3
) ->
match
n
?=
m
with
|
Eq
=>
c1
|
Lt
=>
c2
|
Gt
=>
c3
end
.
Lemma
Zcompare_eq_case
:
forall
(
c1
c2
c3
:
Prop
) (
n
m
:
Z
),
c1
->
n
=
m
->
match
n
?=
m
with
|
Eq
=>
c1
|
Lt
=>
c2
|
Gt
=>
c3
end
.
Lemma
Zle_compare
:
forall
n
m
:
Z
,
n
<=
m
->
match
n
?=
m
with
|
Eq
=>
True
|
Lt
=>
True
|
Gt
=>
False
end
.
Lemma
Zlt_compare
:
forall
n
m
:
Z
,
n
<
m
->
match
n
?=
m
with
|
Eq
=>
False
|
Lt
=>
True
|
Gt
=>
False
end
.
Lemma
Zge_compare
:
forall
n
m
:
Z
,
n
>=
m
->
match
n
?=
m
with
|
Eq
=>
True
|
Lt
=>
False
|
Gt
=>
True
end
.
Lemma
Zgt_compare
:
forall
n
m
:
Z
,
n
>
m
->
match
n
?=
m
with
|
Eq
=>
False
|
Lt
=>
False
|
Gt
=>
True
end
.
Compatibility notations
Notation
Zcompare_refl
:=
Z.compare_refl
(
compat
"8.3").
Notation
Zcompare_Eq_eq
:=
Z.compare_eq
(
compat
"8.3").
Notation
Zcompare_Eq_iff_eq
:=
Z.compare_eq_iff
(
compat
"8.3").
Notation
Zcompare_spec
:=
Z.compare_spec
(
compat
"8.3").
Notation
Zmin_l
:=
Z.min_l
(
compat
"8.3").
Notation
Zmin_r
:=
Z.min_r
(
compat
"8.3").
Notation
Zmax_l
:=
Z.max_l
(
compat
"8.3").
Notation
Zmax_r
:=
Z.max_r
(
compat
"8.3").
Notation
Zabs_eq
:=
Z.abs_eq
(
compat
"8.3").
Notation
Zabs_non_eq
:=
Z.abs_neq
(
compat
"8.3").
Notation
Zsgn_0
:=
Z.sgn_null
(
compat
"8.3").
Notation
Zsgn_1
:=
Z.sgn_pos
(
compat
"8.3").
Notation
Zsgn_m1
:=
Z.sgn_neg
(
compat
"8.3").
Not kept: Zcompare_egal_dec