프로그램 종료 여부를 모르는 가장 간단한 프로그램 예는 무엇입니까?


27

정지 문제는 주어진 프로그램이 정지하는지 여부를 결정하는 알고리즘이 없음을 나타냅니다. 결과적으로 종료 여부를 알 수없는 프로그램이 있어야합니다. 그러한 프로그램의 가장 간단한 (가장 작은) 알려진 예는 무엇입니까?


당신은 당신의 응답에 모순됩니다 ..... 감사합니다! 그러나 정지 프로그램은 출처에 대한 지식을 전제로합니다. ... 이것이 사실이라면 당신은 당신의 질문에 대답 한 것입니다. 정지 프로그램은 이미 알고있을 것입니다. 사인을 제어하는 ​​시스템을 상상해보십시오. 시스템이 언제 꺼 지나요? 정전, 전원 스위치 또는 플래시 시퀀스 중. 또는 배터리 백업 및 발전기를 제공하지 마십시오.
htm11h


타이밍 상한을 두지 않으면 중지 문제는 문제 일뿐입니다. 답이 너무 늦어서 아무런 답을 얻지 못하는 것 사이에는 실제로 차이가 없습니다. 정확성의 실시간 정의와 같이 여러 단계에서 프로그램이 답변을 반환할지 여부를 요청할 수 있습니다. 시의 적절한 답변을 보장 할 수없는 경우 정확성 보증이 부족한 프로그램 만 있으면됩니다.
Rob

1
@Rob 사실이 아닙니다. 기계의 정지 여부를 모를 경우, 기계의 정지 여부를 무한정 기다릴 수 있습니다. 밀레니엄 후에도 여전히 다음날 멈추는 지 여부를 알 수 없습니다.
Kyle Strand

@KyleStrand 동의합니다. 그러나 모든 실제 계산에는 마감 시간 (밀리 초에서 수 개월)이 걸리기 때문에 실제로는 완전히 과장된 문제라고 말합니다. 5 초 안에 답변이 필요한 경우 5 초 안에 답변을 보장 할 수 있는지 여부 만 중요합니다. 계산할 수없는 시간이 주어진 경우 응답을 보장 할 있다고 가정하십시오 . 그것은 쓸모없는 보증입니다.
Rob

답변:


41

Collatz 추측을 테스트하는 프로그램이 아주 간단한 예입니다 .

에프()={정지,만약  1입니다에프(/2),만약  짝수이다에프(+1),만약  이상하다

이것은있어 공지 위한 정지 이상의 최대 5×2605.764×1018 , 그러나 일반적으로는 개방 문제이다.


9
질문 아래의 의견에서 내 요점을 강조하기 위해 : 문제는 " 모든 n에 대해 중지 됩니까?" 계산 가능 합니다. 에프()
라파엘

6
@KyleStrand 여기를 참조 하십시오 .
Raphael

10
@KyleStrand, Raphael은 100 % 정확합니다. 이것은 일반적인 오해입니다. 정의에서 말하는 내용을주의 깊게 추적해야합니다. 그러면 직관이 정의와 완전히 일치하지 않는 것을 발견 할 수 있습니다. 계산 성의 정의에 따르면 계산할 Turing 머신 있으면 충분 합니다 .Turing 머신이 무엇인지 아는 것은 중요하지 않습니다. 처음에이 많은 학생들이 속임수라고 생각하지만 그렇지 않습니다. 그것은 정의의 결과 일뿐입니다.
DW

2
@KyleStrand 프로그램 이 문제를 해결해야 한다는 생각을 없애야한다 . 그렇지 않습니다. 그것은 간단한 작업 인 답변을 출력해야합니다. 알고리즘 적으로, 유한 한 인스턴스 집합에 대한 문제는 답을 하드 코딩 할 수 있기 때문에 모두 지루합니다. (심지어 만약 우리가 답을 모르는, 우리는 여전히 정확한 알고리즘이 있음을 알고 있습니다.) 뭔가에 대한 알고리즘이 없음을 표시 할 때 일반적으로, 당신은 할 수없는 어떤 어떻게 것에 가정을 작업. 우리의 상상력 부족은 증거를 제공하지 않습니다.
Raphael

2
@KyleStrand Afaik, 나는 오늘 가르치는 것처럼 계산의 표준 정의를 사용합니다 (그리고 afaik은 수십 년 동안 사용되었습니다). 답변과 링크 된 자료를 흡수하고 잘못한 부분을 해결하는 것이 좋습니다. 나와 다른 사람들이 같은 것을 반복해서 반복하는 것은 이치에 맞지 않습니다. 한 번 더 시도하십시오 : 계산 성의 정의는 본질적으로 건설적인 것이 아니라 본질적으로 존재합니다. 만큼 당신이 고전 논리의 영역 내 생각과 같은 "해결"알고리즘을 통해 손에 수 있기 전혀 필요가 없다 - 우리가해야 보여 것을 정답을 제공 하나.
Raphael

31

정지 문제는 주어진 프로그램이 정지하는지 여부를 결정하는 알고리즘이 없음을 나타냅니다. 결과적으로 종료 여부를 알 수없는 프로그램이 있어야합니다.

"우리"는 알고리즘이 아닙니다 =) 주어진 프로그램 이 모든 프로그램에 대해 정지 하는지를 판단 할 수있는 일반적인 알고리즘 은 없습니다 .

