Hindley-Milner의 어떤 부분을 이해하지 못합니까?


850

나는 불멸의 말을 특징으로하는 판매용 티셔츠 가 있다고 맹세합니다 .


어떤 부분

힌들리 밀너

당신은 이해 하지 합니까?


제 경우에는 대답은 ... 전부일 것입니다!

특히 Haskell 논문에서 이와 같은 표기법을 자주 볼 수 있지만 그 의미가 무엇인지 전혀 알 수 없습니다. 나는 수학의 어느 지점이 될지 모른다.

나는 물론 그리스 알파벳의 글자와 "∉"와 같은 기호를 인식합니다.

다른 한편으로, 나는 전에 "⊢"를 본 적이 없다 ( Wikipedia는 그것이 "파티션"을 의미한다고 주장한다 ). 나는 또한 vinculum의 사용에 익숙하지 않습니다. (일반적으로, 그것은 일부이고,하지만하지 않습니다 나타납니다 여기에 사건을합니다.)

누군가가이 상징의 바다가 무엇을 의미하는지 이해하기 시작하는 곳을 말해 줄 수 있다면 도움이 될 것입니다.


8
당신이하면 되는 알고리즘의 좋은 설명, 내가 지금까지 찾은 것을 최선을 찾고 슈리 람 크리슈나 머티의 장 (30)에 프로그래밍 언어 : 응용 프로그램 및 해석 (! 라이센스 CC).
laslowh

2
@laslowh 감사합니다! 읽고 있어요 최신 버전 : cs.brown.edu/courses/cs173/2012/book/book.pdf
SnowOnion

답변:


652
  • 수평 막대 "[위의 즉 수단 을 의미한다 [이하]".
  • 이 경우 여러 표현 [위]에서, 그때 그들을 고려 AND로 함께; [아래]를 보장하려면 [위]의 모든 내용이 사실이어야합니다.
  • :수단 은 유형이 있습니다
  • 의미 는입니다 . (마찬가지로 "없음"을 의미합니다.)
  • Γ일반적으로 환경 이나 상황 을 나타내는 데 사용됩니다 . 이 경우 식별자를 형식과 쌍을 이루는 형식 주석 집합으로 생각할 수 있습니다. 따라서 x : σ ∈ Γ환경에 유형이 Γ있는 사실이 포함됨을 의미합니다 .xσ
  • 증명 하거나 결정한 대로 읽을 수 있습니다 . Γ ⊢ x : σ환경에 Γ따라 x유형이 결정 σ됩니다.
  • ,특정 추가 가정을 환경 에 포함 시키는 방법입니다 Γ.
    따라서, Γ, x : τ ⊢ e : τ'그 환경을 의미 Γ, 추가, 가정하에 무시 x형을 가지고τ , 그 증명 e타입을 갖는다 τ'.

요청 된대로 : 연산자 우선 순위, 최고에서 최저로 :

  • 같은 언어 별 중위와 mixfix 운영자, λ x . e, ∀ α . σ,와 τ → τ', let x = e0 in e1기능 응용 프로그램 및 공백.
  • :
  • , (왼쪽 연결)
  • 여러 제안을 분리하는 공백 (연관)
  • 가로 막대

19
연산자의 우선 순위 규칙은 무엇입니까?
Randomblue

:세트 요소를 포함하고, 유형은 의미에서 값을 포함 - 그들은 한 가지 다른 일에 포함되어 있음을 의미한다는 점에서 매우 유사합니다. 중요한 차이점은 문자 x ∈ S집합에 S문자가 포함되어 있음을 의미하는 x반면 컨텍스트에서 형식 에 거주한다고 추론 할 수 있다는 Γ ⊢ x : T의미입니다 . 이를 고려하여 Var 규칙은 다음과 같이 읽습니다.»문자 그대로 문맥에 x가 포함되어 있으면 (사소하게) 추론 할 수 있습니다«. xTΓ
David

@Randomblue 내가 예를 들어, 모든 곳에서 괄호를 추가하여 귀하의 우선 순위를 명시 적으로 만들어 (Γ,(x:τ))⊢(x:σ)overleaf.com/read/ddmnkzjtnqbd#/61990222
SnowOnion

327

이 구문은 복잡해 보이지만 실제로는 매우 단순합니다. 기본 아이디어는 형식적인 논리에서 비롯됩니다. 전체 표현은 상반부가 가정이고 하반부는 결과입니다. 즉, 상위 표현식이 참임을 알고 있으면 하위 표현식도 사실이라고 결론을 내릴 수 있습니다.

