Turing 완전한 언어 만 해석 할 수있는 전체 언어


16

튜링이 완료되지 않은 언어는 통역을 직접 작성할 수 없습니다. 나는 그것을 읽을 수있는 단서가 없지만 여러 번 사용 된 것을 보았습니다. 이것이 일종의 "궁극적 인"비 Turing 완전한 언어를 일으키는 것처럼 보입니다. 오직 할 수있는 튜링 기계에 의해 해석됩니다. 이 언어들은 자연에서 자연에 이르기까지 모든 총 함수를 계산할 필요는 없으며 반드시 동형 일 수도 있습니다 (즉, 궁극적 언어 A와 B가 존재하여 A는 계산할 수 있지만 B는 할 수없는 함수 F는 존재합니다). Agda는 Godel의 시스템 T를 해석 할 수 있으며 Agda는 총체적이므로 그러한 궁극적 언어는 Godel의 시스템 T보다 더 강력해야합니다. 그러한 언어는 적어도 agda만큼 강력 할 것 같습니다 (물론 증거는 없지만 직감입니다).

이 정맥에 대한 연구가 있습니까? 어떤 결과가 알려져 있습니까 (즉, "최상의"언어가 알려져 있습니까)?

보너스 : Godel의 System T가 아직 튜링 머신에서만 해석 할 수없는 기능을 계산할 수없는 병리학 적 사례가 있다고 생각합니다. 왜냐하면 실제로 이상한 기능을 계산할 수 있기 때문입니다. 이것이 사실입니까, 아니면 그러한 언어가 Godel의 시스템 T가 계산할 수있는 모든 것을 계산할 수 있다는 것을 알 수 있습니까?


2
용어를 사용하는 방식 때문에 진술이 혼동됩니다. 용어에 의존하는 대신 질문을 수학적으로 엄격하고 명확하게 설명하여 질문을 이해할 수 있도록하십시오. 계산 이론의 맥락에서 프로그래밍 언어 란 무엇을 의미합니까? 계산 가능한 함수의 열거를 의미합니까?
Kaveh

1
당신이 읽은 것에 대한 나의 추측 : 언어가 충분히 강하고 다른 클래스의 함수의 보편적 인 함수를 포함하면 해당 클래스의 대각선 함수를 정의 할 수 있습니다. 전체 함수의 클래스 인 경우 대각선 함수는 클래스에있을 수 없습니다.
Kaveh

내가 찾은 곳을 비공식적으로 언급했다. 말 그대로 내가 여기에 준 내용을 따라 뭔가. 나는 이것을 수학적 방법으로 진술하는 방법을 모른다. 약간의 독서 후에 나는 "함수 클래스의 대각선 함수"가 무엇인지 확신하지 못한다. 나는 당신의 관점에서 "총 함수의 클래스는 자신의 보편적 인 함수를 포함 할 수 없다"고 생각합니다. 그래서 나는 "총 함수의 클래스 C가 총 함수 클래스에 C "에 대한 범용 함수. "유니버설 함수"가 무엇인지 이해한다면 그것이 맞다고 생각합니다.
Jake

1
엄밀히 말하면 이것은 연구 수준의 질문이 아닙니다. 또한 왜 이것이 커뮤니티 위키입니까? 아니면?
Andrej Bauer

"이것은 일종의"궁극적 인 "비 트루 잉 완전 언어를 야기하는 것으로 보인다. 그 주장을 따르지 않는 것은 비 평범한 것처럼 보입니다. 무슨 의미입니까? 왜 그렇게 보입니다?
vzn

답변:


42

이것은 잘못 표현 된 질문이므로 먼저 이해해 봅시다. 나는 그것을 계산 성 이론의 스타일로 할 것입니다. 따라서 문자열 대신 숫자를 사용합니다. 소스 코드는 기호 문자열이 아니라 숫자입니다. 그것은 정말 문제, 당신은 대체 할 수없는 t는 r에 N g은 아래를 통해.Nstring

