실제로 Halting Problem이 중요한 이유는 무엇입니까?


149

프로그램 정지 여부를 결정할 가능성을 없애기 위해 Halting Problem 이 자주 사용되는 이유를 이해하지 못합니다 . Wikipedia [article] [1]은 유한 한 메모리를 가진 결정 론적 시스템이 이전 상태를 정지 시키거나 반복 할 것이라고 정확하게 설명합니다. 공간리스트가 O (1) 인 Halting 함수를 구현하기 위해 연결된 목록이 반복되는지 여부를 감지하는 알고리즘을 사용할 수 있습니다.

Halting Problem 증거는 거짓말 쟁이의 역설과 같은 방식으로 (최소한 주기적으로) 모순되는 소위 "역설"에 지나지 않는 것 같습니다. 그것이하는 유일한 결론은 홀팅 기능이 그러한 잘못된 질문에 영향을 받기 쉽다는 것입니다.

따라서 역설적 인 프로그램을 제외하고 Halting 기능을 결정할 수 있습니다. 그렇다면 왜 우리는 그것을 반대의 증거로 보유합니까?

4 년 후 :이 글을 쓸 때 방금 이 비디오를 보았습니다 . 프로그래머는 일부 프로그램을 가져 와서 어떤 프로그램을 종료해야하는지 결정해야하며 비디오는 왜 이것이 불가능한지를 설명합니다. 나는 임의의 프로그램이 주어지면 주인공이 종료했는지 여부를 증명할 가능성이 있다는 것을 알았 기 때문에 좌절했습니다. 일반성의 개념은 어떻게 든 잃어 버렸습니다. "일부 프로그램의 종료를 증명할 수 없음"과 "종료 된 프로그램을 입증 할 수 없음"의 차이입니다. 많은 알고리즘이 공식적으로 시연되었습니다. 내가 온라인에서 찾은 모든 단일 참조 로이 구별을하지 못하는 것은이 질문의 제목에 어떻게 왔는지였습니다. 이런 이유로, 나는 정말 답변을 주셔서 감사 합니다 정지 기능을 부울 대신 삼항으로 재정의합니다.


16
"유한 한 기억을 가진 결정 론적 기계"는 유한 한 기계 장치에 지나지 않기 때문에 "지루하다"; 이들은 일반적으로 계산 모델링에는 유용하지 않습니다. 정지 문제에 관해서는 : (튜링) 계산할 수없는 함수의 특정 예입니다. 비 구조적 증거에 만족하는 경우 "필요"하지 않습니다. 그래도 여전히 역사적 관련성이 있습니다.
라파엘

16
즉, 귀하의 질문은 잘못된 정보로 나타납니다. 당신은 계산 이론 의 기초에 대해 이야기 하고 싶을 수도있다 (이것은 논의 된 모델이 아니라 현실에 의해 알려지는 직관에 도전 할 것이다 ). 시작하려면 참조 질문참조 하십시오 . 당신의 직관 (이론이가는 한)에 치명적인 결함이 있다는 "증거"가 더 필요하다면, 이 질문을 읽으십시오 .
라파엘

12
"공간 복잡도가 O (1) 인 Halting 함수를 구현하기 위해 연결된 목록 루프를 감지하는 알고리즘을 사용할 수 있습니다."-2GB의 저장 공간이있는 컴퓨터의 문제를 해결하려면 이상이 필요합니다. 2 ^ 2000000000 단계와 더 큰 컴퓨터.
user2357112

11
오래 전에 나는 친구에게 멈춤 문제에 대해 이야기하고 있었고 근처에 앉아있는 누군가가 "멈춤 문제가 무엇입니까?"라고 물었습니다. 친구가 그에게 돌아와서 "우리가 멈춤 문제를 해결할 수 있다면 구름 위에 도시를 건설 할 수 있습니다"라고 말했습니다. 사실입니다.
Francis Davey

8
@emory이 주장은 명백히 사실입니다 : P => Q우리가 그것이 P거짓 임을 알고 있다면 (그리고 Halting Problem을 해결할 수 없다는 것을 알고 있다면) 어떤 Q에 대해서도 참입니다 . 프랜시스는 "멈춤 문제를 해결할 수 있다면 죽음 자체를 치료할 수있을 것"이라고 말할 수있었습니다. 논리적 의미가 정의되는 방식입니다.
amalloy

답변:


217

실제로 많은 실질적인 문제가 변장에서 멈추는 문제이기 때문입니다. 그들에 대한 해결책은 정지 문제를 해결합니다.

주어진 프로그램에 대해 가능한 가장 빠른 기계 코드를 찾는 컴파일러를 원하십니까? 실제로 정지 문제.

보안 수준이 높은 일부 변수와 보안 수준이 낮은 일부 변수가있는 JavaScript가 있습니다. 공격자가 높은 보안 정보를 얻을 수 없도록해야합니다. 이것은 또한 정지 문제입니다.

