Почему я не могу определить более явный вариант гетерогенного равенства, как это:Почему я не могу определить `Eq`, используя только индексы в Agda?
data Eq : (A : Set) -> A -> A -> Set where
Refl : (T : Set) -> (x : T) -> Eq T x x
Когда я так, я получаю следующее сообщение об ошибке:
The type of the constructor does not fit in the sort of the
datatype, since Set₁ is not less or equal than Set
when checking the constructor Refl in the declaration of Eq
Я знаю, что эта ошибка есть что-то делать с вселенской иерархией, но я не знаю, что именно. Думает ли это, что Eq T x x
должен быть Set_1
, или что это такое, но этого не должно быть? Почему что-то здесь Set_1
?
Это 'Set1', потому что ваш конструктор количественно определяет' Set'. – Vitus
Проверьте [The Agda Wiki] (http://wiki.portal.chalmers.se/agda/pmwiki.php?n=ReferenceManual.UniversePolymorphism) (хотя он содержит несколько вводящее в заблуждение утверждение, что '(n: Level) → Set n 'не принадлежит какой-либо юниверсе, но он принадлежит одному - [супер-вселенной] (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.221.1318&rep=rep1&type=pdf) к которому вы не можете получить доступ из Агда, но который существует в метатеории). – user3237465
Кроме того, с новыми версиями Agda ваш код typechecks, потому что Agda делает какую-то форму woodoo в соответствии с уровнями юниверса в объявлениях данных, однако я не могу найти в этом ничего конкретного. – user3237465