Я реализую простой язык с надписью, похожий на один описанный Леннартом Августсоном, а также используя 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
мне не нужно создавать новые имена.
Есть ли альтернативное решение, которое мне не хватает?