У меня есть следующее определение равенства:
data Equal : x -> y -> Type where
Reflexive : Equal a a
Когда я хочу использовать синтаксис rewrite
, мне нужно что-то типа (a = b)
, поэтому я создал:
makeEquitable : Equal x y -> x = y
makeEquitable Reflexive = Refl
Теперь я могу делать makeEquitable (_ : Equal a b)
, которые затем могу использовать для rewrite
вещей. Я хотел бы упростить это, и я изучил replace
, который я действительно не понимаю replace : (x = y) -> P x -> P y
. Я полагаю, что эта P
вещь является встроенным свойством Идриса - как мне сделать такую функцию для моего собственного определения Equality
- можно ли также «встроить» что-то особенное, чтобы rewrite
волшебным образом работало для Equal a b
?