MathJax와 자연 연역

Fitch style proof나 truth tree proof (tableaux method) 등을 통한 자연 연역 표기를 \(\LaTeX\)에서는 패키지 추가를 통해 할 수 있는데, 유감스럽게도 MathJax는 관련 익스텐션을 제공하지 않는다. 그래서 여러 방법을 고민해 보았다.

Fitch style proof나 truth tree proof (tableaux method) 등을 통한 자연 연역 표기를 \(\LaTeX\)에서는 패키지 추가를 통해 할 수 있는데, 유감스럽게도 MathJax는 관련 익스텐션을 제공하지 않는다. 그래서 align을 통해 아래와 같은 Lemmon style proof를 시험 삼아 작성해 보았다.

$$
\begin{align}
&\{1\}&&1.&&\forall x(Fx\supset Fa)\tag{Ass.}\\
&\{2\}&&2.&&\neg Fa \tag{Ass.}\\
&\{1, 3\}&&3.&&Fu \supset Fa\tag{1 UI}\\
&\{1, 3\}&&4.&&\neg Fu\tag{2, 3 MT}\\
&\{1\}&&5.&&\neg Fa\supset\neg Fu\tag{2-4 Cond.}\\
&\{1\}&&6.&&\forall x(\neg Fa\supset\neg Fx)\tag{4 UG}\\
&&&7.&&\forall x(Fx\supset Fa)\supset\forall x(\neg Fa\supset\neg Fx)\tag{1-6 Cond.}
\end{align}
$$

이 증명식을 작성하기 위한 코드는 다음과 같다:

$$\begin{align}
&\{1\}&&1.&&\forall x(Fx\supset Fa)\tag{Ass.}\\
&\{2\}&&2.&&\neg Fa \tag{Ass.}\\
&\{1, 3\}&&3.&&Fu \supset Fa\tag{1 UI}\\
&\{1, 3\}&&4.&&\neg Fu\tag{2, 3 MT}\\
&\{1\}&&5.&&\neg Fa\supset\neg Fu\tag{2-4 Cond.}\\
&\{1\}&&6.&&\forall x(\neg Fa\supset\neg Fx)\tag{4 UG}\\
&&&7.&&\forall x(Fx\supset Fa)\supset\forall x(\neg Fa\supset\neg Fx)\tag{1-6 Cond.}
\end{align}$$

그런데 이렇게 쓰자니 탭(&)이 너무 많아서 표기가 번거롭다. 해서 탭을 몇 개 제거해 보았는데, 다음과 같이 나타난다:

$$
\begin{align}
&\{1\}&1.&\forall x(Fx\supset Fa)\tag{Ass.}\\
&\{2\}&2.&\neg Fa \tag{Ass.}\\
&\{1, 3\}&3.&Fu \supset Fa\tag{1 UI}\\
&\{1, 3\}&4.&\neg Fu\tag{2, 3 MT}\\
&\{1\}&5.&\neg Fa\supset\neg Fu\tag{2-4 Cond.}\\
&\{1\}&6.&\forall x(\neg Fa\supset\neg Fx)\tag{4 UG}\\
&&7.&\forall x(Fx\supset Fa)\supset\forall x(\neg Fa\supset\neg Fx)\tag{1-6 Cond.}
\end{align}
$$

이 증명식을 작성하기 위한 코드는 다음과 같다:

$$\begin{align}
&\{1\}&1.&\forall x(Fx\supset Fa)\tag{Ass.}\\
&\{2\}&2.&\neg Fa \tag{Ass.}\\
&\{1, 3\}&3.&Fu \supset Fa\tag{1 UI}\\
&\{1, 3\}&4.&\neg Fu\tag{2, 3 MT}\\
&\{1\}&5.&\neg Fa\supset\neg Fu\tag{2-4 Cond.}\\
&\{1\}&6.&\forall x(\neg Fa\supset\neg Fx)\tag{4 UG}\\
&&7.&\forall x(Fx\supset Fa)\supset\forall x(\neg Fa\supset\neg Fx)\tag{1-6 Cond.}
\end{align}$$

코드는 한 결 나아졌지만 증명식의 표기가 그다지 아름답지 못하다. 명제번호와 명제 사이의 거리가 너무 좁다. 원래 방식대로 쓰는 것이 낫다고 생각한다.

