본문으로 건너뛰기
347 / TYPED PROOF SEARCH LAB
먼저 알아두면 좋아요 · 명제·함의와 형식적 제약
단원 목록 (600) · 증명 탐색·타입 검사·Curry–Howard
이해하는 속도로 읽으세요.개념도이론실험확인 문제
BUILD YOUR INTUITION

먼저 그림으로 이해하기

한 번에 한 단계씩 살펴보세요.

증명을 찾는 일과 주어진 항을 검사하는 일을 나누고 탐색 한도의 의미를 확인합니다.

Annotated simply typed lambda calculus with atoms P,Q,R and arrows. Nearest binding is de Bruijn index0. Candidate inference is syntax-directed; inferred type must separately equal the requested goal. Search enumerates beta-normal terms by increasing AST-node count: lambda introduction or a context-variable head applied to normal arguments. A failed bounded search means no NORMAL TERM FOUND WITHIN THIS BUDGET, not no proof, false or UNSAT. A normal-form size limit is not a limit over all arbitrary proof syntax. Search results are checked again by the separate checker. Candidate checking is independent of the search budget, and the sweep compares nine independent budgets. Boolean countermodels refute entailment, while absence of a Boolean countermodel alone does not establish a constructive proof. This is a small displayed-rule checker, not the Lean kernel or arbitrary dependent type theory. Root goal: P→R. Selected candidate: (λx0:P. (g (f x0))). Inferred type: P→R. Current search term: no normal term found within the selected budget.

후보 항의 트리와 추론한 타입λPP→R@RgQ→R@QfP→Qx0Pλ: 함수 만들기 · @: 함수 적용파랑: 타입 있음 · 주황: 검사 실패회색: 미검사 · 긴 타입은 표에서 전체 표시
제시한 후보의 AST입니다. 파랑은 타입을 추론한 노드, 주황은 검사를 거부한 노드, 회색은 앞선 실패로 검사하지 않은 노드입니다. 선택한 검사 단계에 테두리를 표시합니다. 긴 타입은 줄여 표시하며 표에 전체 타입이 있습니다. 후보가 잘 타입화되어도 전체 목표를 증명하는지는 별도입니다.
검사 단계 6/6 · 함의 도입Γ = [P→Q, Q→R]body: R→IΓ ⊢ λ term : P→R지역 타입 검사 통과전체 목표: P→R후보가 전체 목표를 증명: 1지역 타입 판정과 전체 목표 일치를 구분
조회한 노드의 실제 지역 타입 검사입니다. Γ는 가까운 변수부터 나열한 문맥입니다. 가정은 문맥을 조회하고, λ는 매개변수 가정을 추가한 본문에서 화살표 타입을 만들며, 적용은 함수의 입력 타입과 인수 타입을 비교합니다. 지역 판정과 후보 전체의 목표 일치를 혼동하지 않습니다.
191.10
가로 정상형 항 노드 한도 · 파랑 해당 한도에서 증명 발견 · 주황 제시 후보의 전체 목표 증명 · 세로 0/1이며 시간·확률이 아닙니다.
checker stepAST noderulecontext types (nearest first)inferred typediagnostic
02varP, P→Q, Q→RQ→Rok
14varP, P→Q, Q→RP→Qok
25varP, P→Q, Q→RPok
33applyP, P→Q, Q→RQok
41applyP, P→Q, Q→RRok
50lambdaP→Q, Q→RP→Rok

selected search node budget = 5

고정 기준 예제의 그림과 수치입니다. 각 단계에서 같은 그림의 의미를 차례로 살펴보세요. 고정된 기준 예제이며 아래 실험의 설정과 독립적입니다.
1 / 4

명제와 증명 항

이 작은 체계에서 P,Q,R은 원자 타입이고 A→B는 A의 증거로부터 B의 증거를 만드는 함수입니다.

term:A is evidence for A under the stated context

실험에서 확인하기 →
이 단원 목차

증명을 찾는 것과 제시된 증명을 검사하는 것

언어 모델이 증명을 제안한 일, 탐색기가 증명을 못 찾은 일, 검사기가 항을 거부한 일은 서로 다른 사건입니다. 이 실습은 타입 주석이 있는 단순 타입 람다 항으로 차이를 살펴봅니다. 원자 타입 P,Q,R과 함수 타입만 사용하며 의존 타입·재귀·산술 공리·암묵적인 고전 논리 원리는 추가하지 않습니다.

판정에는 가정, 항, 타입이 함께 들어갑니다.

Γ⊢t:A.\Gamma\vdash t:A.

“문맥 Γ의 가정 아래 항 t의 타입이 A이다”라고 읽습니다. 명제와 타입의 대응에서 t는 명제 A의 증거입니다. A→B는 A의 증거를 받아 B의 증거를 만드는 함수입니다. 가정도 주장의 일부입니다. f:P→Q와 g:Q→R을 가정한 증명이 그 함수들을 빈 문맥에서 만들어냈다는 뜻은 아닙니다.

