Skip to content

Instantly share code, notes, and snippets.

@ckoparkar
Created November 14, 2016 17:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ckoparkar/7891a5253d637d28cb5de094fde69b6a to your computer and use it in GitHub Desktop.
Save ckoparkar/7891a5253d637d28cb5de094fde69b6a to your computer and use it in GitHub Desktop.
data Parity : ℕ -> Set where
even : (k : ℕ) -> Parity (k * 2)
odd : (k : ℕ) -> Parity (1 + k * 2)
parity : (n : ℕ) -> Parity n
parity zero = even zero
parity (succ n) with parity n
parity (succ .(k * 2)) | even k = odd k
parity (succ .(1 + k * 2)) | odd k = even (succ k)
power : ℕ -> ℕ -> ℕ
power m zero = 1
power m (succ n) with parity n
power m (succ .(k * 2)) | even k = power (m * m) k
power m (succ .(1 + k * 2)) | odd k = m * (power (m * m) k)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment