Это невозможно. Между индуктивными типами нет структурной эквивалентности. Используя дважды Include
, вы создаете два разных типа. У них совпадают имена, но это просто совпадение.
В общем, индуктивные типы плохо поддерживаются модульной системой. Каждый раз, когда вы пробуете что-то необычное, Coq будет жаловаться, что «ядро еще не распознает, что параметр может быть создан с помощью индуктивного типа».
Как правило, я предлагаю всегда определять индуктивный тип. типы вне функторов модуля. Я полагаю, что ваш тип foo
будет зависеть от некоторого свойства модуля s
, поэтому вам нужно сделать его немного более общим c:
Module Type S.
Axiom t : Type.
End S.
Inductive foo (t : Type) : Type := a : t -> foo t.
Module F (s : S).
Definition foo := foo s.t.
End F.