예, 태아 체커는 Goedel 's T의 모든 것을 타입 검사 할 수 있습니다. 체커를 사용하여 T의 반복 연산자가 종료되고 있음을 보여줌으로써이를 확인할 수 있습니다. 예를 들어 다음 정의가 작동합니다.
I t의 전자 RI t의 전자 R나는에프0I t의 전자 R나는에프( n + 1 ):==A → ( A → A ) → N → A나는에프( I t 예 R나는에프n )
Fetus 체커 (또는 대부분의 다른 터미네이션 검사기)는 구조적으로 재귀적인 정의이므로 확인하기가 매우 쉽습니다.
Agda와 Coq는 모두 1 차 산술에서 아마도 총계를 훨씬 능가하는 함수의 종료를 증명합니다. 이를 가능하게하는 기능은 데이터에 대한 재귀를 통해 유형을 정의 할 수 있다는 것입니다.이를 "큰 제거"라고합니다. (ZF 세트 이론에서 대체 공리 체계 는 거의 같은 목적으로 사용됩니다.)
T를 넘어서는 것의 쉬운 예는 Goedel의 T 자체의 일관성입니다! 구문을 데이터 유형으로 제공 할 수 있습니다.
data T : Set where
N : T
_⇒_ : T → T → T
data Term : T → Set where
zero : Term N
succ : Term (N ⇒ N)
k : {A B : T} → Term (A ⇒ B ⇒ A)
s : {A B C : T} → Term ((A ⇒ B ⇒ C) ⇒ (A ⇒ B) ⇒ A ⇒ C)
r : {A : T} → Term (A ⇒ (A ⇒ A) ⇒ N ⇒ A)
_·_ : {A B : T} → Term (A ⇒ B) → Term A → Term B
타입 의존성은 우리가 잘 타이핑 된 T의 항만을 포함하는 항의 데이터 타입을 정의 할 수있게한다. 그런 다음 타입에 대한 해석 함수를 제공 할 수있다.
interp-T : T → Set
interp-T N = Nat
interp-T (A ⇒ B) = (interp-T A) → (interp-T B)
이것은 N
Agda 자연수 여야하며 T의 화살표는 Agda 함수 공간으로 해석되어야합니다. 데이터 유형 T의 구조에 대한 재귀 로 집합 을 정의하기 때문에 이것은 "큰"제거입니다 .
그런 다음 Goedel 's T의 모든 항을 Agda 항으로 해석 할 수 있음을 보여주는 해석 함수를 정의 할 수 있습니다.
interp-term : {A : T} → Term A → interp-T A
interp-term zero = 0
interp-term succ = \n → n + 1
interp-term k = \x y → x
interp-term s = \x y z → x z (y z)
interp-term r = Data.Nat.fold
interp-term (f · t) = (interp-term f) (interp-term t)
(이 기계에는 Agda가 없으므로 수입, 고정 선언 및 오타가 누락되어 있습니다. 고정은 독자가 원하는 경우 편집자가 될 수있는 연습입니다.)
나는 Agda의 일관성 강도가 무엇인지 모르지만 Benjamin Werner는 유도 성 건축의 계산법 (Coq의 커널 미적분학)이 ZFC와 수많은 접근 불가능한 추기경과 일치한다는 것을 보여주었습니다.