질문은 다소 광범위합니다. 합리적인 공간에서 대답하기 위해 많은 단순화를하겠습니다.
용어에 동의합시다. 프로그램이 사양을 암시 할 때 올바른 프로그램입니다 . 이 모호한 진술은 프로그램이 무엇인지, 스펙이 정확히 무엇인지를 찾아 여러 가지 방법으로 정확하게 만들어집니다. 예를 들어, 모델 검사에서 프로그램은 Kripke 구조 이고 사양은 종종 LTL 공식입니다. 또는 프로그램은 PowerPC 명령어 목록 일 수 있으며 사양은 1 차 논리로 작성된 Hoare-Floyd 어설 션 세트 일 수 있습니다.. 가능한 많은 변형이 있습니다. 어떤 경우에는 (Kripke 구조) 실제 프로그램을 검증하지 않지만 두 번째 경우 (PowerPC 명령어 목록)는 결론을 내립니다. 그러나 두 경우 모두 수학적 모델을 실제로보고 있다는 것을 인식하는 것이 중요합니다. (예를 들어, 고전 역학이 현실의 수학적 모델 인 물리와 매우 유사합니다.)
대부분의 형식화는 프로그램의 구문과 의미를 구별합니다. 즉, 그것이 어떻게 표현되고 무엇을 의미합니까? 프로그램의 의미는 프로그램 검증의 관점에서 계산됩니다. 그러나 프로그램에 (구문 표현 적) 의미를 부여하는 명확한 방법을 갖는 것이 중요합니다. 널리 사용되는 두 가지 방법은 다음과 같습니다.
- (작은 단계) 연산 의미론 : 이것은 해석기를 작성하여 프로그래밍 언어를 정의하는 것과 매우 유사합니다. 이를 위해 당신은 상태 가 무엇인지 말해야 하며 언어의 각 진술에 의해 영향을받습니다. (당신은 어떤 언어로 통역사를 쓸지 궁금해 할 수 있지만, 그렇지 않은 척합니다.)
- axiomatic semantics : 여기에서 각 문장 유형은 공리 스키마와 함께 제공됩니다. 따라서 대략 해당 유형의 특정 문장이 사용될 때마다 특정 공리를 사용할 수있게됩니다. 예를 들어, 할당 는 스키마 { P [ x / e ] } 와 함께 제공됩니다.x : = 전자 ; 특정 할당 x : = x + 1 은 공리와 함께 제공됩니다.{ P[ x / e ]}x : = 전자{ P}x : = x + 1P = ( x로 스키마를 인스턴스화하면 { x = 1 }{ x + 1 = 1 }x : = x +1{ x = 1 }입니다.피= ( x = 1 )
(다른 것들도있다. 특히 의미 적 의미론을 생략하는 것이 좋지 않다고 생각하지만,이 답변은 이미 길다.) 기계어 코드와 운영 의미론은 대부분의 사람들이 '실제 프로그램'이라고 부르는 것과 매우 가깝다. 다음은 DEC Alpha 기계 코드의 서브 세트에 작동 시맨틱을 사용하는 중요한 논문입니다.
왜 당신은 공리 학적 인 것들과 같은 더 높은 수준의 의미론을 사용하겠습니까? 정확성 증명이 실행되는 하드웨어에 의존하지 않게하려는 경우. 그런 다음 접근 방식은 편리한 고급 의미 체계에 대한 알고리즘의 정확성을 입증 한 다음 실제 기계에 더 가까운 하위 수준 의미 체계에 대한 의미 체계가 의미가 있음을 증명합니다.
요약하면, 나는 당신의 질문으로 이어진 세 가지 이유에 대해 생각할 수 있습니다.
- 프로그램을 호출하는 데 사용되지 않는 상위 수준 의미 만 보았으며 하위 수준이 있는지 궁금합니다. 대답은 '예'입니다.
- 모델이 현실과 일치한다는 것을 어떻게 증명하는지 궁금합니다. 물리학 에서처럼 그렇지 않습니다. 당신은 단순히 더 나은 모델을 생각해 내고 현실과 대조합니다.
- 구문과 시맨틱의 차이점과 프로그램에 의미를 할당하는 다양한 방법을 보지 못했습니다. 두 가지 이전 질문 일부 책이 나와 있습니다.
이 답변은 내가 질문을 이해하는 세 가지 다른 방법을 식별하려고합니다. 이러한 점 중 하나에 깊이 들어가 려면 많은 공간이 필요합니다.