기호

명심해야 할 또 다른 사항은 일부 글자에는 전통적인 의미가 있다는 것입니다. 특히, Γ는 "컨텍스트"를 나타냅니다. 즉, 여러분이 본 다른 것들의 유형입니다. 같은 그래서 Γ ⊢ ...수단 "표현 ...당신은 모든 표현의 유형을 알고있을 때 Γ.

기호는 본질적으로 무언가를 증명할 수 있음을 의미합니다. 그래서 Γ ⊢ ...내가 증명할 수있다 "라는 문장이다 ...맥락에서가 Γ.이 문은 유형 판단이라고한다.

염두에 두어야 할 또 다른 사항은 ML 및 Scala와 마찬가지로 수학에서 유형이 x : σ임을 의미합니다 . Haskell 's처럼 읽을 수 있습니다 .xσx :: σ

각 규칙의 의미

우리가 알고있는 경우 : 그래서,이를 알고, 첫 번째 표현식은 이해하기 쉽게된다 x : σ ∈ Γ(즉, x어떤 종류가 σ어떤 맥락에서을 Γ, 우리는 알고) Γ ⊢ x : σ(에서, 즉 Γ, x유형이 있습니다 σ). 정말, 이것은 당신에게 흥미있는 것을 말하지 않습니다. 컨텍스트 사용 방법 만 알려줍니다.

다른 규칙도 간단합니다. 예를 들어 보자 [App]. 이 규칙은 두 가지 조건이있다 : e₀일부 유형의 함수 인 τ어떤 유형 τ'e₁종류의 값이다 τ. 이제 당신은 당신이 어떤 타입을 신청할 수 있는지 알게 e₀되었습니다 e₁! 잘만되면 이것은 놀라운 일이 아닙니다 :).

다음 규칙에는 새로운 구문이 더 있습니다. 특히, Γ, x : τ단지 상황 Γ과 판단으로 구성된 맥락을 의미합니다 x : τ. 우리는 변수가 있음을 알고있는 경우에 따라서, x의 유형이 τ와 표현 e형식을 가지고 τ', 우리는 또한 취하는 함수의 유형을 알고 x되돌아갑니다 e. 이것은 우리가 함수가 취하는 타입과 리턴하는 타입을 알아 낸 경우해야 할 일을 알려주기 때문에 놀라운 일이 아닙니다.

다음은 let명령문 처리 방법을 알려줍니다 . 당신은 몇 가지 표현이 알고 있다면 e₁유형을 가지고 τ만큼이 같은 x유형이있다 σ, 그 다음 let로컬 바인딩 표현 x유형의 값이 σe₁유형이를 τ. 실제로 이것은 let 문이 본질적으로 새로운 바인딩으로 컨텍스트를 확장 할 수 있음을 알려줍니다 let.

[Inst]규칙은 하위 유형을 처리합니다. type의 값이 있고이 값이 ( 부분 순서 관계를 나타내는) σ'하위 유형 인 경우 해당 표현식 유형 입니다.σσ

마지막 규칙은 일반화 유형을 다룹니다. 빠른 변수 : 자유 변수는 어떤 표현 안에서 let-statement 또는 lambda에 의해 도입되지 않은 변수입니다. 이 표현은 이제 문맥 에서 자유 변수의 값에 따라 달라집니다. 규칙은 문맥에 어떤 것이라도 "자유" α아닌 변수가 있다면 , 그 유형을 알고있는 어떤 표현이라도 말하는 것이 안전하다고 말하는 것입니다 e : σ대한 유형해야합니다 어떤 값을 α.

규칙을 사용하는 방법

이제 심볼을 이해 했으므로이 규칙으로 무엇을합니까? 이 규칙을 사용하여 다양한 값의 유형을 파악할 수 있습니다. 이렇게하려면 표현 (예 f x y:)을보고 진술과 일치하는 결론 (아래 부분)이있는 규칙을 찾으십시오. "목표"를 찾으려고하는 것을 불러 보자. 이 경우으로 끝나는 규칙을 볼 수 있습니다 e₀ e₁. 이것을 찾았 으면 이제이 규칙의 선 위에있는 모든 것을 입증하는 규칙을 찾아야합니다. 이러한 것들은 일반적으로 하위 표현식의 유형에 해당하므로 본질적으로 표현식의 일부를 반복합니다. 증명 트리를 완성 할 때까지이 작업을 수행하면 표현식 유형에 대한 증거가 제공됩니다.

