真值树中的连词

真值树中的连词

在创建真值树时,我们使用一种称为“钩子”的东西来编写连词,而不是简单地逐行编写。我不知道它在英语中是否有其他名称。

在此处输入图片描述

我指的是用红色箭头标记的形状。所以是这个:

在此处输入图片描述

看起来应该是这样的:

在此处输入图片描述

这是可以实现的吗防护树或者我应该用类似的东西森林tikz-qtree? 如果你能告诉我如何在

[{Ha}, just={(5)}, no line no
[{Fa}, just={(5)}, no line no, my text={6}

以下代码的一部分。

\documentclass[10pt]{article}
\usepackage[edges]{forest}
\usepackage{prooftrees}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{newpxtext,newpxmath}
\usepackage{mathastext}
\usepackage[paperwidth=160mm, paperheight=240mm]{geometry}
\geometry
    {
        total={120mm,200mm},
    }
 \forestset{
    branchcomment/.style={
      my text/.style={
        label={[yshift=-5pt]below:{##1}},
        l sep'+=5pt,
      },
    },
  }
\begin{document}
\renewcommand*\linenumberstyle[1]{(#1)}
\begin{prooftree}
    {
        to prove={\forall x(Fx \rightarrow \lnot Gx),\, \exists x(Hx \wedge Fx) \therefore \exists x(Hx \wedge \lnot Gx)},
        auto move=false,
        single branches=false,
        for tree={s sep'=10mm},
        just sep=2.5em,
        close with={\ensuremath{\bigtimes}},
        branchcomment,
    }
    [{\forall x(Fx \rightarrow \lnot Gx)},just={(Ön)}, line no override={3}
        [{\exists x(Hx \wedge Fx)},just={(Ön)}, line no override={2}
            [{\lnot \exists x(Hx \wedge \lnot Gx)},just={($\lnot$Sn)}, line no override={1}
                [{\forall x \lnot (Hx \wedge \lnot Gx)},just={(1. N.D.K)}, line no override={4}
                    [{Ha \wedge Fa},just={(2. Özelleme)}, line no override={5}
                        [{Fa \rightarrow \lnot Ga}, just={(3. Özelleme)}, line no override={6}
                            [{\lnot (Ha \wedge \lnot Ga)},just={(4. Özelleme)}, line no override={7}
                            [{Ha}, just={(5)}, no line no
                                [{Fa}, just={(5)}, no line no, my text={6}
                                    [{\lnot Fa}, no line no, close]
                                    [{\lnot Ga}, no line no, my text={7}
                                        [{\lnot Ha}, no line no, close]
                                        [{Ga}, no line no, close]]]]]]]]]]]
\end{prooftree}
\end{document}

如果你能简单地展示这一点,我也会非常高兴:

\documentclass[10pt]{article}
\usepackage{prooftrees}
\usepackage{mathastext}
\begin{document}
\begin{prooftree}
    {
    }
    [{p \wedge q}
        [{p}, just={(1)}
            [{q}, just={(1)}]]]
\end{prooftree}
\end{document}

提前感谢大家的回答。

答案1

以下代码显示如何定义一个append wffs=<integer>采用整数参数的新样式。它应添加到要括在一起的 wff 的最后一个选项中,并且值应等于要与此 wff 括在一起的其他 wff 的数量。例如,如果您希望将第 3 行和第 4 行的 wff 括在一起,请将其添加append wffs=1到第 4 行的 wff 中。

使用标准just=<whatever>语法来指定理由。例如,append wffs=1, just={1,2,MP}或其他。因此,对于您的示例,您可以编写

                [{Ha}, no line no
                [{Fa}, no line no, my text={6}, just=(5), append wffs=1

这会将两个 wff 括起来并放置(5)在行的右侧。

即使要括起来的 wff 比当前(最终)wff 长,这也应该有效,因为代码使用 的forest选项fit to来获取一个包含所有受影响 wff 的框并使用它来绘制括号。

\forestset{
  append wffs/.style={
    before typesetting nodes={%
      for nodewalk={fake=c,*{#1}u}{just=}%
    },
    before drawing tree={
      tikz+/.process={Ow1{name}{%
          \node (##1 append box) [inner sep=0pt, fit to={c*{#1}u}] {};
          \draw (##1 append box.north east) ++(-2.5pt,0pt) -| (##1 append box.south east) -- ++(-2.5pt,0pt);
        }%
      },
      tempdima/.max={>O{max x}}{c*{#1}u},
      for nodewalk/.process={%
        O Rw1+d OOw2+d w3 {proof tree proof line no}{tempdima}{##1+2.5pt}{y}{!*{#1}u.y}{(##1+##2)/2}
        {%
          {name=just ##1}{x'=##2,y'=##3}%
        }%
      },
    },
  },
}

just请注意,这将覆盖为附加的 wff 设置的任何理由,因此为相同的 wff指定非常重要append wffs

tableau 使用附加 wffs 样式

\documentclass[10pt]{article}
\usepackage[edges]{forest}
\usepackage{prooftrees}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{newpxtext,newpxmath}
\usepackage{mathastext}
\usepackage[paperwidth=160mm, paperheight=240mm]{geometry}
\geometry
{
  total={120mm,200mm},
}
\forestset{
  branchcomment/.style={
    my text/.style={
      label={[yshift=-5pt]below:{##1}},
      l sep'+=5pt,
    },
  },
  append wffs/.style={
    before typesetting nodes={%
      for nodewalk={fake=c,*{#1}u}{just=}%
    },
    before drawing tree={
      tikz+/.process={Ow1{name}{%
          \node (##1 append box) [inner sep=0pt, fit to={c*{#1}u}] {};
          \draw (##1 append box.north east) ++(-2.5pt,0pt) -| (##1 append box.south east) -- ++(-2.5pt,0pt);
        }%
      },
      tempdima/.max={>O{max x}}{c*{#1}u},
      for nodewalk/.process={%
        O Rw1+d OOw2+d w3 {proof tree proof line no}{tempdima}{##1+2.5pt}{y}{!*{#1}u.y}{(##1+##2)/2}
        {%
          {name=just ##1}{x'=##2,y'=##3}%
        }%
      },
    },
  },
}
\begin{document}
\renewcommand*\linenumberstyle[1]{(#1)}%
\begin{prooftree}
  {
      to prove={\forall x(Fx \rightarrow \lnot Gx),\, \exists x(Hx \wedge Fx) \therefore \exists x(Hx \wedge \lnot Gx)},
      auto move=false,
      single branches=false,
      for tree={s sep'=10mm},
      just sep'=2.5em,
      close with={\ensuremath{\bigtimes}},
      branchcomment,
  }
  [{\forall x(Fx \rightarrow \lnot Gx)},just={(Ön)}, line no override={3}
    [{\exists x(Hx \wedge Fx)},just={(Ön)}, line no override={2}
      [{\lnot \exists x(Hx \wedge \lnot Gx)},just={($\lnot$Sn)}, line no override={1}
        [{\forall x \lnot (Hx \wedge \lnot Gx)},just={(1. N.D.K)}, line no override={4}
          [{Ha \wedge Fa},just={(2. Özelleme)}, line no override={5}
            [{Fa \rightarrow \lnot Ga}, just={(3. Özelleme)}, line no override={6}
              [{\lnot (Ha \wedge \lnot Ga)},just={(4. Özelleme)}, line no override={7}
                [{Ha}, no line no
                [{Fa}, no line no, my text={6}, just=(5), append wffs=1
                    [{\lnot Fa}, no line no, close]
                    [{\lnot Ga}, no line no, my text={7}
                      [{\lnot Ha}, no line no, close]
                      [{Ga}, no line no, close]]]]]]]]]]]
\end{prooftree}
\end{document}

目前,如果您做了一些“奇怪的”事情,例如将论证居中或切换它们的锚点,east或者将论证放在树的另一侧,这将失败。但是,它“应该”可以合理地稳健地适用于与您的示例大致相同的表,即使您append wffs在同一棵树中使用多个表、括号多个 wff 或括号长度不同的 wff。

答案2

我不确定我是否理解了您在较大的代码示例中想要什么,但这里有一个通用方法,您可以用较小的示例来举例说明。我使用了ext.paths.orthoTikZ 库,它是库套件的一部分tikz-ext

\documentclass[10pt]{article}
\usepackage{prooftrees}
\usetikzlibrary{ext.paths.ortho}
\tikzset{ortho/rl distance=.5em} % set width of the horizontal part
\usepackage{mathastext}
\begin{document}
\begin{prooftree}
    {
    }
    [{p \wedge q}
        [{p},name=p, just={(1)}
            [{q},name=q, just={(1)}]]]
\draw (p.east) r-rl (q.east);
\end{prooftree}
\end{document}

如果您希望线条真正地包围文本,则可以使用坐标(p.north east)并将(q.south east)它们延伸到节点本身的边缘。

代码输出

相关内容