문제

완전한 언어를 튜링하기 위해 정지 문제를 해결할 수 없으며 항상 정지하는 Regexes와 같은 일부 비 TC 언어에 대해 사소하게 해결할 수 있습니다.

멈출 수 있고 멈추지 않고 멈추는 지 여부를 결정할 수있는 알고리즘을 인정하는 언어가 있는지 궁금합니다.

도움이 되었습니까?

해결책

예. 이런 종류의 중요한 클래스는입니다 원시적 재귀 함수. 이 클래스에는 숫자 (추가, 곱셈 등)와 함께 할 수있는 모든 기본 사항과 @adrian과 같은 일부 복잡한 클래스 (정규 표현/유한 Automata, 상황에 맞지 않는 문법/푸시 다운 automata). 그러나, 기본 재귀가 아닌 기능이 있습니다. Ackermann 기능.

실제로 원시 재귀 기능을 이해하기가 매우 쉽습니다. 그것들은 당신이 진정한 재귀가없는 프로그래밍 언어로 얻을 수있는 기능입니다 (따라서 기능 F는 직접적이거나 직접 또는 다른 함수 g를 호출 한 다음 f 등을 호출함으로써 호출 할 수 없습니다). 대신 루프를 위해 경계를 냈다. 루프에 대한 경계는 "1에서 r에서 r까지"와 같은 것입니다. 여기서 r은 프로그램 초기에 이미 계산 된 변수입니다. 또한 For-Loop 내에서 수정할 수 없습니다. 그러한 프로그래밍 언어의 요점은 그 것입니다 모든 프로그램 중단.

우리가 쓴 대부분의 프로그램은 실제로 원시적 재귀입니다 (의미, 그러한 언어로 번역 될 수 있음).

다른 팁

그만큼 중단 문제 언어로 행동하지 않습니다. 오히려 그것은 기계 (즉, 프로그램)에 작용합니다. 주어진 프로그램이 주어진 입력에 중단되는지 묻습니다.

아마도 당신은 다른 계산 모델에 대해 해결할 수 있는지 물어볼 것입니다 (당신이 언급했지만, 또한푸시 다운 오토마타).

일반적으로 정규 리소스 (정규 표현식 또는 동등한 유한 자동 카타와 같은 고정 된 수의 상태가 있고 외부 스토리지가없는 유한 자동 카타)가있는 모델에서 Halting을 감지 할 수 있습니다. 이것은 가능한 모든 구성을 열거하고 기계가 동일한 구성에 두 번 들어가는 지 확인하여 쉽게 달성 할 수 있습니다 (무한 루프를 나타냅니다). 유한 자원을 사용하면 ~ 해야 하다 기계가 중단되지 않으면 반복 구성을 확인하십시오.

일반적으로 무한 자원 (예 : 무한 TM 및 PDA)이있는 모델은 중단 될 수는 없지만 모델과 열린 문제를 개별적으로 조사하는 것이 가장 좋습니다.

(모든 Wikipedia 링크에 대해 죄송하지만 실제로는 이런 종류의 질문에 매우 좋은 자료입니다.)

짧은 대답은 그렇습니다. 그러한 언어는 매우 유용 할 수도 있습니다.

몇 달 전에 LTU에 대한 토론이있었습니다.http://lambda-the-ultimate.org/node/2846

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top