따라서 이러한 모든 규칙은 표현의 유형을 파악하는 방법을 정확하게 그리고 일반적인 수학적으로 세부적으로 설명합니다.

이제 프롤로그를 사용한 적이 있다면 친숙하게 들릴 것입니다. 기본적으로 인간 프롤로그 인터프리터처럼 증거 트리를 계산하는 것입니다. 프롤로그를 "논리 프로그래밍"이라고하는 이유가 있습니다! HM 추론 알고리즘을 처음 도입 한 방법은 프롤로그에서 알고리즘을 구현하는 것입니다. 이것은 실제로 놀랍도록 간단하며 진행 상황을 명확하게 만듭니다. 꼭 시도해야합니다.

참고 : 아마도이 설명에서 약간의 실수를했으며 누군가가 지적하면 그것을 좋아할 것입니다. 실제로 몇 주 안에 수업 시간에이 내용을 다룰 것이므로 다음과 같이 확신 할 수 있습니다.


5
\ alpha는 자유 변수가 아닌 일반적인 변수가 아닙니다. 따라서 일반화 규칙을 설명하기 위해서는 훨씬 더 많은 설명이 필요합니다.
nponeccop

2
@nponeccop : 흠, 좋은 지적입니다. 나는 실제로 그 특정한 규칙을 본 적이 없다. 제대로 설명해 주시겠습니까?
Tikhon Jelvis

8
@TikhonJelvis : 실제로 매우 간단합니다 .의 자유 변수가 있기 때문에 를 (로 가정 Γ = {x : τ}) 일반화 할 수는 있지만하지는 않습니다 . HM 에 대한 Wikipedia 기사는 꽤 잘 설명합니다. λy.x : σ → τ∀ σ. σ → τ∀ τ. σ → ττΓ
비투스

7
나는 관련 답변의 일부가 [Inst]약간 부정확 하다고 생각합니다 . 이것은 지금까지 나의 이해 일 뿐이지 만 [Inst]and [Gen]규칙 의 시그마는 유형을 나타내는 것이 아니라 type-schemes를 나타 냅니다. 따라서 연산자는 OO 언어에서 알 수 있듯이 하위 입력과 관련이없는 부분 순서입니다. 다형성 값 (예 :)과 관련이 id = λx. x있습니다. 이러한 함수의 전체 구문은 다음과 같습니다 id = ∀x. λx. x. 이제, 우리는 분명히 할 수 있습니다 id2 = ∀xy. λx. x경우, y사용되지 않습니다. 그리고 id2 ⊑ id, 어떤은 무엇 [Inst]규칙을 말한다.
Ionuț G. Stan

71

누군가가이 상징의 바다가 무엇을 의미하는지 이해하기 시작하는 곳을 말해 줄 수 있다면

판단과 도출을 통한 논리 스타일에 대해서는 " 프로그래밍 언어의 실제 기초 ", 2 장 및 3 장을 참조하십시오 . 이제 전체 책 을 Amazon에서 사용할 수 있습니다.

제 2 장

귀납적 정의

귀납적 정의는 프로그래밍 언어 연구에서 없어서는 안될 도구입니다. 이 장에서는 귀납적 정의의 기본 틀을 개발하고 그 사용법에 대한 몇 가지 예를 제시 할 것입니다. 귀납적 정의는 다양한 형태의 판단 또는 주장 을 도출하기위한 일련의 규칙 으로 구성됩니다. 판단은 지정된 종류의 하나 이상의 구문 객체에 대한 진술입니다. 규칙은 판단의 타당성을 위해 필요하고 충분한 조건을 지정하므로 그 의미를 완전히 결정합니다.

2.1 판단

우리 는 구문 개념에 대한 판단 또는 주장 의 개념으로 시작 합니다. 우리는 다음과 같은 예를 포함하여 많은 형태의 판단을 활용할 것입니다.

  • n natn 은 자연수
  • n = n1 + n2nn1n2 의 합입니다.
  • τ 유형τ 는 유형입니다
  • e : τ — 식 e 는 유형 τ
  • ev — 식 e 에는 값 v가 있습니다

판단에 따르면 하나 이상의 구문 객체가 속성을 갖거나 서로 관련이 있습니다. 속성 또는 관계 자체를 판단 양식 이라고하며 , 객체 또는 객체가 해당 속성을 가지고 있거나 해당 관계에 있다고 판단 하는 경우 해당 판단 양식 의 라고합니다 . 판단 양식은 술어 라고도하며 인스턴스를 구성하는 객체는 주제 입니다. 우리는 쓰기 J 것을 주장 판단에 대한 J가 의 보유 . 판단의 주제를 강조하는 것이 중요하지 않은 경우 (텍스트는 여기서 잘림)