세 가지 지역 규칙

변수는 문맥에서 타입을 가져옵니다. λ는 매개변수를 가정에 넣고 본문을 검사한 뒤 함수 타입을 만듭니다. 적용은 함수의 입력 타입과 인수 타입이 같아야 합니다.

x:A∈ΓΓ⊢x:AΓ,x:A⊢t:BΓ⊢λx:A.t:A→BΓ⊢f:A→BΓ⊢u:AΓ⊢f u:B.\frac{x:A\in\Gamma}{\Gamma\vdash x:A} \qquad \frac{\Gamma,x:A\vdash t:B}{\Gamma\vdash\lambda x:A.t:A\to B} \qquad \frac{\Gamma\vdash f:A\to B\quad\Gamma\vdash u:A} {\Gamma\vdash f\,u:B}.

매개변수 주석 덕분에 항의 문법 구조를 따라 타입을 추론할 수 있습니다. 검사기는 정리를 추측하는 대신 문맥에 없는 변수, 함수가 아닌 값의 적용, 입력 타입 불일치를 구분합니다. 전제가 실패하면 그 전제를 사용하는 상위 노드도 실패합니다. 함수 위치가 이미 원자 타입이면 인수를 더 검사할 필요 없이 거부할 수 있습니다. 회색 노드는 이때 방문하지 않은 문법이며 임의로 오류라고 판단한 것이 아닙니다.

트리는 제시한 후보의 실제 AST입니다. 노드마다 추론 타입 또는 실패가 표시되고, 선택한 검사 단계의 규칙은 별도로 보입니다. 긴 노드 타입은 줄여 표시하지만 표에는 전체 타입을 남깁니다.

결합된 변수를 정확하게 가리키기

내부 변수는 de Bruijn 번호로 저장합니다. 0은 가장 가까운 결합입니다. λ에 들어가면 새 매개변수가 문맥의 앞에 추가되어 이전 변수 번호가 하나씩 밀립니다. 읽기 쉬운 이름은 표시할 때만 만듭니다.

[f:P→Q,g:Q→R]에서 λx:P에 들어가면 [x:P,f:P→Q,g:Q→R]이 됩니다. 따라서 g는 2, f는 1, x는 0입니다. 번호 이동을 잘못 적용하면 다른 항이 되거나 타입 검사를 실패합니다. 화면의 이름이 같다고 결합 관계를 무시해도 되는 것은 아닙니다.

한도 안에서 실제로 탐색하는 문법

탐색은 정확한 항 노드 수를 1부터 늘립니다. 변수·λ·함수 적용이 각각 한 노드이고 타입 주석의 크기는 세지 않습니다. 문법은 β-정상형에 한정합니다. 정상형 본문을 가진 λ이거나, 문맥 변수를 머리로 삼아 정상형 인수들을 적용한 항입니다. 함수 자리에 λ를 바로 놓는 β-redex는 탐색하지 않습니다.

목표가 화살표이면 λ를 도입할 수 있습니다. 문맥의 함수에서 화살표를 차례로 따라가 목표 타입에 도달하는 머리도 살펴보고, 남은 크기를 인수들에게 나눕니다. 이 방법은 명시한 정상형 문법을 다룹니다. 가장 작은 크기부터 찾으므로 발견한 크기는 해당 문법과 한도 안의 최소값입니다. 정상화가 항 크기를 바꿀 수 있어 이 한도를 임의의 증명 문법 전체의 크기 한도와 같다고 말하면 안 됩니다.

실패의 뜻은 이 한도 안에서 정상형 항을 찾지 못했다입니다. 거짓·UNSAT·증명 부재·타입의 비거주를 뜻하지 않습니다. 찾은 결과도 별도의 타입 검사기에 보내 목표 타입과 같은지 확인합니다. 직접 제시한 후보의 검사는 탐색 한도와 독립이므로 후보가 한도보다 커도 유효한 증명일 수 있습니다.

조작에 사용하는 목표·문맥·후보 표

화살표는 오른쪽으로 결합합니다. P→Q→P는 P→(Q→P)입니다.

목표 번호 타입
0,1,2 각각 P,Q,R
3 P→P
4 P→Q
5 P→R
6 (P→Q)→P→Q
7 P→Q→P
8 (P→Q)→(Q→R)→P→R
9 ((P→Q)→P)→P

문맥 0은 빈 목록, 1은 [f:P→Q,g:Q→R], 2는 [p:P,f:P→Q], 3은 [p:P], 4는 [f:P→Q]입니다. 가까운 변수부터 나열하며 숨겨진 사실을 추가하지 않습니다.

후보 0은 λx:P.x, 후보 1은 λx:P.g(fx)이며 문맥 1을 기대합니다. 후보 2는 변수 0을 자기 자신에 적용하고, 3은 변수 0 자체이며, 4는 변수 1을 변수 0에 적용합니다. 후보 5는 λx:P.λy:Q.x입니다. 후보 6은 λf:P→Q.λg:Q→R.λx:P.g(fx)인 닫힌 합성이고, 7은 λf:P→Q.f인 함수 항등입니다. 같은 후보도 문맥을 바꾸면 의미나 가능 여부가 달라집니다.

