2016-10-14 3 views
10

그 입력 규칙은 "On the expressivity of elementary linear logic: characterizing Ptime and an exponential time hierarchy" 용지에 존재하는 다음 “What part of Milner-Hindley do you not understand?” 스택 오버플로 질문에서이 백서의 타이핑 규칙을 어떻게 해석 할 수 있습니까?

typing rules

, 나는 영어로 그 중 일부를 읽을 수 있지만, 유형을 만드는 방법을 파악하는 것은 여전히 ​​어렵다 그것의 검사기.

  • 도끼 : 이것은 처음 4 개 규칙을 읽는에서 내 시도이다 공리로, x는 경우, 다음 X 타입 A. (? 그 분명 아닌)가

  • 타입 A
  • : 컨텍스트 Γt has type A 증명하고 주장 x has type A로 확장 다른 컨텍스트 는, u has type B 증명되면, 그 두 상황 함께 x 모든 항목의 치환을 증명 tuB입니다. (대체로 두 개의 컨텍스트가있는 이유는 무엇입니까? 또 대체 컨텍스트는 대체 규칙과 비슷하지만 대체가 용어가 아니라 조작 인 경우 어떻게 작동합니까?) 고전적인 Milner 문맥은 다음 x has type B 여전히 t has type A 증명 문을 확장하는 컨텍스트를 t has type A 증명하는 경우.)은 응용 프로그램에 대한 그냥 아주 간단한 규칙이 약한

  • , -Hindley 그런 아무 상관이 없습니다. (다시 말하지만, 그것은 명확하지 않다?)

  • 제어 방식 : 컨텍스트는 x1 has type !A로 확장 및 x2 has type !A은에 x에 의해 모든 x1의 발생과 x2 대체 없냐 x has type !A로 확장하는 컨텍스트를, t has type B을 증명하는 경우 t의 유형은 B입니다. (교체의 또 다른 규칙은 보인다? 그런데 왜 두 용어는 위의 한 학기 아래? 또한, 왜 그 !의? 모든 유형 검사에 표시 것이 어디 있습니까?)

I 그 규칙이 무엇을 말하고 싶은지 확실히 알 수 있습니다.하지만 실제로 클릭하기 전에 뭔가 빠졌고 해당 유형 검사기를 구현할 수 있습니다. 어떻게 이러한 규칙을 이해할 수 있습니까?

+1

이 중 일부는 실제로 분명하며 "공리"가 필요한 이유를 알지 못합니다. 그러나 유형 시스템이나 논리를 설정하려면 많은 "명백한"사항을 포함시켜야합니다. – dfeuer

+0

이 질문이 적합하지 않은 경우, 누군가가 날 (예를 들어 STLC 또는 간단한 것을 사용하여) 수식에서 유형 검사기를 작성하는 방법에 대한 실용적인 자습서로 나를 연결할 수 있다면 그것은 내 이해를 향상시킬 것입니다. 나는 한편으로 라이트 로직에 대한 가이드 (http://typesafety.net/thesis/chapter-2.pdf)를 읽고 있는데, 내가 게시 한 사람들과 수식을 비교하려고 노력하고있다. 나는 그것을 매우 유익하게 생각하고있다. – MaiaVictor

+0

질문의 제목은 약간 오해의 소지가 있습니다.이 특별한 경우의 판단에 대해 질문하거나 일반적인 판단을 이해하고 있습니까? – Alec

답변

8

이것은 너무 광범위하지만, 귀하의 의견으로는 선형 시스템의 기본이 부족하다고 생각합니다. 이 시스템은 약화되어 있으며 (선형 논리에서는 일반적으로 허용되지 않음) 사실상 아핀 직관주의 논리에 해당합니다.

핵심 아이디어는 귀하가 보유한 모든 값 (예 : 변수) 을 한 번만 개 사용할 수 있다는 것입니다.

유형 A (x) B (텐서 제품) 약 당신이 A 값과 B 값 모두를 투사 할 수있는 한 쌍의 값의 유형을 의미합니다.A을 소비 선형 함수에 대한

유형 A -o B 스탠드 (! 기억 : 최대 하나 개의 사용에서) 단일 B을 생산하고 있습니다.

예 : \x.x : A -o A하지만 인수를 두 번 사용해야하기 때문에 어떤 용어도 사용할 수 없습니다. : A -o (A (x) A).

유형 !A ("물론 A!")은 A 유형의 값을 나타내며 비선형 람다 계산에서 정상적으로 수행 할 수 있습니다. 이는 수축 규칙에 의해 수행됩니다.

예를 들어, !A -o !B은 일반 기능을 나타냅니다. 무제한 복사 량으로 값을 필요로하고 무제한 복사 량으로 값을 생성합니다. 다음과 같이 함수 !A -o (!A (x) !A)을 쓸 수 있습니다 : 여러 소재지를두고있는 모든 선형 입력 규칙이 중복없이, (예를 들어, 하나가 감마, 다른 델타를 얻을 수) 건물의 환경 변수를 분할하는

\a. (a (x) a) 

참고. 그렇지 않으면 선형 변수를 복제 할 수 있습니다. Cut에는 두 가지 상황이 있습니다. 좋지 않다 - tu이 때문에 u[t/x] 두 번 변수를 사용할 수 있습니다, G에 변수를 사용할 수 있습니다

G |- t: A  G, x:A |- u: B 
-------------------------------- 
    G |- u[t/x]: B 

그러나 여기 두 용어 : 비선형 컷 것이다. 대신, 선형은 두 건물 사이에 변수를 분할

G1 |- t: A  G2, x:A |- u: B 
-------------------------------- 
    G1,G2 |- u[t/x]: B 

힘을 잘라 : 당신이 t에서 사용하는 u 사용할 수 없습니다.

관련 문제