~ubuntu-branches/ubuntu/hardy/coq-doc/hardy

« back to all changes in this revision

Viewing changes to library/Coq.ZArith.Zeven.html

  • Committer: Bazaar Package Importer
  • Author(s): Samuel Mimram
  • Date: 2004-09-18 13:28:22 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20040918132822-ees5mb8qmzd6a0fw
Tags: 8.0pl1.0-1
* Added the Coq faq, moved the tutorial to the root directory and added
  doc-base files for both, closes: #272204.
* Set dh_compat to level 4.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<html xmlns="http://www.w3.org/1999/xhtml">
 
2
<head>
 
3
<meta http-equiv="Content-Type" content="text/html; charset="><link rel="stylesheet" href="style.css" type="text/css"><title>Coq.ZArith.Zeven</title>
 
4
</head>
 
5
 
 
6
<body>
 
7
 
 
8
<h1>Library Coq.ZArith.Zeven</h1>
 
9
 
 
10
<code>
 
11
<code class="keyword">Require</code> <code class="keyword">Import</code> BinInt.<br/>
 
12
 
 
13
<br/>
 
14
</code>
 
15
 
 
16
<table width="100%"><tr class="doc"><td>
 
17
About parity: even and odd predicates on Z, division by 2 on Z 
 
18
</td></tr></table>
 
19
<code>
 
20
 
 
21
<br/>
 
22
</code>
 
23
 
 
24
<table width="100%"><tr class="doc"><td>
 
25
<code>Zeven</code>, <code>Zodd</code>, <code>Zdiv2</code> and their related properties 
 
26
</td></tr></table>
 
27
<code>
 
28
 
 
29
<br/>
 
30
<code class="keyword">Definition</code> <a name="Zeven"></a>Zeven (z:<a href="Coq.ZArith.BinInt.html#Z">Z</a>) :=<br/>
 
31
&nbsp;&nbsp;match z with<br/>
 
32
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Z0">Z0</a> =&gt; <a href="Coq.Init.Logic.html#True">True</a><br/>
 
33
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zpos">Zpos</a> (<a href="Coq.NArith.BinPos.html#xO">xO</a> _) =&gt; <a href="Coq.Init.Logic.html#True">True</a><br/>
 
34
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> (<a href="Coq.NArith.BinPos.html#xO">xO</a> _) =&gt; <a href="Coq.Init.Logic.html#True">True</a><br/>
 
35
&nbsp;&nbsp;| _ =&gt; <a href="Coq.Init.Logic.html#False">False</a><br/>
 
36
&nbsp;&nbsp;end.<br/>
 
37
 
 
38
<br/>
 
39
<code class="keyword">Definition</code> <a name="Zodd"></a>Zodd (z:<a href="Coq.ZArith.BinInt.html#Z">Z</a>) :=<br/>
 
40
&nbsp;&nbsp;match z with<br/>
 
41
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zpos">Zpos</a> <a href="Coq.NArith.BinPos.html#xH">xH</a> =&gt; <a href="Coq.Init.Logic.html#True">True</a><br/>
 
42
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> <a href="Coq.NArith.BinPos.html#xH">xH</a> =&gt; <a href="Coq.Init.Logic.html#True">True</a><br/>
 
43
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zpos">Zpos</a> (<a href="Coq.NArith.BinPos.html#xI">xI</a> _) =&gt; <a href="Coq.Init.Logic.html#True">True</a><br/>
 
44
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> (<a href="Coq.NArith.BinPos.html#xI">xI</a> _) =&gt; <a href="Coq.Init.Logic.html#True">True</a><br/>
 
45
&nbsp;&nbsp;| _ =&gt; <a href="Coq.Init.Logic.html#False">False</a><br/>
 
46
&nbsp;&nbsp;end.<br/>
 
47
 
 
48
<br/>
 
49
<code class="keyword">Definition</code> <a name="Zeven_bool"></a>Zeven_bool (z:<a href="Coq.ZArith.BinInt.html#Z">Z</a>) :=<br/>
 
50
&nbsp;&nbsp;match z with<br/>
 
51
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Z0">Z0</a> =&gt; <a href="Coq.Init.Datatypes.html#true">true</a><br/>
 
52
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zpos">Zpos</a> (<a href="Coq.NArith.BinPos.html#xO">xO</a> _) =&gt; <a href="Coq.Init.Datatypes.html#true">true</a><br/>
 
