문맥은 구문 개념입니다. 문맥은 하나의 구멍이있는 용어입니다. (다중 구멍 컨텍스트가있는 경우가 종종 있으며,이 경우 정의가 명확하게 제공됩니다.) 컨텍스트 구문은 용어 구문을 사용하여 하나의 하위 용어가 용어 대신 구멍 이되도록 정의하여 정의됩니다 . BNF에서 (부울과 예제가없는 if 문이없는 람다 미적분학을 예제로 사용합니다.) :
C : : = [ ] ∣ x ∣ t[]
C::=[]∣x∣tC∣Ct∣λx.C
컨텍스트 정의와 함께 용어를 컨텍스트에 넣는 정의가 제공됩니다. 경우 컨텍스트이고 용어이다 후 바꾸어 얻어진 용어 정공 어디 구문 트리에서 에 . 이것은 기본적으로 변수가 정확히 한 번만 발생하는 치환입니다. 그러나 대체되는 "변수" 는 람다 미적분 또는 다른 용어의 변수가 아닌 메타 수준 에서 변수입니다. ).t C [ t ] t [ ] C [ t ] [ ] tC[]tC[t]t[]C[t][]t
컨텍스트는 시맨틱에서 다양한 정의를 공식화하는 데 사용됩니다. 일반적인 예는 대부분의 평가 개념이 평가를 수행 할 수있는 컨텍스트를 정의하는 것입니다. 예를 들어 람다 미적분을 고려하십시오. 평가의 기본 개념은 베타-감소 규칙에 의해 주어진다 :
여기서 은 치환이다 은 적용됩니다 .M { x ← N } x ↦ N M
(λx.M)N→βM{x←N}
M{x←N}x↦NM
이것은 베타 감소의 완전한 정의는 아닙니다. 용어 주어지면 하위 용어 과 과 과 같은 변수 가 있으면 베타 감소가 가능합니다 . 그러나 과 같은 하위 용어 가 있으면 더 일반적으로 는 베타를 줄일 수 있습니다 . 이것을 표현하는 또 다른 방법 은 컨텍스트 와 일부 용어 과 있고 과 같은 변수 가 있으면 가 베타를 줄일 수 있다는 것입니다tMNxt=(λx.M)Ntt′t′=(λx.M)NtCMNxt=C[(λx.M)N]. 이러한 축소가있는 경우 오른쪽은 입니다. 공식 표기법을 사용하기 위해 베타 감소는 다음 공제 규칙에 의해 정의됩니다.
모든 종류의 컨텍스트를 명시 적으로 지정하여 동일한 정의를 표현할 수 있습니다.
C[M{x←N}]
(λx.M)N→βM{x←N}(β)M→βNC[M]→βC[N](γ)
(λx.M)N→βM{x←N}(β)M→βNλx.M→βλx.N(Cλ)M→βNMP→βNP(C@<)M→βNPM→βPN(C@>)
이 정의는 베타 감소, 즉 하위 용어를 줄일 수있는 평가 개념을 산출합니다. 프로그래밍 언어로 수행되는 계산에서는 종종 함수 내부의 하위 용어를 줄일 수 없습니다. 축소 규칙은 응용 프로그램의 최상위 또는 왼쪽 또는 오른쪽에만 적용 할 수 있습니다. 모든 구문 형태를 허용하지 않는 새로운 종류의 컨텍스트를 정의하여이를 표현할 수 있습니다.
이 구문을 사용하여 의미 개념을 정의 할 수 있습니다 비 부분 평가 :
또한 전체 베타 축소를 위해 위에서 설명한 것처럼 확장하여이 정의를 제시 할 수도 있습니다.
D::=[]∣x∣tD∣Dt
(λx.M)N→npM{x←N}M→npND[M]→npD[N]
(λx.M)N→npM{x←N}(β)M→npNMP→npNP(C@<)M→npNPM→npPN(C@>)
D 는 평가 개념을 정의하는 데 사용되므로 평가 컨텍스트라고합니다. 평가 컨텍스트는 특별한 종류의 컨텍스트가 아닙니다. 오히려
평가 컨텍스트라고 부르는 것은 컨텍스트가 사용되는 문제입니다 .
문맥의 예를 하나 더 보여 드리겠습니다. 다음 구문에 따라 값을 정의 해 봅시다 :
이제 다른 종류의 컨텍스트를 정의 해 봅시다 :
위의
와 비교할 때 응용 프로그램의 인수가 다음과 같은 경우에는 응용 프로그램의 함수쪽에 구멍이있을 수 있습니다. 가치. 다음 감소 개념을 정의하십시오.
V
V::=xV1…Vn∣λx.M
E::=[]∣ME∣EV
D(λx.M)V→cbvaM{x←V}(βcbva)M→βNE[M]→cbvaE[N](γcbva)
함수의 인수가 첫 번째 규칙의 값이어야하고 람다 추상화가 컨텍스트가 아니라는 제한으로, 값별 평가 전략을 정의하고 있습니다. 인수가 함수보다 먼저 평가된다는 추가 제한 사항은 값을 기준으로 적용 순서 호출입니다.