다만 이렇든 저렇든 모바일에서 보기 너무 힘들다는 것이 문제다. 모바일에서 오버플로우된 수식에 스크롤이 적용되게 하긴 했지만, 그래도 뭔가 아쉽다. 딱히 해결할 방법은 없는 것 같다.

그나저나 Lemmon style proof를 배운 적이 없어서, 쓰면서도 맞게 쓰는 것인지를 알 수가 없다. 벤슨 메이츠의 《기호 논리학》 정도가 Lemmon style을 사용하는 교재인데, 다행히 집에 책이 있어 틈틈이 참고를 하며 쓸 수 있을 것 같다. Fitch system이 너무 그립다…(눈물)

SEP는 자연 연역을 다음과 같은 코드로 표기하고 있다.:

$$
\begin{alignat*}{4}
\{1\}\hspace{.2cm} &1. \hspace{.2cm}((p\rightarrow q)\land(\neg r\rightarrow\neg q)) &&\text{Assume} \\
\{2\}\hspace{.2cm} &2. \hspace{.2cm}p   &&\text{Assume}\\
\{1\}\hspace{.2cm} &3. \hspace{.2cm}(p\rightarrow q)  &1,\ & {\land}\text{-Elim}\\
\{1,2\}\hspace{.2cm} &4. \hspace{.2cm}q  &2,3,\ & {\rightarrow}\text{-Elim}\\
\{1\}\hspace{.2cm} &5. \hspace{.2cm}(\neg r\rightarrow\neg q)  &1,\ & {\land}\text{-Elim}\\
\{6\}\hspace{.2cm} &6. \hspace{.2cm}\neg r  & &\text{Assume}\\
\{1,6\}\hspace{.2cm} &7. \hspace{.2cm}\neg q &5,6,\ & {\rightarrow}\text{-Elim} \\
\{1,2,6\}\hspace{.2cm} &8. \hspace{.2cm}(q\land\neg q)  &4,7,\ & {\land}\text{-Intro}\\
\{1,2\}\hspace{.2cm} &9. \hspace{.2cm}\neg\neg r  &\text{6–8},\ & {\neg}\text{-Intro} \\
\{1,2\}\hspace{.2cm} &10. \hspace{.2cm}r  &\text{6–8},\ & {\neg\neg}\text{-Elim} \\
\{1\}\hspace{.2cm} &11. \hspace{.2cm}(p\rightarrow r)  &\text{2–9},\ & {\rightarrow}\text{-Intro}\\
\emptyset\hspace{.2cm} &12. \hspace{.2cm}(((p\rightarrow q)\land(\neg r\rightarrow\neg q))\rightarrow (p\rightarrow r)) &\text{ 1–11},\ & {\rightarrow}\text{-Intro}
\end{alignat*}
$$

\begin{alignat*}{4}
\{1\}\hspace{.2cm} &1. \hspace{.2cm}((p\rightarrow q)\land(\neg r\rightarrow\neg q)) &&\text{Assume} \\
\{2\}\hspace{.2cm} &2. \hspace{.2cm}p   &&\text{Assume}\\
\{1\}\hspace{.2cm} &3. \hspace{.2cm}(p\rightarrow q)  &1,\ & {\land}\text{-Elim}\\
\{1,2\}\hspace{.2cm} &4. \hspace{.2cm}q  &2,3,\ & {\rightarrow}\text{-Elim}\\
\{1\}\hspace{.2cm} &5. \hspace{.2cm}(\neg r\rightarrow\neg q)  &1,\ & {\land}\text{-Elim}\\
\{6\}\hspace{.2cm} &6. \hspace{.2cm}\neg r  & &\text{Assume}\\
\{1,6\}\hspace{.2cm} &7. \hspace{.2cm}\neg q &5,6,\ & {\rightarrow}\text{-Elim} \\
\{1,2,6\}\hspace{.2cm} &8. \hspace{.2cm}(q\land\neg q)  &4,7,\ & {\land}\text{-Intro}\\
\{1,2\}\hspace{.2cm} &9. \hspace{.2cm}\neg\neg r  &\text{6–8},\ & {\neg}\text{-Intro} \\
\{1,2\}\hspace{.2cm} &10. \hspace{.2cm}r  &\text{6–8},\ & {\neg\neg}\text{-Elim} \\
\{1\}\hspace{.2cm} &11. \hspace{.2cm}(p\rightarrow r)  &\text{2–9},\ & {\rightarrow}\text{-Intro}\\
\emptyset\hspace{.2cm} &12. \hspace{.2cm}(((p\rightarrow q)\land(\neg r\rightarrow\neg q))\rightarrow (p\rightarrow r)) &\text{ 1–11},\ & {\rightarrow}\text{-Intro}
\end{alignat*}

