SomeBasicStuff.agda 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. -- Some basic stuff for Conor's talk.
  2. module SomeBasicStuff where
  3. infixr 40 _::_ _↦_∣_
  4. infix 30 _∈_ _==_
  5. infixr 10 _,_
  6. data _==_ {A : Set}(x : A) : A -> Set where
  7. refl : x == x
  8. data Σ (A : Set)(B : A -> Set) : Set where
  9. _,_ : (x : A) -> B x -> Σ A B
  10. _×_ : Set -> Set -> Set
  11. A × B = Σ A \_ -> B
  12. fst : {A : Set}{B : A -> Set} -> Σ A B -> A
  13. fst (x , y) = x
  14. snd : {A : Set}{B : A -> Set}(p : Σ A B) -> B (fst p)
  15. snd (x , y) = y
  16. data False : Set where
  17. record True : Set where
  18. data Nat : Set where
  19. zero : Nat
  20. suc : Nat -> Nat
  21. data [_] (A : Set) : Set where
  22. [] : [ A ]
  23. _::_ : A -> [ A ] -> [ A ]
  24. data _∈_ {A : Set} : A -> [ A ] -> Set where
  25. zero : forall {x xs} -> x ∈ x :: xs
  26. suc : forall {x y xs} -> x ∈ xs -> x ∈ y :: xs
  27. postulate Tag : Set
  28. {-# BUILTIN STRING Tag #-}
  29. Enumeration = [ Tag ]
  30. data Enum (ts : Enumeration) : Set where
  31. enum : (t : Tag) -> t ∈ ts -> Enum ts
  32. data Table (A : Set1) : Enumeration -> Set1 where
  33. [] : Table A []
  34. _↦_∣_ : forall {ts} -> (t : Tag) -> A -> Table A ts ->
  35. Table A (t :: ts)
  36. lookup : forall {A ts} -> Table A ts -> Enum ts -> A
  37. lookup [] (enum _ ())
  38. lookup (.t ↦ v ∣ tbl) (enum t zero) = v
  39. lookup (_ ↦ v ∣ tbl) (enum t (suc p)) = lookup tbl (enum t p)