53

Hindley-Milner 규칙을 어떻게 이해합니까?

Hindley-Milner는 일련의 미적분학 (자연적인 추론이 아님) 형태의 규칙 집합 으로, 명시 적 형식 선언없이 프로그램의 구성에서 (가장 일반적인) 형식의 프로그램을 추론 할 수 있음을 보여줍니다.

기호와 표기법

먼저 기호를 설명하고 연산자 우선 순위에 대해 설명하겠습니다.

  • 𝑥 는 식별자 ( 공식적 으로 변수 이름)입니다.
  • : means는 (비공식적으로, 인스턴스 또는 "is-a") 유형입니다.
  • 𝜎 (시그마)는 변수 또는 함수 인 표현식입니다.
  • 따라서 𝑥 : 𝜎 는 " 𝑥 is-a 𝜎 "
  • ∈는 "의 요소"를 의미
  • Ga (감마)는 환경입니다.
  • (어설 션 부호)는 어설 션을 의미 합니다 (또는 증명하지만 상황에 따라 "어설 션"이 더 잘 읽습니다).
  • 𝚪 ⊦ 𝑥 : 𝜎 따라서 "𝚪는 𝑥, is-a 𝜎 "
  • 𝑒𝜎 유형의 실제 인스턴스 (요소)입니다 .
  • 𝜏 (tau)는 기본, 변수 ( 𝛼 ), 기능적 𝜏 → 𝜏 ' 또는 제품 𝜏 × 𝜏' (여기서는 사용되지 않음)의 유형입니다.
  • 𝜏 → 𝜏 '𝜏𝜏' 이 다른 유형일 수 있는 기능 유형입니다.
  • 𝜆𝑥.𝑒𝜆 (람다)가 인수 𝑥 를 취하고 표현식 𝑒을 리턴하는 익명 함수임을 의미 합니다.

  • 하자 𝑥 = 𝑒₀ 에서 𝑒₁ 표현의 수단 𝑒₁ , 대체 𝑒₀ 곳이 𝑥 나타납니다.

  • 는 이전 요소가 후자 요소의 하위 유형 (비공식-하위 클래스) 임을 의미합니다.

  • 𝛼 는 유형 변수입니다.
  • 𝛼.𝜎 는 유형, ∀ (모두에 대한) 인수 변수 𝛼 , 𝜎 표현식 반환
  • free (𝚪) 는 외부 문맥에서 정의 된 𝚪의 자유 유형 변수의 요소가 아님을 의미합니다. 바운드 변수는 대체 가능합니다.

선 위의 모든 것이 전제이며 아래의 모든 것이 결론입니다 ( Per Martin-Löf )

우선 순위

규칙에서 더 복잡한 예제를 가져 와서 우선 순위를 나타내는 중복 괄호를 삽입했습니다.

  • 𝑥 : 𝜎 ∈ 𝚪를 쓸 수 있음 (𝑥 : 𝜎) ∈ 𝚪
  • 𝚪 ⊦ 𝑥 : 𝜎 쓸 수 있음 𝚪 ⊦ ( 𝑥 : 𝜎 )

  • Γ는 ⊦ 하자 𝑥 = 𝑒₀ 에서 𝑒₁ : τ는 ((⊦ 동등 Γ이다 하자 ( 𝑥 = 𝑒₀ ) 에서 𝑒₁ ) : τ )

  • 𝚪 ⊦ 𝜆𝑥.𝑒 : 𝜏 → 𝜏 ' 는 𝚪 ⊦ (( 𝜆𝑥.𝑒 ) : ( 𝜏 → 𝜏' ))

그런 다음 어설 션 문과 다른 전제 조건을 구분하는 큰 공간은 이러한 전제 조건 집합을 나타내며, 결론에서 전제를 분리하는 수평선은 우선 순위의 끝을 가져옵니다.

규칙

다음은 규칙에 대한 영어 해석과 느슨한 설명 및 설명입니다.

변하기 쉬운

VAR 로직 다이어그램

𝑥가 𝜎 (감마)의 한 요소 인 𝜎 (시그마)의 유형이라고 가정하면,
𝚪는 𝑥가 𝜎이라고 주장한다.

다시 말해서, 𝚪에서 type는 𝜎 유형이 𝜎이므로 𝑥 유형은 𝜎 유형이라는 것을 알고 있습니다.