그러한 프로그램의 가장 간단한 (가장 작은) 알려진 예는 무엇입니까?

다음 프로그램을 고려하십시오.

n = 3
while true:
    if is_perfect(n):
            halt()
    n = n + 2

is_perfect 함수는 n이 완벽한 숫자 인지 확인합니다 . 홀수의 완벽한 숫자가 있는지 알 수 없으므로이 프로그램이 중지되는지 여부를 알 수 없습니다.


7
우리는 알고리즘입니다.
PyRulez

3
@PyRulez 인간의 마음의 계산력이 Turing Machine과 동등하다는 증거는 없습니다. 증거가 작동하지 않습니다. 예를 들어 한 마음을 다른 마음으로 시뮬레이션하는 방법을 알 수 없습니다.
avsmal

1
좋아 @avsmal하지만은 매우 우리가 hypercomputation 할 수있는 가능성.
PyRulez

2
@PyRulez 존 루카스 (John Lucas)와 로저 펜로즈 (Roger Penrose)는 인간의 마음이 일종의 양자 역학적으로 강화 된 "비 알고리즘"계산의 결과 일 수 있다고 제안했다. 그것은 강한 가정입니다. 그러나 적어도 우리의 마음에는 어떤 불확실성이있을 수 있습니다. 그리고 그 증거를 깨뜨리기에 충분합니다. 중단 여부를 알 수없는 경우 "무작위 화"(임의의 의미에 대한 적절한 정의를 위해) 튜링 머신을 무효화하는 것은 불가능합니다.
avsmal

5
양자 컴퓨팅은 하이퍼 컴퓨팅으로 간주됩니까? 튜링 머신으로 양자 컴퓨터를 완벽하게 시뮬레이션 할 수 있다고 가정했습니다.
MaiaVictor

10

당신은 쓰기:

정지 문제는 주어진 프로그램이 정지하는지 여부를 결정하는 알고리즘이 없음을 나타냅니다. 결과적으로 종료 여부를 알 수없는 프로그램이 있어야합니다.

이것은 양방향에서 비평 행입니다. 해결 해야 할 일반적인 오류에 굴복합니다 .

고정 된 프로그램 주어지면 정지 문제 ( " P항상 멈추는가 ?")는 항상 "예"또는 "아니오"이므로 결정 가능합니다. 그것이 무엇인지 알 수 없더라도, 두 가지 사소한 알고리즘 중 하나는 항상 "예"라고 대답합니다. "아니오"는 P- 멈춤 문제를 해결합니다 .

