Parity.agda 683 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. {-
  2. Types Summer School 2007
  3. Bertinoro
  4. Aug 19 - 31, 2007
  5. Agda
  6. Ulf Norell
  7. -}
  8. module Parity where
  9. open import Nat
  10. -- Parity n tells us whether n is even or odd.
  11. data Parity : Nat -> Set where
  12. even : (k : Nat) -> Parity (2 * k)
  13. odd : (k : Nat) -> Parity (2 * k + 1)
  14. -- Every number is either even or odd.
  15. parity : (n : Nat) -> Parity n
  16. parity zero = even zero
  17. parity (suc n) with parity n
  18. parity (suc .(2 * k)) | even k = {! !}
  19. parity (suc .(2 * k + 1)) | odd k = {! !}
  20. half : Nat -> Nat
  21. half n with parity n
  22. half .(2 * k) | even k = k
  23. half .(2 * k + 1) | odd k = k