53
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> (<a href="Coq.NArith.BinPos.html#xO">xO</a> _) =&gt; <a href="Coq.Init.Datatypes.html#true">true</a><br/>
 
54
&nbsp;&nbsp;| _ =&gt; <a href="Coq.Init.Datatypes.html#false">false</a><br/>
 
55
&nbsp;&nbsp;end.<br/>
 
56
 
 
57
<br/>
 
58
<code class="keyword">Definition</code> <a name="Zodd_bool"></a>Zodd_bool (z:<a href="Coq.ZArith.BinInt.html#Z">Z</a>) :=<br/>
 
59
&nbsp;&nbsp;match z with<br/>
 
60
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Z0">Z0</a> =&gt; <a href="Coq.Init.Datatypes.html#false">false</a><br/>
 
61
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zpos">Zpos</a> (<a href="Coq.NArith.BinPos.html#xO">xO</a> _) =&gt; <a href="Coq.Init.Datatypes.html#false">false</a><br/>
 
62
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> (<a href="Coq.NArith.BinPos.html#xO">xO</a> _) =&gt; <a href="Coq.Init.Datatypes.html#false">false</a><br/>
 
63
&nbsp;&nbsp;| _ =&gt; <a href="Coq.Init.Datatypes.html#true">true</a><br/>
 
64
&nbsp;&nbsp;end.<br/>
 
65
 
 
66
<br/>
 
67
<code class="keyword">Definition</code> <a name="Zeven_odd_dec"></a>Zeven_odd_dec : forall z:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, {<a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> z} + {<a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> z}.<br/>
 
68
<code class="keyword">Proof</code>.<br/>
 
69
&nbsp;&nbsp;intro z. case z;<br/>
 
70
&nbsp;&nbsp;[ left; compute in |- *; trivial
 
71
  | intro p; case p; intros;
 
72
     (right; compute in |- *; exact I) || (left; compute in |- *; exact I)
 
73
  | intro p; case p; intros;
 
74
     (right; compute in |- *; exact I) || (left; compute in |- *; exact I) ].<br/>
 
75
<code class="keyword">Defined</code>.<br/>
 
76
 
 
77
<br/>
 
78
<code class="keyword">Definition</code> <a name="Zeven_dec"></a>Zeven_dec : forall z:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, {<a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> z} + {~ <a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> z}.<br/>
 
79
<code class="keyword">Proof</code>.<br/>
 
80
&nbsp;&nbsp;intro z. case z;<br/>
 
81
&nbsp;&nbsp;[ left; compute in |- *; trivial
 
82
  | intro p; case p; intros;
 
83
     (left; compute in |- *; exact I) || (right; compute in |- *; trivial)
 
84
  | intro p; case p; intros;
 
85
     (left; compute in |- *; exact I) || (right; compute in |- *; trivial) ].<br/>
 
86
<code class="keyword">Defined</code>.<br/>
 
87
 
 
88
<br/>
 
89
<code class="keyword">Definition</code> <a name="Zodd_dec"></a>Zodd_dec : forall z:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, {<a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> z} + {~ <a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> z}.<br/>
 
90
<code class="keyword">Proof</code>.<br/>
 
91
&nbsp;&nbsp;intro z. case z;<br/>
 
92
&nbsp;&nbsp;[ right; compute in |- *; trivial
 
93
  | intro p; case p; intros;
 
94
     (left; compute in |- *; exact I) || (right; compute in |- *; trivial)
 
95
  | intro p; case p; intros;
 
96
     (left; compute in |- *; exact I) || (right; compute in |- *; trivial) ].<br/>
 
97
<code class="keyword">Defined</code>.<br/>
 
98
 
 
99
<br/>
 
100
<code class="keyword">Lemma</code> <a name="Zeven_not_Zodd"></a>Zeven_not_Zodd : forall n:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, <a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> n -&gt; ~ <a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> n.<br/>
 
101
<code class="keyword">Proof</code>.<br/>
 
102
&nbsp;&nbsp;intro z; destruct z; [ idtac | destruct p | destruct p ]; compute in |- *;<br/>
 
103
&nbsp;&nbsp;&nbsp;trivial.<br/>
 
104
<code class="keyword">Qed</code>.<br/>
 
105
 
 
106
<br/>
 
107
<code class="keyword">Lemma</code> <a name="Zodd_not_Zeven"></a>Zodd_not_Zeven : forall n:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, <a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> n -&gt; ~ <a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> n.<br/>
 
108
<code class="keyword">Proof</code>.<br/>
 
