Mercurial > hg > Members > kono > Proof > prob1
annotate prob1.agda @ 3:e909c828cefe
which way?
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 Nov 2019 21:07:46 +0900 |
parents | 0dcf08f3ff18 |
children | 2a36d771d388 |
rev | line source |
---|---|
0
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 module prob1 where |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 open import Relation.Binary.PropositionalEquality |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 open import Relation.Binary.Core |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 open import Data.Nat |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 open import Data.Nat.Properties |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 open import logic |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 open import nat |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 open import Data.Empty |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 open import Relation.Nullary |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 minus : (a b : ℕ ) → ℕ |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 minus a zero = a |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 minus zero (suc b) = zero |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 minus (suc a) (suc b) = minus a b |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 |
2 | 17 m+= : {i j m : ℕ } → m + i ≡ m + j → i ≡ j |
18 m+= {i} {j} {zero} refl = refl | |
19 m+= {i} {j} {suc m} eq = m+= {i} {j} {m} ( cong (λ k → pred k ) eq ) | |
20 | |
21 +m= : {i j m : ℕ } → i + m ≡ j + m → i ≡ j | |
22 +m= {i} {j} {m} eq = m+= ( subst₂ (λ j k → j ≡ k ) (+-comm i _ ) (+-comm j _ ) eq ) | |
23 | |
24 less-1 : { n m : ℕ } → suc n < m → n < m | |
25 less-1 {zero} {suc (suc _)} (s≤s (s≤s z≤n)) = s≤s z≤n | |
26 less-1 {suc n} {suc m} (s≤s lt) = s≤s (less-1 {n} {m} lt) | |
27 | |
28 minus+n : {x y : ℕ } → suc x > y → minus x y + y ≡ x | |
29 minus+n {x} {zero} _ = trans (sym (+-comm zero _ )) refl | |
30 minus+n {zero} {suc y} (s≤s ()) | |
31 minus+n {suc x} {suc y} (s≤s lt) = begin | |
32 minus (suc x) (suc y) + suc y | |
33 ≡⟨ +-comm _ (suc y) ⟩ | |
34 suc y + minus x y | |
35 ≡⟨ cong ( λ k → suc k ) ( | |
36 begin | |
37 y + minus x y | |
38 ≡⟨ +-comm y _ ⟩ | |
39 minus x y + y | |
40 ≡⟨ minus+n {x} {y} lt ⟩ | |
41 x | |
42 ∎ | |
43 ) ⟩ | |
44 suc x | |
45 ∎ where open ≡-Reasoning | |
46 | |
47 <-minus : {x y z : ℕ } → x + z < y + z → x < y | |
48 <-minus = {!!} | |
49 | |
50 | |
51 -- trans (sym (+-comm (suc y) _ )) (cong ( λ k → suc k ) {!!} ) -- (trans ? (+-comm _ _ ) ) | |
52 | |
0
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 -- All variables are positive integer |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 -- A = -M*n + i +k*M - M |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 -- where n is in range (0,…,k-1) and i is in range(0,…,M-1) |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 -- Goal: Prove that A can take all values of (0,…,k*M-1) |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 -- A1 = -M*n1 + i1 +k*M M, A2 = -M*n2 + i2 +k*M - M |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 -- (1) If n1!=n2 or i1!=i2 then A1!=A2 |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 -- Or its contraposition: (2) if A1=A2 then n1=n2 and i1=i2 |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 -- Proof by contradiction: Suppose A1=A2 and (n1!=n2 or i1!=i2) becomes |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 -- contradiction |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 -- Induction on n and i |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 record Cond1 (A M k : ℕ ) : Set where |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 field |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 n : ℕ |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 i : ℕ |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 range-n : n < k |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 range-i : i < M |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 rule1 : i + k * M ≡ M * (suc n) + A -- A ≡ (i + k * M ) - (M * (suc n)) |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 -- k = 1 → n = 0 → ∀ M → A = i |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 -- k = 2 → n = 1 → |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 -- i + 2 * M = M * (suc n) + A i = suc n → A = 0 |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 |
1 | 77 problem : ( A M k : ℕ ) → Set |
78 problem A M k = (suc A < k * M ) → Cond1 A M k | |
0
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 |
2 | 80 problem0-k=k : ( k A M : ℕ ) → problem A M k |
81 problem0-k=k zero A M () | |
82 problem0-k=k (suc k) A M A<kM = cc where | |
3 | 83 ccn : (suc A > k * M ) → Cond1 A M (suc k) |
84 ccn gt = record { n = 0 ; i = minus A (k * M ) ; range-n = s≤s z≤n ; range-i = A-Mk<M {k} gt A<kM ; rule1 = lemma1 } where | |
2 | 85 A-Mk<M : {k A M : ℕ } → (suc A > k * M ) → ( suc A < (suc k ) * M ) → minus A (k * M ) < M |
86 A-Mk<M {k} {A} {M} lt1 lt2 = <-minus ( subst₂ (λ j k → j < k ) (sym (minus+n {A} {k * M} lt1 )) refl (<-trans a<sa lt2) ) | |
87 lemma1 : minus A (k * M) + suc k * M ≡ M * 1 + A | |
88 lemma1 = begin | |
89 minus A (k * M) + suc k * M | |
90 ≡⟨⟩ | |
91 minus A (k * M) + (M + k * M ) | |
92 ≡⟨ cong ( λ x → minus A (k * M) + x ) (+-comm M _ ) ⟩ | |
93 minus A (k * M) + (k * M + M ) | |
94 ≡⟨ sym ( +-assoc _ (k * M ) M ) ⟩ | |
95 (minus A (k * M) + k * M ) + M | |
3 | 96 ≡⟨ cong ( λ k → k + M ) (minus+n {A} {k * M} gt ) ⟩ |
2 | 97 A + M |
98 ≡⟨⟩ | |
99 A + ( 0 + M ) | |
100 ≡⟨ cong ( λ k → A + k ) (+-comm 0 _ ) ⟩ | |
101 A + ( M + 0 ) | |
102 ≡⟨⟩ | |
103 A + 1 * M | |
104 ≡⟨ cong ( λ k → A + k ) (*-comm 1 _ ) ⟩ | |
105 A + M * 1 | |
106 ≡⟨ +-comm A _ ⟩ | |
107 M * 1 + A | |
108 ∎ where open ≡-Reasoning | |
1 | 109 |
2 | 110 next-cc : (A M k : ℕ ) → ((suc A < k * M ) → Cond1 A M k) → (suc A < k * M ) → Cond1 A M (suc k) |
111 next-cc A M k cc A<kM = record { n = k ; i = Cond1.i (cc A<kM ) ; range-n = {!!} ; range-i = Cond1.range-i (cc A<kM ) ; rule1 = {!!} } | |
112 cc : Cond1 A M (suc k) | |
113 cc with <-cmp (suc A) (k * M) | |
114 cc | tri< a ¬b ¬c = next-cc A M k ( problem0-k=k k A M ) a | |
3 | 115 cc | tri≈ ¬a b ¬c = next-cc A M k ( problem0-k=k k A M ) ? |
116 cc | tri> ¬a ¬b c = ccn c | |
0
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 problem0 : ( A M k : ℕ ) → M > 0 → k > 0 → (suc A < k * M ) → Cond1 A M k |
1 | 119 problem0 A (suc M) (suc k) 0<M 0<k A<kM = lemma1 k M A<kM a<sa a<sa where |
0
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 --- i loop in n loop |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 lemma1-i : ( n i : ℕ ) → (suc A < suc k * suc M ) → n < suc k → i < suc M → Dec ( Cond1 A (suc M) (suc k) ) |
1 | 122 lemma1-i n zero A<kM _ _ with <-cmp (1 + suc k * suc M ) ( suc M * suc n + A) |
123 lemma1-i n zero A<kM _ _ | tri< a ¬b ¬c = no {!!} | |
124 lemma1-i n zero A<kM n<k i<M | tri≈ ¬a b ¬c = yes record { n = n ; i = suc zero ; range-n = n<k ; range-i = {!!} ; rule1 = b } | |
125 lemma1-i n zero A<kM _ _ | tri> ¬a ¬b c = no {!!} | |
126 lemma1-i n (suc i) A<kM _ _ with <-cmp (suc i + suc k * suc M ) ( suc M * suc n + A) | |
127 lemma1-i n (suc i) A<kM n<k i<M | tri≈ ¬a b ¬c = yes record { n = n ; i = suc i ; range-n = n<k ; range-i = i<M ; rule1 = b } | |
128 lemma1-i n (suc i) A<kM n<k i<M | tri< a ¬b ¬c = lemma1-i n i A<kM n<k (less-1 i<M) | |
129 lemma1-i n (suc i) A<kM n<k i<M | tri> ¬a ¬b c = no {!!} | |
0
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 --- n loop |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 lemma1 : ( n i : ℕ ) → (suc A < suc k * suc M ) → n < suc k → i < suc M → Cond1 A (suc M) (suc k) |
1 | 132 lemma1 n i A<kM _ _ with <-cmp (i + suc k * suc M ) ( suc M * suc n + A) |
133 lemma1 n i A<kM n<k i<M | tri≈ ¬a b ¬c = record { n = n ; i = i ; range-n = n<k ; range-i = i<M ; rule1 = b } | |
134 lemma1 zero i A<kM n<k i<M | tri< a ¬b ¬c = lemma2 i A<kM i<M where | |
0
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 --- i + k * M ≡ M + A case |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 lemma2 : ( i : ℕ ) → (suc A < suc k * suc M ) → i < suc M → Cond1 A (suc M) (suc k) |
1 | 137 lemma2 zero A<kM i<M = {!!} -- A = A = k * M |
138 lemma2 (suc i) A<kM i<M with <-cmp ( suc i + suc k * suc M ) ( suc M * 1 + A) | |
139 lemma2 (suc i) A<kM i<M | tri≈ ¬a b ¬c = record { n = zero ; i = suc i ; range-n = n<k ; range-i = i<M ; rule1 = b } | |
140 lemma2 (suc i) A<kM i<M | tri< a ¬b ¬c = lemma2 i A<kM (less-1 i<M) | |
141 lemma2 (suc i) A<kM i<M | tri> ¬a ¬b c = {!!} -- can't happen | |
142 lemma1 (suc n) i A<kM n<k i<M | tri< a ¬b ¬c with lemma1-i (suc n) i A<kM n<k i<M | |
143 lemma1 (suc n) i A<kM n<k i<M | tri< a ¬b ¬c | yes p = p | |
144 lemma1 (suc n) i A<kM n<k i<M | tri< a ¬b ¬c | no ¬p = lemma1 n i A<kM (less-1 n<k) i<M | |
145 lemma1 n i A<kM n<k i<M | tri> ¬a ¬b c = {!!} where -- can't happen | |
0
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 cannot1 : { n k M i A : ℕ } → n < suc k → i < suc M → (i + suc k * suc M ) > ( suc M * suc n + A) → ¬ ( suc A < suc k * suc M ) |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 cannot1 = {!!} |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148 |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 problem1 : (A1 A2 M k : ℕ ) |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 → (c1 : Cond1 A1 M k ) → (c2 : Cond1 A2 M k ) |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 → ( A1 ≡ A2 ) → ( Cond1.n c1 ≡ Cond1.n c2 ) ∧ ( Cond1.i c1 ≡ Cond1.i c2 ) |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 problem1 = {!!} |
06002e20ce5c
incudtion selection on diophantos equation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 |