@@ -124,30 +124,31 @@ stepGCD w =
124124
125125-- putting it all together using an auxiliary variable to pass the termination checking
126126
127- euclid-helper< : (m n f : ℕ) → (n < m) → (m ≤ f) → GCD m n
128- euclid-helper< m n zero n<m m≤0 .fst = 0
129- euclid-helper< m n zero n<m m≤0 .snd .fst .fst = ∣-refl $ sym $ ≤0→≡0 m≤0
130- euclid-helper< m n zero n<m m≤0 .snd .fst .snd = ∣-refl $ sym $ ≤0→≡0 $
131- <-weaken $ <≤-trans n<m m≤0
132- euclid-helper< m n zero n<m m≤0 .snd .snd d' _ = ∣-zeroʳ d'
133- euclid-helper< zero zero (suc _) _ _ .fst = 0
134- euclid-helper< zero zero (suc _) _ _ .snd .fst .fst = ∣-refl refl
135- euclid-helper< zero zero (suc _) _ _ .snd .fst .snd = ∣-refl refl
136- euclid-helper< zero zero (suc _) _ _ .snd .snd d' _ = ∣-zeroʳ d'
137- euclid-helper< zero (suc n) (suc _) _ _ .fst = suc n
138- euclid-helper< zero (suc n) (suc _) _ _ .snd .fst .fst = ∣-zeroʳ (suc n)
139- euclid-helper< zero (suc n) (suc _) _ _ .snd .fst .snd = ∣-refl refl
140- euclid-helper< zero (suc n) (suc _) _ _ .snd .snd d' (_ , d'∣1+n) = d'∣1+n
141- euclid-helper< (suc m) zero (suc _) _ _ .fst = suc m
142- euclid-helper< (suc m) zero (suc _) _ _ .snd .fst .fst = ∣-refl refl
143- euclid-helper< (suc m) zero (suc _) _ _ .snd .fst .snd = ∣-zeroʳ (suc m)
144- euclid-helper< (suc m) zero (suc _) _ _ .snd .snd d' (d'∣1+m , _) = d'∣1+m
145- euclid-helper< m@(suc _) n@(suc n-1) (suc f) n<m m≤1+f =
146- let
147- n≤f = predℕ-≤-predℕ $ <≤-trans n<m m≤1+f
148- r = euclid-helper< n (m % n) f (%< n-1 m) n≤f
149- in
150- r .fst , stepGCD (r .snd)
127+ private
128+ euclid-helper< : (m n f : ℕ) → (n < m) → (m ≤ f) → GCD m n
129+ euclid-helper< m n zero n<m m≤0 .fst = 0
130+ euclid-helper< m n zero n<m m≤0 .snd .fst .fst = ∣-refl $ sym $ ≤0→≡0 m≤0
131+ euclid-helper< m n zero n<m m≤0 .snd .fst .snd = ∣-refl $ sym $ ≤0→≡0 $
132+ <-weaken $ <≤-trans n<m m≤0
133+ euclid-helper< m n zero n<m m≤0 .snd .snd d' _ = ∣-zeroʳ d'
134+ euclid-helper< zero zero (suc _) _ _ .fst = 0
135+ euclid-helper< zero zero (suc _) _ _ .snd .fst .fst = ∣-refl refl
136+ euclid-helper< zero zero (suc _) _ _ .snd .fst .snd = ∣-refl refl
137+ euclid-helper< zero zero (suc _) _ _ .snd .snd d' _ = ∣-zeroʳ d'
138+ euclid-helper< zero (suc n) (suc _) _ _ .fst = suc n
139+ euclid-helper< zero (suc n) (suc _) _ _ .snd .fst .fst = ∣-zeroʳ (suc n)
140+ euclid-helper< zero (suc n) (suc _) _ _ .snd .fst .snd = ∣-refl refl
141+ euclid-helper< zero (suc n) (suc _) _ _ .snd .snd d' (_ , d'∣1+n) = d'∣1+n
142+ euclid-helper< (suc m) zero (suc _) _ _ .fst = suc m
143+ euclid-helper< (suc m) zero (suc _) _ _ .snd .fst .fst = ∣-refl refl
144+ euclid-helper< (suc m) zero (suc _) _ _ .snd .fst .snd = ∣-zeroʳ (suc m)
145+ euclid-helper< (suc m) zero (suc _) _ _ .snd .snd d' (d'∣1+m , _) = d'∣1+m
146+ euclid-helper< m@(suc _) n@(suc n-1) (suc f) n<m m≤1+f =
147+ let
148+ n≤f = predℕ-≤-predℕ $ <≤-trans n<m m≤1+f
149+ r = euclid-helper< n (m % n) f (%< n-1 m) n≤f
150+ in
151+ r .fst , stepGCD (r .snd)
151152
152153euclid : ∀ m n → GCD m n
153154euclid m zero = m , (∣-refl refl , ∣-zeroʳ m) , λ d' (d'∣m , _) → d'∣m
0 commit comments