그런데 내 방식에서, 동일한 식은 다음의 코드로 표현된다:

\begin{align}
&\{1\}&&1.&&((p\rightarrow q)\land(\neg r\rightarrow\neg q))\tag{Ass.}\\
&\{2\}&&2.&&p\tag{Ass.}\\
&\{1\}&&3.&&(p\rightarrow q)\tag{1 $\land$E}\\
&\{1, 2\}&&4.&&q\tag{2, 3 $\rightarrow$E}\\
&\{1\}&&5.&&(\neg r\rightarrow \neg q)\tag{1 $\land$El}\\
&\{6\}&&6.&&\neg r\tag{Ass.}\\
&\{1, 6\}&&7.&&\neg q\tag{5, 6 $\rightarrow$E}\\
&\{1, 2, 6\}&&8.&&(q\land \neg q)\tag{4, 7 $\land$I}\\
&\{1, 2\}&&9.&&\neg\neg r\tag{6-8 $\neg$I}\\
&\{1, 2\}&&10.&&r\tag{6-8 $\neg$E}\\
&\{1\}&&11.&&(p\rightarrow r)\tag{2-9 $\rightarrow$I}\\
&\emptyset &&12.&&(((p\rightarrow q)\land(\neg r\rightarrow \neg q))\rightarrow (p\rightarrow r))\tag{1-11 $\rightarrow$I}
\end{align}

... 코드의 간명함에서는 아무래도 후자가 낫다.

하지만 이 코드는 아래와 같이 표현된다:

$$
\begin{align}
&\{1\}&&1.&&((p\rightarrow q)\land(\neg r\rightarrow\neg q))\tag{Ass.}\\
&\{2\}&&2.&&p\tag{Ass.}\\
&\{1\}&&3.&&(p\rightarrow q)\tag{1 $\land$E}\\
&\{1, 2\}&&4.&&q\tag{2, 3 $\rightarrow$E}\\
&\{1\}&&5.&&(\neg r\rightarrow \neg q)\tag{1 $\land$El}\\
&\{6\}&&6.&&\neg r\tag{Ass.}\\
&\{1, 6\}&&7.&&\neg q\tag{5, 6 $\rightarrow$E}\\
&\{1, 2, 6\}&&8.&&(q\land \neg q)\tag{4, 7 $\land$I}\\
&\{1, 2\}&&9.&&\neg\neg r\tag{6-8 $\neg$I}\\
&\{1, 2\}&&10.&&r\tag{6-8 $\neg$E}\\
&\{1\}&&11.&&(p\rightarrow r)\tag{2-9 $\rightarrow$I}\\
&\emptyset &&12.&&(((p\rightarrow q)\land(\neg r\rightarrow \neg q))\rightarrow (p\rightarrow r))\tag{1-11 $\rightarrow$I}
\end{align}
$$

장단이 나름 확실하다. 내 코드가 훨씬 간명하고 미려하지만, 가로폭을 너무 많이 잡아먹는다.

Read more

진리확정자 그리고 두 종류의 현실주의

가브리엘 콘테사는 이 논문에서 양상 현실주의를 '순한맛'(softcore) 현실주의와 '매운맛'(hardcore) 현실주의로 구별한다. 전자는 스톨네이커로 대표되는 전통적 현실주의이고, 후자는 성향주의로 대표되는 새로운 현실주의이다. 저자는 후자에 대해 제기되는 문제에 대응하고 전자에 대해 새로운 문제를 제기하며 매운맛 현실주의를 옹호하고자 시도한다.

변화들: 다시 여는 말

블로그에 몇 가지 변화를 줬다. 1. 주소를 바꿨다(https://philtoday.kr). 보다 오랫동안 사용하고, 뉴스레터와 연계하기 위해 오래 전부터 계획하던 생각이다. 이에 맞추어 외부용 메일(wj@)과 뉴스레터용 메일(newsletter@) 역시 본격적으로 사용할 예정이다. 명함에 반영해야지. 2. 블로그 이름도 바꿨다. “백야”를 버리고 “오늘의 철학”으로 왔다. 사적인 공간의 이름이었고,