Nom.agda 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. module Nom where
  2. open import Basics
  3. open import Pr
  4. data Nom : Set where
  5. Ze : Nom
  6. Su : Nom -> Nom
  7. Pu : Nom -> Nom
  8. _NomQ_ : Nom -> Nom -> Pr
  9. Ze NomQ Ze = tt
  10. Ze NomQ (Su y) = ff
  11. Ze NomQ (Pu y) = ff
  12. (Su x) NomQ Ze = ff
  13. (Su x) NomQ (Su y) = x eq y
  14. (Su x) NomQ (Pu y) = ff
  15. (Pu x) NomQ Ze = ff
  16. (Pu x) NomQ (Su y) = ff
  17. (Pu x) NomQ (Pu y) = x eq y
  18. nomQ : {x y : Nom} -> [| (x eq y) => (x NomQ y) |]
  19. nomQ {Ze} refl = _
  20. nomQ {Su x} refl = refl
  21. nomQ {Pu x} refl = refl
  22. nomEq : (x y : Nom) -> Decision (x eq y)
  23. nomEq Ze Ze = yes refl
  24. nomEq Ze (Su y) = no nomQ
  25. nomEq Ze (Pu y) = no nomQ
  26. nomEq (Su x) Ze = no nomQ
  27. nomEq (Su x) (Su y) with nomEq x y
  28. nomEq (Su x) (Su .x) | yes refl = yes refl
  29. nomEq (Su x) (Su y) | no p = no (p o nomQ)
  30. nomEq (Su x) (Pu y) = no nomQ
  31. nomEq (Pu x) Ze = no nomQ
  32. nomEq (Pu x) (Su y) = no nomQ
  33. nomEq (Pu x) (Pu y) with nomEq x y
  34. nomEq (Pu x) (Pu .x) | yes refl = yes refl
  35. nomEq (Pu x) (Pu y) | no p = no (p o nomQ)
  36. data Nat : Set where
  37. ze : Nat
  38. su : Nat -> Nat
  39. pfog : Nom -> Nat
  40. pfog Ze = ze
  41. pfog (Su x) = pfog x
  42. pfog (Pu x) = su (pfog x)
  43. NatGE : Nat -> Nat -> Bool
  44. NatGE ze _ = false
  45. NatGE (su _) ze = true
  46. NatGE (su x) (su y) = NatGE x y
  47. _>_ : Nat -> Nat -> Pr
  48. x > y = So (NatGE x y)
  49. _>?_ : (x y : Nat) -> Decision (x > y)
  50. x >? y = so (NatGE x y)
  51. _P>_ : Nom -> Nom -> Pr
  52. x P> y = pfog x > pfog y
  53. _S+_ : Nat -> Nom -> Nom
  54. ze S+ y = y
  55. su x S+ y = Su (x S+ y)
  56. PSlem : (n : Nat)(x : Nom) -> Id (pfog (n S+ x)) (pfog x)
  57. PSlem ze x = refl
  58. PSlem (su n) x = PSlem n x
  59. Plem : (x y : Nom) -> [| x P> y |] -> [| Pu x P> y |]
  60. Plem _ Ze p = _
  61. Plem x (Su y) p = Plem x y p
  62. Plem Ze (Pu y) ()
  63. Plem (Su x) (Pu y) p = Plem x (Pu y) p
  64. Plem (Pu x) (Pu y) p = Plem x y p
  65. asym : (x : Nom) -> [| ∼ (x P> x) |]
  66. asym Ze ()
  67. asym (Su x) p = asym x p
  68. asym (Pu x) p = asym x p
  69. record Nominal (X : Set) : Set1 where
  70. field
  71. Everywhere : Pow Nom -> Pow X
  72. everywhere : (P Q : Pow Nom) -> [| P ==> Q |] ->
  73. [| Everywhere P ==> Everywhere Q |]