# Library Coq.ZArith.Zbool

Require Import BinInt.
Require Import Zeven.
Require Import Zorder.
Require Import Zcompare.
Require Import ZArith_dec.
Require Import Sumbool.

Local Open Scope Z_scope.

# Boolean operations from decidability of order

The decidability of equality and order relations over type Z gives some boolean functions with the adequate specification.

# Boolean comparisons of binary integers

Notation Zle_bool := Z.leb (only parsing).
Notation Zge_bool := Z.geb (only parsing).
Notation Zlt_bool := Z.ltb (only parsing).
Notation Zgt_bool := Z.gtb (only parsing).

We now provide a direct Z.eqb that doesn't refer to Z.compare. The old Zeq_bool is kept for compatibility.

Definition Zeq_bool (x y:Z) :=
match x ?= y with
| Eq => true
| _ => false
end.

Definition Zneq_bool (x y:Z) :=
match x ?= y with
| Eq => false
| _ => true
end.

Properties in term of if ... then ... else ...

Lemma Zle_cases n m : if n <=? m then n <= m else n > m.

Lemma Zlt_cases n m : if n <? m then n < m else n >= m.

Lemma Zge_cases n m : if n >=? m then n >= m else n < m.

Lemma Zgt_cases n m : if n >? m then n > m else n <= m.

Lemmas on Z.leb used in contrib/graphs
Properties in term of iff
Properties of the deprecated Zeq_bool

Lemma Zeq_is_eq_bool x y : x = y <-> Zeq_bool x y = true.

Lemma Zeq_bool_eq x y : Zeq_bool x y = true -> x = y.

Lemma Zeq_bool_neq x y : Zeq_bool x y = false -> x <> y.

Lemma Zeq_bool_if x y : if Zeq_bool x y then x=y else x<>y.