두 프로그램이 다르다고 언제 말할 수 있습니까?


15

Q1. 두 개의 프로그램 (C ++과 같은 프로그래밍 언어로 작성)이 언제 다르다고 말할 수 있습니까?

첫 번째 극단은 두 프로그램이 동일하다면 동일하다는 것입니다. 다른 극단적 인 점은 두 개의 프로그램이 동일한 기능을 계산할 때 동등하다는 것입니다 (또는 유사한 환경에서 동일한 관찰 가능한 동작을 보여줍니다). 그러나 이것들은 좋지 않습니다. 우선 순위를 검사하는 모든 프로그램이 같은 것은 아닙니다. 결과에 영향을주지 않고 코드 줄을 추가 할 수 있으며 여전히 동일한 프로그램으로 간주합니다.

Q2. 프로그램과 알고리즘이 같은 종류의 객체입니까? 그렇지 않은 경우 알고리즘의 정의는 무엇이며 프로그램의 정의와 어떻게 다른가요? 언제 두 알고리즘이 동일하다고 말할 수 있습니까?


프로그램 동형 문제? "이 프로그램은 항상 정지하는 프로그램과 동형인가?" 중단 문제를 복구 하시겠습니까? 우리가 경계 정지 프로그램으로 제한한다면 문제는 단순한 그래프 동형이 아닌가?
user834

5
두 알고리즘이 언제 같은가요? arxiv.org/abs/0811.0811
sdcvvc

1
전적으로 상황에 의존하지 않습니까? 여기에 약간 철학적이지만 볼트로 고정 된 의자와 뒤집힌 볼트로 고정 된 의자는 물리적으로 동일하지만 의자 의 아이디어 측면에서 동일하지 않습니다 .
Rei Miyasaka

약간의 주제는 없지만, 증거는 프로그램 이므로
Radu GRIGore