프로그래밍 언어에 대한 파서가 있습니다. 변경했지만 여전히 사용했던 모든 프로그램을 구문 분석해야합니다. 실제로 정지 문제.

바이러스 백신 프로그램이 있으며 악성 프로그램이 실행되는지 확인하려고합니다. 실제로 정지 문제 만 있습니다.

Wikipedia 예제의 경우 최신 컴퓨터를 유한 상태 머신으로 모델링 할 수 있습니다. 그러나 이것에는 두 가지 문제가 있습니다.

  1. RAM의 정확한 비트 수에 따라 모든 컴퓨터는 다른 자동 장치입니다. 따라서 자동 코드는 실행할 수있는 시스템에 따라 다르므로 특정 코드를 검사하는 데 유용하지 않습니다.

  2. 당신은 필요할 것 당신이 RAM의 N 비트가있는 경우 상태. 현대 8GB 컴퓨터의 경우 2 32000000000 입니다. 이것은 wolfram alpha가 그것을 해석하는 방법조차 모를 정도로 너무 큰 숫자입니다. 내가 2 10 9 할 때 그것은 300000000 십진수 가 있다고 말합니다 . 이것은 보통 컴퓨터에 저장하기에 상당히 큰 것입니다.2n2320000000002109300000000

Halting 문제는 알고리즘의 상대적 어려움에 대해 추론 할 수있게합니다. 그것은 존재하지 않는 알고리즘이 있다는 것을 알려줍니다. 때로는 우리가 할 수있는 일은 문제를 추측하고 해결했는지 알 수 없습니다.

정지 문제가 없다면, 이론을 입력하고 그것이 사실인지 아닌지를 출력하는 힐버트의 마법 알고리즘을 계속 찾고있을 것입니다. 이제 우리는 우리가 찾는 것을 멈출 수 있다는 것을 알고 있으며, 이러한 문제를 해결하기위한 휴리스틱과 두 번째 최상의 방법을 찾기 위해 노력할 수 있습니다.

업데이트 : 의견에서 제기 된 몇 가지 문제를 해결하기 위해.

@Tyler Fleming Cloutier : "무의미한"문제는 정지 문제가 결정 불가능하다는 증거에서 발생하지만 결정 불가능의 핵심은 실제로 무한한 검색 공간을 갖는 것입니다. 주어진 속성을 가진 객체를 찾고 있는데, 존재하지 않는 경우 언제 완료했는지 알 수있는 방법이 없습니다.

문제의 어려움은 가지고있는 수량 자 수와 관련이있을 수 있습니다. 임의의 속성을 가진 객체 가 존재 함을 나타내려고 ( ) 찾을 때까지 검색해야합니다. 존재하지 않는 경우 (일반적으로)이를 알 수있는 방법이 없습니다. 모든 객체 ( )에 속성이 있음을 증명하는 것은 어렵지만 속성이없는 객체를 검색하여 반증 할 수 있습니다. forall과 존재 사이에 교대가 많을수록 문제가 더 어려워집니다.

이에 대한 자세한 내용은 산술 계층을 참조하십시오 . 레벨 1은 반 결정 가능하지만 초과하는 것은 결정할 수 없습니다.Σ00=Π00

Halting 문제 또는 Liars 역설과 같은 무의미한 역설을 사용하지 않고 결정 불가능한 문제가 있음을 보여줄 수도 있습니다. 튜링 머신은 비트 열, 즉 정수를 사용하여 인코딩 할 수 있습니다. 그러나 문제는 언어, 즉 정수의 하위 집합으로 인코딩 될 수 있습니다. 정수 세트와 정수의 모든 서브 세트 세트 사이에 삭감이없는 것으로 알려져 있습니다. 따라서 관련 Turing 머신 (알고리즘)이없는 몇 가지 문제 (언어)가 있어야합니다.

@ 브렌트 : 예, 이것은 현대 컴퓨터에서 결정할 수 있음을 인정합니다. 그러나 특정 머신에 따라 결정될 수 있습니다. 디스크 공간이있는 USB 드라이브 또는 네트워크 또는 기타 다른 곳에 저장할 수있는 USB 드라이브를 추가하면 시스템이 변경되어 결과가 여전히 유지되지 않습니다.

또한이 코드가 실패하고 메모리가 부족하기 때문에 알고리즘이 "이 코드가 중지 될 것"이라고 말하는 횟수가 여러 번있을 것이라고 말해야합니다. 그리고 메모리의 단일 비트를 추가하면 코드가 성공하고 다른 결과를냅니다.

문제는 Turing 머신에 무한한 메모리가 없다는 것입니다. 테이프에 무한한 양의 기호가 기록되는 시간은 없습니다. 대신 튜링 머신에는 "언 바운드"메모리가있어 필요할 때 더 많은 메모리 소스를 계속 확보 할 수 있습니다. 컴퓨터는 이렇습니다. RAM 또는 USB 스틱, 하드 드라이브 또는 네트워크 스토리지를 추가 할 수 있습니다. 그렇습니다. 우주의 원자가 부족하면 메모리가 부족합니다. 그러나 무제한 메모리를 갖는 것이 훨씬 유용한 모델입니다.


