Почему ограничение уровня юниверса ведет себя по-разному между индуктивным семейством и параметризованным индуктивным типом без аксиомы K в agda

#types #programming-languages #agda #dependent-type #homotopy-type-theory

#типы #языки программирования #agda #зависимый тип #теория гомотопического типа

Вопрос:

Наблюдение при определении List в agda с --without-K включенным:

Принимается следующее параметризованное индуктивное определение:

 data List (A : Set) : Set where
    [] : List A
    _::_ : A → List A → List A
 

но не эквивалентное определение индуктивного семейства:

 data List' : Set → Set where 
    []'  : {A : Set} → List' A
    _::'_ : {A : Set} → A → List' A → List' A
 

Сообщение об ошибке Set₁ is not less or equal than Set , поэтому я должен изменить тип с List' : Set → Set List' : Set → Set₁ на, чтобы он проверял тип. Если я отключу --without-K , то agda также правильно проверяет тип.

Я попытался выяснить, почему это так, например, на странице https://agda.readthedocs.io/en/latest/language/without-k.html в нем говорится: «Когда --without-K этот параметр включен, некоторые индексированные типы данных должны быть определены на более высоком уровне юниверса. В частности, типы всех индексов должны соответствовать типу типа данных. » Но в нем не говорится о причине такой разницы между определением индуктивного семейства (индексированных типов данных) и параметризованным индуктивным определением. Я предполагаю, что это как-то связано с интерпретацией гомотопической модели базовой теории типов. Однако я хочу знать, какая «плохая» вещь произойдет, если индуктивное семейство живет в меньшей вселенной (синтаксис и семантика). И как параметризованное индуктивное определение позволяет избежать такой проблемы?