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
|
(************************************************************************)
(* v * The Coq Proof Assistant / The Coq Development Team *)
(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2017 *)
(* \VV/ **************************************************************)
(* // * This file is distributed under the terms of the *)
(* * GNU Lesser General Public License Version 2.1 *)
(************************************************************************)
Require Import Bool ZMulOrder NZParity.
(** Some more properties of [even] and [odd]. *)
Module Type ZParityProp (Import Z : ZAxiomsSig')
(Import ZP : ZMulOrderProp Z).
Include NZParityProp Z Z ZP.
Lemma odd_pred : forall n, odd (P n) = even n.
Proof.
intros. rewrite <- (succ_pred n) at 2. symmetry. apply even_succ.
Qed.
Lemma even_pred : forall n, even (P n) = odd n.
Proof.
intros. rewrite <- (succ_pred n) at 2. symmetry. apply odd_succ.
Qed.
Lemma even_opp : forall n, even (-n) = even n.
Proof.
assert (H : forall n, Even n -> Even (-n)).
intros n (m,H). exists (-m). rewrite mul_opp_r. now f_equiv.
intros. rewrite eq_iff_eq_true, !even_spec.
split. rewrite <- (opp_involutive n) at 2. apply H.
apply H.
Qed.
Lemma odd_opp : forall n, odd (-n) = odd n.
Proof.
intros. rewrite <- !negb_even. now rewrite even_opp.
Qed.
Lemma even_sub : forall n m, even (n-m) = Bool.eqb (even n) (even m).
Proof.
intros. now rewrite <- add_opp_r, even_add, even_opp.
Qed.
Lemma odd_sub : forall n m, odd (n-m) = xorb (odd n) (odd m).
Proof.
intros. now rewrite <- add_opp_r, odd_add, odd_opp.
Qed.
End ZParityProp.
|