이것은 기본적으로 팽팽한 기술입니다. 식별자 이름은 변수 또는 함수입니다.

기능 적용

APP 로직 다이어그램

주어진 𝚪 주장 𝑒₀은 기능적 유형이고 𝚪 주장 𝑒₁는 𝜏
결론 𝚪 기능 적용을 주장하는 주장 𝑒₁에 𝑒₁는 유형 𝜏 '

규칙을 다시 말하면 함수 응용 프로그램에 𝜏 → 𝜏 '유형이 있고 𝜏 유형의 인수를 가져 오기 때문에 함수 응용 프로그램이 𝜏'유형을 반환한다는 것을 알고 있습니다.

즉, 함수가 형식을 반환한다는 것을 알고 인수에 적용하면 결과가 반환하는 형식의 인스턴스가됩니다.

함수 추상화

ABS 로직 다이어그램

𝜏 유형의 𝚪 및 𝑥이 𝑒이라고 가정하면 𝑒는 유형이며, 𝜏 '
𝚪는 익명 함수, 𝑥 리턴 식의 𝜆는 𝜆, 𝑒 → 𝜏'유형입니다.

다시, takes를 취하고 takes 표현식을 반환하는 함수를 볼 때 when (a 𝜏)가 𝑒가 𝜏 '라고 주장하기 때문에 𝜏 → 𝜏'유형임을 알 수 있습니다.

𝑥가 𝜏 유형이고 따라서 𝑒 표현식이 𝜏 '유형이라는 것을 알고 있다면, 𝑥 표현식 𝑒을 반환하는 𝑥의 함수는 𝜏 → 𝜏'유형입니다.

변수 선언하자

LET 논리도

감안 Γ는 σ의 유형, 𝑒₀를 어서, 타입의 σ와 Γ 𝑥, 어서 τ 형 𝑒₁
Γ 결론은 어서 let𝑥 = 𝑒₀ in𝑒₁ 형 τ의

𝑒₀는 𝜎이므로 𝑥는 𝑒₁ (a 𝜏)에서 𝑒₀에 바인딩되고 𝑥는 𝑒₁를 𝜏라고 주장하는 𝜎입니다.

즉, 𝑒₀ (변수 또는 함수 인) 표현식 and과 이름 𝑥, 𝜎 및 𝜏 유형의 표현식 name이있는 경우 inside 대신 𝑒₀을 can로 대체 할 수 있습니다. 𝑒₁.

인스턴스화

INST 로직 다이어그램

𝚪 유형의 𝚪 주장 𝑒 '및 𝜎'은 𝜎의 하위 유형이며
𝚪 주장 𝑒 유형은 𝜎

표현식 𝑒는 하위 유형 sub '이고 𝜎는 𝜎'의 상위 유형이므로 표현식 parent는 상위 유형 𝜎입니다.

인스턴스가 다른 유형의 하위 유형 인 유형 인 경우 더 일반적인 유형 인 해당 수퍼 유형의 인스턴스이기도합니다.

일반화

GEN 로직 다이어그램

𝚪 주장은 𝑒가 𝜎 이고 𝛼는 𝚪의 자유 변수의 요소가 아니며,
𝚪 주장은 argument, 모든 인수 표현식의 유형 𝛼 𝜎 표현식을 반환합니다.

따라서 𝑒는 𝜎이고 𝛼은 자유 변수가 아니기 때문에 일반적으로 𝜎는 𝜎을 반환하는 모든 인수 변수 (𝜎)에 대해 𝜎로 입력됩니다.

즉, 포함 범위에 아직 바인딩되지 않은 인수 (로컬이 아닌 변수)에 대해 모든 유형을 허용하도록 프로그램을 일반화 할 수 있습니다. 이러한 바운드 변수는 대체 가능합니다.

함께 모아서

특정 가정 (예 : 자유 / 정의되지 않은 변수, 알려진 환경)이있을 경우 다음 유형을 알고 있습니다.

  • 프로그램의 원자 요소 (가변)
  • 함수가 반환 한 값 (함수 응용 프로그램)
  • 기능적 구성 (함수 추상화)
  • 바인딩 (변수 선언),
  • 부모 유형의 인스턴스 (인스턴스화)
  • 모든 표현 (일반화).

결론

이러한 규칙을 결합하면 형식 주석 없이도 가장 일반적인 형태의 주장 된 프로그램을 증명할 수 있습니다.


1
그런 좋은 요약 아론!
bhurlow

