답변:
(또한 참조 denotational 의미를 특징 짓는 것을 실제 계약이 없습니다 이 그것을해야하는 것을 제외하고, 기사) 조성은 . 즉, 가 의미 론적 기능인 경우 다음과 같은 의미로 프로그램을 의미합니다. 모든 ary 프로그램 생성자 및 모든 프로그램 , ..., (암시 적으로 잘 형식화되었다고 가정)에 대한 경우 여야합니다.n f M 1 M n
여기서 는 시맨틱 도메인에서 에 해당하는 생성자 입니다. 구성 성은 대수학의 동질성 개념과 유사합니다.f
연산 의미론은 이러한 의미에서 구성 적이 지 않습니다. 역사적으로, 의미 론적 의미론은 조작 의미론이 구성 적이 지 않기 때문에 부분적으로 개발되었습니다. D. Scott의 획기적인 대 수학적 이론적 의미 론적 -calculus에 이어 대부분의 대어 적 의미론은 순서 이론적이었습니다. 순수한 지적 이익과는 별개로 의미 론적 의미론이 당시 (1960 년대)에 대부분 발명되었다고 생각합니다.
문제의 일부는 프로그램 평등의 개념이 현재만큼 잘 이해되지 않았다는 것이었다. 예를 들어 프로세스 이론 (특정 형태의 연산 의미론으로 볼 수 있음)에서 나온 비시 밀화 기반 기법이나, 예를 들어 Pitts가 연산 의미론 및 프로그램에 관한 연구를 통해 두 문제가 실질적으로 개선되었다고 주장합니다. 동등성, 및 (2) 예를 들어, 유형 π- 계산에서의 프로그래밍 언어 임베딩을 통한 유형화 된 버전의 헤네시-밀너 로직으로 유도 된 분리 로직 또는 호 아어 로직의 개발에 의한 것. 프로그램 로직 (= 공리적 의미론)도 구성 적입니다.
denotational 의미를 보는 또 다른 방법은 많은 프로그래밍 언어가 있으며 모두 비슷하게 보이기 때문에 단순하지만 보편적 인 메타 언어를 찾고 모든 프로그래밍 언어를 구성 방식으로 해당 메타에 매핑 할 수 있습니다. 언어. 1960 년대에 일부 입력 된 -calculus는 그 메타 언어 라고 생각되었습니다 . 그림은 1000 개 이상의 단어를 말할 수 있습니다.
이 방법의 장점은 무엇입니까? 경제 POV에서 보는 것이 합리적 일 수 있습니다. 객체 프로그램 클래스에 대해 흥미로운 것을 증명하고 싶다면 두 가지 옵션이 있습니다.
객체 수준에서 직접 증명하십시오.
메타 수준으로의 변환이 속성을 '보존'하고 메타 수준에 대해 증명 한 다음 결과를 다시 개체 수준으로 푸시합니다.
후자의 결합 비용은 이전의 비용보다 아마 더 높다, 그러나 메타 수준의 속성을 증명하는 비용이 증거보다 훨씬 작은 동안 번역을 증명하는 비용은, 미래의 모든 사용하는 상각 할 수있다 개체 수준에서.
객체 지향, 동시성 및 분산 계산과 같은 복잡한 언어 기능에는 아직 정확한 순서 이론적 의미가 부여되지 않았기 때문에 denotational 의미론에 대한 원래 순서 이론적 접근 방식은 지금까지이 약속에 미치지 못했습니다. "정확한"이란 용어는 그러한 언어의 자연적인 동작 의미와 일치하는 의미를 의미합니다.
dentrotional semantics를 배울 가치가 있습니까? 초음속 의미론에 대한 순서 이론적 접근을 의미한다면 프로그래밍 언어 이론에서 일하고 싶지 않고 오래된 논문을 이해해야하는 경우가 아니라면 아마도 아닐 것입니다. denotational semantics에 대한 순서 이론적 접근 방식을 배우는 또 다른 이유는이 접근 방식의 아름다움입니다.
나는 쓸 것이다 만에 대한 그래서 (와 이 존재하지 않는 경우) 및 에 대한 의의 적 의미 . 두 의미를 모두 올바르게 정의하면 가능성이 높습니다 . 또는 를 의미하는 를 작성하겠습니다 .σ ' ⟨ P , σ ⟩ → σ ' ⊥ D ( P ) P O ( P , σ ) = D ( P ) ( σ ) S ( P ) σ ↦D ( p )
이제 컴파일러 . 컴파일러라고하면 의미 (예 : 유지한다는 의미입니다 . 연산 의미론을 사용한다는 것을 증명하려고한다면, 와 에 대해 를 증명해야합니다 . denotational semantics를 사용하여이를 증명하려면 에 대해 만 증명하면됩니다 . 를 수량화하지 않아도 많은 작업을 절약 할 수 있습니다. S ( C ( p ) ) = S ′ ( p ) p σ O ( C ( p ) , σ ) = O ′ ( p , σ ) p D ( C ( p ) ) = D ' ( p ) σ
어리석은 예 :
모든 을 .
dentational semantics에서는 를 유도하여 증명 만하면 가 컴파일러 라는 것을 쉽게 알 수 있습니다 . 작동 의미론에서, 건너 뛰기를 설명하기 위해 어디에서나 파생물을 가져 와서 파생물 조각을 연결해야하며 악몽이 될 것입니다.