공식적인 규칙에 사용되는이 분수 형 "이산 수학"스타일 표기법은 무엇입니까?


18

"Conflict-Free Replicated JSON Datatype" 논문에서 , "규칙"을 공식적으로 정의하는이 표기법을 발견했습니다.

논문에 제시된 "규칙"중 일부] [1

이 표기법은 무엇입니까? 어떻게 읽습니까?

예를 들면 다음과 같습니다.

  • DOC규칙은 "분자"에 아무것도하지 않습니다 - 왜?
  • EXECGET규칙은 그 의미를 무엇을, 선 위에 두 개의 별도의 조건을 가지고있는 것 같습니다?
  • VAR다른 많은 규칙이 화살표의 일종 사용하는 동안이 하나가 아니라 x는 무언가의 요소 말하는 것 같다 상단까지 (내 말은 걸릴 것 "을 의미한다") 때문에 규칙뿐만 아니라 조금을 의미합니다.
  • 거의 모든 내용 Ap,에 텍스트가 "복제 p의 상태는 유한 부분 함수 인 Ap에 의해 기술되어있다"라고 기술되어 있습니다.이 표기법을 잘 아는 독자라면 어떻게 모든 규칙의 해당 부분을 "볼"것입니까?

이 사이트는 작은 단계에 대한이 질문의 초기 규칙으로 ⟨B, s⟩-> ⟨B ', s'⟩의 의미는 무엇입니까? 라는 질문에 대해 매우 유사하게 보이는 관련 질문을 제안했습니다 의미론? — 이것은 운영 시맨틱 으로 태그가 지정되어 있으며 강력한 리드 인 것 같습니다. 이것이 실제로 이러한 수치를 해석해야하는 틀입니까? 증거의 정확성을 확인할 수 없어도 최소한이 섹션에서 말하는 내용을 조금 더 이해할 수 있도록 이것을 "충돌 과정"형식으로 쉽게 요약 할 수 있습니까?

답변:


25

이것은 추론 규칙에 대한 표준 표기법입니다 . 구내가 수평선 위에 놓이고 결론은 선 아래에 놓입니다. 따라서 결과는 "분수"처럼 보이지만 라인 위의 하나 이상의 논리적 명제와 라인 아래의 단일 명제로 표시됩니다. 옆에 레이블 (예 : "LET"또는 "VAR")이 표시되면 특정 규칙을 식별하기위한 사람이 읽을 수있는 이름 일뿐입니다.

이것을 자연 공제 또는 Gentzen 스타일의 자연 공제 라고 할 수도 있습니다 .

이것은 프로그래밍 언어 문헌에서 일반적인 표기법입니다. 당신은 모든 곳에서 그것을 볼 수 있습니다. 해당 분야에서 발생하는 결론 및 재귀 적 구조 증명의 종류에 매우 편리합니다.

이 표기법은 공리 / 규칙을 표현하는 데 사용됩니다. 각 공리를 "메타 변수"(예 : expr )가 있는 템플릿으로 생각할 수 있습니다 . 각 메타 변수를 프로그래밍 언어의 일부 구문 (예 : 프로그래밍 언어에서 유효한 식)으로 바꿀 수 있으며 규칙의 인스턴스를 얻게됩니다. 추론 규칙은 모든 제안이 선 위에있을 경우 (일부 템플릿의 경우 규칙 전체에서 각 메타 변수를 동일한 값으로 일관되게 대체하는 템플릿의 경우) 선 아래의 제안도 참임을 약속합니다. .


2
Hindley-Milner 유형 유추를 명시 적으로 사용하는 것이 한 가지 있습니다. “Milner-Hindley의 어떤 부분을 이해하지 못합니까?”에 대한이 답변 은 해당 규칙 집합을 읽고 사용하는 방법을 안내합니다.
DylanSp

하나의 작은 수정 : 전제와 결론은 제안이 아니라 판단 입니다. 제안은 특정한 형태의 판단입니다. 이러한 선들과 함께, 판단은 사실이 아니라 명백하다 (진실의 개념은 정의하기 어렵고 언어 의미론을 프로그래밍하는 데 실제로 흥미롭지 않기 때문에).
gardenhead

7

여기입니다 매우 형식적인 표기법에 익숙하지 않은 힘 도움말 사람들이 문에 발을 얻을 수 있다는 비공식적 인 설명. 공식적인 정의를 대체하지는 않습니다!

AP는 시스템 또는 실행중인 프로그램의 상태입니다. "상태"는 많은 것을 의미 할 수 있지만이 경우 정의 된 모든 지역 변수 및 해당 값의 목록을 포함하는 것 같습니다. Ap 가 왜 함수입니까? 변수 할당을 표현하는 편리한 방법이기 때문에 Ap (x) 는 변수 x 값을 제공합니다 .

이제 EXEC 규칙을 예로 들어 보겠습니다. cmd1 명령과 cmd2 명령의 실행 시맨틱 , 즉 cmd1 다음에 cmd2 실행시 시스템 의 상태 Ap 에서 발생하는 상황을 정의 합니다.

  • 라인 위 : 구내입니다. " Cmd1을 명령으로 설정하십시오. 시스템이 상태 Ap 에있을 때 cmd1 명령을 실행하면 시스템은 새로운 상태 Ap '가 됩니다."
  • 행 아래 : 여기에서 규칙은 두 개의 명령 cmd1cmd2를 순차적으로 실행한다는 의미를 설명합니다 . "시스템이 Ap 상태에 있다고 가정 하고 cmd1 을 실행 한 다음 cmd2 는 시스템이 상태 Ap 에있을 때 cmd2 를 실행하는 것을 의미합니다 " "( Apcmd1 에 정의 된대로 cmd1 을 실행 한 후의 상태임을 기억 하십시오. 가옥).

다른 규칙은 개별 명령 및 표현식의 의미를 설명합니다. 예를 들어, VAR 규칙은 변수를 "실행"한다는 의미를 설명합니다. x 가 로컬 변수 (라인 위) 인 경우 변수 x 를 평가 / 실행한다는 것은 무엇을 의미 합니까? 프로그램은 상태 Ap 에있을 때 x 를 평가 하면 x 값 , 즉 Ap (x)가 됩니다.

도움이 되길 바랍니다.


감사합니다. 이것은 내가 찾던 것을 이해하고 정확하게 이해하는 데 큰 도움이됩니다! 그러나 첫 번째 질문에 답하지 않습니다.이 표기법에는 일반적으로 및 / 또는이 특정 상황에서 이름이 있습니까? 내 추측은 "작동 의미론"이지만, 지금까지의 다른 대답은 그것들이 단순한 "추론 규칙"이라고 말합니다. 나는 두 부분으로 된 질문을하면 답을 나눌 자격이 있지만, 이제 어느 쪽을 받아 들일 것인지 찢어
졌다

1
@natevw 그들은 추론 규칙이다. 연산 의미론은 일반적으로 추론 규칙으로 표현되는 많은 것들 중 하나 일뿐입니다.
Gilles 'SO- 악마 그만해'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.