Identity.agda 954 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. module Logic.Identity where
  2. open import Logic.Equivalence
  3. open import Logic.Base
  4. infix 20 _≡_ _≢_
  5. data _≡_ {A : Set}(x : A) : A -> Set where
  6. refl : x ≡ x
  7. subst : {A : Set}(P : A -> Set){x y : A} -> x ≡ y -> P y -> P x
  8. subst P {x} .{x} refl px = px
  9. sym : {A : Set}{x y : A} -> x ≡ y -> y ≡ x
  10. sym {A} refl = refl
  11. trans : {A : Set}{x y z : A} -> x ≡ y -> y ≡ z -> x ≡ z
  12. trans {A} refl xz = xz
  13. cong : {A B : Set}(f : A -> B){x y : A} -> x ≡ y -> f x ≡ f y
  14. cong {A} f refl = refl
  15. cong2 : {A B C : Set}(f : A -> B -> C){x z : A}{y w : B} -> x ≡ z -> y ≡ w -> f x y ≡ f z w
  16. cong2 {A}{B} f refl refl = refl
  17. Equiv : {A : Set} -> Equivalence A
  18. Equiv = record
  19. { _==_ = _≡_
  20. ; refl = \x -> refl
  21. ; sym = \x y -> sym
  22. ; trans = \x y z -> trans
  23. }
  24. _≢_ : {A : Set} -> A -> A -> Set
  25. x ≢ y = ¬ (x ≡ y)
  26. sym≢ : {A : Set}{x y : A} -> x ≢ y -> y ≢ x
  27. sym≢ np p = np (sym p)