Como faço para usar o nome do teorema em caixa como um símbolo QED

Como faço para usar o nome do teorema em caixa como um símbolo QED

Gostaria de saber se existe uma maneira relativamente simples de obter um resultado semelhante ao seguinte:

insira a descrição da imagem aqui

Em particular, eu gostaria de poder atribuir nomes e/ou números a teoremas/lemas/proposições e então substituir o símbolo QED padrão desse teorema/lema/proposição por uma versão delineada do nome do teorema/lema/proposição /número.

Não tenho um exemplo mínimo de trabalho aqui porque, infelizmente, meu conhecimento sobre modificação de ambientes de teoremas é suficientemente baixo e não tenho a menor ideia de como começar. Qualquer sugestão seria muito apreciada.

Responder1

Isso faz o que você deseja, embora eu ache complicado e pouco informativo.

\documentclass{book}
\usepackage{amsthm,xpatch}

\makeatletter
\let\qed@empty\openbox % <--- change here, if desired
\def\@begintheorem#1#2[#3]{%
  \deferred@thm@head{%
    \the\thm@headfont\thm@indent
    \@ifempty{#1}
      {\let\thmname\@gobble}
      {\let\thmname\@iden}%
    \@ifempty{#2}
      {\let\thmnumber\@gobble\global\let\qed@current\qed@empty}
      {\let\thmnumber\@iden\xdef\qed@current{#2}}%
    \@ifempty{#3}
      {\let\thmnote\@gobble}
      {\let\thmnote\@iden}%
    \thm@swap\swappedhead
    \thmhead{#1}{#2}{#3}%
    \the\thm@headpunct\thmheadnl\hskip\thm@headsep
  }\ignorespaces
}
\renewcommand{\qedsymbol}{%
  \ifx\qed@thiscurrent\qed@empty
    \qed@empty
  \else
    \fbox{\scriptsize\qed@thiscurrent}%
  \fi
}
\renewcommand{\proofname}{%
  Proof%
  \ifx\qed@thiscurrent\qed@empty
  \else
    \ of \qed@thiscurrent
  \fi
}
\xpretocmd{\proof}{\let\qed@thiscurrent\qed@current}{}{}
\newenvironment{proof*}[1]
  {\def\qed@thiscurrent{\ref{#1}}\proof}
  {\endproof}
\makeatother

\newtheorem{thm}{Theorem}[section]
\newtheorem{lem}[thm]{Lemma}
\newtheorem*{nthm}{Theorem}

\begin{document}

\chapter{Title}

\section{Title}

\begin{thm}
Pigs can fly.
\end{thm}

\begin{proof}
Would you doubt it?
\end{proof}

\begin{nthm}
Unnumbered.
\end{nthm}
\begin{proof}
What should we say?
\end{proof}

The following theorem will be proved later.

\begin{thm}\label{thm:later}
$P=NP$.
\end{thm}

Long text here.

\begin{proof*}{thm:later}
Oh, well! Should I really do it? We'll use the following lemma.

\begin{lem}
Something surely can fly.
\end{lem}
\begin{proof}
Clear.
\end{proof}
Now use the lemma and apply the well known identity
\[
1=0.\qedhere
\]
\end{proof*}

\end{document}

Se uma prova for atrasada, use o proof*ambiente, que quer como argumento o rótulo usado no teorema relativo.

Como você pode ver, as provas podem ser aninhadas. Mostrei apenas uma prova aninhada dentro de uma prova “atrasada”, mas você pode verificar se funciona também com o proofambiente padrão.

insira a descrição da imagem aqui

Algumas palavras de explicação.

Primeiro modifico a definição para \@begintheoremadicionar algumas configurações. Se o teorema não for numerado, defino (globalmente, porque já estamos em um ambiente) \qed@currentcomo \qed@empty(que é definido como o símbolo QED padrão, veremos mais tarde o porquê); se o teorema for numerado, eu o faço \xdef\qed@current{#2}, porque #2contém o número do teorema (mas não de forma explícita, por isso é necessário expandi-lo totalmente).

Caso os números do teorema contenham instruções de formatação ou quando sejam utilizados diferentes sistemas de numeração (numerais gregos com babel, por exemplo), isso deve ser

\protected@edef\@tempa{#2}\global\let\qed@current\@tempa

para evitar problemas. Nas configurações padrão do inglês, isso não deveria ser necessário.

Tirando essas duas alterações, \@begintheoremé igual ao original.

Então eu redefino \qedsymbol. Ele se compara \qed@thiscurrentcom \qed@empty; se for o mesmo, ele compõe o símbolo padrão, caso contrário, ele compõe

\fbox{\scriptsize\qed@thiscurrent}

porque, como veremos, \qed@thiscurrentcontém o número do teorema que está sendo provado atualmente.

Também \proofnameé redefinido adicionar “de <number>” usando \qed@thiscurrentse o último teorema declarado for numerado.

O proofambiente é modificado para definir (localmente) \qed@thiscurrentcomo \qed@current; finalmente proof*é definido para fazer o mesmo, proofmas recuperando o número com \ref.

O caso de proofseguir um teorema simples é fácil: \qed@thiscurrentconterá o número do teorema. O mesmo para proof*.

Se um proofambiente estiver dentro de outro proof, a instrução será redefinida globalmente \qed@current, mas isso não influenciará \qed@thiscurrentno final da prova principal, pois \qed@thiscurrentpara a prova aninhada é definida localmente e \end{proof}irá reverter o local \qed@thiscurrentpara o valor anterior.

Responder2

Se usarmos oamsthmpacote, então podemos fazer isso sequestrando o \qedsymbolcomando e hackeando a maneira como os ambientes do teorema são construídos internamente. Isso se resume a adicionar algum código para \@begintheoremsubstituir, \qedsymbolde modo que se torne uma versão em caixa do último número do teorema.

insira a descrição da imagem aqui

Existem dois problemas com o código abaixo. A primeira é que \qedsymbolfoi perdido - mas você pode usá \realqedsymbol-lo.

A segunda questão é que se você enunciar um teorema, digamos, e depois provar outro lema no meio da prova antes de retornar ao resultado principal, então o último número em caixa estará errado. A solução mais simples para isso é provavelmente definir um comando como

\newcommand\QedSymbol[1]{\gdef\qedsymbol{\fbox{\ref{#1}}}}

para definir manualmente \qedsymboligual a um \refcomando em caixa. Para usar isso você apenas teria que escrever \label{MyWondrousTheorem}para adicionar uma referência ao seu (maravilhoso) teorema e então usar \Qedsymbol{MyWondrousTheorem}antes do final da prova.

Se o ambiente semelhante ao teorema não tiver um número de teorema, ele \qedsymbolserá revertido para \realqedsymbolo real \qedsymbol.

Eu não testei tanto, então é possível que isso quebre alguma coisa ou que haja outros casos em que isso não funcione.

Aqui está o código.

\documentclass{article}
\usepackage{amsmath,amsthm}
\makeatletter% the hack to change the qedsymbol automatically
  \let\@@begintheorem=\@begintheorem% save real AMS theorem environment
  \let\realqedsymbol\qedsymbol
  \def\@begintheorem#1#2[#3]{%
    \@@begintheorem{#1}{#2}[#3]% start the theorem
    \@ifempty{#2}{\let\qedsymbol\realqedsymbol}{\gdef\qedsymbol{\fbox{#2}}}
  }
\makeatother

\swapnumbers\numberwithin{equation}{section}
\newtheorem{Proposition}[equation]{Proposition}
\newtheorem{Lemma}[equation]{Lemma}

\begin{document}
  \section{Important facts}
  \begin{Lemma}
    $1+1=2$
  \end{Lemma}

  \begin{proof}Count.
  \end{proof}

  \begin{Proposition}
    $1+3=4$
  \end{Proposition}

  \begin{proof}Count more carefully.
  \end{proof}

  \begin{Proposition}
    $2+2=4$
  \end{Proposition}

  \begin{proof}Count more carefully.
  \end{proof}
\end{document}


\documentclass{article}
\usepackage{amsmath,amsthm}
\makeatletter
  \let\@@begintheorem=\@begintheorem% save real AMS theorem environment
  \let\@qedsymbol\qedsymbol
  \def\@begintheorem#1#2[#3]{%
    \@@begintheorem{#1}{#2}[#3]% start the theorem
    \@ifempty{#2}{\let\qedsymbol\@qedsymbol}{\gdef\qedsymbol{\fbox{#2}}}
  }
\makeatother

\swapnumbers\numberwithin{equation}{section}
\newtheorem{Proposition}[equation]{Proposition}
\newtheorem{Lemma}[equation]{Lemma}

\begin{document}
  \section{Important facts}
  \begin{Lemma}
    $1+1=2$
  \end{Lemma}

  \begin{proof}Count.
  \end{proof}

  \begin{Proposition}
    $1+3=4$
  \end{Proposition}

  \begin{proof}Count more carefully.
  \end{proof}

  \begin{Proposition}
    $2+2=4$
  \end{Proposition}

  \begin{proof}Count more carefully.
  \end{proof}
\end{document}

Outra forma de fazer isso, que resolveria o problema com um resultado intermediário aparecendo no meio de uma prova, seria redefinida \qedsymbolno início do ambiente de prova. Esta abordagem só seria possível, entretanto, se todos os ambientes semelhantes a teoremas usassem o mesmo contador (como no meu MWE). O código acima tem a vantagem de funcionar (deveria?:) funcionar mesmo que diferentes ambientes semelhantes a teoremas usem contadores diferentes.

Responder3

Isso foi adaptado do que usei no passado (não tenho certeza de onde consegui):

insira a descrição da imagem aqui

Código:

\documentclass{article}
\usepackage{amsmath}

\newcommand*{\QED}[1]{%
        \ifmmode% Check for math mode.
            \tag*{\fbox{#1}}% 
        \else%
            {\rightskip\fill\parfillskip-\rightskip%
            \linepenalty100%
            \exhyphenpenalty0%
            \linebreak[0] % <-- Need space here (allows for a break.
            \hspace*{\fill}\fbox{#1}}%
        \fi%
}%


\begin{document}
In text mode you can use \verb|QED| as shown here.\QED{2.2}

You can also use it in math mode
\begin{align*}
             F &= ma \\
    \implies E &= mc^2\QED{2.3}
\end{align*}
\end{document}

Responder4

O ntheorempacote permite redefinir \qedsymbolde forma bastante simples. Combinando com xparse, defino um Proofambiente, que pode receber dois argumentos opcionais: o primeiro é o argumento opcional de um ambiente de prova clássico, mas delimitado por parênteses; o segundo argumento opcional é o símbolo de fim de prova, cujo padrão é um quadrado, mas pode ser uma referência ao teorema que foi provado (na verdade, qualquer referência ou qualquer texto). Neste último caso, optei por colocá-lo em um arquivo \fcolorbox.

Exemplo:

\documentclass[A4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[svgnames]{xcolor}
\usepackage{amsfonts,empheq}
\usepackage[amsmath, thref, thmmarks]{ntheorem}
\usepackage{cleveref}
\usepackage{xparse}
\usepackage{chngcntr}

\theoremstyle{plain}
\theoremseparator{.} \theoremheaderfont{\bfseries}
\theorembodyfont{\itshape}
\newtheorem{Thm}{Theorem}[section]
\newtheorem{Lem}{Lemma}%[section]
\theoremstyle{nonumberplain}
\theoremheaderfont{\itshape}
\theorembodyfont{\upshape}

\newtheorem{proof}{Proof}
\NewDocumentEnvironment{Proof}{d() o}
{\IfNoValueTF{#1}{\begin{proof}}{\begin{proof}[#1]}
 \IfNoValueTF{#2}{\qedsymbol{\ensuremath{\Box}}}{\qedsymbol{\fcolorbox{red}{Lavender}{\color{red}\upshape#2}}}}%
{\qed\end{proof}}%
\counterwithin{Lem}{Thm}
\begin{document}

\section{Some Not So Standard Results}

\begin{Thm}\label{special}
   $ \mathrm{SL}_n(\mathbb{K}) ⊂ \mathrm{ GL}_n(\mathbb{K})$.
\end{Thm}

\begin{Proof}[\Cref{special}]
We shall prove first:

\begin{Lem}\label{basic}
   $ \mathrm{SL}_n(\mathbb{K}) ⊂ \mathrm{ GL}_n(\mathbb{K})$.
\end{Lem}

%% First proof of lemma
\begin{Proof}(of the lemma)[\Cref{basic}]
Easy enough.
\end{Proof}
%% Second proof of lemma
\begin{Proof}(another one)
Still easier proof.
\end{Proof}

%% End of theorem proof
Left as an exercise ;\,o)
\end{Proof}

\end{document} 

insira a descrição da imagem aqui

informação relacionada