시스템 F는 어떤 기능을 계산할 수 없습니까?


28

튜링 완전성에 대한이 위키 백과 기사 에서는 다음과 같이 설명합니다.

형식화되지 않은 람다 미적분은 튜링 완료이지만 시스템 F를 포함한 많은 형식화 된 람다 미적분은 그렇지 않습니다. 유형이 지정된 시스템의 가치는 더 많은 오류를 감지하면서 가장 일반적인 컴퓨터 프로그램을 나타내는 능력에 기초합니다.

시스템 F로 계산할 수없는 총 계산 함수의 예는 무엇입니까 ?

또한 hindley-milner는 다음과 같습니다.

시스템 F의 제한

다음과 같은 사실 때문에 :

System F의 Curry 스타일 변형, 즉 명시적인 타이핑 주석이없는 변형에 대해서는 유형 검사를 결정할 수 없습니다.

이것은 hindley-milner 유형 시스템의 기본이되는 람다 미적분학이 완전하지 않은 것을 의미합니까?

이것이 사실이라면, 하스켈 이 분명히 터링을 완료하고 그것이 람다 미적분학과 힌들리-밀너 타입 시스템의 기초라는 것을 알고 있기 때문에, 람다 미적분학에 존재하지 않는 어떤 특징들이 하스켈 튜링을 완성시키기 위해 추가됩니까?



Haskell 튜링을 완료하는 기능의 예는 기본 코드 인터페이스입니다.
Trismegistos

귀하의 의견에 감사합니다. 시스템 T에 익숙하지 않습니다. 여기에 언급 된 시스템 T 라고 가정해도 됩니까? 시스템 T는 시스템 F를 어떻게 비교하고 대조합니까?
Mike HR

참고, 인터넷 검색에서 system T vs. system F나는 다음과 같이 최종 최종 질문에 대답하는 것을 발견 했습니다. haskell은 어떻게 시스템 F에 Turing-completeness를 추가했는지
Mike HR

1
@Trismegistos는 흥미로운 철학적 문제를 제기한다고 생각합니다. 정확히 Haskell은 무엇이며 경계는 어디에 있습니까?
Martin Berger

답변:


45

시스템 는 매우 표현력이 좋습니다. 지라 의해 입증 된 바와 같이 여기 입력의 함수 NN ( N은 정의된다 X . X ( X X ) X )되어 정확하게 정의 기능 ( NN 번째 순서 Heyting 산술) H 2 . 이는 2 차 Peano 산술로 정의 할 수있는 함수와 동일합니다 .FNNNX. X(XX)XNNHA2

증명 및 유형 을 더 읽기 쉬운 참조로 확인하고 싶을 것입니다 . 이것은 Ackermann 함수에서 Gödel의 시스템 T에 대한 인터프리터에 이르기까지 많은 프로그램을 시스템 F로 작성할 수 있음을 의미합니다 . 전체 프로그래밍 언어 (약간의 온화한 조건)에서 시스템 F자체 통역사를 구현할 수 없습니다 . 즉, 함수 e v a l : NN 은 시스템 F 의 용어 t 에 대한 코드를 입력으로 받아 ( a) t의 정규형TFeval:NNtFt. 증거는 중지 문제의 결정 불가능 성을 위해 사용 된 대각 트릭의 변형을 포함합니다. Andrej는 여기에 아름답게 설명합니다 .

다른 질문에 대답하려면 : Hindley-Milner (HM) 언어 의 -calculus도 튜링이 완전하지 않습니다. 실제로 이것은 시스템 F 보다 훨씬 약하며 , 단순하게 입력 된 λ- 미적분 에 대한 표현력에 더 가깝습니다 .λF λ

Haskell은 실제로 Turing이 완료되었습니다. 이것을 가능하게하는 가장 두드러진 특징은 (다른 것들도 있지만) 무제한 재귀 가 있다는 것입니다 . 모든 프로그램 (기능)의 정의는 프로그램 자체를 참조 할 수 있습니다. 이것은 간단하게 입력되지만 결합기와의 튜링 완전성을 유지하는 PCF 의 정의에서 수행되는 것과 같은 결합기를 추가하는 것과 유사합니다 .YY

Haskell Turing을 완성시키는 다른 기능이 있지만, 일반적으로 핵심 언어의 일부로 사용되지는 않습니다 (예 : 함수에 대한 참조, 무제한 데이터 유형 등).


1
와우, 이것은 놀라운 답변이며 모든 것에 완벽하게 대답합니다. 고맙습니다!
Mike HR

"모든 프로그래밍 언어는 ..."이것은 정확하지 않습니다. 내가 이해하는 것으로 비 종료 프로그램을 잘못된 유형의 프로그램으로 배제함으로써 작동하는 총 언어에 대한 자체 통역사가 있습니다. 이 백서
jmite

명시된대로 @jmite, 내 주장은 정확합니다. 그 논문은 관련 토론에서 언급되었으며 Andrej는 그의 블로그에 다음과 같은 발언을하였습니다. math.andrej.com/2016/01/04/…
cody

11

하스켈의 타이핑 시스템이 "힌리 밀너 타입 시스템"이라고 말하는 것은 다소 오해의 소지가 있습니다. Haskell의 유형은 다른 유형의 고급 유형을 포함하여 훨씬 강력합니다. 실제로 타이핑 시스템은 매우 강력하여 타이핑 시스템에 Turing-complete 프로그래밍 언어를 포함시킬 수 있습니다 ( 여기 참조) . 이것이 하스켈의 힘에 대한 유일한 이유는 아니며 코디는 다른 사람들을 언급했다.


감사. hindley-milner에 대한 나의 주요 노출은 haskell을 통해 이루어 졌으므로 더 높은 종류의 유형이 그것의 일부라고 가정했을 것입니다. hindley-milner는 단순히 형식 유추를 참조합니까? 아니면 더 뭔가인가? 나는 람다 미적분학에 그것의 수학적 기초가 있다는 것을 이해하고 있습니다. 나는 단지 강력한 유형의 haskell 사이의 논리적 경계와 "hindley-milner 유형 시스템"의 최소 구현이 무엇인지 이해하려고 노력하고 있습니다.
Mike HR

NB haskell 타입 시스템의 힘에 관심이 있다면, haskell 타입 시스템을 사용하여 카테고리 이론을 깊이 파고 드는 hask에 관한 Edward Kmett의 비디오를 추천 합니다.
Mike HR

1
@ MikeH-R 일반적으로 우리는 Hindley–Milner가 타이핑 시스템이거나보다 정확하게는 미적분학이고 W 알고리즘은 Hindley-Milner 시스템의 유형 유추 알고리즘임을 의미합니다. Hindley-Milner 시스템에서 주목할만한 점은 파라 메트릭 다형성과 유형 주석없이 주어진 프로그램의 가장 일반적인 유형을 유추 할 수 있다는 점입니다. 위키 백과 기사는 읽어 볼 가치가있다. λW
Martin Berger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.