타르 피트에서 탈출 (Cops)


9

이것은 언어를 정의하고 튜링 완료를 증명하는 데 중점을 둡니다.

이것이 경찰의 실입니다. 강도의 실이 여기 있습니다 .

경찰

경찰은 두 가지를 준비합니다.

  • 프로그래밍 언어 또는 기타 계산 시스템의 공식 사양. (전산 시스템은 아래에 정의되어 있습니다.)

  • 아래의 엄격한 정의에 따라 시스템이 튜링 완료되었다는 증거.

당신은 당신의 언어에 대한 당신의 사양을 게시 할 것이고, 강도는 튜링 완전성을 증명함으로써 그것을 "크랙"하려고 시도 할 것입니다. 1 주일 이내에 제출물에 금이 가하지 않으면 제출물을 안전하다고 표시하고 증거를 게시 할 수 있습니다. (수정할 수없는 한 누군가 증거에서 결함을 발견하면 답변이 무효화 될 수 있습니다.)

이것은 따라서 가장 많은 표를 얻었으며 금이 가거나 무효화되지 않은 답이 승자가됩니다. 도전은 개방적입니다-나는 대답을 받아들이지 않을 것입니다.

이러한 과제를 해결하기 위해 계산 시스템은 다음 네 가지로 정의됩니다.

  • A "프로그램 세트" P. 이것은 문자열, 정수, 이진 트리, 격자의 픽셀 구성 등과 같이 셀 수없이 무한하게 설정됩니다 (그러나 아래의 기술 제한 참조).

  • "input set" I은 셀 수없이 무한한 집합 P이 될 수 있으며 (그렇더라도) 같은 집합 일 필요는 없습니다 .

  • "출력 세트" O는 유사하게 셀 수없이 무한하며, 같 P거나 같지 않을 수 있습니다.I

  • 출력 제조 결정적 기계적 절차 o프로그램 p입력 i, p, io의 구성원 P, IO각각이. 이 절차는 원칙적으로 튜링 머신 또는 다른 추상 계산 모델에서 구현 될 수 있어야합니다. 물론 프로그램과 입력에 따라 절차가 중단되지 않을 수 있습니다.

세트 P, I그리고 O당신이 계산 가능한 방식으로 문자열로 표현할 수 있도록해야합니다. (대부분의 합리적인 선택은 중요하지 않습니다.이 규칙은 멈추지 않는 튜링 머신 세트와 같은 이상한 세트를 선택하지 못하게하기 위해 존재합니다.)

튜링 완성도는 다음과 같이 정의됩니다.

  • 임의의 계산 가능한 부분 함수 fIO, 프로그램이 존재 pP부여하도록 p입력 i, 출력 인 f(i)경우 f(i)의 값을 가진다. (그렇지 않으면 프로그램이 중단되지 않습니다.)

상기 정의에서 "계산 가능"이라는 단어는 "튜링 머신을 사용하여 계산 될 수있다"를 의미한다.

참고도 있다는 규칙 110비트 순환 태그는 ,이 정의에 의해 튜링 완료 그들은 필요한 입출력 구조를 가지고 있지 않기 때문에. 우리가 정의로 람다 계산법은 오래로, 튜링 IO교회 숫자 . (그것은 튜링 완성되지 않은 우리가 가지고가는 경우 IO일반적으로 람다 표현식이 될 수 있습니다.)

언어 구현을 제공 할 필요는 없지만 원하는 경우 답변에 언어를 포함 할 수 있습니다. 그러나 어떤 식 으로든 언어를 정의하기 위해 구현에 의존해서는 안됩니다. 사양 자체가 완전해야하며 사양과 구현 사이에 모순이있는 경우 구현의 버그로 처리해야합니다.


9
미안하지만 인기 경쟁 객관적인 승리 기준입니다. 팝콘이된다고해서 주제에 도전하는 것은 아니며 결코 해본 적이 없습니다. 가장 최근의 메타 논의는 당신의 다섯 당신이 정말로에 서 할 다리가없는 다른 것으로 선호 할 수 있도록하지만,이 찬성 +27의 합의가있다. 이 질문은 합의 된 정책에 대해 종결되었으므로 다시 열도록 요청합니다.
Nathaniel

2
(WhatWizard는 다른 이유로 폐쇄했습니다.)
user202729 April

2
닫기 투표를 "동의하지 않음"또는 "이것이 마음에 들지 않습니다"버튼으로 사용하지 마십시오. 사이트 정책을 시행하기 위해 가까운 투표가 사용됩니다. 정책에 동의하지 않는 경우, 정책을 메타로 가져 가십시오. 커뮤니티 합의에 의해 주제가되는 도전을 닫지 마십시오.
Mego

1
@ Mego 나는 이것을 너무 광범위하게 폐쇄하기로 결정했지만, 기존의 팝콘 규칙에 의해 이것이 주제가 아닌 것으로 생각합니다. 우리는 인기 경연 대회가 "달성되어야하는 목표의 명확한 사양"을 가질 것으로 기대합니다.이 질문은 가장 창조적 인 방법으로 X를 수행합니다. 올바른 답변이 아닌 다른 목표는 없으며 팝콘 태그가 열린 상태로 유지되도록 첨부되어 있음이 분명합니다.
Ad Hoc Garf Hunter

2
@WhatWizard 달성해야 할 목표는 명백하게 Turing을 완료하는 것입니다. 일주일 이내에 균열이 발생하지 않는 것으로 판단됩니다. 명확하지 않습니까?
Nathaniel