4
@Mehrdad "주어진 프로그램에 대해 가능한 가장 빠른 머신 코드"에 대한 합리적인 정의에 대한 질문은 "그런 컴파일러는있을 수 없습니다."입니다.
David Richerby

13
또한 출력 할 수있는 가장 짧은 기계 코드, 메모리가 가장 적은 기계 코드 등을 찾는 데에도 사용됩니다. 일반 프로그램의 경우 최적의 변환을 찾는 것은 결정 불가능합니다. 이것이 기본적으로 쌀의 정리입니다.
jmite

4
힐링의 마법 알고리즘을 튜링 동등성 개념과 밀접하게 연관시키지 않은 시점에 대한 결론으로, 우리는 여전히 고 토스 또는 자체 수정 코드가 더 강력한 계산을 허용하는지 계산적으로 더 강력한 형태의 하드웨어를 찾고 있는지 논쟁 중입니다. 그리고 최고의 프로그래밍 언어 인 논쟁은 지금보다 훨씬 더 주관적 일 것입니다.
sdenham 20시 47 분

3
예상치 못한 곳에서도 나타납니다. 모든 유효한 프로그램을 컴파일하면서 모든 유효하지 않은 프로그램을 거부하는 C ++ 컴파일러를 작성하고 싶습니까? 중지 문제를 먼저 해결하십시오 .C ++ 템플릿 메타 프로그래밍은 Turing-complete이므로 일반적인 경우 템플릿이 유효한지 여부를 확인하면 해결해야합니다.
Mark

7
@Merhrdad : "전체 컴퓨터 프로그램 시뮬레이션"의 예는 정지 문제가 왜 중요한지를 보여주는 훌륭한 예입니다. 일부 프로그램의 경우 프로그램 시뮬레이션이 간단하지 않습니다 (예를 들어, 정지에 대한 wikipedia 페이지 참조). 문제가이 형태로기만 될 수 있다면, 안티 바이러스 문제와 같은 더 숨겨진 형태를 누군가에게 설명하는 것이 얼마나 어려운지를 상상할 수 있습니다.
Cort Ammon

49

실제로는 무지한 상사에게 "무엇을 요구 하는가 수학적으로 불가능하다"고 말할 수 있기 때문에 중요합니다.

중단 문제 및 다양한 NP 완전 문제 (예 : 외판원 문제)은 올 많은 "왜 당신은 그냥 X를 수행하는 프로그램을 만들 수없는 이유는 무엇입니까?"의 형태로, 당신은 설명을 제공 할 수 있어야합니다 우주의 남은 생애 내에서 불가능하거나 불가능한 이유에 대해

Turing-complete 가 아닌 언어를 디자인 할 수 있으므로 무한한 재귀와 반복을 금지하여 분석 할 수 있습니다.




8
Turing-complete가 아닌 언어를 설계하는 것이 가능합니다 . 유용한 비 Turing 완전한 언어의 예 : SQL (실제로 제거 된 SQL) Turing-completeness는 자동으로 종료되지 않은 언어를 DB 쿼리를 실행할 때 원하지 않는 언어로 자동 추가합니다. (어쨌든 모든 최신 SQL 구현이 어쨌든 튜링 완전성을 제공하는 것을 두려워합니다)
Bakuriu

8
@FranciscoPresencia : 그들은 연구팀을 사용했기 때문에 일반적인 요점은 여전히 ​​유효합니다.
RemcoGerlich

4
@MooingDuck : Flickr는 공원과 조류 중에서 선택하지 않으며, 시도하거나 시도합니다. 또는 XOR이 아닙니다.
수수께끼

45

공간리스트가 O (1) 인 Halting 함수를 구현하기 위해 연결된 목록이 반복되는지 여부를 감지하는 알고리즘을 사용할 수 있습니다.

이를 위해서는 프로그램의 일부 상태 상태 사본을 최소 두 개 이상을 메모리에 저장하고 점검 프로그램의 오버 헤드를 저장해야합니다. 따라서 특정 컴퓨터에서 해당 컴퓨터에서 실행할 수있는 모든 프로그램을 테스트 할 수 없으며 메모리가 절반 미만인 작은 컴퓨터에서 실행되는 프로그램 만 테스트 할 수 있습니다.

