프로그램 동등성을 입증하는 방법을 연구하는 초보자입니다. 두 프로그램이 동등하다는 것을 증명하기 위해 논리 관계 또는 시뮬레이션을 정의하는 것에 대한 몇 가지 논문을 읽었습니다. 그러나 나는이 두 가지 기술에 대해 상당히 혼란 스럽습니다.
나는 논리 관계가 유도 적으로 정의되는 반면 시뮬레이션은 일치를 기반으로한다는 것을 알고 있습니다. 왜 그런 식으로 정의됩니까? 그들의 장단점은 각각 무엇입니까? 다른 상황에서 어떤 것을 선택해야합니까?
프로그램 동등성을 입증하는 방법을 연구하는 초보자입니다. 두 프로그램이 동등하다는 것을 증명하기 위해 논리 관계 또는 시뮬레이션을 정의하는 것에 대한 몇 가지 논문을 읽었습니다. 그러나 나는이 두 가지 기술에 대해 상당히 혼란 스럽습니다.
나는 논리 관계가 유도 적으로 정의되는 반면 시뮬레이션은 일치를 기반으로한다는 것을 알고 있습니다. 왜 그런 식으로 정의됩니까? 그들의 장단점은 각각 무엇입니까? 다른 상황에서 어떤 것을 선택해야합니까?
답변:
이 질문에 대한 답이있을 수 있습니다. 사실, 나는 여전히 지난 6 개월 동안 그것을 통해 생각하고 있으며, 아직 논문에 대해서는 쓰여지지 않았습니다.
일반적인 이론은 "논리적 관계", "시뮬레이션"및 "불 변형"과 같은 관계 추론 원칙은 데이터 추상화 또는 정보 숨기기의 표현이라는 것입니다. 정보가 숨겨져있는 곳이라면 어디에서나이 원칙은 잘립니다.
그것을 발견 한 최초의 사람들은 오토마타 이론가였습니다. 오토마타는 숨겨진 상태입니다. 따라서 동등성에 대해 이야기하려면 관계형 추론이 필요합니다. 오토마타 이론가들은 한동안 동질성 (homomorphisms)으로 고생하고 포기하고 시뮬레이션 관계의 한 형태 인 "관계 커버링"이라는 개념을 생각 해냈다.
Milner는 1971 년에 " 프로그램 사이의 대수적 시뮬레이션 개념 "이라고하는 거의 알려지지 않았지만 매우 기초적인 논문에서 아이디어를 얻었습니다 . Hoare는이를 알고 1972 년에 " 데이터 표현의 정확성 증명 "을 제시하는데 사용했습니다. 그는 관계가 아니라 추상화 기능이 더 단순하다고 생각했기 때문이다. 그는 이후 단순성 주장을 철회하고 " 데이터 구체화 개선 "의 관계를 다시 사용했습니다 . 레이놀즈는 " 크래프트 오브 프로그래밍 "에서 관계 추론을 사용했습니다.", Chapter 5 (1981). 그는 관계가 추상화 함수보다 더 자연스럽고 일반적이라고 생각했다. 되돌아 가서이 장을 읽으면, 발견되기를 기다리는 관계형 파라 메트릭 아이디어가 발견 될 것이다. 2 년 후, 레이놀즈는 "유형, 추상화 및 파라 메트릭 다형성"(1983)을 발표했다.
이 모든 아이디어는 유형과 관련이없는 것처럼 보이지만 실제로는 관련이 있습니다. 상태 저장 언어 및 모델에는 데이터 추상화 기능 이 내장되어 있습니다. 정보를 숨기려면 "추상 데이터 유형"을 정의 할 필요가 없습니다. 당신은 단지 지역 변수를 선언하고 숨 깁니다. 우리는 처음 몇 주 동안 자바 수업 첫 해 학생들에게 가르 칠 수 있습니다. 땀 없습니다.
반면 기능적 언어와 모델은 유형을 통해 정보를 숨겨야 합니다 . 기능적 모델에는 내장 된 데이터 추상화가 없습니다. 또는 사용하여 명시 적으로 추가해야 . 따라서 상태 저장 언어를 기능 언어로 변환하면 모든 로컬 상태가 유형 변수로 변환되는 것을 볼 수 있습니다. 이것이 어떻게 작동하는지에 대한 명확한 설명은 나의 논문 " 알골과 같은 언어로 된 객체와 클래스 "를 참조하십시오 . 그러나 아이디어는 실제로 Reynolds 1981 ( "알골의 정수")에서 나왔습니다. 우리는 지금 그 고전적인 아이디어를 더 잘 이해하고 있습니다.∃
동등한 것으로 입증하려는 두 기계 과 을 가져 가십시오 . Milner 1971은 과 상태 사이의 관계를 정의 하고 두 기계가 관계를 유지함을 보여줍니다. 레이놀즈의 파라 메트릭은 기계의 상태를 와 유형에 속한다고 생각합니다 . 그들 사이 의 관계 정의하십시오 . 머신이 상태 유형별로 매개 변수화 된 및 유형 인 경우 두 머신이 관계에 의해 관련되어 있는지 확인하십시오 . M ' M M ' X X ' R F ( X ) F ( X ' ) F ( R )
따라서 시뮬레이션과 관계형 파라 메트릭은 기본적으로 같은 생각 입니다. 그것은 단지 피상적 인 유사점이 아닙니다. 전자는 내장 된 데이터 추상화가있는 상태 저장 언어에 적합합니다. 후자는 타입 변수를 통해 데이터 추상화를 얻는 상태 비 저장 언어를 위해 만들어졌습니다.
그렇다면 논리적 관계는 어떻습니까? 표면적으로 논리적 관계는보다 일반적인 아이디어 인 것으로 보입니다. 파라 메트릭 성이 동일한 모델 내에서 유형 변수를 연관시키는 방법에 대해 설명하는 반면, 논리적 관계는 다른 모델에서 유형을 연관시키는 것으로 보입니다. 데이브 클라크 (Dave Clarke)는 이것에 대한 훌륭한 설명을 썼다. 앞으로 더 발전 할 수 있도록 계속 지켜봐 주시기 바랍니다.
[참고 사항 추가] 논리 관계와 시뮬레이션 사이의 연결은 최근 논문 논리 관계 및 매개 변수 : 범주 이론 및 프로그래밍 언어를위한 레이놀즈 프로그램 에서 논의됩니다 .
functor
주요 차이점 중 하나는 논리 관계가 프로그램 클래스 (예 : 컴파일러에 대한 입력)가 다른 클래스의 프로그램 (예 : 컴파일러의 출력)에 해당하는 반면 시뮬레이션 관계가 사용됨을 보여주는 기술로 사용된다는 것입니다 두 프로그램 간의 통신을 보여줍니다.
두 개념 사이의 유사점은 두 개체 사이의 일치 성을 나타내는 데 사용되는 관계를 정의한다는 것입니다. 어떤 의미에서 논리적 관계는 유형의 구문에 귀납적으로 정의되는 시뮬레이션 관계로 생각할 수 있습니다. 그러나 다른 종류의 시뮬레이션 관계가 존재합니다.
논리적 관계는 ML과 같은 언어와 읽은 논문에서와 같이 어셈블리 언어로의 번역 간의 대응 관계를 표시하는 데 사용할 수 있습니다. 논리적 관계는 유형 구조에 귀납적으로 정의됩니다. 논리적 관계는 각 유형 생성자에 대해 번역이 올바르다는 것을 보여줌으로써 번역이 올바르다는 것을 보여주는 구성 수단을 제공합니다. 함수 유형에서 정확성 조건 조건은 다음과 같이 말할 수 있습니다.이 함수의 변환은 변환 된 입력을 변환 된 출력으로 가져옵니다.
논리 관계는 람다 미적분학을 기반으로하는 언어에 대한 다양한 기술입니다. 논리 관계의 다른 애플리케이션 (부터 포함 여기 ), 람다 definability 특성화 denotational 시맨틱 정의 관련된 파라 메트릭 다형 특성화 추상 해석 모델링 데이터 표현을 검증 완전히 추상적 인 의미를 정의하고 고차원 언어 로컬 상태 모델링.
시뮬레이션 관계는 일반적으로 두 프로그램의 동등성을 보여주기 위해 사용됩니다. 일반적으로 이러한 프로그램은 채널에서 메시지를 보내는 것과 같은 일종의 관찰을 생성합니다. P가 Q가 할 수있는 모든 것을 할 수 있다면 한 프로그램 P는 다른 Q를 시뮬레이트합니다.
Bisimulation은 대략 두 가지 시뮬레이션 관계입니다. 추가 조건이 일반적으로 존재하지만 프로그램 P를 보여주고 프로그램 Q를 시뮬레이트하고 해당 프로그램 Q가 프로그램 P를 시뮬레이트 할 수 있으며 시뮬레이션을 수행 할 수 있습니다. Bisimulation 에 대한 Wikipedia의 항목 은 좋은 (보다 정확한) 출발점입니다. 아이디어의 수천 가지 변형이 존재하지만 그것은 거의 같은 형태의 컴퓨터 과학, 모달 논리 및 모델 이론으로 재창조 된 근본적인 아이디어입니다. Sangiorgi의 기사 는 아이디어의 훌륭한 역사를 제공합니다.
두 개념 사이의 관계를 설정하는 한 논문은 Andy Pitts의 의미론과 구문의 논리적 관계에 대한 참고 사항으로 논리적 관계, 궁극적으로 구문 적으로 정의 된 의미 론적 개념을 사용하여 순응 적 개념 인 응용 적 이중화 에 대한 특정 속성을 증명합니다 .
두 가지 유형의 관계는 다른 상황에서 사용되는 것으로 보입니다. 전이 시스템에서 해석되는 프로세스 계산 또는 모달 논리를 처리 할 때 형식화 된 언어 및 시뮬레이션 관계에 대한 논리 시뮬레이션. Dave Clarke는 매우 직관적 인 설명을 제공하므로 도움이 될만한 몇 가지 포인터 만 추가하겠습니다.
추상적 해석을 사용하여 두 가지 개념을 특성화하는 작업이 진행되었습니다. 그것은 당신이 원하는 것이 아닐 수도 있지만, 적어도 두 가지 개념은 동일한 수학적 틀에서 취급됩니다.
Samson Abramsky는 논리 관계를 사용하여 게으른 Lambda 미적분학에 대한 견고성 및 엄격 성 분석 종료 ( 추상 해석, 논리 관계 및 Kan 확장 ) 를 증명했습니다 . 그는 또한 논리적 관계가 Galois 연결 추상 해석 의미에서 추상화 기능을 정의 함을 보여 주었다. 최근에 Backhouse와 Backhouse는 기본 유형의 Galois 연결에서 고차 유형의 Galois 연결을 구성하는 방법을 보여 주었으며 이러한 구성은 논리적 관계 ( 논리 관계 및 Galois 연결 )를 사용하여 동일하게 설명 할 수 있습니다 . 따라서 유형화 된 기능 언어의 특정 컨텍스트에서 두 개념은 동일합니다.
시뮬레이션 관계는 다양한 모달 및 시간 논리에 대한 Kripke 구조 간의 속성 보존을 특징으로합니다. 유형 대신 논리에 양식이 있습니다. 시뮬레이션 관계는 또한 갈루아 연결과 추상화를 정의합니다. 이러한 추상화에 특별한 속성이 있는지 물어볼 수 있습니다. 답은 표준 추상화가 건전하고 시뮬레이션 관계 기반 추상화가 완료되었다는 것입니다. 완전성의 개념은 Galois 연결과 관련이 있으며, 이는 직관적 인 해석과 일치하지 않을 수 있습니다. 이 작업 라인은 David Schmidt ( 프로그램 추상화를위한 구조 보존 바이너리 관계 )와 Francesco Ranzato 및 Francesco Tapparo ( 추상 해석에 의한 일반화 된 강력한 보존)에 의해 개발되었습니다 .
두 가지 개념이 다소 모호하다고 말하고 싶습니다. 둘 다 어떻게 든 평등의 개념을 구현하는 계산 메커니즘의 이진 관계에 관한 것입니다. 논리 관계는 유형 구조의 유도에 의해 정의되지만 시뮬레이션은 원하는대로 정의 할 수 있지만 용어는 일치를 암시합니다.