109
&nbsp;&nbsp;intro z; destruct z; [ idtac | destruct p | destruct p ]; compute in |- *;<br/>
 
110
&nbsp;&nbsp;&nbsp;trivial.<br/>
 
111
<code class="keyword">Qed</code>.<br/>
 
112
 
 
113
<br/>
 
114
<code class="keyword">Lemma</code> <a name="Zeven_Sn"></a>Zeven_Sn : forall n:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, <a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> n -&gt; <a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> (<a href="Coq.ZArith.BinInt.html#Zsucc">Zsucc</a> n).<br/>
 
115
<code class="keyword">Proof</code>.<br/>
 
116
&nbsp;intro z; destruct z; unfold Zsucc in |- *;<br/>
 
117
&nbsp;&nbsp;[ idtac | destruct p | destruct p ]; simpl in |- *; <br/>
 
118
&nbsp;&nbsp;trivial. <br/>
 
119
&nbsp;unfold Pdouble_minus_one in |- *; case p; simpl in |- *; auto.<br/>
 
120
<code class="keyword">Qed</code>.<br/>
 
121
 
 
122
<br/>
 
123
<code class="keyword">Lemma</code> <a name="Zodd_Sn"></a>Zodd_Sn : forall n:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, <a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> n -&gt; <a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> (<a href="Coq.ZArith.BinInt.html#Zsucc">Zsucc</a> n).<br/>
 
124
<code class="keyword">Proof</code>.<br/>
 
125
&nbsp;intro z; destruct z; unfold Zsucc in |- *;<br/>
 
126
&nbsp;&nbsp;[ idtac | destruct p | destruct p ]; simpl in |- *; <br/>
 
127
&nbsp;&nbsp;trivial. <br/>
 
128
&nbsp;unfold Pdouble_minus_one in |- *; case p; simpl in |- *; auto.<br/>
 
129
<code class="keyword">Qed</code>.<br/>
 
130
 
 
131
<br/>
 
132
<code class="keyword">Lemma</code> <a name="Zeven_pred"></a>Zeven_pred : forall n:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, <a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> n -&gt; <a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> (<a href="Coq.ZArith.BinInt.html#Zpred">Zpred</a> n).<br/>
 
133
<code class="keyword">Proof</code>.<br/>
 
134
&nbsp;intro z; destruct z; unfold Zpred in |- *;<br/>
 
135
&nbsp;&nbsp;[ idtac | destruct p | destruct p ]; simpl in |- *; <br/>
 
136
&nbsp;&nbsp;trivial. <br/>
 
137
&nbsp;unfold Pdouble_minus_one in |- *; case p; simpl in |- *; auto.<br/>
 
138
<code class="keyword">Qed</code>.<br/>
 
139
 
 
140
<br/>
 
141
<code class="keyword">Lemma</code> <a name="Zodd_pred"></a>Zodd_pred : forall n:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, <a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> n -&gt; <a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> (<a href="Coq.ZArith.BinInt.html#Zpred">Zpred</a> n).<br/>
 
142
<code class="keyword">Proof</code>.<br/>
 
143
&nbsp;intro z; destruct z; unfold Zpred in |- *;<br/>
 
144
&nbsp;&nbsp;[ idtac | destruct p | destruct p ]; simpl in |- *; <br/>
 
145
&nbsp;&nbsp;trivial. <br/>
 
146
&nbsp;unfold Pdouble_minus_one in |- *; case p; simpl in |- *; auto.<br/>
 
147
<code class="keyword">Qed</code>.<br/>
 
148
 
 
149
<br/>
 
150
<code class="keyword">Hint</code> Unfold Zeven Zodd: zarith.<br/>
 
151
 
 
152
<br/>
 
153
</code>
 
154
 
 
155
<table width="100%"><tr class="doc"><td>
 
156
<code>Zdiv2</code> is defined on all <code>Z</code>, but notice that for odd negative
 
157
    integers it is not the euclidean quotient: in that case we have <code>n =
 
158
    2*(n/2)-1</code> 
 
159
</td></tr></table>
 
160
<code>
 
161
 
 
162
<br/>
 
163
<code class="keyword">Definition</code> <a name="Zdiv2"></a>Zdiv2 (z:<a href="Coq.ZArith.BinInt.html#Z">Z</a>) :=<br/>
 
164
&nbsp;&nbsp;match z with<br/>
 
165
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Z0">Z0</a> =&gt; 0%Z<br/>
 
