Relations.agda 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. module Logic.Relations where
  2. import Logic.Base
  3. import Data.Bool
  4. Rel : Set -> Set1
  5. Rel A = A -> A -> Set
  6. Reflexive : {A : Set} -> Rel A -> Set
  7. Reflexive {A} _R_ = (x : A) -> x R x
  8. Symmetric : {A : Set} -> Rel A -> Set
  9. Symmetric {A} _R_ = (x y : A) -> x R y -> y R x
  10. Transitive : {A : Set} -> Rel A -> Set
  11. Transitive {A} _R_ = (x y z : A) -> x R y -> y R z -> x R z
  12. Congruent : {A : Set} -> Rel A -> Set
  13. Congruent {A} _R_ = (f : A -> A)(x y : A) -> x R y -> f x R f y
  14. Substitutive : {A : Set} -> Rel A -> Set1
  15. Substitutive {A} _R_ = (P : A -> Set)(x y : A) -> x R y -> P x -> P y
  16. module PolyEq (_≡_ : {A : Set} -> Rel A) where
  17. Antisymmetric : {A : Set} -> Rel A -> Set
  18. Antisymmetric {A} _R_ = (x y : A) -> x R y -> y R x -> x ≡ y
  19. module MonoEq {A : Set}(_≡_ : Rel A) where
  20. Antisymmetric : Rel A -> Set
  21. Antisymmetric _R_ = (x y : A) -> x R y -> y R x -> x ≡ y
  22. open Logic.Base
  23. Total : {A : Set} -> Rel A -> Set
  24. Total {A} _R_ = (x y : A) -> (x R y) \/ (y R x)
  25. Decidable : (P : Set) -> Set
  26. Decidable P = P \/ ¬ P