주어진 유한 한 크기의 컴퓨터의 정지 문제에 해결할 수없는 유한 한 크기의 컴퓨터. 더 큰 컴퓨터에서만 해결할 수 있습니다. (이것은 당신이 제안하는 방법뿐만 아니라 모든 방법에 적용됩니다. 나는 공식적인 증거를 제시하지 않을 것이지만 여기에 요점이 있습니다. 컴퓨터 C가 적어도 하나의 P가 종료되지 않는 N 개의 다른 프로그램을 실행할 수 있다면 그런 다음 N 개의 프로그램이 중지되어 N 개의 다른 검증 프로그램도 실행할 수 있는지 테스트 할 수있는 컴퓨터 V. C와 V가 동일한 컴퓨터 인 경우 P는 V가 실행하는 N 개의 다른 프로그램 중 하나가 아니므로 컴퓨터는 최소한 N + 1 개의 다른 프로그램을 실행해야하며, 이는 C가 N 개의 다른 프로그램을 실행한다는 가정과 상충됩니다.)

M2M256

숫자는 컴퓨터를 유한 상태 머신으로 생각하는 것이 거의 실용적이지 않다는 것을 보여줍니다. 상태의 수는 제한적일 수 있지만, 마음이 흔들리고 비현실적으로 엄청납니다. 비토이 프로그램에 대해 추론하는 유일한 방법은 상태를 열거하는 것이 아니라 논리적 추론을 통해 요약하는 것입니다.

역설적 인 프로그램을 제외하고, Halting Problem은 결정 가능하다

역설은 문제에서 나온 것이 아니라 해결책을 시도하여 나온 것입니다. 특정 프로그램에는 프로그램이 종료되면 "예", 프로그램이 종료되지 않으면 "아니오"라고하는 알고리즘이 있습니다. 사소한 일입니다.print "yes" 또는 print "no"할 것입니다. 문제는 어느 것을 호출할지 결정하는 것입니다. 정지 문제를 해결할 수 없다는 것은이 결정을 내리는 알고리즘이 없음을 의미합니다. 증거가 대각 인수를 사용하는 이유는 것을 보여 할 필요가 있다는 것입니다 없음솔루션 작동; 이를 위해 임의의 목적으로 시작된 솔루션에서 시작하여 누락 된 프로그램을 구성하여 일부 프로그램을 놓쳐 야한다는 것을 보여줍니다. 사선 화 (부적절하게“역설”이라고 부름)는 결과 프로그램이 아니라 시공 중입니다. 결과 프로그램은 자체 참조가 아닙니다.

더 일반적인 결과가 있습니다 쌀의 정리 그 상태 가 아닌 사소한 속성프로그램의 동작은 결정 불가능합니다. 프로그램의 동작에만 의존하고 작성된 특정 방식이 아닌 속성 (예 : "소스 코드가 42 자 미만으로 구성되어 있습니까?")은 명확하게 결정할 수 있지만 " 소스 코드가 42 자 미만으로 구성되어 있고 모든 입력에 대해 동일한 결과를 반환합니까?”가 아니거나“이 프로그램이 아무 것도 출력하지 않습니까?” 정지는 하나의 예일뿐입니다. 그것은 실제로 실제로 나타나기 때문에 중요한 것입니다 (보통, 우리는 프로그램이 실행중인 컴퓨터의 유한 한 자원을 고려할 때 프로그램이 합리적인 시간에 결과를 반환할지 여부를 알고 싶어하지만 실제로 거의 대답 할 수 없기 때문에 우리는 충분한 시간과 메모리가 주어지면 프로그램이 결국 종료되는지 여부에 대한 간단한 질문에 기꺼이 동의합니다.


2
나는 "자체가 포함 된 주어진 프로그램과 동일한 출력을 생성하지만 (프로그램 자체가 아닌) 자체 프로그램 을로드하는 시간을 포함하여 더 짧은 시간 내에 프로그램을 생성하는 프로그램이 있을까?" 후보 프로그램의 최대 길이는 각 프로그램을 테스트하는 시간과 같이 제한되기 때문에 결정하기 쉽지만 결정하기는 어렵습니다.
supercat

@supercat 예,이 속성은 결정 가능합니다. 입력을받는 프로그램의 일반적인 경우에는 결정할 수 없습니다.
Gilles

1
Halting Problem은 일반적으로 실행 과정에서 프로그램이 수신하는 모든 입력이 프로그램과 함께 제공된다고 가정한다는 인상을 받았습니다. 특정 입력 시퀀스를 공급 한 프로그램에 대해 Halting Problem을 마술로 해결할 수있는 머신이 있다면 , 그러한 머신은 프로그램이 모든 제한된 길이의 입력에 대해 정지하는지 여부를 결정할 수 있습니까?
supercat

3
@supercat 아니오, 모든 입력을위한 중단 오라클 은 중단 된 입력을위한 중단 오라클 보다 한 단계 더 향상 되었습니다. 그것은이 사이트에 대해 좋은 질문을 할 것입니다… 사실 우리는 그것을 가지고 있습니다 . 그건 그렇고, 나의 기본 정신 모델은 재귀 함수입니다. 여기서 "입력"은 "인수"를 의미하고 프로그램을 실행한다는 것은 그것을 인수에 적용하는 것을 의미합니다. 당신은 튜링 머신에 관한 맥락에서 내 진술이 거짓이라는 것을 옳습니다, 나는 그것을 업데이트 할 것입니다.
Gilles

