答案1
{NiceArray}
这是使用(和 TikZ)的解决方案nicematrix
。
\documentclass{article}
\usepackage{nicematrix,tikz}
\begin{document}
\[\renewcommand{\arraystretch}{1.5}
\setlength{\arraycolsep}{10pt}
\begin{NiceArray}{lllll@{\enskip}}
1 & \neg p \lor q & \text{premise} \\
2 & \Block[tikz={draw,offset=1pt}]{5-2}{}
\neg p & \text{premise} & \Block[tikz={draw,offset=1pt}]{5-2}{}
q & \text{premise} \\
3 & \Block[tikz={draw,offset=3pt}]{3-2}{}
p & \text{assumption} & \Block[tikz={draw,offset=3pt}]{2-2}{}
p & \text{assumption} \\
4 & \bot & \neg\text{e}\; 3,2 & q & \text{copy } 2 \\
5 & q & \bot\text{e}\; 4 & p \to q & \mathord{\to}\text{i} \; 3-4 \\
6 & p \to q & \mathord{\to}\text{i}\; 3-5 \\
7 & p \to q & & & \lor\text{e}\; 1,2-6
\end{NiceArray}\]
\end{document}
答案2
除了学习逻辑之外,我不建议尝试使用它。我假设你可以手写这些,并鼓励你这样做。
将其视为概念验证而非解决方案。至少存在两个问题。
- 使用子校样时,对齐明显错误。也就是说,wff 和对齐方式与子校样内相应的行号没有正确对齐。子校样中行的内容相对于相应的行号向下漂移(或行号相对于行的内容向上漂移)。
- 坦白说,其语法很糟糕。
我怀疑 (1) 可以使用 提供的功能来解决tabularray
。我对这个包一点也不熟悉 --- 我认为我以前没有用过它;如果我用过,那也只是为了在 SE 上得到一个答案或类似的东西 --- 并且它的文档没有索引,我无法完全理解它如何、是否或在何处指定命令的语法。
(2) 需要一种具有自定义界面的适当方法,就像各种自然演绎证明包所提供的那样。如果这种证明方式流行起来,可能就会有人写一个。(我试图看看书籍在线资源是否提供了任何内容,但我甚至找不到页面。)
买者自负
\documentclass{article}
% ateb: https://tex.stackexchange.com/a/702389/
\usepackage{tabularray}
\newcommand*{\lfalse}{\ensuremath{\mathord{\bot}}}
\newcommand*{\lif}{\ensuremath{\mathbin{\rightarrow}}}
\newcommand*{\liff}{\ensuremath{\mathbin{\leftrightarrow}}}
\NewExpandableDocumentCommand \lcsno {} {\arabic{rownum}.}
\begin{document}
\begin{tblr}{%
colspec={Q[l]Q[l,mode=math]Q[l]Q[l,mode=math]Q[l]},
}
\lcsno & \lnot p \lor q & premise & & \\
\lcsno & \SetCell[r=5,c=2]{l}{%
\begin{tblr}{baseline=T,colspec={|Q[l,mode=math]Q[l,mode=text]|}}
\hline
\lnot p & assumption \\
\SetCell[r=3,c=2]{l}{%
\begin{tblr}{baseline=T,colspec={|Q[l,mode=math]Q[l,mode=text]|}}
\hline
p & assumption \\
\lfalse & excl.~middle 2,3 \\
q & $\lnot$\,e 4 \\
\hline
\end{tblr}%
} & \\
& \\
& \\
p \lif q & \lif\, i 3--5 \\
\hline
\end{tblr}%
} & & \SetCell[r=5,c=2]{l}{%
\begin{tblr}{baseline=T,colspec={|Q[l,mode=math]Q[l,mode=text]|}}
\hline
q & assumption \\
\SetCell[r=2,c=2]{l}{%
\begin{tblr}{baseline=T,colspec={|Q[l,mode=math]Q[l,mode=text]|}}
\hline
p & assumption \\
q & repeat 2 \\
\hline
\end{tblr}%
} & \\
& \\
p \lif q & \lif\, i 3--4 \\
& \\
\hline
\end{tblr}%
} & \\
\lcsno & & & & \\
\lcsno & & & & \\
\lcsno & & & & \\
\lcsno & & & & \\
\lcsno & p \lif q & $\lor$\,e 1--6 & & \\
\end{tblr}
\end{document}
如果您发现子证明消失了,请注意,它tabularray
非常挑剔,通常只是忽略一些东西而不是警告您。每个被替换的单元格都\SetCell
必须明确创建为空单元格。仅仅留下空间是不够的。例如,我们无法替换
\lcsno & & & & \\
\lcsno & & & & \\
\lcsno & & & & \\
\lcsno & & & & \\
和
\lcsno \\
\lcsno \\
\lcsno \\
\lcsno \\
否则我们的子证明就会消失。与 不同\multicolumn
,\SetCell
有时会从它替换的第一列中获取上下文。因此,mode=text
子证明中需要显式,否则理由会被排版为数学。