166
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zpos">Zpos</a> <a href="Coq.NArith.BinPos.html#xH">xH</a> =&gt; 0%Z<br/>
 
167
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zpos">Zpos</a> p =&gt; <a href="Coq.ZArith.BinInt.html#Zpos">Zpos</a> (<a href="Coq.NArith.BinPos.html#Pdiv2">Pdiv2</a> p)<br/>
 
168
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> <a href="Coq.NArith.BinPos.html#xH">xH</a> =&gt; 0%Z<br/>
 
169
&nbsp;&nbsp;| <a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> p =&gt; <a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> (<a href="Coq.NArith.BinPos.html#Pdiv2">Pdiv2</a> p)<br/>
 
170
&nbsp;&nbsp;end.<br/>
 
171
 
 
172
<br/>
 
173
<code class="keyword">Lemma</code> <a name="Zeven_div2"></a>Zeven_div2 : forall n:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, <a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> n -&gt; n = (2 * <a href="Coq.ZArith.Zeven.html#Zdiv2">Zdiv2</a> n)%Z.<br/>
 
174
<code class="keyword">Proof</code>.<br/>
 
175
intro x; destruct x.<br/>
 
176
auto with arith.<br/>
 
177
destruct p; auto with arith.<br/>
 
178
intros. absurd (<a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> (<a href="Coq.ZArith.BinInt.html#Zpos">Zpos</a> (<a href="Coq.NArith.BinPos.html#xI">xI</a> p))); red in |- *; auto with arith.<br/>
 
179
intros. absurd (<a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> 1); red in |- *; auto with arith.<br/>
 
180
destruct p; auto with arith.<br/>
 
181
intros. absurd (<a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> (<a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> (<a href="Coq.NArith.BinPos.html#xI">xI</a> p))); red in |- *; auto with arith.<br/>
 
182
intros. absurd (<a href="Coq.ZArith.Zeven.html#Zeven">Zeven</a> (-1)); red in |- *; auto with arith.<br/>
 
183
<code class="keyword">Qed</code>.<br/>
 
184
 
 
185
<br/>
 
186
<code class="keyword">Lemma</code> <a name="Zodd_div2"></a>Zodd_div2 : forall n:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, (n &gt;= 0)%Z -&gt; <a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> n -&gt; n = (2 * <a href="Coq.ZArith.Zeven.html#Zdiv2">Zdiv2</a> n + 1)%Z.<br/>
 
187
<code class="keyword">Proof</code>.<br/>
 
188
intro x; destruct x.<br/>
 
189
intros. absurd (<a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> 0); red in |- *; auto with arith.<br/>
 
190
destruct p; auto with arith.<br/>
 
191
intros. absurd (<a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> (<a href="Coq.ZArith.BinInt.html#Zpos">Zpos</a> (<a href="Coq.NArith.BinPos.html#xO">xO</a> p))); red in |- *; auto with arith.<br/>
 
192
intros. absurd (<a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> p &gt;= 0)%Z; red in |- *; auto with arith.<br/>
 
193
<code class="keyword">Qed</code>.<br/>
 
194
 
 
195
<br/>
 
196
<code class="keyword">Lemma</code> <a name="Zodd_div2_neg"></a>Zodd_div2_neg :<br/>
 
197
&nbsp;forall n:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, (n &lt;= 0)%Z -&gt; <a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> n -&gt; n = (2 * <a href="Coq.ZArith.Zeven.html#Zdiv2">Zdiv2</a> n - 1)%Z.<br/>
 
198
<code class="keyword">Proof</code>.<br/>
 
199
intro x; destruct x.<br/>
 
200
intros. absurd (<a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> 0); red in |- *; auto with arith.<br/>
 
201
intros. absurd (<a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> p &gt;= 0)%Z; red in |- *; auto with arith.<br/>
 
202
destruct p; auto with arith.<br/>
 
203
intros. absurd (<a href="Coq.ZArith.Zeven.html#Zodd">Zodd</a> (<a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> (<a href="Coq.NArith.BinPos.html#xO">xO</a> p))); red in |- *; auto with arith.<br/>
 
204
<code class="keyword">Qed</code>.<br/>
 
205
 
 
206
<br/>
 
207
<code class="keyword">Lemma</code> <a name="Z_modulo_2"></a>Z_modulo_2 :<br/>
 