알고리즘이 모든 ¹ 프로그램의 Halting 문제를 해결해야하는 경우에만 해당 알고리즘이 존재할 수 없음을 보여줄 수 있습니다.

이제 Halting 문제를 결정할 수 없다는 것을 아는 것은 아무도 종료 또는 루핑을 증명할 수없는 프로그램이 있음을 의미하지 않습니다 . 당신은 (단지 가설이 아니라 입증 된 사실이다) 튜링 기계보다 더 강력하지 않더라도, 우리가 알고있는 모든 단일 알고리즘 / 사람을 위해 그런 증거를 제공 할 수 있다는 것입니다 모든 프로그램. 각 프로그램마다 다른 사람이 결정할 수 있습니다.

더 관련 독서 :


따라서 실제 질문 (아래 반복)은 중지 문제가 계산 가능한지 여부와 관련이 없음을 알 수 있습니다. 조금도.

[우리가 멈추거나 고리를 모르는 프로그램]의 가장 간단한 (가장 작은) 알려진 예는 무엇입니까?

이것은 그 자체로 유효한 질문입니다. 다른 사람들은 좋은 대답을했습니다. 기본적으로, 당신은 모든 문을 변형 할 수있다 예에 알 수없는 진리 값을, 그것은 제공 하지 진리 값이 :에스