1
다음 기사는 매우 관련이 있습니다. 나는 얼마 전에 그것을 훑어 보았지만 Blass와 Gurevic은 일반적으로 실제로 글을 잘 읽습니다 (Dershowitz가 다른 것을 읽은 것을 기억하지는 않습니다. research.microsoft.com/ko-kr/um/people/gurevich/Opera/192.pdf 두 알고리즘이 같은 이유는 무엇입니까? ANDREAS BLASS, NACHUM DERSHOWITZ, YURI GUREVICH
kasterma

답변:


18

Q1 : 시간, 자원 사용, 비결정론, 종료와 같은 것을 고려하거나 고려하지 않을 수있는 프로그램 동등성 (추적 동등성, 문맥 상 동등성, 관측 적 동등성, 유사성)에 대한 많은 개념이 있습니다. 프로그램 동등성에 대한 유용한 개념을 찾는 데 많은 노력을 기울였습니다. 예 : Andy Pitts의 운영 기반 프로그램 동등성 이론 . 그러나 이것은 표면을 거의 긁지 않습니다. 두 프로그램이 서로 다른 경우에 관심이있는 경우에도 유용합니다. 정지하지 않는 프로그램 (이중화 및 공동화 사용)에 대해 추론 할 수도 있습니다.

Q2 :이 질문의 일부에 대한 한 가지 가능한 대답은 대화식 프로그램 이 알고리즘이 아니라는 것입니다 (알고리즘이 모든 입력을 한 번에 취하는 알고리즘을 고려한다고 가정하지만이 좁은 정의는 온라인 알고리즘을 제외합니다). 프로그램은 환경과 상호 작용하는 상호 작용 프로세스 모음 일 수 있습니다. 이것은 분명히 Turing-machine / Recursion 이론 알고리즘과 일치하지 않습니다.


IO와 부작용은 일반적으로 고전적인 알고리즘 개념에 전혀 포함되지 않습니다.
Raphael

15

다른 극단적 인 점은 두 개의 프로그램이 동일한 기능을 계산할 때 동등하다는 것입니다 (또는 유사한 환경에서 동일한 관찰 가능한 동작을 보여줍니다). 그러나 이것들은 좋지 않습니다. 우선 순위를 검사하는 모든 프로그램이 같은 것은 아닙니다. 결과에 영향을주지 않고 코드 줄을 추가 할 수 있으며 여전히 동일한 프로그램으로 간주합니다.

이것은 극단적 인 것은 아니다 : 프로그램 동등성 은 관측의 개념과 관련 하여 정의되어야한다 .

PL 연구에서 가장 일반적인 정의는 문맥 상 동등성입니다. 문맥 상 등가에서, 우리는 프로그램을 더 큰 프로그램의 구성 요소 (컨텍스트)로 사용함으로써 프로그램을 관찰한다는 아이디어입니다. 따라서 두 프로그램이 모든 상황에 대해 동일한 최종 값을 계산하면 동일한 것으로 판단됩니다. 이 정의는 가능한 모든 프로그램 컨텍스트를 수량화하기 때문에 직접 작업하기가 어렵습니다. PL의 전형적인 연구 프로그램은 문맥 상 동등성을 암시하는 구성 추론 원칙을 찾는 것입니다.

그러나 이것이 유일하게 가능한 관측 개념은 아닙니다. 예를 들어 프로그램의 메모리, 시간 또는 전원 동작을 관찰 할 수 있다고 쉽게 말할 수 있습니다. 이 경우 더 많은 프로그램을 구별 할 수 있기 때문에 프로그램 동등성이 줄어 듭니다 (예를 들어, mergesort는 이제 quicksort와 구별 가능합니다). 타이밍 채널 공격에 영향을받지 않는 언어를 설계하거나 공간에 한정된 프로그래밍 언어를 설계하려는 경우 이는 일종의 작업입니다.

또한 계산의 중간 상태 중 일부를 관찰 가능한 것으로 판단 할 수도 있습니다. 이는 간섭 가능성으로 인해 동시 언어에서 항상 발생합니다. 그러나 순차 언어의 경우에도이보기를 원할 수 있습니다. 예를 들어, 암호화되지 않은 데이터를 주 메모리에 저장하지 않는 계산을하려면 주 메모리에 대한 쓰기를 관찰 가능한 것으로 간주해야합니다.

기본적으로 프로그램 동등성에 대한 단일 개념은 없습니다. 그것은 항상 당신이 선택한 관측의 개념과 관련이 있으며, 그것은 당신이 생각하는 응용에 달려 있습니다.


1
예를 들어 문제의 프로그래밍 언어가 대화 형인 경우 (즉, 값을 산출하지 않는 경우) 문맥 상 동등성 (또는 문맥 상 합치 성)에 대한 고유 한 개념이 없음을 지적 할 가치가 있습니다.
Martin Berger

α

1
αα

1
@ SamTobin-Hochstadt. 좋아, "보통"을 잊어 보자. 내가 얻는 느낌은 니엘이 말한 것과 똑같은 말을하고 있다는 것입니다. 여전히 모호한 아이디어는 Neel의 틀에서 올바른 종류의 관찰과 올바른 종류의 프로그램 컨텍스트를 선택하여 공식화 할 수 있습니다.
Uday Reddy

1
λλ엑스.엑스λ와이.와이

2

Q2 : 일반적인 이론적 정의는 알고리즘과 프로그램을 실제로 구분하지 않지만 일반적으로 사용되는 "알고리즘"은 프로그램 클래스와 비슷합니다. 나를 위해 알고리즘은 일부 서브 루틴이 완전히 지정되지 않은 프로그램과 같습니다 (예 : 원하는 동작이 정의되었지만 구현되지는 않음). 예를 들어 가우시안 제거 알고리즘은 실제로 정수 곱셈을 수행하는 방법을 지정하지 않습니다.

이것이 순진한 경우 죄송합니다. 나는 PL 연구를하지 않습니다.


아이디어는 아마도 서브 루틴에 대해 여러 가지 구현이 있으며 사양에 따라 수행되는 한 선택 하지 않아도 된다는 것입니다.
Raphael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.