Eq.agda 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. ------------------------------------------------------------------------
  2. -- Equivalence relations
  3. ------------------------------------------------------------------------
  4. module Eq where
  5. infix 4 _≡_
  6. ------------------------------------------------------------------------
  7. -- Definition
  8. record Equiv {a : Set} (_≈_ : a -> a -> Set) : Set where
  9. field
  10. refl : forall x -> x ≈ x
  11. sym : forall {x y} -> x ≈ y -> y ≈ x
  12. _`trans`_ : forall {x y z} -> x ≈ y -> y ≈ z -> x ≈ z
  13. ------------------------------------------------------------------------
  14. -- Propositional equality
  15. data _≡_ {a : Set} (x : a) : a -> Set where
  16. refl : x ≡ x
  17. subst : forall {a x y} ->
  18. (P : a -> Set) -> x ≡ y -> P x -> P y
  19. subst _ refl p = p
  20. cong : forall {a b x y} ->
  21. (f : a -> b) -> x ≡ y -> f x ≡ f y
  22. cong _ refl = refl
  23. Equiv-≡ : forall {a} -> Equiv {a} _≡_
  24. Equiv-≡ {a} =
  25. record { refl = \_ -> refl
  26. ; sym = sym
  27. ; _`trans`_ = _`trans`_
  28. }
  29. where
  30. sym : {x y : a} -> x ≡ y -> y ≡ x
  31. sym refl = refl
  32. _`trans`_ : {x y z : a} -> x ≡ y -> y ≡ z -> x ≡ z
  33. refl `trans` refl = refl