()={1,에스 참된,(+1),그밖에.

물론 이것들은 "자연스럽지"않다.


  1. 반드시 모두 는 아니지만 어떤 의미에서는 "다수"입니다. 적어도 무한히 많아

의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Raphael

내 자신의 이해를 위해 이것을 바꾸려고 시도 하면 임의의 주어진 프로그램이 중지되는지 여부를 결정할 수있는 고유 한 알고리즘 은 없지만 가능한 모든 프로그램의 중지 문제를 해결하기위한 프로그램 별 알고리즘이있을 수 있습니까?
Asad Saeeduddin

@AsadSaeeduddin "나쁘다": 주어진 모든 유한 한 프로그램 세트에 대해 Halting 문제는 사소한 것이다 . 모든 유한 세트는 결정 가능합니다.
Raphael

7

특정 속성을 가진 숫자의 존재에 관한 열린 문제는 그러한 프로그램 (그러한 숫자를 검색하는 프로그램)을 발생시킵니다. 예를 들어 Collatz 추측을 생각해보십시오. 우리는 그것이 사실인지 알지 못하기 때문에 다음 프로그램이 종료되는지 여부도 알 수 없습니다.

    n:=1;
    found:=false;
    while not found do
      s:={};
      i:=n;
      while i not in s do
        add i to s;
        if i even then i:=i/2 else i:=3i+1
      if 1 not in s then found:=true;
      n:=n+1  


0

결정 가능성 (CS 등가 형식화 / 정지 문제의 일반화)이 언어 와 관련되어 있으므로 해당 형식으로 다시 변환해야하기 때문에 문제는 까다 롭습니다 . 이것은 지적되지 않은 것처럼 보이지만 수학 / CS의 많은 열린 문제는 알 수없는 결정 가능성의 문제 (언어)로 쉽게 변환 될 수 있습니다. 이것은 이론 증명과 결정 불가능한 분석 사이의 밀접한 관련성 때문입니다. 예를 들어 (정확한 숫자를 가진 다른 대답과 마찬가지로), 그리스어 (2 백만 년 전)에 이르는 쌍둥이 프라임 추측 을 취하십시오 . 예를 들어 Zhang / Tao와 같은 최근의 주요 연구 발전이 적용됩니다. 다음과 같이 알고리즘 문제로 변환하십시오.

입력 : n . 출력 : Y / N 최소 n 개의 트윈 프라임이 있습니다.

알고리즘은 트윈 프라임을 검색하고 n 을 찾으면 중지 합니다. 이 언어 를 결정할 수 있는지는 알 수 없습니다. 쌍둥이 소수 문제의 해결 (유한 또는 무한 수를 묻는) 은이 언어의 결정 가능성을 해결할 것입니다 (유한 한 경우 얼마나 많은 것이 입증되거나 발견 된 경우).

또 다른 예는 리만 가설을 사용 하여 다음 언어를 고려하십시오.

입력 : n . 출력 : Y / N Riemann 제타 함수의 최소 n 개의 사소한 0 이 존재 합니다.

이 알고리즘은 사소한 0을 검색합니다 (코드는 특히 복잡하지 않으며 근본 발견과 유사하며 비교적 간단한 다른 동등한 공식이 있으며 기본적으로 x 보다 작은 모든 소수의 "패리티"의 합을 계산 합니다). 찾은 N 그들과 다시는이 언어가 decidable 해상도는 리만 추측을 해결하는 "거의"일치하는 경우는 알려져 있지 않다.

이제 더 멋진 예는 어떻습니까? ( 주의, 아마도 더 논쟁의 여지가 있습니다)

입력 : c : 출력 : Y / N SAT에 대한 O (n c ) 알고리즘이 있습니다.

유사하게,이 언어의 결정 가능성의 해결은 P 대 NP 문제와 거의 같습니다 . 그러나이 경우 문제에 대한 "간단한"코드의 경우는 덜 분명합니다.


1
downvoter가이 답변의 문제점을 설명 할 수 있습니까?
MaiaVictor

2
에이,,기음에이+=기음=2
vonbrand

3
나는 downvoter가 아니지만이 답변의 모든 주장이 잘못되었습니다. 이러한 세 가지 문제는 모두 입증 할 수없는 가정 없이도 결정 가능합니다. 왜 라파엘의 답을 면밀히 연구하십시오.
DW

입력에 TM을 지정해야하고 알고리즘이 TM이 문제를 계산하는지 여부를 결정합니다. 더 많은 것을 생각해야합니다 ... 이러한 유형의 문제에는 기본적으로 개방형 문제를 결정 불가능한 언어로 연결하는 간단한 레시피가 있다고 생각합니다 ...하지만 CS 참조로 거의 문서화되거나 공식화되지 않는다는 데 동의했습니다. 심판 ... 또는 입력이 증거 이고 언어가 증거가 올바른지 확인합니다 ... 다른 높은 투표 답변은 홀수 완벽한 숫자, collatz 문제 등을 언급합니다 ... 프로그램은 특정 상수에 대해 중단되거나 알려지지 않음 .
vzn

혼란을 드려 죄송합니다! 일부 추가 생각에 단언은 (모든 입력에 대해) 종료되지 않은 간단한 프로그램 (예 : 원래 질문) 을 설명하는 형식으로 정확하며 DW가 스케치 / 지적한 전체 아이디어의 실패는 각각을 결정 불가능한 언어. 후자의 건축 아이디어가 성공한 것을 찾고 있다고 계속 생각할 것입니다. 그것을 보는 또 다른 방법은 문제가 정지 문제 해결사에 대한 개별 인스턴스 / 입력 으로 볼 수 있지만 실제로는 정지 문제 자체와 동등한 것은 아닙니다.
vzn

0

모든 n에 대한 여부를 확인하는 간단한 프로그램을 작성하십시오. 11050n으로 시작하는 Collatz 시퀀스는 10 억 회 미만으로 1에 도달합니다. 응답이 있으면 응답이 "예"이면 프로그램을 중지시키고 응답이 "아니오"이면 영원히 반복하십시오.

이 프로그램의 종료 여부를 알 수 없습니다. (우리는 누구입니까? "우리"는 내 답변에 의견을 추가 할 수있는 사람이라고 가정하겠습니다. 그러나 매우 강력한 컴퓨터를 가진 사람이 말할 수 있습니다. 일부 천재 학자가 말할 수도 있습니다. 다소 작은 n이있을 수 있습니다. n n1020억 반복이 필요한 곳; 그것은 많은 결의와 많은 시간과 많은 돈을 가진 사람에게 다가 갈 것입니다. 그러나 지금 우리는 말할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.