전체 함수를 열거 할 수없는 이유는 무엇입니까?


29

함수 열거의 개념에 대해 배웠습니다. 실제로는 프로그래밍 언어에 해당합니다.

지나가는 말에서 교수는 모든 총 함수의 클래스 (즉, 모든 입력에서 항상 종료되는 함수)는 열거 할 수 없다고 언급했습니다 . 그것은 우리가 모든 함수를 작성할 수있게하는 프로그래밍 언어를 고안 할 수 없다는 것을 의미합니다.

적절한 계산 능력을 원한다면 어떻게 비 종료 가능성을 수용해야 하는가?

답변:


24

대각선으로 인해. 경우 모든 합계 계산 가능 함수의 계산 가능한 열거했다 로 와 같은 모든 것을 전체 한 후, 도 전체 계산 가능 함수이지만 열거 형에는 없습니다. 그것은 시퀀스에 대한 가정과 모순됩니다. 따라서 계산 가능한 함수 열거는 정확히 총 계산 가능한 함수로 구성 될 수 없습니다.(fe:eN)NNfeg(i)=fi(i)+1

우리는 범용 연산 가능한 기능 생각 가정 "범용"수단, 계산 가능한 이진 함수이며, 그 모든 총 계산 가능한 단항 함수에 대한 일부가 되도록 모든 ( . 이어서도 일부이어야 되도록 때문에 이전의 단락, 총 함수가 아니다. 그렇지 않으면 는 모든 계산 가능한 단항 함수를 포함하는 계산 가능한 단항 함수의 계산 가능한 열거를 제공합니다.h f ( n ) e f ( i ) = h ( e , ih(e,i)hf(n)ef(i)=h(e,i)ieg(n)=h(e,n)h

따라서 모든 함수가 함수 시스템이어야한다는 요구 사항은 해당 시스템에 범용 함수가 존재하는 것과 호환되지 않습니다. 원시 재귀 함수와 같은 일부 약한 시스템의 경우 모든 함수가 총계이지만 범용 함수는 없습니다. 튜링 계산과 같은 범용 기능이있는 강력한 시스템은 범용 기능이 존재하기 위해 부분 기능 만 가져야합니다.


나는 누군가가 대각선 화에서 허점으로 보이는 것을 발견했다고 덧붙이고 싶었습니다. 프로그램에 유형이 지정된 표현을 사용하는 경우 유형 시스템을 사용하여 사선 화를 허용하지 않고 총 자체 통역사를 작성할 수 있습니다. 자세한 내용 은 정규화 장벽 돌파 : F- 오메가 자체 통역사 를 참조하십시오.
hatch22

물론, 시스템 F는 Turing complete 시스템이 아닙니다. 당신이 연결 한 논문은 흥미 롭습니다. 그들은 비 Turing-completeness를 흥미로운 방식으로 활용하는 것처럼 보입니다.
Carl Mummert

"그런데 왜 이 총 계산 가능한 함수인지"알 수 없습니다. 경우 다음 총 계산 가능 함수이다 하고 평가 평가할 필요 conttradiction을 :. 따라서 총 계산 가능한 함수의 열거가있는 경우 조차 만들 수 없으므로 초기 가설을 반증하기 위해 모순에 도달 할 수 없습니다 (모순에 도달 할 수는 있지만 는 총 계산 가능하다는 것을 반증합니다 ). g K , F K = g g ( K ) g ( K ) = F (K) ( K ) + 1 = G ( K ) + 1 g gg(i)=fi(i)+1gk,fk=gg(k)g(k)=fk(k)+1=g(k)+1gg
agemO

그리고이 문제를 피하기 위해 시프트 된 대각선을 사용하더라도 모순을 일으키는 것으로 보입니다.
agemO

10

그냥 명확하게하기 위해, 우리는 수학 함수 구별 할 필요가 (내가 그들을 호출 기능을 거기 그들은 모두 열거에 있지 그래서 그들 중 uncountably 많은 사람들이 종종)과 기능은 당신이 쓸 수 있습니다 : 나는 그들에게 호출 프로그램 또는도 계산 가능한 기능 .

부분 집합 셀 수있는 집합의 E는 이라고 계산할 수있는 요소를 지정해, 그 프로그램이있는 경우 XE 것은 "예"의 경우 응답 X S 와 "아니오"만약 X S가 . (그리고 그는 항상 무언가 응답 해야한다) 프로그램이 "아니오"라고 말하지 않고 응답하지 않으면 권한 이있는 세트를 재귀 적으로 열거 할 수있다. (프로그램이 S의 모든 요소를 임의의 순서 로 인쇄해야하는 것과 같습니다 )SExExSxSS

유한 세트 에있는 모든 프로그램 세트유한 세트의 모든 요소에 대해 프로그램을 실행하는 인터프리터를 작성하고 모두 종료되면 "예"를 리턴 할 수 있으므로 열거 할 수 있습니다. (그러나 그들 중 어느 것도 그렇지 않으면 볼 수 없습니다)

교수는 무한한 수의 요소에 대해서만 프로그램을 실행할 수 없기 때문에 무한 세트 에있는 모든 프로그램 세트열거 할 수 없다고 말했습니다 .

그러나 이것이 이것이 나쁘다는 것을 의미하지는 않습니다.

  1. 예를 들어, 모든 증명을 열거하고 프로그램이 전체임을 증명할 수 있는지 기계적으로 확인할 수 있기 때문에 아마도 총계 인 모든 프로그램을 열거 할 수 있는 집합 입니다.

  2. 절차가 언젠가 종료되는지 확실하지 않고 영원히 기다려야 할 수도 있기 때문에 열거 가능한 세트조차 실용적이지 않습니다. 모든 총 기능을 열거하는 프로그램을 사용하는 방법을 모르겠습니다 ...

정적 타이핑으로 작성하는 모든 것이 종료되도록 보장하는 프로그래밍 언어가 있습니다! 다항식 바운드를 보장하는 것도 있습니다. 그들은 대부분 학업 적이며, 글을 쓰면 파이썬을 쓰는 것보다 제약을 느끼게 될 것입니다. 그러나 많은 연구자가 있습니다.

그래서 당신의 질문에 대답하기 위해서 : 예, 그렇습니다. 튜링이 완료되기 위해서는 잠재적 인 비 종료가 필요합니다 (현재로서는 가장 높은 계산 능력). 그러나 나는 이것이 전체 기능이 열거 가능하다는 사실과 직접적으로 관련이 없다고 생각합니다. 당신은 여전히 ​​모든 총 프로그램을 작성할 수 있습니다!


2
"무한한 수의 요소에서만 프로그램을 실행할 수 없기 때문에"- 프로그램 자체에서 필요한 모든 정보를 구할 수있는 경우이 작업을 수행 할 필요 가 없으므로 약한 주장 입니다. 추론의 위험을 설명하는 질문 은 여기 를 참조 하십시오 .
Raphael

과연. 나는 그것이 증거라는 주장을하지 않았다. 교수님의 진술에 대한 증거가 아니라 왜 종료가 계산 능력과 충돌하는지에 대한 귀하의 질문에 대답하려고했습니다.
jmad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.