표준 함수를 사용한 프로그래밍 언어


29

모든 기능이 정식 형식의 프로그래밍 기능이 있습니까? 즉, 모든 입력 집합에 대해 동일한 값을 반환하는 두 함수는 같은 방식으로 표시됩니다. 예를 들어 f (x)가 x + 1을 반환하고 g (x)가 x + 2를 반환 한 경우 f (f (x )) 및 g (x)는 프로그램이 컴파일 될 때 구별 할 수없는 실행 파일을 생성합니다.

아마도 더 중요한 것은, 프로그램의 표준 표현에 대한 더 많은 정보를 어디에서 / 어떻게 찾을 수 있을까요? 물어 보는 것은 자연스러운 질문 인 것 같습니다. 나는 내가 찾고있는 것에 대한 적절한 용어를 모른다는 것이 두렵습니다. 그러한 언어가 튜링이 가능할 수 있는지 여부와 그렇지 않은 경우 프로그래밍 언어를 얼마나 표현할 수 있는지, 여전히 그러한 속성을 유지하면서 궁금합니다.

저의 배경은 다소 제한적이므로 전제 조건이 적은 소스를 선호하지만 고급 소스에 대한 참조도 차가울 수 있습니다.

답변:


38

이것이 가능한 범위는 실제로 람다 미적분학 이론에서 중요한 공개 질문입니다. 알려진 내용에 대한 간단한 요약은 다음과 같습니다.

  • 단위, 곱 및 함수 공간이있는 단순 유형 람다 미적분은 단순한 표준 양식 속성을 갖습니다. 두 항이 동일한 베타 정규형, 에타-긴 형태 인 경우에만 두 항이 동일합니다. 이러한 일반적인 형태를 계산하는 것도 매우 간단합니다.

  • 합계 유형을 추가하면 문제가 크게 복잡해집니다. 평등 문제는 여전히 결정 가능하지만 (검색 할 키워드는 "공동 평등"입니다.) 알려진 알고리즘은 매우 까다로운 이유로 작동하며 제 지식으로는 완전히 정상적인 정규 정리가 없습니다. 내가 아는 네 가지 접근법은 다음과 같습니다.

  • 자연수와 같은 무한한 유형을 추가하면 문제를 결정할 수 없습니다. 기본적으로 힐버트의 10 번째 문제를 인코딩 할 수 있습니다.

  • 재귀를 추가하면 문제의 형태를 정할 수 없기 때문에 정상적인 형태를 가지게되면 문제를 해결할 수 없으므로 문제를 해결할 수 없게됩니다.


이 백서 에서는 코 프로덕트와 동등성을 합산하여 합산 할 수 있지만 "단일"정식 구문은 없으며 비교하는 두 용어에 잘못된 용어가있을 때이를 감지 할 수있는 "포화 함수"를 선택합니다. 둘 다 포커싱을 사용한다는 점에서 Ahmed-Licata-Harper와 가장 유사합니다.
Max New

단위, 제품 및 함수 만 사용하여 기록 할 수있는 모든 카디널리티는 1이지만, 합계를 추가하면 갑자기 여러 가지 카디널리티를 얻습니다 ( "유용한 계산"을 수행 할 수 있음). 이 사실들이 관련이 있습니까?
glaebhoerl

1
@glaebhoerl : 사실은 관련 이 없다고 말하는 것을 꺼려 하지만,이 경우에는 분명한 연관성을 보지 못합니다. 내가 언급 한 대부분의 결과는 기본 유형 를 언어에 추가 하거나 (소개 또는 elim 형식없이) (a) 이후로 카디널리티 사실을 깨뜨릴 수 있습니다 및 는 다른 일반적인 형태이지만 (b) 내가 알고있는 알고리즘에는 영향을 미치지 않습니다. bλx:b.λy:b.xλx:b.λy:b.y
Neel Krishnaswami
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.