% LaTeX2e style file for theorem and proof environments, by Glenn Tesler
% usage: add thmp2e as an option to whatever documentstyle you're using
% \usepackage{mathp2e, thmp2e}
% This style file adds the following commands.
% * New theorem environments.
% \begin{theorem} ... \end{theorem}
% \begin{theorem}[Theorem Name] ... \end{theorem}
% These produce a theorem heading and number, and italicize the
% enclosed text. The word "theorem" may be replaced by any of
% axiom conjecture corollary lemma
% property proposition question theorem
% and these will all be numbered in the same numbering sequence.
% The components of the numbers are separated by dashes instead
% of periods.
% The heading and number are boldfaced, but the remark is not.
%
% * New definition/remark environments.
% \begin{definition} ... \end{definition}
% \begin{definition}[Comment] ... \end{definition}
% These are similar to the theorem environments. The word
% ``Definition'' is set in italics, and the definition nubmer,
% optional comment, and text are in roman. The word ``definition''
% may be replaced by ``example'' or``remark'' and similar
% environments may be defined via
% \newdef{bar}{Bar}
% When activated via
% \begin{bar} ... \end{bar}
% \begin{bar}[Comment] ... \end{bar}
% the heading will be ``Bar'' instead of ``Definition''.
%
% * New proof environments.
% \begin{proof} ... \end{proof}
% This produces a proof heading, and vertical space around the proof.
% By default, every proof ends with a Halmos box at the right margin,
% If there isn't room for the box on the last line of text, it
% will appear at the right margin of the next line.
% The $\box$ may be replaced with another symbol; for example,
% to use a $\triangleleft$, issue the following command
% \useHalmos{$\triangleleft$}
% If the proof ends in a display, then issue the command
% \qedhere to move the box to the end of the display.
% The word ``proof'' may be replaced by ``solution'' and similar
% environments may be defined via
% \newproof{foop}{Foop}
% When activated via
% \begin{foop} ... \end{foop}
% the heading will be ``Foop'' instead of ``Proof''.
% * New citation macro
% To facilitate puting citations in theorem/definition remarks,
% \citep{pages}{source}
% is similar to
% \cite[pages]{source}
% but lacks the square brackets, so that nested square brackets don't
% confuse LaTeX.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Patch to latex.tex to make headings for theorems end in %
% periods, and use normal paragraph indentation. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Headings for theorems should end in periods, and should have ordinary
% paragraph indentation.
\def\@thmlist{\parsep\parskip \labelwidth\z@ \leftmargin\z@
\def\makelabel##1{##1} \itemindent=\parindent
\topsep=\smallskipamount \@trivlist}
\def\@begintheorem#1#2{\@thmlist \item[\hskip \labelsep\textbf{#1\ #2.}]\it}
\def\@opargbegintheorem#1#2#3{\@thmlist \item[\hskip \labelsep
\textbf{#1\ #2\ \rm(#3).}]\it}
\def\@endtheorem{\endtrivlist}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Environments for theorems, definitions, proofs, etc. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\let\qed=\relax
\def\useHalmos#1{\def\qed
{{\unskip\nobreak\hfil\penalty50
\quad\hbox{}\nobreak\hfil #1
\parfillskip=0pt \finalhyphendemerits=0 \par}}}
\useHalmos{$\square$}
\newif\ifqed
\def\qedhere{\tag*{$\square$}\global\qedfalse}
\def\newproof#1#2{%
\newenvironment{#1}{\topsep=\smallskipamount \partopsep=0pt
\begin{trivlist} \itemindent=\parindent \qedtrue
\item[\hskip \labelsep\emph{#2:}]}{\ifqed\qed\fi\end{trivlist}}%
}
\newproof{proof}{Proof}
\newproof{solution}{Solution}
%% Suggested by cotton.seed@gmail.com Tue Jan 27 19:38:27 2009
\renewenvironment{proof}[1][Proof]{\topsep=\smallskipamount \partopsep=0pt
\begin{trivlist} \itemindent=\parindent \qedtrue
\item[\hskip \labelsep\emph{#1:}]}{\ifqed\qed\fi\end{trivlist}}
\def\@thmcountersep{-}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{axiom}[theorem]{Axiom}
\newtheorem{conjecture}[theorem]{Conjecture}
\newtheorem{corollary}[theorem]{Corollary}
\newtheorem{lemma}[theorem]{Lemma}
\newtheorem{property}[theorem]{property}
\newtheorem{proposition}[theorem]{Proposition}
\newtheorem{question}[theorem]{Question}
% modeled on \@othm in latex.tex (for \newtheorem#1[theorem]#2)
\def\newdef#1#2{%
{\expandafter\@ifdefinable\csname #1\endcsname
{\global\@namedef{the#1}{\@nameuse{thetheorem}}%
\global\@namedef{#1}{\@def{theorem}{#2}}%
\global\@namedef{end#1}{\@enddef}}}}
% modeled on \@thm in latex.tex
\def\@def#1#2{\refstepcounter
{#1}\@ifnextchar[{\@ydef{#1}{#2}}{\@xdef{#1}{#2}}}
% modeled on \@xthm and \@ythm in latex.tex
\def\@xdef#1#2{\@begindef{#2}{\csname the#1\endcsname}\ignorespaces}
\def\@ydef#1#2[#3]{\@opargbegindef{#2}{\csname
the#1\endcsname}{#3}\ignorespaces}
% modeled on \@begintheorem, \@opargbegintheorem, and \@endtheorem in
% latex.tex
\let\@deflist\@thmlist
\def\@begindef#1#2{\@deflist \item[\hskip \labelsep{\it#1}\ {\rm#2.}]}
\def\@opargbegindef#1#2#3{\@thmlist \item[\hskip \labelsep{\it
#1\ \rm#2\ (#3).}]}
\def\@enddef{\endtrivlist}
\newdef{definition}{Definition}
\newdef{remark}{Remark}
\newdef{example}{Example}
% To facilitate putting citations in theorem/definition remarks,
% \citep{pages}{source}
% is similar to
% \cite[pages]{source}
% but lacks the square brackets, so that nested square brackets don't
% confuse LaTeX.
\def\citep#1#2{\cite[{#1}]{#2}}
% Change Log:
%
% gptesler 1/26/94: topsep changed in proof and theorem environments
% tmack 6/99: package renamed to thmp2e.sty
% added in \usepackage{latexsym} before \Box command
% replaced \em with the latex2e \emph command; other
% font declarations unchanged
% command \citep{pages}{source} added to avoid
% nested square brackets
% commented-out code removed
% slkleiman 9/99: added command \useHalmos#1
% slkleiman 2/05: made \useHalmos{$\Box$} the default
% slkleiman 10/05: defined \qedhere
% redefined the proof environment to accept \qedhere
% slkleiman 12/05: added code to undefine in \newdef
% slkleiman 2/06: added \newproof#1#2 and \newproof{solution}{Solution}
% cotton.seed 1/27/09: redefined the proof environment to accept
% an optional argument.