48

표기법은 자연 공제 에서 비롯됩니다 .

⊢ 기호를 개찰구 라고 합니다.

6 가지 규칙은 매우 쉽습니다.

Var 규칙은 다소 사소한 규칙입니다. 식별자 유형이 이미 유형 환경에 존재하면 유형을 유추하기 위해 그대로 환경에서 가져옵니다.

App규칙에 따르면 두 개의 식별자가 e0있고 e1해당 유형을 유추 할 수있는 경우 애플리케이션 유형을 유추 할 수 있습니다 e0 e1. 당신이 알고있는 경우 규칙은 다음과 같이 읽어 e0 :: t0 -> t1e1 :: t0(같은 T0가!), 다음 응용 프로그램이 잘 입력하고 유형입니다 t1.

AbsLet람다 추상화에 대한 유형을 추론하고 렛에하는 규칙이 있습니다.

Inst 규칙은 덜 일반적인 유형으로 유형을 대체 할 수 있다고 말합니다.


4
이것은 자연적인 추론이 아니라 순차적 미적분학입니다.
Roman Cheplyaka

12
@RomanCheplyaka 잘, 표기법은 거의 동일합니다. 위키 피 디아 문서에서는 두 가지 기술의 흥미로운 비교가 있습니다 en.wikipedia.org/wiki/Natural_deduction#Sequent_calculus . 그 결과 미적분학은 자연 공제 실패에 대한 직접적인 반응으로 태어 났기 때문에 질문이 "이 표기법이 어디에서 왔는가"라면, "자연 공제"는 기술적으로 더 정답입니다.
Dan Burton

2
@RomanCheplyaka 또 다른 고려 사항은 순차적 미적분학은 순전히 구문론 적이므로 (구조적인 규칙이 너무 많은 이유)이 표기법은 그렇지 않습니다. 첫 번째 규칙은 문맥이 세트라고 가정하고 결과적으로 미적분학에서는 더 간단한 구문 구성입니다.
nponeccop

@Cheplyaka 사실, 아닙니다. 그것은 "연속적인"것처럼 보이지만 연속적인 미적분학은 아닙니다. Haper는 그의 교과서에서 "고차 판단"으로서 이것을 이해합니다. 이것은 실제로 자연적인 공제입니다.
Philip JF

15

e를 생각하는 두 가지 방법이 있습니다 : σ. 하나는 "표현식 e에 유형 σ가 있음"이고 다른 하나는 "표현식 e와 유형 σ의 순서 쌍"입니다.

식의 유형에 대한 지식으로 Γ를보고 식과 유형의 쌍으로 구현하십시오. e : σ.

개찰구 ⊢는 왼쪽에있는 지식에서 오른쪽에있는 것을 추론 할 수 있음을 의미합니다.

따라서 첫 번째 규칙 [Var]을 읽을 수 있습니다.
지식 Γ에 e : σ 쌍이 포함 된 경우 e가 σ 유형 인 e를 Γ에서 추론 할 수 있습니다.

두 번째 규칙 [App]을 읽을 수 있습니다.
만약 Γ에서 e_0의 유형이 τ → τ '라고 추론 할 수 있고, Γ에서 e_1의 유형이 τ라고 추론 할 수 있다면, Γ에서 e_0 e_1이 τ '를 입력하십시오.

Γ ∪ {e : σ} 대신 Γ, e : σ를 쓰는 것이 일반적입니다.

따라서 세 번째 규칙 [Abs]을 읽을 수 있습니다.
만약 x로 확장 된 Γ에서 : τ가 e가 τ '를 가지고 있다고 추론 할 수 있다면, Γ에서 λx.e가 τ → τ'를 가지고 있다고 추론 할 수 있습니다.

네 번째 규칙 [Let]은 연습으로 남겨둔다. :-)

다섯 번째 규칙 [Inst]을 읽을 수 있습니다.
만약 Γ에서 우리가 e가 σ '를 가지고 있다고 추론 할 수 있고, σ'가 σ의 하위 유형이라면, Γ에서 우리는 e가 σ를 가지고 있다고 추론 할 수 있습니다.

여섯 번째 및 마지막 규칙 [Gen]을 읽을 수 있습니다.
만약 Γ에서 e가 σ를 갖는 것으로 추정 할 수 있고 α가 Γ에서 어떤 유형의 자유 유형 변수가 아니라면, Γ에서 우리는 e가 type을 갖는 것으로 추론 할 수 있습니다 ∀α σ.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.