통상 자연 연역에서 가정의 도입으로 시작하고 해제로 종결되는 소증명(subproof)들은 세로선이나 테두리 박스를 통해 본체 증명과 구분되지요 (Fitch 스타일의 배리에이션들). 그런데 이런 증명 환경을 조판하기란 상당히 까다롭습니다.
이때문인지 《두보계》에서는 가정에 종속된 절들에 별표(*)를 다는 형식을 취합니다. 그런데 이 방법에는 치명적인 문제가 있습니다. 때로 우리는 소증명 내에 또다른 소증명을 취하곤 하는데, 그런 경우를 구현하기가 영 까다롭죠. 별을 두개 달면 된다고는 하지만 보기에 너무 헷갈리게 되고 맙니다.
그러다 문득 든 생각이, ‘어, 그냥 계층형 넘버 구조를 쓰면 되는 것 아닌가?’였습니다. 가령 n번째 라인에서 가정이 도입되고 소증명이 시작되면, n번 이하 라인을 n.1., …, n.m., 형식으로 쓰고, 가정을 해제하는 라인에 n+1번을 다는 것이죠.
예시로, 이 표기법을 사용하면 경우에 의한 논증(P ∨ Q, P → R, Q → R // R)의 타당성을 다음과 같이 증명하게 됩니다.
그건 사실상 Lemmon식 증명인데, 개인적으로는 별로 안 좋아합니다. 어느 명제가 어느 명제의 지배 아래 있는지가 한눈에 안 보여서…. 위에 제시된 전개 방식은 Fitch식 증명에서 소증명을 격자 대신 숫자로 쓴 형태인 것인데, 저는 이쪽이 증명 구조를 보기 더 좋다고 생각해요.
덧) 저는 위 시스템을 위한 레이텍 스타일시트인 hndproof.sty에 5단계 depth까지만을 정의했습니다. Fitch식의 특성상 너무 많은 depth가 적용되면 조판에 애로가 생긴다는 고려 때문에요. 아주 많은 가정이 요구되는 증명은 확실히 Lemmon식이 낫습니다. 다만, 이 경우에도 가정의 수가 너무 많아지면 조판이 좀 못생겨져요. 가정이 많아지면 조판이 못생겨지는 건 모든 자연연역의 특성 같기도 합니다.
복잡한 증명은 이용자와 상호 작용을 할 수 있는 파일 형식으로 내보내야 할지도 모르겠네요. 제가 만들려는 게임의 중요한 부분이 그런 기능을 갖춰야 돼요. 상호 작용이 불가능한 문서는 복잡한 증명을 이용자에게 보기 좋게 제시하는 데 한계가 있다고 저는 오래전부터 느꼈어요.
그런 점에서는 LaTeX은 증명 공부에는 별로 안 좋습니다. 아무래도 라이브 뷰어 환경이 제공되는 몇몇 환경(가령, Texifier)을 제외하곤 실시간 상호작용은 안 되니까요. 하지만 LaTeX은 조판 시간을 단축시킨다는 강점이 있죠. LaTeX과 유사하면서도 작성자와의 상호작용이 되는 인터페이스가 있다면 좋겠지만, 그 형태는 분명하지 않네요.