손계산: 탐색 실패와 실제 증명의 공존

목표 5, 문맥 1, 한도 5, 후보 1을 선택합니다.

λx:P. g (f x):P→R.\lambda x:P.\ g\,(f\,x):P\to R.

변수 세 개, 적용 두 개, λ 한 개라서 크기는 6입니다. g:Q→R, f:P→Q, x:P를 확인한 뒤 안쪽 적용에서 Q, 바깥쪽에서 R을 얻습니다. λ로 x의 가정을 해제하면 P→R입니다. 후보는 목표를 증명하지만 한도 5의 탐색은 놓칩니다. f와 g의 가정은 Γ에 남습니다.

한도만 6으로 올리면 크기 6의 정상형 증명을 찾고 다시 검사합니다. 직접 제시한 후보의 타입은 바뀌지 않습니다. 그림의 파랑은 각 독립 탐색 한도에서의 발견 여부이고 주황은 고정한 후보가 전체 목표를 증명하는지입니다. 시간이나 확률 곡선이 아닙니다. 곡선은 아홉 한도를 비교하며 현재 증명 결과는 선택한 한도만 사용합니다.

손계산: 잘 타입화되지만 다른 정리를 증명하는 항

빈 문맥 0, 목표 4, 후보 0을 사용합니다. 항등 항의 타입은 P→P라서 지역 검사는 모두 통과합니다. 하지만 요청한 정리 P→Q와 다릅니다. 파란 타입 트리만 보고 요청한 정리를 증명했다고 보고하면 안 됩니다.

P가 참이고 Q가 거짓인 Boolean 배정은 P→Q를 거짓으로 만듭니다. P=1,Q=2,R=4 비트로 나타내면 반례는 1과 5입니다. 이는 탐색 실패와 별개의 의미적 반박입니다. 반대로 Boolean 반례가 없다는 사실이 증명 항을 만들어주지는 않습니다. 이 진리표는 필요한 의미적 검사이지 구성적 증명 탐색의 완전한 oracle이 아닙니다. 목표 9는 Boolean에서는 타당하지만 이 한도 안에서 항을 못 찾는 예입니다. 그 탐색 실패만으로 증명 부재를 주장하지 않습니다.

연습 문제와 해설

문제: 문맥 1에서 후보 2인 f를 f에 적용한 항을 검사하세요. 무엇이 맞지 않나요?

해설: 두 f의 타입은 각각 P→Q입니다. 함수가 요구하는 인수 타입은 P이므로 마지막 적용에서 타입이 맞지 않습니다. 변수들은 개별적으로 타입을 갖지만 적용은 유효하지 않고 루트 타입도 없습니다.

이제 문맥 3=[p:P]에서 같은 후보를 검사하세요. 함수 자리가 원자 P라서 인수를 검사하기 전에 거부합니다. 문법 노드는 셋이지만 검사 단계는 둘이고 남은 인수는 회색입니다. 미검사 노드가 잘못되었다고 선언한 것이 아닙니다.

추가 결합 문제: 후보 5의 닫힌 타입은 P→Q→P입니다. λ 두 개 안에서 바깥 매개변수는 0이 아니라 1입니다. 번호를 0으로 바꾸면 Q를 반환해 증명하는 타입도 바뀝니다.

신뢰 경계와 AI 연구

탐색 휴리스틱은 바꾸면서도 검사 규칙은 유지할 수 있습니다. 생성된 증명을 증거로 쓰려면 가정, 상세한 항, 요청한 문장을 의도한 체계에서 확인해야 합니다. 이 실습은 명시한 단순 타입 조각만 검사하며 Lean의 커널이나 임의의 의존 타입 증명 검사기가 아닙니다. 정확 하위 문제 방문 수는 메모된 탐색 상태 수이지 시간이나 가능한 모든 유도의 개수가 아닙니다.

주석이 있는 변수·λ·적용의 문법 지향 추론은 Programming Language Foundations in Agda: Inference, 명제와 타입 및 함의와 함수의 대응은 Lean의 Propositions and Proofs에서 살펴볼 수 있습니다. 제한된 정상형 탐색과 문맥·후보 표·진단 비교는 교재를 위해 직접 구성했습니다.

CHECK YOUR UNDERSTANDING

설명할 수 있나요?

실험 설정과 무관한 기준 예제를 묻습니다. 답을 고르고 설명을 확인해보세요.

1. 한도 5에서 탐색이 실패했지만 크기 6의 후보가 목표 타입 검사를 통과했다면?
2. λx:P.x가 잘 타입화되면 P→Q도 증명하나요?

선택한 답과 학습 표시는 이 브라우저에 저장됩니다. 다시 풀거나 표시를 해제할 수 있습니다.