28

Halting Problem은 거짓말 쟁이의 역설과 같은 방식으로 (최소한 주기적으로) 모순되는 소위 "역설"에 지나지 않는 것 같습니다. 그것이하는 유일한 결론은 홀팅 기능이 이러한 잘못된 질문에 영향을 받기 쉽다는 것입니다

아니, 그게 멈추는 문제가 아닙니다 . 거짓말 쟁이의 역설과 같은 역설은 사실이 아니거나 거짓이 아니며 단순히 이해가되지 않습니다. 반면에 결정 론적 알고리즘은 주어진 입력에 대해 중단되거나 영원히 실행됩니다. 이 함수 halts(program, input)는 모든 프로그램, 모든 입력에 대해 완벽하게 정의되고 결정적인 값을 갖습니다. 우리는 어떤 프로그램에 대해서도 결정할 수 없습니다 . 더 정확하게 말하면, 모든 프로그램 / 입력 쌍에 대해 결정할 수있는 프로그램을 작성할 수는 없습니다.

Σ(n):=nnnnΣ(n)


2
일반적인 형태로 거짓말 쟁이의 역설은 그 자체를 명시 적으로 언급하지만, 그렇지 않은 경우에도 동일한 문제가 발생할 수 있습니다. 이 문장에 대한 답은 "텍스트를 취하여 첫 번째 쉼표 뒤에 따옴표로 묶은 사본을 삽입하여 형성 한 문장에 대한 답입니까?" 첫 번째 쉼표 뒤에 작은 따옴표로 묶은 사본을 삽입하십시오. 이러한 진술은 명시 적으로 자기 참조적인 것이 아니라, 캐릭터마다 동일한 진술의 진실성을 의미합니다.
supercat

2
@supercat : 허, 나는 영어로
퀴인을

@ SamB : 몇 가지를 보았지만 일부보다 더 장황하지만 더 자연스럽게 읽는 원래의 공식으로 내 손을 시험해보기로 결정했습니다.
supercat

24

프로그램 정지 여부를 결정할 가능성을 없애기 위해 Halting Problem이 자주 사용되는 이유를 이해하지 못합니다. Wikipedia 기사는 유한 메모리를 가진 결정 론적 시스템이 이전 상태를 멈추거나 반복한다고 정확하게 설명합니다. 공간리스트가 O (1) 인 Halting 함수를 구현하기 위해 연결된 목록이 반복되는지 여부를 감지하는 알고리즘을 사용할 수 있습니다.

첫째, 이론적으로 유한 메모리를 가진 실제 컴퓨터를 유한 상태 머신 으로 보는 것이 합리적입니다. 그러나 실제로 실제 컴퓨터의 상태 수는 너무 커서 실제 컴퓨터는 Turing 머신 또는 기타 무한 상태 계산 모델에 의해 훨씬 더 잘 모델링됩니다.

둘째, 이론적으로 도 현대 컴퓨터를 무한 상태 머신으로 보는 것이 합리적입니다. 튜링 머신에는 무한 테이프가 없으며 머신에 메모리가 부족할 때 항상 확장 할 수있는 테이프가 있습니다. 그리고 그것이 실제 컴퓨터로 할 수있는 일이 아닌가? (그리고 CPU의 주소 공간이 부족하면 클라우드 등을 사용할 수 있습니다.)

Halting Problem은 거짓말 쟁이의 역설과 같은 방식으로 (최소한 주기적으로) 모순되는 소위 "역설"에 지나지 않는 것 같습니다. 그것이하는 유일한 결론은 홀팅 기능이 그러한 잘못된 질문에 영향을 받기 쉽다는 것입니다. 역설적 인 프로그램을 제외하고는 Halting Problem을 결정할 수 있습니다. 그렇다면 왜 우리는 그것을 반대의 증거로 보유합니까?

HPxHPx

중단 문제 의 결정 불가능성에 대한 튜링의 증거 는 거짓말 쟁이 역설과 유사한 트릭을 사용합니다. 역설은 종종 명백한 모순 으로 정의되며 , 일부 사람들은 역설이 실제 모순이 아니라고 추론 합니다. 그러나 Russel의 역설 (거짓말의 역설에 대응하는 공식적인 이론 이론적 대응)은 수학에서 실제 모순을 보여 주었고 , 정지 문제의 결정 불가능성에 대한 증거는 모순에 의한 증거에 대한 실제 모순을 사용합니다 .


1
실제 컴퓨터, 유한 상태 기계 및 Turing 기계 사이의 관계를 설명하는 +1은 문제 설정의 중요한 부분입니다.
David Richerby

1
당신은 내 관심을 끌었습니다. 명백한 모순과 실제 모순의 차이점은 무엇입니까?
브렌트

