Datoid.agda 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. module Datoid where
  2. import Equiv
  3. import Prelude
  4. open Equiv
  5. open Prelude
  6. data Datoid : Set1 where
  7. datoid : (a : Set) -> DecidableEquiv a -> Datoid
  8. El : Datoid -> Set
  9. El (datoid a _) = a
  10. datoidEq : (a : Datoid) -> DecidableEquiv (El a)
  11. datoidEq (datoid _ eq) = eq
  12. datoidRel : (a : Datoid) -> El a -> El a -> Set
  13. datoidRel d = rel' (datoidEq d)
  14. datoidDecRel : (a : Datoid) -> (x y : El a)
  15. -> Either (datoidRel a x y) (Not (datoidRel a x y))
  16. datoidDecRel d = decRel (datoidEq d)
  17. dRefl : (a : Datoid) -> {x : El a} -> datoidRel a x x
  18. dRefl a = refl (datoidEq a)
  19. dSym : (a : Datoid) -> {x y : El a}
  20. -> datoidRel a x y -> datoidRel a y x
  21. dSym a = sym (datoidEq a)
  22. dTrans : (a : Datoid) -> {x y z : El a}
  23. -> datoidRel a x y -> datoidRel a y z -> datoidRel a x z
  24. dTrans a = trans (datoidEq a)
  25. data Respects (a : Datoid) (P : El a -> Set) : Set where
  26. respects : ((x y : El a) -> datoidRel a x y -> P x -> P y) -> Respects a P
  27. subst : {a : Datoid} -> {P : El a -> Set} -> Respects a P
  28. -> (x y : El a) -> datoidRel a x y -> P x -> P y
  29. subst (respects f) = f
  30. pairDatoid : (a b : Datoid) -> Datoid
  31. pairDatoid a b = datoid (Pair (El a) (El b))
  32. (pairEquiv (datoidEq a) (datoidEq b))