Library Coq.Numbers.NatInt.NZBase
Require
Import
NZAxioms
.
Module
Type
NZBaseProp
(
Import
NZ
:
NZDomainSig´
).
An artificial scope meant to be substituted later
Delimit
Scope
abstract_scope
with
abstract
.
Include
BackportEq
NZ
NZ
.
eq_refl, eq_sym, eq_trans
Lemma
eq_sym_iff
:
forall
x
y
,
x
==
y
<->
y
==
x
.
Theorem
neq_sym
:
forall
n
m
,
n
~=
m
->
m
~=
n
.
Theorem
eq_stepl
:
forall
x
y
z
,
x
==
y
->
x
==
z
->
z
==
y
.
Declare Left Step
eq_stepl
.
Declare Right Step
(@
Equivalence_Transitive
_
_
eq_equiv
).
Theorem
succ_inj
:
forall
n1
n2
,
S
n1
==
S
n2
->
n1
==
n2
.
Theorem
succ_inj_wd
:
forall
n1
n2
,
S
n1
==
S
n2
<->
n1
==
n2
.
Theorem
succ_inj_wd_neg
:
forall
n
m
,
S
n
~=
S
m
<->
n
~=
m
.
Section
CentralInduction
.
Variable
A
:
t
->
Prop
.
Hypothesis
A_wd
:
Proper
(
eq
==>
iff
)
A
.
Theorem
central_induction
:
forall
z
,
A
z
->
(
forall
n
,
A
n
<->
A
(
S
n
)) ->
forall
n
,
A
n
.
End
CentralInduction
.
Tactic Notation
"nzinduct"
ident
(
n
) :=
induction_maker
n
ltac
:(
apply
bi_induction
).
Tactic Notation
"nzinduct"
ident
(
n
)
constr
(
u
) :=
induction_maker
n
ltac
:(
apply
central_induction
with
(
z
:=
u
)).
End
NZBaseProp
.