라이스 정리에 당황하다


37

요약 : 라이스 정리에 따르면 모든 것이 불가능합니다. 그럼에도 불구하고, 나는 어떻게 이 가정으로 불가능한 것들에게 모든 시간을!


물론 라이스 정리는 단순히 "모든 것이 불가능하다"고 말하는 것은 아닙니다. "컴퓨터 프로그램의 모든 속성은 계산할 수 없습니다."

(모발을 나누려면 모든 "사소하지 않은"속성입니다. 즉, 모든 프로그램이 있거나 프로그램이 없는 속성은 간단하게 계산할 수 있습니다. 그러나 다른 속성은 계산할 수 없습니다.)

그것이 정리가 말하거나 말하는 것처럼 보입니다. 아마도 많은 똑똑한 사람들이이 정리의 정확성을 신중하게 확인했을 것입니다. 그러나 논리를 완전히 무시하는 것 같습니다! 있다 수많은 있는 프로그램의 특성 사소한 계산하기는! 예를 들면 다음과 같습니다.

  • 정지하기 전에 프로그램이 몇 단계를 실행합니까? 이 숫자가 유한 한 것인지 무한한지를 결정하는 것은 정확히 계산 불가능한 Halting Problem입니다. 이 숫자가 유한 한 보다 크거나 작은지를 결정하는 것은 간단합니다! 최대 n 단계 까지 프로그램을 실행하고 정지 여부를 확인하십시오. 쉬운!nn

  • 마찬가지로, 프로그램 은 첫 번째 m 개의 실행 단계 에서 개 이상의 메모리 단위를 사용 합니까? 사소한 계산 가능.nm

  • 프로그램 텍스트에 라는 변수가 언급되어 있습니까? 사소한 텍스트 분석으로 답을 알 수 있습니다.k

  • 프로그램이 명령 호출합니까 ? 다시, 해당 명령 이름을 찾는 프로그램 텍스트를 스캔하십시오.σ

나는 특성을 충분히 볼 수 있습니다 뿐만 아니라 비 계산 가능한 볼을; 예를 들어, 프로그램의 전체 실행은 몇 번의 추가 작업을 수행합니까? 글쎄, 그것은 프로그램이 얼마나 많은 단계를 수행 하는지 묻는 것과 거의 동일 합니다. 그것은 사실상 Halting Problem입니다. 그러나 실제로 계산 하기 쉬운 보트 속성이있는 것처럼 보입니다 . 그러나 라이스 정리는 그들 중 어느 것도 계산할 수 없다고 주장합니다.

내가 여기서 무엇을 놓치고 있습니까?


8
"쌀의 정리에 따르면 모든 것이 불가능하다." -아니 "컴퓨터 프로그램의 모든 속성은 계산할 수 없습니다." -아니 당신은 혼자가 아닙니다 : 대부분의 학생들은이 오해를 겪습니다.
라파엘

답변:


36

fgnf(n)g(n)

PfgP

확장 속성의 예는 다음과 같습니다 .

  1. n
  2. nm
  3. 프로그램 텍스트는이라는 변수를 언급합니다 k. 변수 이름을 바꿀 수 있습니다.
  4. σσσ

라이스 정리에 대한 당신의 반론 사례를 정확하게 열거했음을 분명히 알고 있습니다.

정리 (Rice) : 프로그램 의 계산 가능한 확장 속성은 모든 프로그램을 보유하거나 보유하지 않습니다.

이를 설명하는 또 다른 방법이 있습니다. 프로그램과 계산하는 기능을 구별해야합니다. 많은 다른 프로그램들이 동일한 기능을 계산합니다 (모두 확장 적으로 동일합니다). 라이스 정리는 함수를 계산하는 프로그램의 속성이 아니라 함수의 속성에 관한 것입니다.


이 답변을 얻을 수 없습니다. (죄송 합니다만,이 점을 명확히하는 것이 좋습니다). 확장 프로그램에 해당 하는 구문 을 변경하여 해당 프로그램을 수정할 수는 있지만 처음에는 확장 기능에 해당하는지 확인하는 방법은 무엇입니까? 프로그램 기능을 사용하여 프로그램의 기능 에 일반적으로 해당 특성이 모두 있는 경우 프로그램을 사용하여 비교할 수 없으므로 "수정"이라고 말하면 간단한 예일 수 있기 때문에 가능하다고 생각합니다 ( "수정으로 수정"을 추가 하시겠습니까? IDE는 "? ..) 일단 수정되면 일반적으로 확인할 수 없으므로 라이스도 마찬가지입니다.
Hernan_eche

1
n+m=m+n

또한, 당신은 당신의 추론에서 이상한 추론을 저지르고 있습니다 : 확장 평등이 결정될 수 없기 때문에, 쌀의 정리는 거짓 일 수 있습니다. 어떻게 요? 그리고 확장 평등이 결정될 수 없다고해서 그것이 우리가 결정할 수있는 사례가 없다는 것을 의미하지는 않습니다. 내가 언급 한 것-우리는 그것들을 결정할 수 있습니다.
Andrej Bauer

36

기본적인 오해 :

컴퓨터 프로그램의 모든 재산은 계산할 수 없습니다

PRE

{MfMP}

P

라이스 정리는 시맨틱 속성 ( 프로그램에 의해 계산 된 함수의 속성 , 예를 들어 도메인 또는 값 범위) 을 다룹니다 . 참조하는 것은 구문 특성 ( 런타임 또는 사용되는 변수 수와 같은 프로그램 특성 )입니다.

구문 속성에 대해서는 잘 알려져 있지 않은 것 같습니다. 이 질문을 참조하십시오 .


1
나는 첫 번째 문장에 대해 길을 잃었다. 죄송합니다. 누군가 시맨틱과 구문 속성의 차이점에 대해 자세히 설명 할 수 있습니까?
MathematicalOrchid

@MathematicalOrchid : 그 문장을 무시해도됩니다. 첫 번째 단락에는 필요한 모든 정보가 담겨 있습니다. 어쨌든 좀 더 자세히 설명하겠습니다.
라파엘

2
시맨틱 = 프로그램의 기능 문법 = 프로그램의 모습.
reinierpost
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.