또 다른 방법 : 일반적으로 말해서 프로그래밍은 제한된 자원을 가정하지 않습니다. 우리가 설계하는 프로그램이나 프로그램의 대부분은 특별히 설계하지 않는 한 제한된 또는 고정 된 양의 컴퓨팅 자원을 사용하도록 작성 되지 않았습니다. 방법 (예 : 임베디드 시스템을 프로그래밍 할 때 종종 필요함).
reinierpost

3
@ 브렌트. 많은 역설이 전혀 모순되지는 않지만 첫눈에 반합니다. 더 자세히 살펴보면 추론에 오류가 있거나 그 단어가 다른 문맥에서 또는 그와 비슷한 것을 사용하여 의미가 약간 변경된 것으로 판명되었습니다. 그러나 때로는 역설이 실제 모순을 밝게 만듭니다.
Hoopje 2014

OP 이후이 문제를 계속 연구하고 있습니다. 고델의 불완전 성 정리는 사용중인 논리 시스템에 관계없이 항상 역설을 생각해내는 것이 가능하다는 것을 암시합니까?
Brent

17

jmite 님이이 질문에 정말 훌륭하게 답변했습니다. "거짓의 역설"과의 인식 된 유사성에 대한 작은 참고를 추가해 보겠습니다. 이것은 자기 참조 메커니즘의 사용으로 인해 발생한다고 생각합니다.

자기 참조는 역설적이지 않습니다!

자기 참조는 계산 (알고리즘이 코드, 리플렉션 )을 참조 할 수있는 인간 언어 ( 자기 자신, 자의식을 참조 할 수 있음) 에서 실제로 유용한 도구입니다 .

거짓말 쟁이의 역설을 일으키는 문제는 자기 참조가 아니며, 언어 내부의 (공식) 언어에 대한 진실 술어를 사용하려고합니다. 자체 참조가 없어도 문제가 발생할 수 있으므로 역설을 얻기 위해 자체 참조를 사용할 수있는 기능이 필요하지 않습니다. 자체 참조를 제거 할 수 있습니다! . 그것은 문장을 덜 좋고 간결하게 만들지 만 어렵지 않습니다. 기본적으로 Kleene의 고정 소수점 정리 가 입증 된 방식입니다. 거짓말 쟁이의 역설이 암시하는 것은 (공식) 언어로 된 진술의 진실은 자기 참조가 문제가 아니라 그 언어와 초월하다는 것입니다.


귀하의 불편 함은 중단 문제의 결정 불가능 (Touring machine의 경우)이 아니라 Turing machine을 컴퓨터의 이론적 모델로 받아들이는 것 같습니다. 일반적으로 (항상 그런 것은 아님) 튜링 머신 (및 랜덤 액세스 머신 과 같은 등가 계산 모델 )은 유한 오토마타보다 실제 컴퓨터에서 계산하는 데 매우 유용하며 그 이유는 충분합니다 (튜링 머신에는 그렇지 않음을 명심하십시오) 무한한 양의 메모리, 그것은 무한한 양의 메모리를 가지고 있으며 이것들은 다른 것들입니다. 무한한 것은 우리가 필요할 때 무한한 양의 메모리를 사용하지 않고 더 많은 메모리를 기계에 제공 할 수 있음을 의미합니다).

물론, 컴퓨터를 유한 오토마타로 생각하고 그것이 목적에 맞는다면 유한 오토마타의 정지 문제를 결정할 수 있습니다 (그리고 결정 가능한 것은 유한 오토마타가 아닌 튜링 머신에 의해 결정될 수 있음을 의미합니다). 그러나 사람들이 정지 문제를 사용할 때 일반적으로 의미하는 것은 아니며 Turing 기계의 정지 문제를 의미합니다.

s2s


14

정지 문제는 이전에는 수학에는 없었던 새로운 "수복 불가능 성"이라는 수학적 개념을 도입했습니다. 일부 문제에는 "증거"가 없다는 ( "역설적으로 역설적 인") 증거였다. 그것은 불가사의의 고 델리 안 개념과 관련이있다. 고 델스 정리 는 몇 년 전 튜링 (Turing)에 의한 정지 문제 공식화에 앞서 있었다. 고 델스 결과는 당시에는 다소 추상적 인 것으로 간주되어 연구자와 전문가에게만 알려졌습니다. Turings 공식은 결정 불가능한 원리가 컴퓨터 과학에서 임의의 프로그램이 중단되는지 여부를 결정하는 것과 같이 이론 적이고 고도로 실용적 이며 적용되는 질문 과 관련이 있으며 이론적 개념으로 간주되는 경우와 같이 " (컴퓨터가 이론을 발견 할 수 있는지에 대한 도전) 및 프로그램 종료 입증.

