Эти правила ввода присутствуют на "О выразительности элементарной линейной логики: характеризующей Ptime и экспоненциальную иерархию времени" :
Из "Какую часть Милнера-Хиндли вы не понимаете?" Вопрос "Переполнение стека", я могу прочитать некоторые из них на английском языке, но все еще сложно чтобы выяснить, как сделать контролер типа из этого. Это моя попытка прочитать первые 4 правила:
-
Ax: как аксиома, если x имеет тип A, то x имеет тип A. (Это не очевидно?)
-
Вырезать. Если контекст
Γ
доказываетt has type A
, а другой контекст∆
, расширенный с помощью утвержденияx has type A
, доказываетu has type B
, то эти два контекста вместе, докажите, что замена всех вхожденийx
наt
вu
имеет типB
. (Что это значит, однако? Почему существуют два контекста, из которых возникает дополнительный, также как правило для замены, но как, если подстановка не является термином, а является ли операция? Классический Milner- У Хиндли нет ничего подобного: у него просто очень простое правило для приложения.) -
Слабый. Если контекст доказывает
t has type A
, то этот контекст, расширенный с помощью выраженияx has type B
, все еще доказываетt has type A
. (Опять же, это не так очевидно?) -
Contr: если контекст, расширенный с помощью
x1 has type !A
иx2 has type !A
provest has type B
, то этот контекст, расширенный с помощьюx has type !A
, доказывает замену всех вхожденийx1
иx2
наx
вt
имеет типB
. (Еще одно правило для подстановки, похоже? Но почему есть два термина выше, один термин ниже? Кроме того, почему те!
s? Где все это будет отображаться на контроле типа?)
Я вполне понимаю, что эти правила хотят сказать, но я что-то пропустил, прежде чем он действительно щелкнет, и я смогу реализовать соответствующий тип проверки. Как я могу подойти к пониманию этих правил?