Forcing.agda 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. module Forcing where
  2. open import Common.IO
  3. open import Common.Unit
  4. open import Lib.Vec
  5. open import Common.Nat
  6. len : {A : Set}{n : Nat} → Vec A n → Nat
  7. len {A} .{zero} [] = zero
  8. len {A} .{suc n} (_∷_ {n} x xs) = suc n
  9. len2 : {A : Set}{n : Nat} → Vec A n → Nat
  10. len2 [] = 0
  11. len2 (_∷_ {n} x xs) = suc (len2 {n = n} xs)
  12. len3 : {A : Set}{n : Nat} → Vec A n → Nat
  13. len3 {n = zero} [] = zero
  14. len3 {n = suc n} (_∷_ .{n} x xs) = suc n
  15. len4 : {A : Set}{n : Nat} → Vec A n → Nat
  16. len4 [] = zero
  17. len4 (_∷_ {zero} x xs) = suc zero
  18. len4 (_∷_ {suc n} x xs) = suc (suc n)
  19. main : IO Unit
  20. main =
  21. printNat (len l1) ,,
  22. printNat (len l2) ,,
  23. printNat (len l3) ,,
  24. printNat (len2 l1) ,,
  25. printNat (len2 l2) ,,
  26. printNat (len2 l3) ,,
  27. printNat (len3 l1) ,,
  28. printNat (len3 l2) ,,
  29. printNat (len3 l3) ,,
  30. printNat (len4 l1) ,,
  31. printNat (len4 l2) ,,
  32. printNat (len4 l3) ,,
  33. return unit
  34. where l1 = "a" ∷ ("b" ∷ ("c" ∷ []))
  35. l2 = 1 ∷ (2 ∷ (3 ∷ (4 ∷ (5 ∷ []))))
  36. l3 : Vec Nat zero
  37. l3 = []