Эти правила ввода присутствуют на "О выразительности элементарной линейной логики: характеризующей 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 !Aprovest has type B, то этот контекст, расширенный с помощьюx has type !A, доказывает замену всех вхожденийx1иx2наxвtимеет типB. (Еще одно правило для подстановки, похоже? Но почему есть два термина выше, один термин ниже? Кроме того, почему те!s? Где все это будет отображаться на контроле типа?)
Я вполне понимаю, что эти правила хотят сказать, но я что-то пропустил, прежде чем он действительно щелкнет, и я смогу реализовать соответствующий тип проверки. Как я могу подойти к пониманию этих правил?
