자체 컴파일러 Turing-complete를 표현할 수있는 언어가 있습니까?


12

tex.SE에 대한 의견 은 나를 놀라게했습니다. 진술은 본질적으로 다음과 같습니다.

언어 X에서 언어 X에 대한 컴파일러를 작성할 수 있다면 X는 Turing-complete입니다.

계산 및 공식 언어 용어로 다음과 같습니다.

경우 결정 L L T MM LF L = R E를 .MLLTMMLFL=RE

여기서 은 모든 Turing 기계 인코딩의 언어를 나타내고 F LL의 기계에 의해 계산 된 기능 세트를 나타냅니다 .LTMFLL

이것이 사실입니까?


자신의 시뮬레이터를 표현할 수있는 "사소하지 않은"또는 "충분히 복잡한"언어 는 TM 완료 와 같이 이와 가까운 실제 계산법이 있어야합니다 . 컴파일러는 일반적으로 시뮬레이터의 필수 요소입니다. 그것은 많은 TM 완전성 증명에서 실제로 발견되는 "디자인 패턴"이지만, 일반화되거나 공식화되지는 않았을 것입니다. Computer Science Chat의 추가 분석 / 토론 주제 일 수도 있습니다. 의심 / 추론 "모든 사소하지 않은 / 충분히 복잡한 재귀 및 재귀 적으로 열거 가능한 언어가 다른 언어로 매핑 / 축소 될 수 있습니다"와 같은 다른 흥미로운 계산법이 있습니다.
vzn

1
나는 할 수 없다 InterpretMe라는 난해한 언어, 생성 된 것도 이 확실히 완료 튜링하지 그래서, 그러나 자신의 통역의 표현을.
문의적인 철자

두 번째 진술을 설명해 주시겠습니까? 무엇 ? 이 진술은 첫 진술과 어떤 관련이 있습니까? M
reinierpost

@reinierpost 통상의 수이고 M을 일부 (허용) 인코딩 주어진다. 따라서, L T M = { M은 | M은  튜링 기계이다 } . 에 의해 F L I은 언어에 의해 계산 기능의 설정 나타내는 L 튜링 기계를. MMLTM={MM is a Turing machine}FLL
Raphael

주장 상태로 더 나은 방법이 될 것이다 : "거기 TM 인 경우 M LL M = LF L = R E .MMLLM=LFL=RE
라파엘

답변:


13

다음 프로그래밍 언어에서 알 수 있듯이 비공식적 인 진술은 사실이 아닙니다. ASCII 문자의 문자열은 유효한 프로그램이며 모든 프로그램의 의미는 "입력 사본 만 출력하는 프로그램 출력"입니다. 따라서이 언어의 모든 프로그램은 해당 언어의 컴파일러이지만 해당 언어는 Turing-complete가 아닙니다.

M2xxMLMFL


(ϕi)i0Q(x,y)pϕpyQ(p,y)Qx=ypϕp(y)=Q(p,y)ϕpp


1
어떤 의미에서 해당 언어의 모든 프로그램이 해당 언어의 컴파일러입니까? 모든 프로그램은 해당 언어로 프로그램을 입력하고 해당 언어로 다른 프로그램을 출력하는 프로그램입니다. 그러나 일반적으로 quines는 컴파일러로 간주되지 않습니다.
user253751

1
cc(P)={xreturn P}P(x)=Pc

1
@immibis I (늦게) 당신이 옳다고 생각합니다. 내가 쓰려고 한 것은 모든 프로그램의 의미가 "입력을 출력하는 것"인 것 같습니다. 그것은 아마도 내가 처음에 말하려는 것이었을 것입니다. 아니면 내가 틀린 대답에서 정답까지의 편집 거리가 너무 작다는 것은 운이 좋았다. :-)
David Richerby

1
대답은 이제 "입력을 무시하고 입력 사본을 출력합니다"라고 말합니다. 둘 다 할 수는 없습니다.
user253751

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