- Terence Tao가 실해석 교재 Analysis I의 정의·정리·연습문제를 Lean 코드로 옮기는 컴패니언 저장소를 시작함
- 자연수·정수·유리수·실수 구성과 집합론·논리를 엄밀하게 다루는 교재 특성상, 증명 보조기로 학습하기 좋은 구조를 가짐
- 현재 범위는 2장 일부와 3.1 기본 집합론, 4.1 정수까지이며, Mathlib 자연수와의 동형도 포함됨
- 코드는 Lean에서 컴파일되지만 많은
sorry가 남아 있고, 공식 해답 대신 포크에서 채워 넣는 방식을 권장함 - 이 자료는 연습문제를 Lean으로 푸는 대체 경로이면서, 뒤로 갈수록 Mathlib 사용을 익히는 입문 자료로도 활용 가능함
Analysis I를 Lean으로 옮기는 프로젝트
- Lean companion to “Analysis I”는 Analysis I의 여러 정의, 정리, 연습문제를 Lean으로 “번역”하는 프로젝트임
- 책의 연습문제는 Lean 코드에서 대응하는
sorry를 채우는 방식으로도 풀 수 있음 - 공식 연습문제 해답은 컴패니언에 호스팅하지 않을 계획이며,
sorry를 채운 버전은 저장소 포크로 만들 수 있음
교재와 Lean이 잘 맞는 이유
- Analysis I는 기존 실해석 교재를 보완하기 위해 기초적 이슈에 더 집중한 교재임
- 자연수, 정수, 유리수, 실수의 구성
- 높은 엄밀도의 증명을 개발할 수 있도록 하는 집합론과 논리
- 책을 쓸 당시 Coq, Agda 같은 증명 보조기는 이미 있었지만, 형식 검증은 당시 관심사가 아니었음
- 이후 형식 검증을 경험하면서, 책의 내용이 증명 보조기와 잘 맞는다는 점이 확인됨
- 책에서 표준 수 체계를 구성할 때 암묵적으로 사용한 순진한 타입 이론은 Lean의 의존 타입 이론과 잘 맞음
- Lean의 quotient type 지원도 책의 구성 방식과 맞물림
현재 Lean으로 옮겨진 범위
- 현재 다음 절들이 Lean으로 번역됨
Mathlib과의 관계
- 형식화는 일부 지점에서는 표준 Lean 수학 라이브러리 Mathlib와 분리되고, 다른 지점에서는 Mathlib에 의존하도록 설계됨
- Mathlib에는 이미 표준 자연수 개념이 있음
- Lean 형식화에서는 먼저 자연수를 “손으로” 다시 구성한
Chapter2.Nat를 개발함Chapter2네임스페이스에서 작업하면Nat로 사용할 수 있음- Mathlib의 자연수 관련 보조정리와 평행한 기본 결과들을 설정함
- 이 중 많은 증명은 독자 연습문제로 남아 있으며 현재
sorry로 대체됨
- 에필로그 절에서는 이 대체 자연수와 Mathlib 자연수 사이의 동형을 세움
- 더 정확히는 그 동형 역시 연습문제로 설정됨
- 이후에는 2장의 자연수 구성을 더 이상 쓰지 않고, Mathlib 자연수를 사용함
- 책의 뒤쪽 장으로 갈수록 앞 장의 자체 구성물보다 Mathlib 정의와 함수에 더 많이 의존하는 패턴을 이어갈 계획임
사용 방식과 검증 상태
- 저장소 코드는 Lean에서 컴파일됨
- 다만 코드 안의 많은
sorry가 실제로 모두 채워질 수 있는지는 아직 테스트되지 않음 - 필요한 보조정리나 Lean 파일의 API가 충분한지도 확인이 필요함
- 목표는 난해한 Lean 프로그래밍 기법에 의존하지 않고도 개념적으로 자연스럽게
sorry를 채울 수 있는지 확인하는 것임
- 목표는 난해한 Lean 프로그래밍 기법에 의존하지 않고도 개념적으로 자연스럽게
- 자원봉사자가 컴패니언을 플레이테스트해 실제로 연습문제를 Lean에서 풀 수 있는지 확인해 주기를 원함
- 다른 피드백도 환영됨
Lean·Mathlib 입문 자료로서의 성격
- 이 컴패니언은 실해석뿐 아니라 Lean과 Mathlib 입문에도 사용할 수 있음
- 이런 성격은 Natural number game과 어느 정도 비슷함
- Natural number game은 Analysis I의 2장과 주제적으로 겹치는 부분이 큼