25 lines
563 B
Plaintext
25 lines
563 B
Plaintext
module Equality
|
|
|
|
data Eq : {A : U} -> A -> A -> U where
|
|
Refl : {A : U} {a : A} -> Eq a a
|
|
|
|
-- Some magic is not happening here.
|
|
|
|
sym : {A : U} {x y : A} -> Eq x y -> Eq y x
|
|
sym Refl = Refl
|
|
|
|
trans : {A : U} {x y z : A} -> Eq x y -> Eq y z -> Eq x z
|
|
trans Refl Refl = Refl
|
|
|
|
coerce : {A B : U} -> Eq A B -> A -> B
|
|
coerce Refl a = a
|
|
|
|
J : {A : U} ->
|
|
{C : (x y : A) -> Eq x y -> U} ->
|
|
(c : (x : _) -> C x x Refl) ->
|
|
(x y : A) ->
|
|
(p : Eq x y) ->
|
|
C x y p
|
|
-- this was failing until I constrained scrutinee to the constructor + args
|
|
J c x y Refl = c x
|