하자 페어링 기능 .m,n

프로그래밍 언어 는 다음 데이터로 제공됩니다.=(,이자형V)

  1. "유효한 프로그램" 의 결정 가능한 세트
  2. 계산 가능 하고 일부 기능 .이자형V:×

사실 decidable 수단은 계산 가능한 전체지도가 V L d 개 : N{ 0 , 1 } 이되도록 V L I d 개 ( N ) = 1V나는:{0,1} . 비공식적으로, 우리는 주어진 문자열이 유효한 코드인지 알 수 있다고 말합니다. 함수 e v 는 본질적으로 우리 언어의 해석기입니다. e v ( m , n ) 은입력 n 에서코드 m 을실행합니다. 결과는 정의되지 않을 수 있습니다.V나는()=1이자형V이자형V(미디엄,)미디엄

이제 몇 가지 용어를 소개 할 수 있습니다.

  1. n e v ( m , n ) 이 모든 m P에 대한 총 함수 인 경우 언어는 총계 입니다.이자형V(미디엄,)미디엄
  2. 언어 해석 된 언어 L 2 = ( P (2) , V 2 ) 가 존재하는 경우 U P 1 이되도록 전자 (V) (1) ( U , N , m ) 전자 V 모든 n P에 대해 2 ( n , m )1=(1,이자형V1) 2=(2,이자형V2)1이자형V1(,,미디엄)이자형V2(,미디엄) . 여기서 U는 하기위한 시뮬레이터 L 2 구현 L 1 . L 2에 대한 범용 프로그램 이라고도합니다 .미디엄212

" L 2를 해석합니다 "의 다른 정의 도 가능하지만 지금은 다루지 않겠습니다.12

우리는 말할 L 2는 서로를 해석하면 동일합니다.12

튜링 머신의 "가장 강력한"언어 가 있으며, 여기서 n N 은 튜링 머신의 인코딩이고 φ ( n , m ) 은 " 입력 m 에서 튜링 머신 인코딩 된 nn 으로 실행하는"부분 계산 기능 . 우리는 e v 가 계산 가능 해야했기 때문에이 언어는 다른 모든 언어를 통일 할 수 있습니다 .=(,φ)φ(,미디엄)미디엄이자형V

프로그래밍 언어에 대한 우리의 정의는 매우 편안합니다. 다음을 진행하려면 세 가지 조건이 더 필요합니다.

  • 은 후속 함수를 구현합니다.모든 m N 대해 e v ( s u c c , m ) = m + 1 과 같은 s u c c P가 있습니다 .에스이자형V(에스,미디엄)=미디엄+1미디엄
  • 구현은 대각선 기능 : 거기 거라고 나에게 g P가 되도록 전자 V ( D I g , m ) = m , m 모든 m N ,나는이자형V(나는,미디엄)=미디엄,미디엄미디엄
  • 함수의 조성에 따라 폐쇄된다 : 만약 L의 구현 F g 다음과 같은 구현 F g ,에프에프

고전적인 결과는 다음과 같습니다.

정리 : 언어가 자기 자신을 해석 할 수 있다면 전체가 아닙니다.

증명. 가정 총 langauge에 대한 범용 프로그램 L 구현 L 모두, 즉, m PN N , E의 V ( U , m , N ) E V ( m , N ) . 후계자, 대각 및 e v ( u , - )L 로 구현 되므로 구성도 k 미디엄