답변:


10

눈가리개 산술

비교적 말하기 쉬운 언어 일 것입니다. (Turling-complete 자신을 증명해야하기 때문에 언어를 얼마나 어렵게 만들 수 있는지에 대한 제한이 있습니다!)

이 언어의 경우, 프로그램 세트는 아래의 "프로그램"섹션에 제공된 바와 같이 눈가리개 진 산술 프로그램 세트이며, 입력 세트는 양의 정수 세트이며, 출력 세트는 정수 세트입니다 (단지 전체가 아니라 양의 정수).

이 언어는 전체적으로 볼 수없는 숫자에 대한 계산을 기반으로하는 제어 흐름이 거의 또는 전혀 없기 때문에 상당히 유용합니다. 따라서 동종 암호화 시스템 내부에서 프로그램을 구현하기위한 언어로 유용 할 수 있습니다.

사양

눈가리개 진 산술은 다음 사양의 난해한 프로그래밍 언어입니다.

데이터 저장고

실행중인 Blindfolded Arithmetic 프로그램의 상태는 6 개의 변수로 구성되며 각 변수는 정수를 저장할 수 있습니다. (얼마나 많은 이들 정수를 얻을 수있는 작은에 아무런 제한이 없습니다; 특히, 그들은 부정을 갈 수 있습니다.) 변수가 호출 a, b, c, d, e,와 i.

프로그램의 시작시 ae포함 된 각을 0으로 초기화하고있는 i사용자 입력 찍은 양수로 초기화된다. (입력이 없으면 i1로 초기화됩니다.)

프로그램이 실행을 중단하면 (이는 0으로 나누기 만되므로 발생할 수 있음) i나누기 직전 의 값 이 프로그램의 출력으로 사용됩니다.

프로그램

Blindfolded Arithmetic 프로그램은 명령 목록이며, 각 명령은 다음 형식 중 하나를 갖습니다 (여기서 v 는 변수 이름으로 대체 될 수 있으며 잠재적으로 사용될 때마다 다른 이름으로 바뀔 수 있음).

  • v = v + v
  • v = v - v
  • v = v * v
  • v = v / v

명령의 각 피연산자 는 변수 여야합니다 . 이 언어는 리터럴 정수를 사용할 수 없습니다.

프로그램의 실행은 각 명령을 순서대로 실행 한 다음 시작으로 반복하고 명령을 다시 순서대로 계속 실행하여 무한정으로 (또는 0으로 나누려고 시도 할 때까지 프로그램을 종료 함) 수행됩니다. .

각 명령은 표기법에서 예상되는 것과 동일한 의미를 가지며, 대부분의 실제 프로그래밍 언어에서 사용되는 것과 다릅니다. 명령에서 metioned 된 두 번째 및 세 번째 변수의 값을 취하고 산술 연산 (더하기 / 빼기) 네 가지 형태의 명령에 대해 각각 / multiply / divide)가 적용되고 결과 값이 첫 번째 변수에 저장됩니다. 여기서 나누기는 0으로 반올림되는 정수 나누기입니다.

프로그램 종료 이외의 제어 흐름은 없습니다. 명령은 항상 0으로 나누기 (있는 경우)가 발생하고 프로그램을 종료 할 때까지 순서대로 순환합니다. 특히 변수를 직접 읽는 방법은 없으며 다른 변수에 지정된 값에 결과가 영향을 미치는 계산 소스로만 사용할 수 있습니다.


내 답변 에 빠진 것이 있는지 확인할 수 있습니까 ?
user202729

@ user202729 : (여기에 댓글을 달 수있는 담당자가 없기 때문에 여기에 주석 처리) 플립을 취소 할 수 없기 때문에 "플립"에서 "거짓이면 이동"과 "참이면 true"를 시뮬레이션 할 수 없습니다. 당신이 이동 후. 따라서 다른 방법으로 처리해야합니다 (예 : 테스트를 거꾸로하는 방법, 어렵지 않아야 함). 더 중요한 것은 정지 동작 측면에서 Turing-completeness 증거이지만 문제의 정의에 따라 I / O도 수행 할 수 있어야하므로이를 수행 할 수 있음을 증명해야합니다.
ais523

I / O 부분 (지금)이 괜찮기를 바랍니다. 다른 문제에 관해서는, 나는 심지어 내부 국가가 필요하지 않다면, 중간 상태가 모든 문제를 해결한다는 것을 알고있다. (어떻게 말
해야할지 모르겠지만

@ user202729 : 여전히 완벽하지는 않습니다. (예를 들어, 질문은 음수를 출력 할 수 있어야하며, i항상 "정지 된"상태 번호가되지 않도록 목적을 변경해야합니다. 출력의 일부가 되십시오), 그러나 충분한 시간과 규칙을 명확하게 설명하면 완전히 균열이 생길 수 있으므로 안전하다고 표시하지 않을 정도로 가깝습니다. 나는 기술에 대한이 도전을 이기고 싶지 않다.
ais523

이는 de.ioccc.org/years-spoiler.html#1992_buzzard.1이 사용 하는 제한 사항과 매우 유사 합니다. 그 구현은 고정 크기 정수를 사용하므로 Turing-complete가 아니며, 이것은 당신이 가지고있는 변수의 수에 심각하게 제한되어 있지만 증거는 비슷하다고 생각합니다.
b_jonas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.