У меня есть этот примерИдрис переписывает тактик не работает, как ожидалось
o : Type
Hom : o -> o -> Type
Id : (a : o) -> Hom a a
Comp : Hom a b -> Hom b c -> Hom a c
IdRight : (f : Hom a b) -> Comp f (Id b) = f
IdLeft : (f : Hom a b) -> Comp (Id a) f = f
Assoc : (f : Hom a b) ->
(g : Hom b c) ->
(h : Hom c d) ->
Comp f (Comp g h) = Comp (Comp f g) h
EqId : (f : Hom a b) ->
(g : Hom b a) ->
(h : Hom b a) ->
Comp f g = Id a ->
Comp h f = Id b ->
g = h
EqId = ?EqIdProof
И я пытаюсь использовать тактику в таком порядке, чтобы сделать Свидетельство
1. intro a, b, f, g, h, fg, hf
2. rewrite IdLeft g
3. rewrite hf
4. rewrite Assoc h f g
Так четыре шага на самом деле ничего не делает. Также он ничего не делает с sym
. Что я делаю неправильно? Возможно ли, что в самом Идрисе есть ошибка?
Тогда зачем переписывать работу для 'IdLeft' и не работает для' Assoc'? Когда я не пишу декларации, я ожидаю, что объявления типа ведут себя как аксиомы. –