自然演绎 LaTeX

自然演绎 LaTeX

怎样才能写出如图所示的证明? 在此处输入图片描述

我知道如何写所有符号,但我不知道如何制作矩形并像表格一样书写。我使用了这个网页:https://www.tablesgenerator.com/,但我不喜欢它展示证明的方式。

答案1

这是一个使用tabular环境的解决方案。为了简化证明本身的代码,我定义了一些新命令。首先,一个以三列prooftabular开头的环境:tabular

  1. 第一个自动显示证明的行号(您不必在里面写任何内容);
  2. 第二个自动处于数学模式,被认为用于证明步骤;
  3. 第三个是文本模式,被认为用于证明步骤的依据。

此环境可以单独使用来显示证明。但是,为了在角落添加带有符号的框,我定义了另外三个命令:

  • \hlineproofbox用 添加框的水平线\cline{2-2}
  • \proofboxed在框中的单元格周围添加垂直线。它将相应单元格的内容作为参数。它只添加带有 的垂直线\multicolumn{1}{|...|}{...}
  • \corner在角落的上标中添加其参数。它应放在第一个 内\proofboxed{}

这三个命令的用处不大,因为它们的内容也可以直接放在表中。我只是觉得这样证明的代码更容易阅读。

无论如何,这里有一个完整的例子和你的证明。

\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\newcounter{proofrow}
\newenvironment{prooftabular}{%
    \let\oldarraystretch\arraystretch
    \renewcommand{\arraystretch}{1.5}
    \begin{tabular}{%
        @{\stepcounter{proofrow}\theproofrow}%
        p{1em}@{}>{\(}l<{\)}>{\quad}l%
    }
    }{%
    \end{tabular}
    \renewcommand{\arraystretch}{\oldarraystretch}
}
\newcommand{\hlineproofbox}{\cline{2-2}}
\newcommand{\proofboxed}[1]{\multicolumn{1}{|>{\(}l<{\)}@{\ }|}{#1}}
\newcommand{\corner}[1]{\qquad {}^{#1}}

\begin{document}
\[
\forall x, P_1^1(x) \implies P_2^1(x), \forall x . P_2^1(x) \implies P_3^1(x) \vdash \forall x . P_1^1(x) \implies P_3^1(x)
\]
\begin{prooftabular}
    & \forall x . P_1^1(x) \implies P_2^1(x)                        & Prem \\
    & \forall x . P_2^1(x) \implies P_3^1(x)                        & Prem \\
    \hlineproofbox
    & \proofboxed{P_1^1(n) \implies P_2^1(n) \corner{/ \forall n}}  & \(E \ \forall 1\) \\
    & \proofboxed{P_2^1(n) \implies P_3^1(n)}                       & \(E \ \forall 2\) \\
    & \proofboxed{P_1^1(n) \implies P_3^1(n)}                       & Teo \(\alpha \implies \beta, \beta \implies \gamma \vdash \alpha \implies \gamma\) \\
    \hlineproofbox
    & \forall x . P_1^1(x) \implies P_3^1(x)                        & \(\forall x . P_1^1(x) \implies P_2^1(x), \forall x . P_2^1(x) \implies P_3^1(x)\)
\end{prooftabular}
\end{document}

答案2

假设编写符号命令没有问题,那么您可以使用empheq包在一些方程式周围制作一个框(为简单起见,两个),如下所示:

在此处输入图片描述

以及它的代码

\documentclass{article}
\usepackage{amsmath}
\usepackage{empheq}
\begin{document}
%
\begin{empheq}[box=\fbox]{align}
    E=mc^2 \\
    y=ax+b
\end{empheq}
%
\end{document}

当然,您可以添加星号{align*}来删除方程的编号。

如果你想要方程式左侧编号,你可以使用[leqno]类的article选项,如下所示

在此处输入图片描述

一些方程式有编号,而其他方程式没有编号(使用\nonumber),则代码可以是

\documentclass[leqno]{article}
\usepackage{amsmath}
\usepackage{empheq}
\begin{document}
%
\begin{empheq}[box=\fbox]{align}
    E=mc^2 \\
    y=ax+b \\
    y_2 = ax+b \nonumber
\end{empheq}
%
\end{document}

嗯,这不是完美的答案。这只是一些我确信其他人可以改进的想法。

相关内容