이자형V(,미디엄,)이자형V(미디엄,).
이자형V(,) . 존재 N 0P가 되도록 전자 V ( n은 0 , K ) 전자 V ( , K , K ) + 1 , 그러나 전자 V ( U , n은 0 , n은 0) E V (케이이자형V(,케이,케이)+10이자형V(0,케이)이자형V(,케이,케이)+1 에는 숫자 자체 후속 동일하지 존재하므로, 그것은 그 다음 L을 합계 없거나 그 L은 그 자체를 해석하지 않는다. QED.
이자형V(,0,0)이자형V(0,0)이자형V(,0,0)+1

후속 맵을 다른 고정 소수점없는 맵으로 바꿀 수 있음을 관찰하십시오.

여기에 오해를 정리할 수있는 작은 정리가 있습니다.

정리 : 모든 전체 언어는 다른 전체 언어로 해석 될 수 있습니다.

증명. 전체 언어로 하자 . 우리는 전체 얻을 L ' 하는 해석 L를 에 인접하여 L 의 평가자 전자 . 보다 정확하게 할 수 P ' = { 0 , N | N P } { 1 , 0 } 및 정의 전자 브이 '전자 V ' ( B , N , m'이자형V'={0,}{1,0}이자형V' 물론, L이 ' 때문에 토탈 L은 전체이다. 그 보려면 L을 ' 시뮬레이션 할 수 있습니다 L은 단지 걸릴= 1 , 0

이자형V'(,,미디엄)={이자형V(,미디엄)만약 =0,이자형V(미디엄0,미디엄1)만약 =1 과 미디엄=미디엄0,미디엄1
'' , 이후 전자 V ' ( U , m , N ) E V ( m , N ) , 필요에 따라. QED.=1,0이자형V'(,미디엄,)이자형V(미디엄,)

연습 문제 : [2014-06-27에 추가됨] 위에 구성된 언어 는 작곡으로 닫히지 않습니다. 그래서 정리의 증명을 수정 L ' 경우 만족 여분의 요구 사항을 L가 않습니다.''

''


위키 확인란을 선택하면 의도하지 않은 것입니다.
Andrej Bauer

2
주어진 프로그램이 유효한지 여부를 알 수없는 언어로 된 힘이 있습니까?
Phylliida 2016 년

3
@DaniPhye : 언어 구문을 반 추정 할 수없는 경우 구문에서 계산 능력을 "숨길"수 있습니다. 예를 들어, 언어 규칙은 각 함수에 함수가 총계인지를 나타내는 비트가 장착되도록 요구할 수 있습니다. 우리는 구현할 수 있습니다. is_total그렇지 않으면 계산할 수 없지만 평가를 구현할 수는 없습니다 (결과 함수의 비트도 계산해야하기 때문에). 일반적으로 파서를 구현할 수 없다면 프로그래밍 언어가 아니라고 말합니다.
Andrej Bauer

3
"언어가 스스로 해석 할 수 있다면 그것은 총체적이지 않다"는 결과는 다음과 같습니다 : F-omega를위한 자기 해석기 ?
선인장


18

튜링이 완료되지 않은 언어는 통역을 직접 작성할 수 없습니다.

이 문장이 잘못되었습니다. 모든 문자열의 의미가 "입력을 무시하고 즉시 중지"인 프로그래밍 언어를 고려하십시오. 이 프로그래밍 언어는 완전하지는 않지만 모든 프로그램은 해당 언어의 통역사입니다.


아! 좋은 지적입니다. 따라서 언어가 계산하는 것에 대한 특정 요구 사항이 있어야합니다. 그 말을 사실로 만들기 위해서는 언어의 힘에 대한 최소한의 요구 사항이 있어야합니다. 기본 산술 문제를 해결할 수 있어야한다고 생각하면 그대로 유지할 수 있습니다.
Jake

@Jake 실제로 "언어가 하나 이상의 비 일관적인 함수를 정의하는 언어"또는 "언어가 둘 이상의 함수를 정의하는 것"과 같이 매우 약한 것을 피할 수 있습니다. 나의 반례는 "사소한"의 합리적인 정의에있어 명백하다.
David Richerby 2016 년

제가 생각하기에 흥미로운 문제인 것 같습니다. 무언가를 찾으면 답장을 드리겠습니다.
Jake
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.