Термины как типы в Coq

Parameter R: Type.
Parameter P: R.
Parameter O: P. (*Error: The term "P" has type "R" which should be Set, Prop or Type.*)

не работает, потому что термины не могут иметь термины в Coq. Как мы можем обойти это ограничение? Можно представить несколько возможностей: параметризация, типы подмножеств, классы, записи, ансамбли, явные уровни юниверсов... Мой вопрос касается рекомендуемого и самого простого способа (ов) реализации терминов в виде типов в Coq (вместе с MWE). PS. Я не предполагаю, что "рекомендуемое" и "самое простое" совпадают.

Простой пример будет

Parameter Obj: Type.
Parameter Phy Int: Obj. (*physical, intelligent*)
Parameter tree house: Phy.

1 ответ

Ответ, основанный на предложении и последующем полуобращении @ejgallego:

Let Obj := Type.
Let Phy:Obj := Type.
Let tree:Phy := Type.
Parameter house branch leaf: Phy.  
Let oak:tree := Type.
Let moldyoak:oak := Type.
Parameter moldyoak1:moldyoak.
Parameter moldyoak11:moldyoak1.

Решение является последовательным, но необоснованным:

Check nat:moldyoak. (*(nat:moldyoak) : moldyoak*)

Итак, мы ищем еще один

Другие вопросы по тегам