Вот чего я намерен достичь
1.r (Given)
2.(t ∧ r) → s (Given)
3.(p → t) → (q → ¬s) (Given)
4.t ∧ r (Assumption)
Вот что я получил:
Вот мой код
\documentclass[11pt]{article}
\usepackage{amsmath,amsthm,amssymb}
\def\imp{\rightarrow}
\begin{document}
\section{formal proof}
\textbf{(a)}
\begin{proof}
\begin{align*}
&1. r& &&\text{(Given)}\\
&2. (t \land r) \imp s& &&\text{(Given)}\\
&3. (p \imp t) \imp (q \imp \neg s)& &&\text{(Given)}\\
&&4. t \land r& &&\text{(Assumption)}
\end{align*}
\end{proof}
\end{document}
Проблема:
Как сделать отступ внутри формального доказательства? Я не против, если текст справа не выровнен идеально, но я хотел бы, чтобы отступ был правильным. Отступ, созданный приведенным выше кодом, слишком большой.
Как вы, вероятно, заметили, я новичок в LaTex. Буду признателен за любые предложения. Было бы также неплохо, если бы был какой-то пакет для такого рода вещей.
Спасибо!
Редактировать
Полное формальное доказательство будет выглядеть примерно так:
1.r (Given)
2.(t ∧ r) → s (Given)
3.(p → t) → (q → ¬s) (Given)
4.t ∧ r (Assumption)
5.t (From 4)
6.s (From 2, 4)
7. (p → t) (Assumption)
8. p (From 5, 7)
...
...
...
решение1
Вы можете сделать что-то вроде этого
\documentclass{article}
\usepackage{amsmath,amsthm,amssymb}
\def\imp{\rightarrow}
\newenvironment{level}%
{\addtolength{\itemindent}{2em}}%
{\addtolength{\itemindent}{-2em}}
\begin{document}
\section{formal proof}
\textbf{(a)}
\begin{proof}\leavevmode
\begin{enumerate}
\item $r$ \hfill(Given)
\begin{level}
\item $(t \land r) \imp s$ \hfill (Given)
\item $(p \imp t) \imp (q \imp \neg s)$ \hfill(Given)
\begin{level}
\item $(p \imp t) \imp (q \imp \neg s)$ \hfill(Given)
\item $(p \imp t) \imp (q \imp \neg s)$ \hfill(Given)
\end{level}
\item $(p \imp t) \imp (q \imp \neg s)$ \hfill(Given)
\end{level}
\item $t \land r$ \hfill (Assumption)
\end{enumerate}
\end{proof}
\end{document}
В этом случае среда level
автоматически увеличивает отступ элемента в списке и уменьшает его. Длину можно изменить, изменив размер 2em
.
решение2
Вы можете использовать enumerate
иenumitem
\documentclass[11pt]{article}
\usepackage{amsmath,amsthm,amssymb}
\def\imp{\rightarrow}
\usepackage{enumitem}
\begin{document}
\section{formal proof}
\textbf{(a)}
\begin{proof}\leavevmode
\begin{enumerate}[ref=\arabic*]
\item $r$ \hfill(Given)
\item $(t \land r) \imp s$ \hfill (Given)\label{enum:second}
\item $(p \imp t) \imp (q \imp \neg s)$ \hfill(Given)
\begin{enumerate}[start=4,label=\arabic*.,ref=\arabic*]
\item $t \land r$ \hfill (Assumption)\label{enum:fourth}
\item $t$ \hfill (From~\ref{enum:fourth})\label{enum:fifth}
\item $s$ \hfill (From~\ref{enum:second},~\ref{enum:fourth})
\begin{enumerate}[start=7,label=\arabic*.,ref=\arabic*]
\item $(p \imp t)$ \hfill (Assumption)\label{enum:seventh}
\item $p$ \hfill (From~\ref{enum:fifth},~\ref{enum:seventh})
\end{enumerate}
\end{enumerate}
\end{enumerate}
\end{proof}
\end{document}
Обратите внимание, что я использовал механизм \label
и \ref
для ссылок. Чтобы настроить расстояния еще больше, обратитесь к enumitem
руководству по пакету (доступно на www.texdoc.net)
решение3
Я думаю, что лучше всего использовать пакет, предназначенный для набора такого рода доказательств., lplfitch
вероятно, ближе всего. Он рисует линии, чтобы отметить области действия, но их можно устранить с помощью etoolbox
. Следующий патч исправляет основную команду доказательства, \fitchprf
так что на протяжении всего доказательства правила имеют размер 0pt. Обычная ширина линий в табличных элементах восстанавливается в конце.
lplfitch
также предлагает ряд возможностей, призванных облегчить набор таких доказательств. Например, он определяет ряд логических символов с соответствующим интервалом. (Подробности см. в руководстве.)
\documentclass[11pt]{article}
\usepackage{mathtools,amsthm,amssymb}
\usepackage{lplfitch}
\usepackage{etoolbox}
\newlength\savearrayrulewidth
\setlength\savearrayrulewidth{\arrayrulewidth}
\pretocmd{\fitchprf}{\setlength{\arrayrulewidth}{0pt}}{\typeout{Great!}}{\typeout{Oh, no!}}
\apptocmd{\fitchprf}{\setlength{\arrayrulewidth}{\savearrayrulewidth}}{\typeout{Great!}}{\typeout{Oh, no!}}
\begin{document}
\fitchprf{%
\pline[1]{r}[(Given)]\\
\pline[2]{(t \land r) \lif s}[(Given)]\\
\pline[3]{(p \lif t) \lif (q \lif \lnot s)}[(Given)]
}{%
\subproof{%
\pline[4]{t \land r}[(Assumption)]
}{%
}\\
}
\end{document}
РЕДАКТИРОВАТЬ
Также, полезно ли это или нет, зависит от используемой вами системы, но пакет также предоставляет обоснования разного рода. Например, немного продолжим доказательство:
\fitchprf{%
\pline[1]{r}[(Given)]\\
\pline[2]{(t \land r) \lif s}[(Given)]\\
\pline[3]{(p \lif t) \lif (q \lif \lnot s)}[(Given)]
}{%
\subproof{%
\pline[4]{t \land r}[(Assumption)]
}{%
\pline[5]{s}[\life{2}{4}]\\
\pline[6]{t}[\lande{5}]\\
\subproof{%
\pline[7]{p \lif t}[(Assumption)]
}{%
\pline[8]{q \lif \lnot s}[\life{3}{7}]
}
}\\
}
производит