또 다른 흥미로운 각도는 (Diophantine) 수론에 몇 가지 매우 오래된 문제가 있다는 것인데, 이는 밀레니아에서 입증되지 않은 그리스인에서 비롯된 것입니다. Diophantine 방정식에 대한 일반적인 질문을 Hilberts 10th problem / theorem 이라고 결정할 수없는 관련 결과가 있습니다. 힐버트는 20 세기 초에 살면서 수학이 수학 문제에 대한 체계적인 접근 방식을 찾을 수있는 연구 프로그램으로 제안했습니다. 이 도전 / 계획은 수십 년 후의 결정 불가능한 발견에 의해 심각하게 타격을 받았다. 결정 불가능 성은 계속해서 연구의 진보 된 분야이며 결정 불가능한 문제와 결정 불가능한 문제 사이의 경계는 아마도 더 많은 연구와 분석을 받고있을 것입니다.


14

Halting 문제를 Halting 문제 (일명 Halt) 자체로 해결할 수 없다는 고전적인 "자기 참조"기반 증거를 혼동하는 것 같습니다.

자체 참조 프로그램 (정지되지 않은 경우에만 중단되는 프로그램)은 Halt를 해결할 수 없다는 것을 쉽게 증명할 수 있도록 구성되었습니다. 우리가 기술 Y를 통해 X가 불가능하다는 것을 증명한다는 사실은 Y가 Y를 암시 하지 않는다는 것이 X를 해결할 수없는 유일한 이유입니다.

달리 말하면, 우리는 Halt를 해결할 수 없을뿐만 아니라, 프로그램이 "정지하는 데 1 분 이상 걸리는 것처럼 척도하는 척도"이외의 프로그램이 정지 상태인지 판단 할 수없는 프로그램을 감지 할 수 없습니다. 멈추지 않습니다. "

Halting 문제점에서 시작하여 다른 문제점을 줄이면 결국 프로그램에 대한 거의 모든 질문을 줄인 지점에 도달하게됩니다. 우리는 쌀 정리로 끝납니다.

S를 Turing Machine이 허용하는 1의 사소한 속성이라고하자 . 즉, 속성 S의 입력을 허용하는 튜링 머신이 하나 이상 있고 그렇지 않은 튜링 머신이 하나 이상 있습니다.

주어진 Turing Machine T가 S 속성을 가진 입력을 받아들이면 결정할 수 없습니다.

튜링 머신이 정수를 허용하는지 알고 싶습니까? 결정할 수 없습니다.

튜링 머신이 산술 시퀀스를 허용하는지 알고 싶습니까? 결정할 수 없습니다.

일반적으로 Turing Machine의 내장에 대해 추론 할 수 있습니다. 특정 Turing Machine에 대해 추론하고 일부 시퀀스 등을 중지 / 수락하는지 여부를 증명할 수 있습니다. 그러나 다음 튜링 머신에서 테크닉이 작동하는지 알 수 없습니다.


1 으로 property of단지의 - 그것을 수락하는 방법의 메커니즘을 포함하지 않는 것을 인정됩니다. "100 단계 이하로 허용"은 수용되는 것이 아니라 수용하는 속성입니다.


"속성"이 무엇인지 설명하고 싶을 수도 있습니다. 왜냐하면 순진한 해석은 틀릴 수 있기 때문입니다.
Rick Decker

@rick 각주가 지금 그것을 다룬다 고 생각합니까?
Yakk

7

일반적으로 도입되고 언급 된 중지 문제는 단순한 문제 일 것입니다. 실제로 항상 'halts'또는 'loops'를 리턴하고 'don'만 리턴하는 3 개의 값 ( 'halts', 'loops', 'do n't know') 정지 함수가있을 수 없음을 증명하지 않습니다. 예를 들어, 특수 제작 된 코너 케이스는 알고 있지 않습니다.

정지 문제가 중요한 두 가지 이유 :

1) 이것은 결정 불가능한 첫 번째 문제 중 하나입니다. 가설 적으로 '모름'이 하나만 있어도 여전히 수학적으로 큰 관심을 가질 것입니다.

2) 일부 문제는 악의적 인 공격자가 분석 할 사례를 제공 할 수있는 중지 문제로 줄어 듭니다. 이로 인해 여전히 거부해야 할 유효한 사례가 있음을 인정해야합니다.

두 번째 요점으로, 소프트웨어 분석은 어려운 문제이지만, 분석과 언어 설계 모두에서 분석을보다 쉽게하기 위해 많은 진전이 이루어졌습니다. 특정 작업이 소프트웨어 분석과 유사하다는 것을 보여줄 수 있다면, 그렇습니다. 대문자 H로는 어렵습니다. '기술적으로 잘못되었거나 관련이 없지만 많은 경우 중단 문제를 해결하는 것이 불가능하기 때문에 불가능합니다.' 이 관찰의 속기.


5

