У меня есть график с объектами и стрелками, и из этого я определил понятие пути стрелок. Я хочу определить конкатенацию этих путей. Следующий код - моя наивная попытка. Но я получаю сообщение об ошибке, когда p'
равно emptyPath
в предложении match
: «Термин« p »имеет тип« путь A B », в то время как ожидается, что он будет иметь тип « путь A C ». ' Концептуально не должно быть проблем, так как в этом случае B
равно C
. Как я могу заставить это работать?Конкатенация зависимого типа в Coq
Parameter Object : Set.
Parameter Arrow : Object -> Object -> Set.
Inductive path : Object -> Object -> Set :=
emptyPath : forall X, path X X
| cons : forall {A B C} (p : path A B) (f : Arrow B C), path A C.
Fixpoint concat {A B C : Object} (p : path A B) (p' : path B C) : path A C :=
match p' return path A C with
| emptyPath _ => p
| cons _ _ _ p0 f => cons (concat p p0) f
end.