В большинстве систем типов правила типов работают вместе, чтобы определить суждения о форме:
Γ ⊢ e : τ
Это говорит о том, что в контексте выражение e имеет тип τ . Г - отображение свободных переменных е в их типы.Γеτ
Γе
Система типов будет состоять из набора аксиом и правил (формальная система правил вывода , как указывает Рафаэль).
Аксиома имеет форму
Γ ⊢ e : τ
Это говорит о том, что суждение выполняется (всегда).Γ ⊢ e : τ
Примером является
х : т⊢ х : τ
который утверждает, что в предположении, что тип переменной равен τ , то выражение x имеет тип τ .ИксτИксτ
Правила вывода берут факты, которые уже были определены, и строят из них более крупные факты. Например, правило вывода
Γ ⊢ e1: τ→ τ'Γ ⊢ e2: τΓ ⊢ e1 е2: τ'
говорит, что если у меня есть вывод факта и вывод факта Γ ⊢ e 2 : τ , то я могу получить вывод факта Γ ⊢ e 1 e 2 : τ ′ , В данном случае это правило для набора функций приложения.Γ ⊢ e1: τ→ τ'Γ ⊢ e2: τΓ ⊢ e1 е2: τ'
Есть два способа прочтения этого правила:
- сверху вниз - учитывая два выражения (функция и другое выражение) и некоторые ограничения на их тип, мы можем создать другое выражение (применение функции к выражению) с данным типом.
- снизу вверх - с учетом выражения, которое, в данном случае, является применением функции к какому-либо выражению, способ, которым это типизируется, заключается в том, чтобы сначала ввести два выражения, гарантируя, что их типы удовлетворяют некоторым ограничениям, а именно то, что первое является тип функции и что второй имеет тип аргумента функции.
Γλ
Γ x : τ⊢ е : τ'Γ ⊢ λ x . е : т→ τ'
Правила вывода применяются индуктивно на основе синтаксиса рассматриваемого выражения для формирования деривационного дерева. На листьях дерева (вверху) будут аксиомы, а ветви будут формироваться путем применения правил вывода. В самом низу дерева находится выражение, которое вы хотите набрать.
λ f, λ x . е Икс
е: τ→ τ', х : т⊢ ф: τ→ τ'е: τ→ τ', х : т⊢ х : τе: τ→ τ', х : т⊢ ф х : т'е: τ→ τ'X λ x . е х : т'F λ f, λ x . е х : т'
Обе книги очень всеобъемлющие, но они начинаются медленно, закладывая прочную основу.