에릭 헤너 (Eric Hehner)가 중단 문제의 해결이 일반적으로 잘못 이해되고 있다고 주장하는 일련의 논문에서 반대되는 주장이있다. "Epimenides, Gödel, Turing : 영원한 황금빛 엉킴", "중지 문제 문제", "중지 문제 재구성"및 "중지 문제"논문은 여기 에서 찾을 수 있습니다 . 이 답변이 "링크 만"이 아니기 때문에 나는 그의 결론 중 하나를 요약하려고 노력할 것이지만 논쟁은 아닙니다.

결론은 다음과 같습니다. 정지 문제를 해결할 수없는 이유는 문제를 해결하기 위해 작성된 프로그램이 모순을 만드는 데 사용될 수 있기 때문이 아니라 문제 자체가 구현할 수 없기 때문에 함수의 사양이 구현할 수없는 동시에 1과 2를 모두 리턴해야합니다. 사양 을 만족시키는 프로그램이 없다는 것은 놀라운 사실이 아닙니다.f(0)=1f(0)=2hh(M)MHhh


3
나는 따르지 않는다. 정지 기능은 주어진 튜링 머신과 입력에 대해 완벽하게 정의되고 유효한 술어입니다. 머신이 멈추거나 루프됩니다. (당신은 적절한 참고 자료가 부족합니다. 어떤 문서를 요약하고 있습니까?)
Raphael

@Raphael 함수가 잘 정의되어 있다는 것은 일반적으로 사실입니다. Hehner의 관점은 다르며 그의 논문에서 설명됩니다. 논문의 이름을 제공하기 위해 답변을 편집하겠습니다.
Theodore Norvell

'가 논란이 적어도 첫 읽기 / 근사에서 밝혀졌다 [내가 신문을 읽지 않은] 그냥 Hehner의 인수가 무엇이든한다고 가정 해 봅시다 cs.toronto.edu/~hehner/Shallitaffair.pdfrecursed.blogspot.com/ 2013 / 10 / eric-hehner-replies.html
Fizz

그리고 Hehner의 논문 (이것에 대한)이 추가 독서 (이에 대한 그의 연구에 대한)가 번거롭게 가치가 있다는 인용의 성격과 수를 감안할 때 명확하지 않습니다.
Fizz

그의 증거는 매우 견고 해 보이며 그것은 진실성에 대해 다음과 같은 자기 참조 성명을 분석하려고 시도하는 것과 같이 철학에서 할 수있는 바보 같은 일들에 대한 해시 일 뿐이라고 지적합니다. "이 문장은 거짓입니다." 만약 그것이 진실이라면 그것이 거짓이라는 것을 의미합니다. 그것은 그것이 사실이라는 것을 의미합니다. 다시는 거짓이 아닙니다. 그래서 이것은 그렇게 중요한 철학적 해상 응시 문제처럼 보이지 않습니다. en.wikipedia.org/wiki/Liar_paradox 중단 역설은 과학자들이 철학자와 대화하지 않는 경우 일 수 있습니다.
제임스 웨이크 필드

3

기계보다는 사람과 관련된 정지 문제의 중요성에 대해 다른 설명을하고 싶습니다.

MIT 1986 구조 및 해석 과정 의 마지막 강의입니다 . 교수는 "질문이 있습니까?" 학생 중 한 사람이 물을 때 강의를 마치도록 준비합니다. "이것이 마지막 질문입니까?"

잠시 생각해보십시오. 선생님은 어떻게 대답 할 수 있습니까? 학생이 교사와 모순하기로 결정한 경우 교사가 제공 할 수있는 유효한 답변이 없습니다. 이는 정지 문제와 같습니다.

우리는 함수와 기계를 사용하여 정지 문제를 추상적으로 생각하는 데 사용되었지만 그보다 훨씬 깊습니다. 기본적으로, 대답 할 수없는 완벽하게 유효한 질문이 있음을 의미합니다.

추신 : 내가 무슨 코스를 말하는지 모른다면, 가십시오. 굉장합니다.


그러나을 실행 doesHalt(programCode, input);하면 프로그램이 doesHalt함수가 무엇을 반환 하는지 알 수 없습니다 . doesHalt함수가 평가 한 후에는 프로그램을 중지 할 수 없습니다.
Tvde1

0

입력 n을 제공하는 프로그램을 쉽게 작성할 수 있으며 p + 2도 소수가되도록 가장 작은 소수 p> n을 출력하거나 그러한 p가 존재하지 않으면 영원히 실행됩니다. 프로그램이 모든 입력에 대해 중단되는지 여부를 예측하기 위해 문제를 해결할 수 있다면 Twin Prime Conjecture를 해결 한 것입니다.

이 추측이 결정 불가능한 것으로 판명 될 가능성이 매우 높으며,이 경우 중지 프로그램이 실패하는 간단한 프로그램이 있습니다.


"Turing-undecidable"과 매우 다른 개념을 혼합하고 있다고 생각합니다. 실제로, 당신은 우연히 "같은 오래된"오류에 빠졌을 수도 있습니다. 여기여기도 참조 하십시오 .
라파엘
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.