annotate automaton-in-agda/src/root2.agda @ 323:7f806a28a866

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 14 Jan 2022 22:39:40 +0900
parents 596913103389
children 329adb1b71c7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
57
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module root2 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
3 open import Data.Nat
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
4 open import Data.Nat.Properties
57
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Data.Empty
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
6 open import Data.Unit using (⊤ ; tt)
57
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import Relation.Nullary
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import Relation.Binary.PropositionalEquality
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
9 open import Relation.Binary.Definitions
57
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
281
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
11 import gcd as GCD
159
5530b3789e0c add even
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
12 open import even
142
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 141
diff changeset
13 open import nat
231
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 199
diff changeset
14 open import logic
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
15
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
16 record Rational : Set where
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
17 field
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
18 i j : ℕ
320
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
19 0<j : j > 0
281
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
20 coprime : GCD.gcd i j ≡ 1
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
21
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
22 -- record Dividable (n m : ℕ ) : Set where
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
23 -- field
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
24 -- factor : ℕ
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
25 -- is-factor : factor * n + 0 ≡ m
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
26
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
27 gcd : (i j : ℕ) → ℕ
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
28 gcd = GCD.gcd
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
29
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
30 gcd-euclid : ( p a b : ℕ ) → 1 < p → 0 < a → 0 < b → ((i : ℕ ) → i < p → 0 < i → gcd p i ≡ 1)
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
31 → Dividable p (a * b) → Dividable p a ∨ Dividable p b
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
32 gcd-euclid = GCD.gcd-euclid
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
33
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
34 gcd-div1 : ( i j k : ℕ ) → k > 1 → (if : Dividable k i) (jf : Dividable k j )
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
35 → Dividable k ( gcd i j )
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
36 gcd-div1 = GCD.gcd-div
57
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
231
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 199
diff changeset
38 open _∧_
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 199
diff changeset
39
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 199
diff changeset
40 open import prime
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 199
diff changeset
41
233
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 231
diff changeset
42 divdable^2 : ( n k : ℕ ) → 1 < k → 1 < n → Prime k → Dividable k ( n * n ) → Dividable k n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 231
diff changeset
43 divdable^2 zero zero () 1<n pk dn2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 231
diff changeset
44 divdable^2 (suc n) (suc k) 1<k 1<n pk dn2 with decD {suc k} {suc n} 1<k
159
5530b3789e0c add even
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
45 ... | yes y = y
250
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 233
diff changeset
46 ... | no non with gcd-euclid (suc k) (suc n) (suc n) 1<k (<-trans a<sa 1<n) (<-trans a<sa 1<n) (Prime.isPrime pk) dn2
233
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 231
diff changeset
47 ... | case1 dn = dn
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 231
diff changeset
48 ... | case2 dm = dm
159
5530b3789e0c add even
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
49
255
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
50 -- p * n * n ≡ m * m means (m/n)^2 = p
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
51 -- rational m/n requires m and n is comprime each other which contradicts the condition
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 254
diff changeset
52
254
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
53 root-prime-irrational : ( n m p : ℕ ) → n > 1 → Prime p → m > 1 → p * n * n ≡ m * m → ¬ (gcd n m ≡ 1)
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
54 root-prime-irrational n m 0 n>1 pn m>1 pnm = ⊥-elim ( nat-≡< refl (<-trans a<sa (Prime.p>1 pn)))
281
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
55 root-prime-irrational n m (suc p0) n>1 pn m>1 pnm = rot13 ( gcd-div1 n m (suc p0) 1<sp dn dm ) where
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
56 p = suc p0
254
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
57 1<sp : 1 < p
253
012f79b51dba ... prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 251
diff changeset
58 1<sp = Prime.p>1 pn
281
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
59 rot13 : {m : ℕ } → Dividable (suc p0) m → m ≡ 1 → ⊥
185
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
60 rot13 d refl with Dividable.factor d | Dividable.is-factor d
253
012f79b51dba ... prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 251
diff changeset
61 ... | zero | () -- gcd 0 m ≡ 1
254
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
62 ... | suc n | x = ⊥-elim ( nat-≡< (sym x) rot17 ) where -- x : (suc n * p + 0) ≡ 1
281
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
63 rot17 : suc n * (suc p0) + 0 > 1
253
012f79b51dba ... prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 251
diff changeset
64 rot17 = begin
012f79b51dba ... prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 251
diff changeset
65 2 ≡⟨ refl ⟩
254
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
66 suc (1 * 1 ) ≤⟨ 1<sp ⟩
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
67 suc p0 ≡⟨ cong suc (+-comm 0 _) ⟩
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
68 suc (p0 + 0) ≤⟨ s≤s (+-monoʳ-≤ p0 z≤n) ⟩
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
69 suc (p0 + n * p ) ≡⟨ +-comm 0 _ ⟩
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
70 suc n * p + 0 ∎ where open ≤-Reasoning
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
71 dm : Dividable p m
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
72 dm = divdable^2 m p 1<sp m>1 pn record { factor = n * n ; is-factor = begin
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
73 (n * n) * p + 0 ≡⟨ +-comm _ 0 ⟩
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
74 (n * n) * p ≡⟨ *-comm (n * n) p ⟩
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
75 p * (n * n) ≡⟨ sym (*-assoc p n n) ⟩
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
76 (p * n) * n ≡⟨ pnm ⟩
250
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 233
diff changeset
77 m * m ∎ } where open ≡-Reasoning
254
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
78 -- p * n * n = 2m' 2m'
251
9d2cba39b33c root2 done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 250
diff changeset
79 -- n * n = m' 2m'
250
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 233
diff changeset
80 df = Dividable.factor dm
254
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
81 dn : Dividable p n
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
82 dn = divdable^2 n p 1<sp n>1 pn record { factor = df * df ; is-factor = begin
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
83 df * df * p + 0 ≡⟨ *-cancelʳ-≡ _ _ {p0} ( begin
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
84 (df * df * p + 0) * p ≡⟨ cong (λ k → k * p) (+-comm (df * df * p) 0) ⟩
281
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
85 ((df * df) * p ) * p ≡⟨ cong (λ k → k * p) (*-assoc df df p ) ⟩
254
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
86 (df * (df * p)) * p ≡⟨ cong (λ k → (df * k ) * p) (*-comm df p) ⟩
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
87 (df * (p * df)) * p ≡⟨ sym ( cong (λ k → k * p) (*-assoc df p df ) ) ⟩
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
88 ((df * p) * df) * p ≡⟨ *-assoc (df * p) df p ⟩
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
89 (df * p) * (df * p) ≡⟨ cong₂ (λ j k → j * k ) (+-comm 0 (df * p)) (+-comm 0 _) ⟩
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
90 (df * p + 0) * (df * p + 0) ≡⟨ cong₂ (λ j k → j * k) (Dividable.is-factor dm ) (Dividable.is-factor dm )⟩
253
012f79b51dba ... prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 251
diff changeset
91 m * m ≡⟨ sym pnm ⟩
281
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
92 p * n * n ≡⟨ cong (λ k → k * n) (*-comm p n) ⟩
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
93 n * p * n ≡⟨ *-assoc n p n ⟩
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
94 n * (p * n) ≡⟨ cong (λ k → n * k) (*-comm p n) ⟩
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
95 n * (n * p) ≡⟨ sym (*-assoc n n p) ⟩
254
24c721da4f27 prime version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 253
diff changeset
96 n * n * p ∎ ) ⟩
250
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 233
diff changeset
97 n * n ∎ } where open ≡-Reasoning
57
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
320
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
99 mkRational : ( i j : ℕ ) → 0 < j → Rational
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
100 mkRational zero j 0<j = record { i = 0 ; j = 1 ; coprime = refl ; 0<j = s≤s z≤n }
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
101 mkRational (suc i) (suc j) (s≤s 0<j) = record { i = Dividable.factor id ; j = Dividable.factor jd ; coprime = cop ; 0<j = 0<fj } where
320
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
102 d : ℕ
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
103 d = gcd (suc i) (suc j)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
104 d>0 : gcd (suc i) (suc j) > 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
105 d>0 = GCD.gcd>0 (suc i) (suc j) (s≤s z≤n) (s≤s z≤n )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
106 id : Dividable d (suc i)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
107 id = proj1 (GCD.gcd-dividable (suc i) (suc j))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
108 jd : Dividable d (suc j)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
109 jd = proj2 (GCD.gcd-dividable (suc i) (suc j))
320
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
110 0<fj : Dividable.factor jd > 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
111 0<fj = 0<factor d>0 (s≤s z≤n ) jd
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
112 cop : gcd (Dividable.factor id) (Dividable.factor jd) ≡ 1
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
113 cop = GCD.gcd-div-1 {suc i} {suc j} (s≤s z≤n) (s≤s z≤n )
320
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
114
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
115 r1 : {x y : ℕ} → x > 0 → y > 0 → x * y > 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
116 r1 {x} {y} x>0 y>0 = begin
320
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
117 1 * 1 ≤⟨ *≤ {1} {x} {1} x>0 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
118 x * 1 ≡⟨ *-comm x 1 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
119 1 * x ≤⟨ *≤ {1} {y} {x} y>0 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
120 y * x ≡⟨ *-comm y x ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
121 x * y ∎ where open ≤-Reasoning
185
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
122
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
123 Rational* : (r s : Rational) → Rational
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
124 Rational* r s = mkRational (Rational.i r * Rational.i s) (Rational.j r * Rational.j s) (r1 (Rational.0<j r) (Rational.0<j s) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
125
281
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
126 _r=_ : Rational → ℕ → Set
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
127 r r= p = p * Rational.j r ≡ Rational.i r
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
128
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
129 r3 : ( p : ℕ ) → p > 0 → ( r : Rational ) → Rational* r r r= p → p * Rational.j r * Rational.j r ≡ Rational.i r * Rational.i r
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
130 r3 p p>0 r rr = r4 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
131 i : ℕ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
132 i = Rational.i r * Rational.i r
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
133 j : ℕ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
134 j = Rational.j r * Rational.j r
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
135 0<j : 0 < j
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
136 0<j = r1 (Rational.0<j r) (Rational.0<j r)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
137 d1 = Dividable.factor (proj1 (GCD.gcd-dividable i j))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
138 d2 = Dividable.factor (proj2 (GCD.gcd-dividable i j))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
139 ri=id : ( i j : ℕ) → (0<i : 0 < i ) → (0<j : 0 < j)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
140 → Rational.i (mkRational i j 0<j) ≡ Dividable.factor (proj1 (GCD.gcd-dividable i j))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
141 ri=id (suc i₁) (suc j₁) 0<i (s≤s 0<j₁) = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
142 ri=jd : ( i j : ℕ) → (0<i : 0 < i ) → (0<j : 0 < j)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
143 → Rational.j (mkRational i j 0<j) ≡ Dividable.factor (proj2 (GCD.gcd-dividable i j))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
144 ri=jd (suc i₁) (suc j₁) 0<i (s≤s 0<j₁) = refl
322
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
145 r0=id : ( i j : ℕ) → (0=i : 0 ≡ i ) → (0<j : 0 < j)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
146 → Rational.i (mkRational i j 0<j) ≡ 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
147 r0=id 0 j refl 0<j = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
148 r0=jd : ( i j : ℕ) → (0=i : 0 ≡ i ) → (0<j : 0 < j)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
149 → Rational.j (mkRational i j 0<j) ≡ 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
150 r0=jd 0 j refl 0<j = refl
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
151 d : ℕ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
152 d = gcd i j
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
153 r7 : i > 0 → d > 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
154 r7 0<i = GCD.gcd>0 _ _ 0<i 0<j
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
155 r6 : i > 0 → d2 > 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
156 r6 0<i = 0<factor (r7 0<i ) 0<j (proj2 (GCD.gcd-dividable i j))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
157 r8 : 0 < i → d2 * p ≡ d1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
158 r8 0<i = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
159 d2 * p ≡⟨ *-comm d2 p ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
160 p * d2 ≡⟨ cong (λ k → p * k ) (sym (ri=jd i j 0<i 0<j )) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
161 p * Rational.j (mkRational i j _ ) ≡⟨ rr ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
162 Rational.i (Rational* r r) ≡⟨ ri=id i j 0<i 0<j ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
163 d1 ∎ where open ≡-Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
164 r4 : p * Rational.j r * Rational.j r ≡ Rational.i r * Rational.i r
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
165 r4 with <-cmp (Rational.i r * Rational.i r) 0
322
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
166 ... | tri≈ ¬a b ¬c = ⊥-elim (nat-≡< (begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
167 0 ≡⟨ sym (r0=id i j (sym b) 0<j ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
168 Rational.i (mkRational (Rational.i r * Rational.i r) (Rational.j r * Rational.j r) _ ) ≡⟨ sym rr ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
169 p * Rational.j (mkRational (Rational.i r * Rational.i r) (Rational.j r * Rational.j r) _ ) ≡⟨ cong (λ k → p * k ) (r0=jd i j (sym b) 0<j ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
170 p * 1 ≡⟨ m*1=m ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
171 p ∎ ) p>0 ) where open ≡-Reasoning
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
172 ... | tri> ¬a ¬b c = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
173 p * Rational.j r * Rational.j r ≡⟨ *-cancel-left (r6 c) ( begin
322
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
174 d2 * ((p * Rational.j r) * Rational.j r) ≡⟨ sym (*-assoc d2 _ _) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
175 (d2 * ( p * Rational.j r )) * Rational.j r ≡⟨ cong (λ k → k * Rational.j r) (sym (*-assoc d2 _ _ )) ⟩
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
176 (d2 * p) * Rational.j r * Rational.j r ≡⟨ cong (λ k → k * Rational.j r * Rational.j r) (r8 c) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
177 d1 * Rational.j r * Rational.j r ≡⟨ *-cancel-left (r7 c) ( begin
322
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
178 d * ((d1 * Rational.j r) * Rational.j r) ≡⟨ cong (λ k → d * k ) (*-assoc d1 _ _ )⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
179 d * (d1 * (Rational.j r * Rational.j r)) ≡⟨ sym (*-assoc d _ _) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
180 (d * d1) * (Rational.j r * Rational.j r) ≡⟨ cong (λ k → k * j) (*-comm d _ ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
181 (d1 * d) * j ≡⟨ cong (λ k → k * j) (+-comm 0 (d1 * d) ) ⟩
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
182 (d1 * d + 0) * j ≡⟨ cong (λ k → k * j ) (Dividable.is-factor (proj1 (GCD.gcd-dividable i j)) ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
183 i * j ≡⟨ *-comm i j ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
184 j * i ≡⟨ cong (λ k → k * i ) (sym (Dividable.is-factor (proj2 (GCD.gcd-dividable i j))) ) ⟩
322
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
185 (d2 * GCD.gcd i j + 0) * i ≡⟨ cong (λ k → k * i ) (+-comm (d2 * d ) 0) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
186 (d2 * d) * i ≡⟨ cong (λ k → k * i ) (*-comm d2 _ ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
187 (d * d2) * i ≡⟨ *-assoc d _ _ ⟩
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
188 d * (d2 * (Rational.i r * Rational.i r)) ∎ ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
189 d2 * (Rational.i r * Rational.i r) ∎ ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
190 Rational.i r * Rational.i r ∎ where open ≡-Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
191
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
192
281
8b437dd616dd fix gcd and root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 255
diff changeset
193
320
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
194 root-prime-irrational1 : ( p : ℕ ) → Prime p → ( r : Rational ) → ¬ ( Rational* r r r= p )
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
195 root-prime-irrational1 p pr r div with <-cmp (Rational.j r) 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
196 ... | tri< a ¬b ¬c = ⊥-elim (nat-≤> (Rational.0<j r) a )
322
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
197 ... | tri≈ ¬a b ¬c = ⊥-elim (nat-≡< r04 (r03 r01)) where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
198 i = Rational.i r
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
199 j = Rational.j r
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
200 r00 : p * j * j ≡ i * i
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
201 r00 = r3 p (<-trans a<sa (Prime.p>1 pr )) r div
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
202 r01 : p ≡ i * i
323
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
203 r01 = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
204 p ≡⟨ sym m*1=m ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
205 p * 1 ≡⟨ sym m*1=m ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
206 p * 1 * 1 ≡⟨ cong (λ k → p * k * k ) (sym b) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
207 p * j * j ≡⟨ r00 ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
208 i * i ∎ where open ≡-Reasoning
322
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
209 r03 : p ≡ i * i → i > 1
323
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
210 r03 eq with <-cmp i 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
211 ... | tri< a ¬b ¬c = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
212 ... | tri≈ ¬a b ¬c = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
213 ... | tri> ¬a ¬b c = c
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
214 r02 : p ≡ i * i → gcd p i ≡ i
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
215 r02 eq = GCD.div→gcd (r03 r01) record { factor = i ; is-factor = trans (+-comm _ 0 ) (sym r01) }
322
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
216 r04 : 1 ≡ i
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
217 r04 = begin
323
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
218 1 ≡⟨ sym (Prime.isPrime pr _ {!!} {!!} ) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 322
diff changeset
219 gcd p i ≡⟨ r02 r01 ⟩
322
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
220 i ∎ where open ≡-Reasoning
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
221 ... | tri> ¬a ¬b c with <-cmp (Rational.i r) 1
322
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
222 ... | tri< a ¬b₁ ¬c = {!!} where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
223 i = Rational.i r
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
224 j = Rational.j r
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
225 r00 : p * j * j ≡ i * i
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
226 r00 = r3 p (<-trans a<sa (Prime.p>1 pr )) r div
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
227 r06 : i ≡ 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
228 r06 = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
229 r05 : p * j * j ≡ i * i -- j > 0 → p * j * j > 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
230 r05 = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
231 ... | tri≈ ¬a₁ b ¬c = {!!} where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
232 i = Rational.i r
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
233 j = Rational.j r
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
234 r00 : p * j * j ≡ i * i
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
235 r00 = r3 p (<-trans a<sa (Prime.p>1 pr )) r div
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
236 r07 : p * j * j ≡ i * i -- j > 0 → p * j * j > 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 321
diff changeset
237 r07 = {!!}
321
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
238 ... | tri> ¬a₁ ¬b₁ c₁ = root-prime-irrational (Rational.j r) (Rational.i r) p c pr c₁ (r3 p (<-trans a<sa (Prime.p>1 pr ) ) r div)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 320
diff changeset
239 (trans (GCD.gcdsym {Rational.j r} {_} ) (Rational.coprime r) )