Я реализую простой язык с надписью, похожий на один описанный Леннартом Августсоном, а также используя bound для управления привязками.
Когда typechecking зависимый лямбда-член, например λt:* . λx:t . x, мне нужно:
- "Enter" внешнее лямбда-связующее, путем создания экземпляра
tчему-то - Typecheck
λx:t . x, дающий∀x:t . t - Pi-abstract
t, дающий∀t:* . ∀x:t . t
Если lambda не зависела, мне удалось избежать создания экземпляра t с его типом на шаге 1, так как тип все, что мне нужно знать о переменной, в то время как typechecking на шаге 2.
Но на шаге 3 мне не хватает информации, чтобы решить, какие переменные абстрагироваться.
Я мог бы ввести новое предложение имени и создать экземпляр t с помощью Bound.Name.Name, содержащего как тип, так и уникальное имя. Но я думал, что с bound мне не нужно создавать новые имена.
Есть ли альтернативное решение, которое мне не хватает?