208
&nbsp;forall n:<a href="Coq.ZArith.BinInt.html#Z">Z</a>, {y : <a href="Coq.ZArith.BinInt.html#Z">Z</a> | n = (2 * y)%Z} + {y : <a href="Coq.ZArith.BinInt.html#Z">Z</a> | n = (2 * y + 1)%Z}.<br/>
 
209
<code class="keyword">Proof</code>.<br/>
 
210
intros x.<br/>
 
211
elim (<a href="Coq.ZArith.Zeven.html#Zeven_odd_dec">Zeven_odd_dec</a> x); intro.<br/>
 
212
left. split with (<a href="Coq.ZArith.Zeven.html#Zdiv2">Zdiv2</a> x). exact (<a href="Coq.ZArith.Zeven.html#Zeven_div2">Zeven_div2</a> x a).<br/>
 
213
right. generalize b; clear b; case x.<br/>
 
214
intro b; inversion b.<br/>
 
215
intro p; split with (<a href="Coq.ZArith.Zeven.html#Zdiv2">Zdiv2</a> (<a href="Coq.ZArith.BinInt.html#Zpos">Zpos</a> p)). apply (<a href="Coq.ZArith.Zeven.html#Zodd_div2">Zodd_div2</a> (<a href="Coq.ZArith.BinInt.html#Zpos">Zpos</a> p)); trivial.<br/>
 
216
unfold Zge, Zcompare in |- *; simpl in |- *; discriminate.<br/>
 
217
intro p; split with (<a href="Coq.ZArith.Zeven.html#Zdiv2">Zdiv2</a> (<a href="Coq.ZArith.BinInt.html#Zpred">Zpred</a> (<a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> p))).<br/>
 
218
pattern (<a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> p) at 1 in |- *; rewrite (<a href="Coq.ZArith.BinInt.html#Zsucc_pred">Zsucc_pred</a> (<a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> p)).<br/>
 
219
pattern (<a href="Coq.ZArith.BinInt.html#Zpred">Zpred</a> (<a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> p)) at 1 in |- *; rewrite (<a href="Coq.ZArith.Zeven.html#Zeven_div2">Zeven_div2</a> (<a href="Coq.ZArith.BinInt.html#Zpred">Zpred</a> (<a href="Coq.ZArith.BinInt.html#Zneg">Zneg</a> p))).<br/>
 
220
reflexivity.<br/>
 
221
apply <a href="Coq.ZArith.Zeven.html#Zeven_pred">Zeven_pred</a>; assumption.<br/>
 
222
<code class="keyword">Qed</code>.<br/>
 
223
 
 
224
<br/>
 
225
<code class="keyword">Lemma</code> <a name="Zsplit2"></a>Zsplit2 :<br/>
 
226
&nbsp;forall n:<a href="Coq.ZArith.BinInt.html#Z">Z</a>,<br/>
 
227
&nbsp;&nbsp;&nbsp;{p : <a href="Coq.ZArith.BinInt.html#Z">Z</a> * <a href="Coq.ZArith.BinInt.html#Z">Z</a> |<br/>
 
228
&nbsp;&nbsp;&nbsp;let (x1, x2) := p in n = (x1 + x2)%Z /\ (x1 = x2 \/ x2 = (x1 + 1)%Z)}.<br/>
 
229
<code class="keyword">Proof</code>.<br/>
 
230
intros x.<br/>
 
231
elim (<a href="Coq.ZArith.Zeven.html#Z_modulo_2">Z_modulo_2</a> x); intros [y Hy]; rewrite <a href="Coq.ZArith.BinInt.html#Zmult_comm">Zmult_comm</a> in Hy;<br/>
 
232
&nbsp;rewrite &lt;- <a href="Coq.ZArith.BinInt.html#Zplus_diag_eq_mult_2">Zplus_diag_eq_mult_2</a> in Hy.<br/>
 
233
exists (y, y); split. <br/>
 
234
assumption.<br/>
 
235
left; reflexivity.<br/>
 
236
exists (y, (y + 1)%Z); split.<br/>
 
237
rewrite <a href="Coq.ZArith.BinInt.html#Zplus_assoc">Zplus_assoc</a>; assumption.<br/>
 
238
right; reflexivity.<br/>
 
239
<code class="keyword">Qed</code>.</code>
 
240
<hr/><a href="index.html">Index</a><hr/><font size="-1">This page has been generated by <a href="http://www.lri.fr/~filliatr/coqdoc/">coqdoc</a></font>
 
241
</body>
 
242
</html>
 
 
b'\\ No newline at end of file'