Skip to content

Instantly share code, notes, and snippets.

@oxij
Created July 13, 2012 02:30
Show Gist options
  • Save oxij/3102331 to your computer and use it in GitHub Desktop.
Save oxij/3102331 to your computer and use it in GitHub Desktop.
nested-recursion == recursion with accumulator for all arguments
-- The trick for proving that nested-recursion == recursion with accumulator for all arguments (in Agda).
-- Example for Nat. Should be generalizable.
module NumTest where
import Level
data _≡_ {α} {A : Set α} (a : A) : A Set α where
refl : a ≡ a
≡-sym : {α} {τ : Set α} {a b : τ} a ≡ b b ≡ a
≡-sym refl = refl
_~_ : {α} {τ : Set α} {a b c : τ} a ≡ b b ≡ c a ≡ b
refl ~ refl = refl
_~1_ : {α} {τ : Set α} {a b b' : τ} b ≡ a b ≡ b' b' ≡ a
refl ~1 refl = refl
_~2_ : {α} {τ : Set α} {a b b' : τ} a ≡ b b ≡ b' a ≡ b'
refl ~2 refl = refl
cong : {α β} {A : Set α} {B : Set β} (f : A B) {x y} x ≡ y f x ≡ f y
cong f refl = refl
data : Set where
zero :
succ :
_+_ :
zero + m = m
(succ n) + m = succ (n + m)
_x_ :
zero x m = m
(succ n) x m = n x (succ m)
infix 10 _≡_
infix 20 _+_
infix 20 _x_
one = succ zero
temp : n m n x succ m ≡ succ (n x m)
temp zero m = refl
temp (succ n) m = temp n (succ m) ~1 refl
samee : n m (n + m) ≡ (n x m)
samee zero m = refl
samee (succ n) m = cong succ (samee n m) ~2 ≡-sym (temp n m)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment