Skip to main content
All modules

TemplateJournalsmath

Annals of Mathematics (aomart)

Official class for the Annals of Mathematics, maintained for the journal on CTAN. Builds on amsart with the Annals front matter, MSC subjects and the aomplain bibliography style.

LPPL 1.3

Loading PDF preview…

What’s inside

  • Starter files
  • main.tex3.8 KB
    %% Annals of Mathematics submission (aomart). The class loads amsmath, amsthm
    %% and hyperref itself. Options: `manuscript` for submission, `screen` for
    %% on-screen reading; drop both for the print layout.
    \documentclass[manuscript,screen]{aomart}
    
    \usepackage{amssymb}
    \usepackage{tikz}
    \usepackage{booktabs}
    
    \theoremstyle{plain}
    \newtheorem{thm}{Theorem}[section]
    \newtheorem{lem}[thm]{Lemma}
    \newtheorem{prop}[thm]{Proposition}
    \newtheorem{cor}[thm]{Corollary}
    
    \theoremstyle{definition}
    \newtheorem{defn}[thm]{Definition}
    \newtheorem{rem}[thm]{Remark}
    
    \DeclareMathOperator{\Aut}{Aut}
    \newcommand{\Z}{\mathbb{Z}}
    \newcommand{\Q}{\mathbb{Q}}
    
    \title[Finiteness of automorphism groups]{Finiteness of automorphism groups of varieties of general type}
    
    \author[F. Author]{First Author}
    \givenname{First}
    \surname{Author}
    \address{Department of Mathematics, University Name, City, Country}
    \email{first@university.edu}
    
    \author[S. Author]{Second Author}
    \givenname{Second}
    \surname{Author}
    \address{Institute Name, City, Country}
    \email{second@institute.org}
    
    \thanks{The first author was supported by Grant XXXX}
    
    \subject{primary}{msc2020}{14J50}
    \subject{secondary}{msc2020}{14E05}
    \keyword{automorphism group}
    \keyword{general type}
    
    \begin{document}
    
    \begin{abstract}
    We give a short proof that the automorphism group of a smooth projective
    variety of general type is finite, and derive an explicit bound on its
    order in terms of the volume of the canonical class.
    \end{abstract}
    
    \maketitle
    
    \section{Introduction}\label{sec:intro}
    
    Let $X$ be a smooth projective variety over $\mathbb{C}$ of general type.
    It is classical that $\Aut(X)$ is finite \cite{matsumura1963}; the question
    of effective bounds has a long history, see \cite{hacon2013} and the
    references therein. Our main result is the following.
    
    \begin{thm}\label{thm:main}
    For every $n \ge 1$ there is a constant $C_n$ such that, for every smooth
    projective variety $X$ of dimension $n$ and general type,
    \[
      |\Aut(X)| \;\le\; C_n \cdot \operatorname{vol}(K_X).
    \]
    \end{thm}
    
    \section{Preliminaries}\label{sec:prelim}
    
    \begin{defn}\label{def:vol}
    The \emph{volume} of a line bundle $L$ on an $n$-dimensional projective
    variety $X$ is
    $\operatorname{vol}(L) = \limsup_{m \to \infty} n!\, h^0(X, L^{\otimes m}) / m^n$.
    \end{defn}
    
    \begin{lem}\label{lem:pluri}
    There is an integer $m_n$ depending only on $n$ such that
    $|m_n K_X|$ defines a birational map for every $X$ as in
    Theorem~\ref{thm:main}.
    \end{lem}
    
    \begin{proof}
    This is the main theorem of \cite{hacon2006}.
    \end{proof}
    
    \section{Proof of the main theorem}\label{sec:proof}
    
    \begin{proof}[Proof of Theorem~\ref{thm:main}]
    By Lemma~\ref{lem:pluri}, $\Aut(X)$ acts faithfully on the image of the
    pluricanonical map $\phi_{m_n}$, whose degree is bounded by
    $m_n^n \operatorname{vol}(K_X)$. A group acting faithfully on a variety of
    bounded degree in a fixed projective space has order bounded by a constant
    times that degree, which gives the claim.
    \end{proof}
    
    \begin{rem}
    Table~\ref{tab:dims} lists the best known constants in low dimension, and
    Figure~\ref{fig:growth} sketches their growth.
    \end{rem}
    
    \begin{table}[ht]
    \centering
    \begin{tabular}{@{}ccc@{}}
    \toprule
    $n$ & $m_n$ & bound on $|\Aut(X)|$ \\
    \midrule
    1 & 3 & $84(g-1)$ \\
    2 & 5 & $42^2 K_X^2$ \\
    3 & 61 & open \\
    \bottomrule
    \end{tabular}
    \caption{Known bounds in low dimension.}
    \label{tab:dims}
    \end{table}
    
    \begin{figure}[ht]
    \centering
    \begin{tikzpicture}[x=1.2cm,y=0.5cm]
      \draw[->] (0,0) -- (4.5,0) node[right] {$n$};
      \draw[->] (0,0) -- (0,5) node[above] {$\log m_n$};
      \draw[thick] plot[smooth] coordinates {(1,1.1) (2,1.6) (3,4.1)};
      \foreach \x/\y in {1/1.1,2/1.6,3/4.1} \fill (\x,\y) circle (1.5pt);
    \end{tikzpicture}
    \caption{Growth of the pluricanonical constant $m_n$.}
    \label{fig:growth}
    \end{figure}
    
    \bibliographystyle{aomplain}
    \bibliography{references}
    
    \end{document}
    
  • Libraries and docs
  • aomalpha.bst30 KBVendored from mirrors.ctan.org on 2026-08-19.
    %%%
    %%%  This is aomplain.bst file, based on amsplain.bst by AMS
    %%%  to support Annals of Mathematics specific fields.
    %%%  
    % Copyright 2010--2017, The Annals of Mathematics.
    % This work may be distributed and/or modified under the
    % conditions of the LaTeX Project Public License, either
    % version 1.3 of this license or (at your option) any 
    % later version.
    % The latest version of the license is in
    %    http://www.latex-project.org/lppl.txt
    % and version 1.3 or later is part of all distributions of
    % LaTeX version 2005/12/01 or later.
    %
    % This work has the LPPL maintenance status `maintained'.
    %
    % The Current Maintainer of this work is Boris Veytsman,
    % <borisv@lk.net> 
    %
    % This work consists of the file aomart.dtx, the
    % derived file aomart.cls, and the files aomplain.bst and aomalpha.bst
    %
    %%%
    
    % See the file btxbst.doc for extra documentation other than
    % what is included here.  And see btxhak.tex for a description
    % of the BibTeX language and how to use it.
    
    % This defines the types of fields that can occur in a database entry
    % for this particular bibliography style.  Except for `language',
    % this is the standard list from alpha.bst.
    
    %% Types of entries currently allowed in a BibTeX file:
    %%
    %% ARTICLE -- An article from a journal or magazine.
    %%
    %% BOOK -- A book with an explicit publisher.
    %%
    %% BOOKLET -- A work that is printed and bound,
    %% but without a named publisher or sponsoring institution.
    %%
    %% CONFERENCE -- The same as INPROCEEDINGS,
    %% included for Scribe compatibility.
    %%
    %% INBOOK -- A part of a book,
    %% which may be a chapter (or section or whatever) and/or a range of pages.
    %%
    %% INCOLLECTION -- A part of a book having its own title.
    %%
    %% INPROCEEDINGS -- An article in a conference proceedings.
    %%
    %% MANUAL -- Technical documentation.
    %%
    %% MASTERSTHESIS -- A Master's thesis.
    %%
    %% MISC -- Use this type when nothing else fits.
    %%
    %% PHDTHESIS -- A PhD thesis.
    %%
    %% PROCEEDINGS -- The proceedings of a conference.
    %%
    %% TECHREPORT -- A report published by a school or other institution,
    %% usually numbered within a series.
    %%
    %% UNPUBLISHED -- A document having an author and title, but not formally
    %% published.
    
    ENTRY
      { 
        address
        arxiv
        author
        booktitle
        chapter
        doi
        edition
        editor
        howpublished
        institution
        issue
        jfmnumber
        journal
        key
        language
        month
        mrnumber
        note
        number
        organization
        pages
        publisher
        school
        series
        sortyear
        title
        type
        url
        venue
        volume
        year
        zblnumber
        titlenote
        totalpages
        pagetotal
      }
      {}
      { label extra.label sort.label bysame }
    
    % Removed after.sentence, after.block---not needed.
    
    INTEGERS { output.state before.all mid.sentence }
    
    FUNCTION {init.state.consts}
    { #0 'before.all :=
      #1 'mid.sentence :=
    }
    
    % Scratch variables:
    
    STRINGS { s t }
    
    % Utility functions
    
    FUNCTION {shows}
    { duplicate$ "::::  `" swap$ * "'" * top$
    }
    
    FUNCTION {showstack}
    {"STACK====================================================================="
    top$
    stack$
    "ENDSTACK=================================================================="
    top$
    }
    
    FUNCTION {not}
    {   { #0 }
        { #1 }
      if$
    }
    
    FUNCTION {and}
    {   'skip$
        { pop$ #0 }
      if$
    }
    
    FUNCTION {or}
    {   { pop$ #1 }
        'skip$
      if$
    }
    
    FUNCTION {field.or.null}
    { duplicate$ empty$
        { pop$ "" }
        'skip$
      if$
    }
    
    FUNCTION {emphasize}
    { duplicate$ empty$
        { pop$ "" }
        { "\emph{" swap$ * "}" * }
      if$
    }
    
    % n.dashify is used to make sure page ranges get the TeX code
    % (two hyphens) for en-dashes.
    
    FUNCTION {n.dashify}
    { 't :=
      ""
        { t empty$ not }
        { t #1 #1 substring$ "-" =
    	{ t #1 #2 substring$ "--" = not
    	    { "--" *
    	      t #2 global.max$ substring$ 't :=
    	    }
    	    {   { t #1 #1 substring$ "-" = }
    		{ "-" *
    		  t #2 global.max$ substring$ 't :=
    		}
    	      while$
    	    }
    	  if$
    	}
    	{ t #1 #1 substring$ *
    	  t #2 global.max$ substring$ 't :=
    	}
          if$
        }
      while$
    }
    
    % tie.or.space.connect connects two items with a ~ if the
    % second item is less than 3 letters long, otherwise it just puts an
    % ordinary space.
    
    FUNCTION {tie.or.space.connect}
    { duplicate$ text.length$ #3 <
        { "~" }
        { " " }
      if$
      swap$ * *
    }
    
    FUNCTION {add.space.if.necessary}
    { duplicate$ "" =
        'skip$
        { " " * }
      if$
    }
    
    % either.or.check gives a warning if two mutually exclusive fields
    % were used in the database.
    
    FUNCTION {either.or.check}
    { empty$
        'pop$
        { "can't use both " swap$ * " fields in " * cite$ * warning$ }
      if$
    }
    
    % output.nonnull is called by output.
    
    FUNCTION {output.nonnull}
    % remove the top item from the stack because it's in the way.
    { 's :=
      output.state mid.sentence =
    % If we're in mid-sentence, add a comma to the new top item and write it
        { ", " * write$ }
    % Otherwise, if we're at the beginning of a bibitem,
        { output.state before.all =
    % just write out the top item from the stack;
          'write$
    % and the last alternative is that we're at the end of the current
    % bibitem, so we add a period to the top stack item and write it out.
            { add.period$ " " * write$ }
          if$
          mid.sentence 'output.state :=
        }
      if$
    % Put the top item back on the stack that we removed earlier.
      s
    }
    
    % Output checks to see if the stack top is empty; if not, it
    % calls output.nonnull to write it out.
    
    FUNCTION {output}
    { duplicate$ empty$
        'pop$
        'output.nonnull
      if$
    }
    
    % Standard warning message for a missing or empty field. For the user
    % we call any such field `missing' without respect to the distinction
    % made by BibTeX between missing and empty.
    
    FUNCTION {missing.warning}
    { "missing " swap$ * " in " * cite$ * warning$ }
    
    % Output.check is like output except that it gives a warning on-screen
    % if the given field in the database entry is empty.  t is the field
    % name.
    
    FUNCTION {output.check}
    { 't :=
      duplicate$ empty$
        { pop$ t missing.warning }
        'output.nonnull
      if$
    }
    
    FUNCTION {output.bibitem}
    { newline$
      "\bibitem[" write$
      label write$
      "]{" write$
      cite$ write$
      "}" write$
      newline$
    % This empty string is the first thing that will be written
    % the next time write$ is called.  Done this way because each
    % item is saved on the stack until we find out what punctuation
    % should be added after it.  Therefore we need an empty first item.
      ""
      before.all 'output.state :=
    }
    
    FUNCTION {output.nonempty.mrnumber}
    { duplicate$ missing$
        { pop$ "" }
        'skip$
      if$
      duplicate$ empty$
        'pop$
        { " \mr{" swap$ * "}. " * write$ }
      if$
    }
    
    FUNCTION {output.nonempty.zblnumber}
    { duplicate$ missing$
        { pop$ "" }
        'skip$
      if$
      duplicate$ empty$
        'pop$
        { " \zbl{" swap$ * "}. " * write$ }
      if$
    }
    
    
    FUNCTION {output.nonempty.jfmnumber}
    { duplicate$ missing$
        { pop$ "" }
        'skip$
      if$
      duplicate$ empty$
        'pop$
        { " \jfm{" swap$ * "}. " * write$ }
      if$
    }
    
    
    FUNCTION {output.nonempty.arxiv}
    { duplicate$ missing$
        { pop$ "" }
        'skip$
      if$
      duplicate$ empty$
        'pop$
        { " \arxiv{" swap$ * "}. " * write$ }
      if$
    }
    
    FUNCTION {output.nonempty.doi}
    { duplicate$ missing$
        { pop$ "" }
        'skip$
      if$
      duplicate$ empty$
        'pop$
        { " \doi{" swap$ * "}. " * write$ }
      if$
    }
    
    FUNCTION {output.nonempty.url}
    { duplicate$ missing$
        { pop$ "" }
        'skip$
      if$
      duplicate$ empty$
        'pop$
        { " Available at \url{" swap$ * "}. " * write$ }
      if$
    }
    
    
    
    FUNCTION {fin.entry}
    { add.period$
      write$
      mrnumber output.nonempty.mrnumber
      zblnumber output.nonempty.zblnumber
      jfmnumber output.nonempty.jfmnumber
      arxiv output.nonempty.arxiv
      doi output.nonempty.doi
      doi empty$
        { url output.nonempty.url }
        { doi missing$
          { url output.nonempty.url }
          'skip$
          if$}
      if$
      newline$
    }
    
    FUNCTION {fin.entry.misc}
    { add.period$
      write$
      arxiv output.nonempty.arxiv
      doi output.nonempty.doi
      doi empty$
        { url output.nonempty.url }
        { doi missing$
          { url output.nonempty.url }
          'skip$
          if$}
      if$
      newline$
    }
    
    
    % Removed new.block, new.block.checka, new.block.checkb, new.sentence,
    % new.sentence.checka, and new.sentence.checkb functions here, since they
    % don't seem to be needed in the AMS style.  Also moved some real
    % basic functions like `and' and 'or' earlier in the file.
    
    INTEGERS { nameptr namesleft numnames }
    
    % The extra section to write out a language field was added
    % for AMSPLAIN.BST.  Not present in plain.bst.
    
    FUNCTION {format.language}
    { language empty$
        { "" }
        { " (" language * ")" * }
      if$
    }
    
    % This version of format.names puts names in the format
    %
    % F. von Last, Jr.
    %
    % (i.e., first name first, abbreviating initials).
    
    FUNCTION {format.names}
    { 's :=
      #1 'nameptr :=
      s num.names$ 'numnames :=
      numnames 'namesleft :=
        { namesleft #0 > }
        { s nameptr "\bgroup\scshape{{}}{f.~}{vv~}{ll}{, jj}\egroup{{}}" format.name$ 't :=
          nameptr #1 >
    	{ namesleft #1 >
    	    { ", " * t * }
    	    { numnames #2 >
    		{ "," * }
    		'skip$
    	      if$
    	      t "others" =
    		{ " et~al." * }
    		{ " and " * t * }
    	      if$
    	    }
    	  if$
    	}
    	't
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
    }
    
    FUNCTION {format.authors}
    { author empty$
        { "" }
        { bysame "\bysame" =
             { bysame }
             { author format.names }
         if$
        }
      if$
    }
    
    FUNCTION {format.editors}
    { editor empty$
        { "" }
        { editor format.names
          editor num.names$ #1 >
    	{ " (eds.)" * }
    	{ " (ed.)" * }
          if$
        }
      if$
    }
    
    FUNCTION {format.nonauthor.editors}
    { editor empty$
        { "" }
        { editor format.names
          editor num.names$ #1 >
    	{ ", eds." * }
    	{ ", ed." * }
          if$
        }
      if$
    }
    
    FUNCTION {format.title}
    { title empty$
        { "" }
        { title "t" change.case$ }
      if$
    }
    
    FUNCTION {format.booktitle}
    { title empty$
        { "" }
        { title emphasize }
      if$
    }
    
    
    FUNCTION {format.journal.vol.num.year}
    { journal empty$
        { "journal name" missing.warning ""}
        { " \emph{"  journal * "}" * }
      if$
      volume empty$
        'skip$
        { " \textbf{" * volume * "}" * }
      if$
      number empty$
        { issue empty$
            'skip$
            { " no.~" * issue * }
          if$
        }
        { issue empty$
            'skip$
            {"both number and issue are present in " cite$ * warning$}
          if$
          " no.~" * number *
        }
      if$
      year empty$
        { "year" missing.warning }
        { " (" * year * ")" * }
      if$
    }
    
    % For formatting the issue number for a journal article.
    
    FUNCTION {format.number}
    { number empty$
        { "" }
        { "no.~" number * }
      if$
    }
    
    % For formatting miscellaneous dates
    
    FUNCTION {format.date}
    { year empty$
        { month empty$
    	{ "" }
    	{ "there's a month but no year in " cite$ * warning$
    	  month
    	}
          if$
        }
        { month empty$
    	'year
    	{ month " " * year * }
          if$
        }
      if$
    }
    
    %%      The volume, series and number information is sort of tricky.
    %%      This code handles it as follows:
    %%      If the series is present, and the volume, but not the number,
    %%        then we do "\emph{Book title}, \emph{Series Name} \bf{000}"
    %%      If the series is present, and the number, but not the volume,
    %%        then we do "\emph{Book title}, \emph{Series Name} no. 000"
    %%      If the series is present, and both number and volume,
    %%        then we do "\emph{Book title}, \bf{XX} \emph{Series Name} no. 000"
    %%      Finally, if the series is absent,
    %%        then we do "\emph{Book title}, \bf{XX}"
    %%        or         "\emph{Book title}, no. 000"
    %%        and if both volume and number are present, give a warning message.
    
    FUNCTION {format.bookvolume.series.number}
    { volume empty$
        { "" % Push the empty string as a placeholder in case everything else
             % is empty too.
          series empty$
            'skip$
            { pop$ "\emph{" series * "}" * } % if series is not empty put in stack
          if$
          number empty$
            'skip$
            { duplicate$ empty$ % if no preceding material,
                'skip$          % do nothing, otherwise
                { " " * }      % add a  space to separate.
              if$
              "no." number tie.or.space.connect * % add the number information
            }
          if$
        }
    %% If the volume is NOT EMPTY:
        { "\textbf{" volume * "}" *
          number empty$
            { series empty$
                'skip$
                { "\emph{" series * "}" * " " * swap$ *}    % Series Name, vol. XX
              if$
            }
            { series empty$
                { "can't use both volume and number if series info is missing"
                  warning$
                  "in BibTeX entry type `" type$ * "'" * top$
                }
                { " " * series * " no." * number tie.or.space.connect }
              if$
            }
          if$
        }
      if$
    
    }  % end of format.bookvolume.series.number
    
    
    %% format.inproc.title.where.editors is used by inproceedings entry types
    
    %%      No case changing or emphasizing for the title.  We want initial
    %%      caps, roman.
    %%      We add parentheses around the venue (place where conference
    %%      was held).
    %%      Likewise we add parentheses around the editors' names.
    
    FUNCTION {format.inproc.title.venue.editors}
    { booktitle empty$
        { "" }
        {  " in \emph{"  booktitle * "}" *
          venue empty$
            'skip$
            { add.space.if.necessary "(" * venue * ")" * }
          if$
          editor empty$
            'skip$
            { add.space.if.necessary "(" * format.nonauthor.editors * ")" * }
          if$
        }
      if$
    }
    
    
    FUNCTION {format.edition}
    { edition empty$
        { "" }
        { output.state mid.sentence =
    	{ edition "l" change.case$ " ed." * }
    	{ edition "t" change.case$ " ed." * }
          if$
        }
      if$
    }
    
    INTEGERS { multiresult }
    
    FUNCTION {multi.page.check}
    { 't :=
      #0 'multiresult :=
        { multiresult not
          t empty$ not
          and
        }
        { t #1 #1 substring$
          duplicate$ "-" =
          swap$ duplicate$ "," =
          swap$ "+" =
          or or
    	{ #1 'multiresult := }
    	{ t #2 global.max$ substring$ 't := }
          if$
        }
      while$
      multiresult
    }
    
    % pagetotal is a synonym of totalpages: some styles use
    % one, and some another
    
    FUNCTION {format.pages}
    { pages empty$
        {  totalpages empty$
    	 {  pagetotal empty$
    	      { "" }
    	      { pagetotal "~pp." *}
    	    if$
    	 }
    	 { totalpages "~pp." *}
           if$
        }
        { pages n.dashify }
      if$
    }
    
    FUNCTION {format.book.pages}
    { pages empty$
        { "" }
        { pages multi.page.check
    	{ "pp.~" pages n.dashify * }
    	{ "p.~" pages * }
          if$
        }
      if$
    }
    
    FUNCTION {format.chapter.pages}
    { chapter empty$
        'format.book.pages
        { type empty$
    	{ "ch.~" }
    	{ type "l" change.case$ " " * }
          if$
          chapter *
          pages empty$
    	'skip$
    	{ ", " * format.book.pages * }
          if$
        }
      if$
    }
    
    FUNCTION {empty.misc.check}
    { author empty$ title empty$ howpublished empty$
      month empty$ year empty$ note empty$
      and and and and and
      key empty$ not and
        { "all relevant fields are empty in " cite$ * warning$ }
        'skip$
      if$
    }
    
    FUNCTION {format.thesis.type}
    { type empty$
        'skip$
        { pop$
          type "t" change.case$
        }
      if$
    }
    
    FUNCTION {format.tr.number}
    { type empty$
        { "Tech. Report" }
        'type
      if$
      number empty$
        { "t" change.case$ }
        { number tie.or.space.connect }
      if$
    }
    
    % The format.crossref functions haven't been paid much attention
    % at the present time (June 1990) and could probably use some
    % work.  MJD
    
    FUNCTION {format.article.crossref}
    { key empty$
        { journal empty$
    	{ "need key or journal for " cite$ * " to crossref " * crossref *
    	  warning$
    	  ""
    	}
    	{ "in " journal * }
          if$
        }
        { "in " key * }
      if$
      " \cite{" * crossref * "}" *
    }
    
    FUNCTION {format.crossref.editor}
    { editor #1 "{vv~}{ll}" format.name$
      editor num.names$ duplicate$
      #2 >
        { pop$ " et~al." * }
        { #2 <
    	'skip$
    	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
    	    { " et~al." * }
    	    { " and " * editor #2 "{vv~}{ll}" format.name$ * }
    	  if$
    	}
          if$
        }
      if$
    }
    
    FUNCTION {format.book.crossref}
    { volume empty$
        { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
          "in "
        }
        { "vol." volume tie.or.space.connect
          " of " *
        }
      if$
      editor empty$
      editor field.or.null author field.or.null =
      or
        { key empty$
    	{ series empty$
    	    { "need editor, key, or series for " cite$ * " to crossref " *
    	      crossref * warning$
    	      "" *
    	    }
    	    { series * }
    	  if$
    	}
    	{ key * }
          if$
        }
        { format.crossref.editor * }
      if$
      " \cite{" * crossref * "}" *
    }
    
    FUNCTION {format.incoll.inproc.crossref}
    { editor empty$
      editor field.or.null author field.or.null =
      or
        { key empty$
    	{ booktitle empty$
    	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
    	      crossref * warning$
    	      ""
    	    }
    	    { "in \emph{" booktitle * "}" * }
    	  if$
    	}
    	{ "in " key * }
          if$
        }
        { "in " format.crossref.editor * }
      if$
      " \cite{" * crossref * "}" *
    }
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    % The main functions for each entry type.
    
    % journal, vol and year are formatted together because they are
    % not separated by commas.
    
    FUNCTION {article}
    { output.bibitem
      format.authors "author" output.check
      format.title "title" output.check
      titlenote output
      crossref missing$
        { format.journal.vol.num.year "journal, volume, and year" output.check
          format.pages "pages" output.check
        }
        { format.article.crossref output.nonnull
          format.pages "pages" output.check
        }
      if$
      format.language *
      note output
      fin.entry
    }
    
    FUNCTION {book}
    { output.bibitem
      author empty$
        { format.editors "author and editor" output.check }
        { format.authors output.nonnull
          crossref missing$
    	{ "author and editor" editor either.or.check }
    	'skip$
          if$
        }
      if$
      format.booktitle "title" output.check
      titlenote output
      format.edition output
      crossref missing$
        { format.bookvolume.series.number output
          publisher "publisher" output.check
          address output
        }
        { format.book.crossref output.nonnull
        }
      if$
      format.date "year" output.check
      format.pages output
      format.language *
      note output
      fin.entry
    }
    
    FUNCTION {booklet}
    { output.bibitem
      format.authors output
      format.booktitle "title" output.check
      titlenote output
      howpublished output
      address output
      format.pages output
      format.date output
      note output
      fin.entry
    }
    
    FUNCTION {inbook}
    { output.bibitem
      author empty$
        { format.editors "author and editor" output.check }
        { format.authors output.nonnull
          crossref missing$
    	{ "author and editor" editor either.or.check }
    	'skip$
          if$
        }
      if$
      format.booktitle "title" output.check
      titlenote output
      format.edition output
      crossref missing$
        { format.bookvolume.series.number output
          format.chapter.pages "chapter and pages" output.check
          publisher "publisher" output.check
          address output
        }
        { format.chapter.pages "chapter and pages" output.check
          format.book.crossref output.nonnull
        }
      if$
      format.date "year" output.check
      format.language *
      note output
      fin.entry
    }
    
    FUNCTION {incollection}
    { output.bibitem
      format.authors "author" output.check
      format.title "title" output.check
      titlenote output
      crossref missing$
        { format.inproc.title.venue.editors "booktitle" output.check
          format.bookvolume.series.number output
          publisher "publisher" output.check
          address output
          format.edition output
          format.date "year" output.check
        }
        { format.incoll.inproc.crossref output.nonnull
        }
      if$
      note output
      format.book.pages output
      format.language *
      fin.entry
    }
    
    FUNCTION {inproceedings}
    { output.bibitem
      format.authors "author" output.check
      format.title "title" output.check
      titlenote output
      crossref missing$
        { format.inproc.title.venue.editors "booktitle" output.check
          format.bookvolume.series.number output
          organization output
          publisher output
          address output
          format.date "year" output.check
        }
        { format.incoll.inproc.crossref output.nonnull
        }
      if$
      note output
      format.book.pages output
      format.language *
      fin.entry
    }
    
    FUNCTION {conference} { inproceedings }
    
    FUNCTION {manual}
    { output.bibitem
      author empty$
        { organization empty$
    	'skip$
    	{ organization output.nonnull
    	  address output
    	}
          if$
        }
        { format.authors output.nonnull }
      if$
      format.booktitle "title" output.check
      titlenote output
      author empty$
        { organization empty$
    	{ address output }
    	'skip$
          if$
        }
        { organization output
          address output
        }
      if$
      format.edition output
      format.pages output
      format.date output
      note output
      fin.entry
    }
    
    FUNCTION {mastersthesis}
    { output.bibitem
      format.authors "author" output.check
      format.booktitle "title" output.check
      titlenote output
      "Master's thesis" format.thesis.type output.nonnull
      school "school" output.check
      address output
      format.date "year" output.check
      note output
      format.pages output
      fin.entry
    }
    
    FUNCTION {misc}
    { output.bibitem
      format.authors output
      format.title output
      titlenote output
      howpublished output
      format.date output
      note output
      format.book.pages output
      fin.entry.misc
      empty.misc.check
    }
    
    FUNCTION {phdthesis}
    { output.bibitem
      format.authors "author" output.check
      format.booktitle "title" output.check
      titlenote output
      "Ph.D. thesis" format.thesis.type output.nonnull
      school "school" output.check
      address output
      format.date "year" output.check
      note output
      format.pages output
      fin.entry
    }
    
    FUNCTION {proceedings}
    { output.bibitem
      editor empty$
        { organization output }
        { format.editors output.nonnull }
      if$
      format.booktitle "title" output.check
      titlenote output
      venue empty$
        'skip$
        { add.space.if.necessary "(" * venue * ")" * }
      if$
      format.bookvolume.series.number output
      address empty$
        { editor empty$
            'skip$
    	{ organization output }
          if$
          publisher output
          format.date "year" output.check
        }
        { address output.nonnull
          editor empty$
    	'skip$
    	{ organization output }
          if$
          publisher output
          format.date "year" output.check
        }
      if$
      format.pages output
      note output
      fin.entry
    }
    
    FUNCTION {techreport}
    { output.bibitem
      format.authors "author" output.check
      format.booktitle "title" output.check
      titlenote output
      format.tr.number output.nonnull
      institution "institution" output.check
      address output
      format.date "year" output.check
      note output
      fin.entry
    }
    
    FUNCTION {unpublished}
    { output.bibitem
      format.authors "author" output.check
      format.booktitle "title" output.check
      titlenote output
      note "note" output.check
      format.date output
      fin.entry.misc
    }
    
    FUNCTION {default.type} { misc }
    
    MACRO {jan} {"January"}
    
    MACRO {feb} {"February"}
    
    MACRO {mar} {"March"}
    
    MACRO {apr} {"April"}
    
    MACRO {may} {"May"}
    
    MACRO {jun} {"June"}
    
    MACRO {jul} {"July"}
    
    MACRO {aug} {"August"}
    
    MACRO {sep} {"September"}
    
    MACRO {oct} {"October"}
    
    MACRO {nov} {"November"}
    
    MACRO {dec} {"December"}
    
    READ
    
    FUNCTION {sortify}
    { purify$
      "l" change.case$
    }
    
    INTEGERS { len }
    
    FUNCTION {chop.word}
    { 's :=
      'len :=
      s #1 len substring$ =
        { s len #1 + global.max$ substring$ }
        's
      if$
    }
    
    INTEGERS { et.al.char.used }
    
    FUNCTION {initialize.et.al.char.used}
    { #0 'et.al.char.used :=
    }
    
    EXECUTE {initialize.et.al.char.used}
    
    FUNCTION {format.lab.names}
    { 's :=
      s num.names$ 'numnames :=
      numnames #1 >
        { numnames #4 >
    	{ #3 'namesleft := }
    	{ numnames 'namesleft := }
          if$
          #1 'nameptr :=
          ""
    	{ namesleft #0 > }
    	{ nameptr numnames =
    	    { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
    		{ "{\etalchar{+}}" *
    		  #1 'et.al.char.used :=
    		}
    		{ s nameptr "{v{}}{l{}}" format.name$ * }
    	      if$
    	    }
    	    { s nameptr "{v{}}{l{}}" format.name$ * }
    	  if$
    	  nameptr #1 + 'nameptr :=
    	  namesleft #1 - 'namesleft :=
    	}
          while$
          numnames #4 >
    	{ "{\etalchar{+}}" *
    	  #1 'et.al.char.used :=
    	}
    	'skip$
          if$
        }
        { s #1 "{v{}}{l{}}" format.name$
          duplicate$ text.length$ #2 <
    	{ pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
    	'skip$
          if$
        }
      if$
    }
    
    FUNCTION {author.key.label}
    { author empty$
        { key empty$
    	{ cite$ #1 #3 substring$ }
    	{ key #3 text.prefix$ }
          if$
        }
        { author format.lab.names }
      if$
    }
    
    FUNCTION {author.editor.key.label}
    { author empty$
        { editor empty$
    	{ key empty$
    	    { cite$ #1 #3 substring$ }
    	    { key #3 text.prefix$ }
    	  if$
    	}
    	{ editor format.lab.names }
          if$
        }
        { author format.lab.names }
      if$
    }
    
    FUNCTION {author.key.organization.label}
    { author empty$
        { key empty$
    	{ organization empty$
    	    { cite$ #1 #3 substring$ }
    	    { "The " #4 organization chop.word #3 text.prefix$ }
    	  if$
    	}
    	{ key #3 text.prefix$ }
          if$
        }
        { author format.lab.names }
      if$
    }
    
    FUNCTION {editor.key.organization.label}
    { editor empty$
        { key empty$
    	{ organization empty$
    	    { cite$ #1 #3 substring$ }
    	    { "The " #4 organization chop.word #3 text.prefix$ }
    	  if$
    	}
    	{ key #3 text.prefix$ }
          if$
        }
        { editor format.lab.names }
      if$
    }
    
    FUNCTION {calc.label}
    {key empty$
      { type$ "book" =
        type$ "inbook" =
        or
          'author.editor.key.label
          { type$ "proceedings" =
      	'editor.key.organization.label
    	  { type$ "manual" =
    	      'author.key.organization.label
    	      'author.key.label
    	    if$
    	  }
            if$
          }
        if$
        duplicate$
        year field.or.null purify$ #-1 #2 substring$
        *
        'label :=
        year field.or.null purify$ #-1 #4 substring$
        *
      }
      { 
        key duplicate$ 'label := 
      }
      if$
      sortify 'sort.label :=
    }
    
    FUNCTION {sort.format.names}
    { 's :=
      #1 'nameptr :=
      ""
      s num.names$ 'numnames :=
      numnames 'namesleft :=
        { namesleft #0 > }
        { nameptr #1 >
    	{ "   " * }
    	'skip$
          if$
          s nameptr "{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
          nameptr numnames = t "others" = and
    	{ "et al" * }
    	{ t sortify * }
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
    }
    
    FUNCTION {sort.format.title}
    { 't :=
      "A " #2
        "An " #3
          "The " #4 t chop.word
        chop.word
      chop.word
      sortify
      #1 global.max$ substring$
    }
    
    FUNCTION {author.sort}
    { author empty$
        { key empty$
    	{ "to sort, need author or key in " cite$ * warning$
    	  ""
    	}
    	{ key sortify }
          if$
        }
        { author sort.format.names }
      if$
    }
    
    FUNCTION {author.editor.sort}
    { author empty$
        { editor empty$
    	{ key empty$
    	    { "to sort, need author, editor, or key in " cite$ * warning$
    	      ""
    	    }
    	    { key sortify }
    	  if$
    	}
    	{ editor sort.format.names }
          if$
        }
        { author sort.format.names }
      if$
    }
    
    FUNCTION {author.organization.sort}
    { author empty$
        { organization empty$
    	{ key empty$
    	    { "to sort, need author, organization, or key in " cite$ * warning$
    	      ""
    	    }
    	    { key sortify }
    	  if$
    	}
    	{ "The " #4 organization chop.word sortify }
          if$
        }
        { author sort.format.names }
      if$
    }
    
    FUNCTION {editor.organization.sort}
    { editor empty$
        { organization empty$
    	{ key empty$
    	    { "to sort, need editor, organization, or key in " cite$ * warning$
    	      ""
    	    }
    	    { key sortify }
    	  if$
    	}
    	{ "The " #4 organization chop.word sortify }
          if$
        }
        { editor sort.format.names }
      if$
    }
    
    FUNCTION {presort}
    { calc.label ""
      type$ "book" =
      type$ "inbook" =
      or
        'author.editor.sort
        { type$ "proceedings" =
    	'editor.organization.sort
    	{ type$ "manual" =
    	    'author.organization.sort
    	    'author.sort
    	  if$
    	}
          if$
        }
      if$
      *
      "    "
      *
      sortyear field.or.null sortify
      *
      year field.or.null sortify
      *
      "    "
      *
      title field.or.null
      sort.format.title
      *
      #1 entry.max$ substring$
      'sort.key$ :=
    }
    
    ITERATE {presort}
    
    SORT
    
    STRINGS {
      longest.label last.sort.label next.extra prev.author this.author
    }
    
    INTEGERS { longest.label.width last.extra.num }
    
    FUNCTION {initialize.longest.label}
    { "" 'longest.label :=
      #0 int.to.chr$ 'last.sort.label :=
      "" 'next.extra :=
      #0 'longest.label.width :=
      #0 'last.extra.num :=
      "abcxyz" 'prev.author :=
      "" 'this.author :=
    }
    
    FUNCTION {forward.pass}
    { last.sort.label sort.label =
        { last.extra.num #1 + 'last.extra.num :=
          last.extra.num int.to.chr$ 'extra.label :=
        }
        { "a" chr.to.int$ 'last.extra.num :=
          "" 'extra.label :=
          sort.label 'last.sort.label :=
        }
      if$
      author empty$ { editor empty$ { "" } 'editor if$ } 'author if$
      'this.author :=
    }
    
    FUNCTION {reverse.pass}
    { next.extra "b" =
        { "a" 'extra.label := }
        'skip$
      if$
      label extra.label * 'label :=
      label width$ longest.label.width >
        { label 'longest.label :=
          label width$ 'longest.label.width :=
        }
        'skip$
      if$
      extra.label 'next.extra :=
    }
    
    EXECUTE {initialize.longest.label}
    
    ITERATE {forward.pass}
    
    REVERSE {reverse.pass}
    
    FUNCTION {begin.bib}
    { et.al.char.used
        { "\providecommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
        'skip$
      if$
      preamble$ empty$
        'skip$
        { preamble$ write$ newline$ }
      if$
      "\providecommand{\bysame}{\leavevmode\hbox to3em{\hrulefill}\thinspace}"
        write$ newline$
      "\providecommand{\noopsort}[1]{}"
        write$ newline$
      "\providecommand{\mr}[1]{\href{http://www.ams.org/mathscinet-getitem?mr=#1}{MR~#1}}"
        write$ newline$
      "\providecommand{\zbl}[1]{\href{http://www.zentralblatt-math.org/zmath/en/search/?q=an:#1}{Zbl~#1}}"
        write$ newline$
      "\providecommand{\jfm}[1]{\href{http://www.emis.de/cgi-bin/JFM-item?#1}{JFM~#1}}"
        write$ newline$
      "\providecommand{\arxiv}[1]{\href{http://www.arxiv.org/abs/#1}{arXiv~#1}}"
        write$ newline$
      "\providecommand{\doi}[1]{\url{https://doi.org/#1}}"
        write$ newline$
      "\providecommand{\MR}{\relax\ifhmode\unskip\space\fi MR }"
        write$ newline$
      "% \MRhref is called by the amsart/book/proc definition of \MR."
        write$ newline$
      "\providecommand{\MRhref}[2]{%"
        write$ newline$
      "  \href{http://www.ams.org/mathscinet-getitem?mr=#1}{#2}"
        write$ newline$
      "}"
        write$ newline$
      "\providecommand{\href}[2]{#2}"
        write$ newline$
      "\begin{thebibliography}{"  longest.label  * "}" *
        write$ newline$
    }
    
    EXECUTE {begin.bib}
    
    EXECUTE {init.state.consts}
    
    ITERATE {call.type$}
    
    FUNCTION {end.bib}
    { newline$
      "\end{thebibliography}" write$ newline$
    }
    
    EXECUTE {end.bib}
    %% \CharacterTable
    %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
    %%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
    %%   Digits        \0\1\2\3\4\5\6\7\8\9
    %%   Exclamation   \!     Double quote  \"     Hash (number) \#
    %%   Dollar        \$     Percent       \%     Ampersand     \&
    %%   Acute accent  \'     Left paren    \(     Right paren   \)
    %%   Asterisk      \*     Plus          \+     Comma         \,
    %%   Minus         \-     Point         \.     Solidus       \/
    %%   Colon         \:     Semicolon     \;     Less than     \<
    %%   Equals        \=     Greater than  \>     Question mark \?
    %%   Commercial at \@     Left bracket  \[     Backslash     \\
    %%   Right bracket \]     Circumflex    \^     Underscore    \_
    %%   Grave accent  \`     Left brace    \{     Vertical bar  \|
    %%   Right brace   \}     Tilde         \~}
    
  • aomart.cls26 KBVendored from mirrors.ctan.org on 2026-08-19.
    %%
    %% This is file `aomart.cls',
    %% generated with the docstrip utility.
    %%
    %% The original source files were:
    %%
    %% aomart.dtx  (with options: `class')
    %% 
    %% IMPORTANT NOTICE:
    %% 
    %% For the copyright see the source file.
    %% 
    %% Any modified versions of this file must be renamed
    %% with new filenames distinct from aomart.cls.
    %% 
    %% For distribution of the original source see the terms
    %% for copying and modification in the file aomart.dtx.
    %% 
    %% This generated file may be distributed as long as the
    %% original source files, as listed above, are part of the
    %% same distribution. (The sources need not necessarily be
    %% in the same archive or directory.)
    %% \CharacterTable
    %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
    %%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
    %%   Digits        \0\1\2\3\4\5\6\7\8\9
    %%   Exclamation   \!     Double quote  \"     Hash (number) \#
    %%   Dollar        \$     Percent       \%     Ampersand     \&
    %%   Acute accent  \'     Left paren    \(     Right paren   \)
    %%   Asterisk      \*     Plus          \+     Comma         \,
    %%   Minus         \-     Point         \.     Solidus       \/
    %%   Colon         \:     Semicolon     \;     Less than     \<
    %%   Equals        \=     Greater than  \>     Question mark \?
    %%   Commercial at \@     Left bracket  \[     Backslash     \\
    %%   Right bracket \]     Circumflex    \^     Underscore    \_
    %%   Grave accent  \`     Left brace    \{     Vertical bar  \|
    %%   Right brace   \}     Tilde         \~}
    \NeedsTeXFormat{LaTeX2e}
    \ProvidesClass{aomart}
    [2026/08/12 v1.38 Typesetting articles for the Annals of Mathematics]
    \long\def\aom@size@warning#1{%
      \ClassWarning{aomart}{Size-changing option #1 will not be
        honored}}%
    \DeclareOption{8pt}{\aom@size@warning{\CurrentOption}}%
    \DeclareOption{9pt}{\aom@size@warning{\CurrentOption}}%
    \DeclareOption{10pt}{\aom@size@warning{\CurrentOption}}%
    \DeclareOption{11pt}{\aom@size@warning{\CurrentOption}}%
    \DeclareOption{12pt}{\aom@size@warning{\CurrentOption}}%
    \newif\if@aom@manuscript@mode
    \@aom@manuscript@modefalse
    \DeclareOption{manuscript}{\@aom@manuscript@modetrue}
    \newif\if@aom@screen@mode
    \@aom@screen@modefalse
    \DeclareOption{screen}{\@aom@screen@modetrue}
    \newif\if@aom@olddoi
    \@aom@olddoifalse
    \DeclareOption{olddoi}{\@aom@olddoitrue}
    \newif\if@aom@doiMMXVI
    \@aom@doiMMXVIfalse
    \DeclareOption{doi2016}{\@aom@doiMMXVItrue}
    \newif\if@aom@oldkeywords
    \@aom@oldkeywordsfalse
    \DeclareOption{oldkeywords}{\@aom@oldkeywordstrue}
    \newif\if@aom@printscheme
    \@aom@printschemefalse
    \DeclareOption{printscheme}{\@aom@printschemetrue}
    \DeclareOption*{\PassOptionsToClass{\CurrentOption}{amsart}}
    \InputIfFileExists{aomart.cfg}{%
      \ClassInfo{aomart}{%
        Loading configuration file aomart.cfg}}{%
      \ClassInfo{aomart}{%
        Configuration file aomart.cfg is not found}}
    \ProcessOptions\relax
    \let\@makefnmark@kernel\@makefnmark
    \LoadClass[11pt]{amsart}
    \let\@makefnmark\@makefnmark@kernel
    \def\@citex[#1]#2{\leavevmode
      \@tempcnta=0
      \@for\@citeb:=#2\do{\advance\@tempcnta by 1}%
      \@tempcntb=1
      \let\@citea\@empty
      \@cite{\@for\@citeb:=#2\do
        {\@citea\def\@citea{], [}%
         \advance\@tempcntb by 1
         \ifnum\@tempcnta=\@tempcntb\relax
            \ifnum\@tempcnta=2\relax
               \def\@citea{] and~[}%
            \else
               \def\@citea{], and~[}%
             \fi
         \fi
         \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
         \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
         \@ifundefined{b@\@citeb}{\hbox{\reset@font\bfseries ?}%
           \G@refundefinedtrue
           \@latex@warning
             {Citation `\@citeb' on page \thepage \space undefined}}%
           {\@cite@ofmt{\csname b@\@citeb\endcsname}}}}{#1}}
    \RequirePackage{fancyhdr, lastpage, ifpdf, graphicx}
    \RequirePackage{zref-savepos}
    \RequirePackage[breaklinks,colorlinks]{hyperref}
    \if@aom@screen@mode
    \hypersetup{linkcolor=blue,citecolor=blue,
      urlcolor=blue}%
    \else\if@aom@manuscript@mode
    \hypersetup{linkcolor=blue,citecolor=blue,
      urlcolor=blue}%
    \else
    \hypersetup{linkcolor=black,citecolor=black,
      urlcolor=black}%
    \fi\fi
    \urlstyle{rm}
    \RequirePackage{environ}
    \def\@aom@by{By}
    \def\@aom@and{and}
    \AtBeginDocument{\@ifpackageloaded{babel}{%
      \addto\captionsfrench{\def\@aom@by{Par}\def\@aom@and{et}}%
      \addto\captionsgerman{\def\@aom@by{Von}\def\@aom@and{und}}%
      \addto\captionsenglish{\def\@aom@by{By}\def\@aom@and{and}}}{}}
    \RequirePackage{yhmath}
    \DeclareSymbolFont{largesymbols}{OMX}{yhex}{m}{n}
    \xdef\widehat#1{\noexpand\@mathmeasure\z@\textstyle{#1}%
      \noexpand\ifdim\noexpand\wd\z@>\tw@ em%
      \mathaccent"0\hexnumber@\symAMSb 5B{#1}%
      \noexpand\else\mathaccent"0362{#1}\noexpand\fi}
    \xdef\widetilde#1{\noexpand\@mathmeasure\z@\textstyle{#1}%
      \noexpand\ifdim\noexpand\wd\z@>\tw@ em%
      \mathaccent"0\hexnumber@\symAMSb 5D{#1}%
      \noexpand\else\mathaccent"0365{#1}\noexpand\fi}
    \IfFileExists{cmtiup.sty}{%
      \RequirePackage{cmtiup}}{%
      \ClassWarning{aomart}{The package mdputu is not found.\MessageBreak
        You need this package to get italics with upright digits!}}
    \def\specialdigits{}%
    \let\sishape=\itshape
    \let\textsi=\textit
    \def\@typesizes{%
      \or{\@vipt}{9}\or{\@viipt}{9}\or{\@viiipt}{9}\or{\@ixpt}{12}%
      \or{\@xpt}{13}%
      \or{\@xipt}{14}% normalsize
      \or{\@xiipt}{15}\or{13}{17}\or{\@xviipt}{20}%
      \or{19}{23.2}\or{22}{27.8}}%
    \normalsize \linespacing=\baselineskip
    \let\widebar\overline
    \setlength{\textwidth}{31pc}
    \setlength{\textheight}{48pc}
    \oddsidemargin=.65in
    \evensidemargin=.65in
    \setlength{\topskip}{12pt}
    \setlength{\abovedisplayskip}{6.95pt plus3.5pt minus 3pt}
    \setlength{\belowdisplayskip}{6.95pt plus4.5pt minus 3pt}
    \setlength{\skip\footins}{20pt}
    \setlength{\dimen\footins}{3in}
    \setlength\footskip{30pt}
    \setlength{\parindent}{22pt}
    \setlength{\parskip}{\z@}
    \widowpenalty=10000
    \clubpenalty=10000
    \AtBeginDocument{%
      \labelsep=5pt\relax
      \settowidth\leftmargini{\labelenumi\hskip\labelsep}%
      \leftmargin=\leftmargini
      \labelwidth=\leftmargini \advance\labelwidth-\labelsep
      \@listi}
    \renewenvironment{itemize}{%
      \ifnum\@itemdepth>3 \@toodeep
      \else \advance\@itemdepth\@ne
        \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
        \list{\csname\@itemitem\endcsname}%
        {\settowidth\leftmargin{\labelitemi\hskip\labelsep}%
          \def\makelabel##1{\hss\llap{\upshape##1}}}%
      \fi
    }{%
      \endlist
    }
    \setlength{\headsep}{14pt}
    \setlength{\headheight}{18.0pt}
    \renewcommand{\headrulewidth}{0pt}
    \renewcommand{\footrulewidth}{0pt}
    \if@aom@manuscript@mode
      \newsavebox{\@aom@linecount}
      \savebox{\@aom@linecount}[4em][t]{\parbox[t]{4em}{%
          \@tempcnta\@ne\relax
          \loop{\underline{\scriptsize\the\@tempcnta}}\\
          \advance\@tempcnta by \@ne\ifnum\@tempcnta<43\repeat}}
    \fi
    \pagestyle{fancy}
    \fancyhead{}
    \fancyfoot{}
    \fancyhead[CO]{\scriptsize\shorttitle}
    \fancyhead[RO,LE]{\footnotesize\thepage}
    \if@aom@manuscript@mode
      \fancyhead[LE]{\footnotesize\thepage\begin{picture}(0,0)%
          \put(-26,-25){\usebox{\@aom@linecount}}%
        \end{picture}}
      \fancyhead[LO]{\begin{picture}(0,0)%
          \put(-21,-25){\usebox{\@aom@linecount}}%
        \end{picture}}
      \fancyfoot[C]{\scriptsize Proof: page numbers may be temporary}
    \fi
    \fancyhead[CE]{\scriptsize\MakeUppercase\shortauthors}
    \fancypagestyle{firstpage}{%
      \fancyhf{}%
      \if@aom@manuscript@mode
        \lhead{\begin{picture}(0,0)%
            \put(-21,-25){\usebox{\@aom@linecount}}%
          \end{picture}}
      \fi
      \chead{\scriptsize%
        \href{\@annalsurl}{Annals of Mathematics} \textbf{\currentvolume}
        (\currentyear),
        \start@page%
        \def\tempa{\pageref{LastPage}}%
        \edef\tempb{\start@page}%
        \ifx\tempa\end@page
          \edef\tempa{\HyPsd@@@pageref{LastPage}}%
        \else
           \edef\tempa{\end@page}%
        \fi
        \ifx\tempa\tempb\else--\end@page\fi\\
      \ifx\@doinumber\@empty\else
      \edef\@doinumber{\@doinumber}%
      \expandafter\doi\expandafter{\@doinumber}\fi}%
       \cfoot{\footnotesize\thepage}}%
    \def\annalsurl#1{\gdef\@annalsurl{#1}}
    \annalsurl{http://annals.math.princeton.edu/about}
    \@onlypreamble{\title}
    \@onlypreamble{\author}
    \@onlypreamble{\contrib}
    \@onlypreamble{\email}
    \@onlypreamble{\address}
    \@onlypreamble{\curraddr}
    \@onlypreamble{\urladdr}
    \@onlypreamble{\orcid}
    \@onlypreamble{\givenname}
    \@onlypreamble{\fulladdress}
    \@onlypreamble{\surname}
    \@onlypreamble{\thanks}
    \@onlypreamble{\keyword}
    \@onlypreamble{\subject}
    \@onlypreamble{\received}
    \@onlypreamble{\revised}
    \@onlypreamble{\accepted}
    \@onlypreamble{\published}
    \@onlypreamble{\publishedonline}
    \@onlypreamble{\proposed}
    \@onlypreamble{\seconded}
    \@onlypreamble{\corresponding}
    \@onlypreamble{\editor}
    \@onlypreamble{\version}
    \@onlypreamble{\volumenumber}
    \@onlypreamble{\issuenumber}
    \@onlypreamble{\publicationyear}
    \@onlypreamble{\copyrightnote}
    \@onlypreamble{\copyrighyear}
    \@onlypreamble{\papernumber}
    \@onlypreamble{\startpage}
    \@onlypreamble{\endpage}
    \@onlypreamble{\doinumber}
    \@onlypreamble{\mrnumber}
    \@onlypreamble{\zblnumber}
    \@onlypreamble{\arxivnumber}
    \def\@names{}
    \def\givenname#1{\g@addto@macro\@names{givenname=#1;}}
    \def\surname#1{\g@addto@macro\@names{surname=#1;}}
    \def\fulladdress#1{\g@addto@macro\@names{fulladdress=#1;}}
    \renewcommand{\author}[2][]{%
      \ifx\@empty\authors
        \gdef\authors{#2}%
        \g@addto@macro\@names{author=#2;}%
      \else
        \g@addto@macro\authors{\and#2}%
        \g@addto@macro\@names{\and author=#2;}%
      \fi
      \gdef\aom@current@orcid@target{\authors}%
      \@ifnotempty{#1}{%
        \ifx\@empty\shortauthors
          \gdef\shortauthors{#1}%
        \else
          \g@addto@macro\shortauthors{\and#1}%
        \fi
      }%
      \g@addto@macro\addresses{\author{#2}}%
    }
    \edef\author{\@nx\@dblarg
      \@xp\@nx\csname\string\author\endcsname}
    \def\@currentcontribution{}
    \def\@currentcontributors{}
    \def\contribs{}
    \newif\if@startcontribgroup
    \@startcontribgroupfalse
    \def\@processcurrentcontribgroup{%
      \ifx\@currentcontributors\@empty\else
        \def\@@and{{\upshape \@aom@and}}%
        \author@andify\@currentcontributors
        \ifx\contribs\@empty\else
          \g@addto@macro\contribs{\and}%
        \fi
        \expandafter\g@addto@macro\expandafter\contribs
        \expandafter{\@currentcontribution}%
        \g@addto@macro\contribs{\space}%
        \expandafter\g@addto@macro\expandafter\contribs
        \expandafter{\@currentcontributors}%
      \fi
    }
    \renewcommand{\contrib}[2][]{%
      \def\@tempa{#1}%
      \gdef\aom@current@orcid@target{\@currentcontributors}%
      \@startcontribgrouptrue
      \ifx\@tempa\@empty\relax
        \ifx\@currentcontribution\@empty\relax
          \ClassError{aomart}{You must define contribution for
            contributors}{The first \contrib command must have the
            optional argument indicating the contribution}%
        \else
          \@startcontribgroupfalse
        \fi
      \fi
      \ifx\@currentcontribution\@tempa\relax
        \@startcontribgroupfalse
      \fi
      \if@startcontribgroup
         \@processcurrentcontribgroup
         \gdef\@currentcontribution{#1}%
         \gdef\@currentcontributors{#2}%
      \else
        \g@addto@macro\@currentcontributors{\and#2}%
      \fi
      \g@addto@macro\@names{\and contributor=#2;}%
      \g@addto@macro\@names{role=}%
      \expandafter\g@addto@macro\expandafter%
      \@names\expandafter{\@currentcontribution}%
      \g@addto@macro\@names{;}%
      \g@addto@macro\addresses{\author{#2}}%
    }
    \renewcommand{\email}[2][]{%
      \g@addto@macro\addresses{\email{#1}{#2}}%
      \g@addto@macro\@names{email=#2;}%
    }
    \renewcommand{\urladdr}[2][]{%
      \g@addto@macro\addresses{\urladdr{#1}{#2}}%
      \g@addto@macro\@names{urladdr=#2;}%
    }
    \def\aom@current@orcid@target{\authors}
    \newcommand{\orcid}[1]{%
      \g@addto@macro\addresses{\orcid{#1}}%
      \g@addto@macro\@names{orcid=#1;}%
      \expandafter\g@addto@macro\aom@current@orcid@target{\aom@orcidlink{#1}}%
    }
    \newcommand\aom@orcidlink[1]{\kern0.2ex\href{https://orcid.org/#1}{\includecolorgraphics[height=2ex]{aom_orcid_logo}{aom_orcid_logo_bw}}}
    \def\keyword#1{\ifx\@keywords\@empty\gdef\@keywords{#1}\else
      \g@addto@macro\@keywords{, #1}\fi}
    \let\@primarysubjects\@empty
    \let\@secondarysubjects\@empty
    \let\@primaryscheme\@empty
    \let\@secondaryschme\@empty
    \def\subject#1#2#3{%
      \expandafter\ifx\csname @#1subjects\endcsname\@empty\relax
         \expandafter\gdef\csname @#1subjects\endcsname{#3}%
      \else
         \expandafter\g@addto@macro\csname @#1subjects\endcsname{, #3}%
      \fi
      \if@aom@printscheme
      \expandafter\g@addto@macro\csname @#1subjects\endcsname{%
        ~(#2)}%
      \fi}
    \def\formatdate#1{\@formatdate#1\@endformatdate}
    \def\@formatdate#1-#2-#3\@endformatdate{%
      \@tempcnta=#3\relax
      \ifcase#2\or
      January\or February\or March\or April\or May\or June\or
      July\or August\or September\or October\or November\or December\fi
      \space\the\@tempcnta,\space#1}
    \def\received#1{\def\@received{#1}}
    \let\@received\@empty
    \def\revised#1{\def\@revised{#1}}
    \let\@revised\@empty
    \def\accepted#1{\def\@accepted{#1}}
    \let\@accepted\@empty
    \def\published#1{\def\@published{#1}}
    \let\@published\@empty
    \def\publishedonline#1{\def\@publishedonline{#1}}
    \let\@publishedonline\@empty
    \def\volumenumber#1{\def\currentvolume{#1}}
    \def\issuenumber#1{\def\currentissue{#1}}
    \def\publicationyear#1{\def\currentyear{#1}}
    \def\papernumber#1{\def\currentpaper{#1}}
    \papernumber{0000}
    \def\startpage#1{\pagenumbering{arabic}\setcounter{page}{#1}%
      \def\start@page{#1}%
      \ifnum\c@page<\z@ \pagenumbering{roman}\setcounter{page}{-#1}%
        \def\start@page{\romannumeral#1}%
      \fi}
    \def\endpage#1{\def\@tempa{#1}%
      \ifx\@tempa\@empty\def\end@page{\pageref{LastPage}}%
      \else\def\end@page{#1}\fi}
    \def\pagespan#1#2{\startpage{#1}\endpage{#2}}
    \pagespan{1}{}
    \def\g@addto@abstract#1{\g@addto@macro{\@aom@abstract}{#1}}
    \long\def\@aom@abstract{}
    \long\def\@getabstract#1{%
      \bgroup
        \ifx\languagename\undefined
          \def\languagename{english}%
        \fi
        \g@addto@abstract{<begin abstract }%
        \expandafter\g@addto@abstract\expandafter{\languagename>}%
        \g@addto@macro\@aom@abstract{#1}%
        \g@addto@abstract{<end abstract }%
        \expandafter\g@addto@abstract\expandafter{\languagename>}%
      \egroup
      \ifx\maketitle\relax
        \ClassWarning{aomart}{Abstract should precede
          \protect\maketitle\space in AMS derived classes}%
      \fi
      \global\setbox\abstractbox=\vtop\bgroup%
        \box\abstractbox
        \vglue1pc%
        {\centering\normalfont\normalsize\bfseries\abstractname\par\vglue1pc}%
        \list{}{\labelwidth\z@%
          \leftmargin3pc \rightmargin\leftmargin%
          \listparindent\normalparindent \itemindent\normalparindent%
          \parsep\z@ \@plus\p@%
          \let\fullwidthdisplay\relax%
        }%
        \item[]\normalfont\Small#1
      \endlist\egroup}
    \renewenvironment{abstract}{\Collect@Body\@getabstract}{%
      \ifx\@setabstract\relax\@setabstracta\fi}
    \let\proposed\@gobble
    \let\seconded\@gobble
    \let\corresponding\@gobble
    \let\version\@gobble
    \def\doinumber#1{\gdef\@doinumber{#1}}
    \doinumber{10.4007/annals.\currentyear.\currentvolume.\currentissue.\currentpaper}
    \def\mrnumber#1{\gdef\@mrnumber{#1}}
    \mrnumber{}
    \def\zblnumber#1{\gdef\@zblnumber{#1}}
    \zblnumber{}
    \def\arxivnumber#1{\gdef\@arxivnumber{#1}}
    \arxivnumber{}
    \def\copyrightyear#1{\def\@copyrightyear{#1}}
    \copyrightyear{}
    \def\copyrightnote#1{\def\@copyrightnote{#1}}
    \copyrightnote{\textcopyright~%
      \ifx\@empty\@copyrightyear\currentyear\else\@copyrightyear\fi~%
      Department of Mathematics, Princeton University}
    \newwrite\@mainrpi
    \def\aom@write@paper@info{%
      \bgroup
      \if@filesw
        \openout\@mainrpi\jobname.rpi%
        \def\and{\string\and\space}%
        \ifx\r@LastPage\@undefined
           \edef\@tempa{\start@page}%
        \else
           \def\@tempc##1##2##3##4##5{##2}%
           \edef\@tempa{\expandafter\@tempc\r@LastPage}%
       \fi
       \ifx\languagename\undefined
         \def\languagename{english}%
       \fi
       \protected@write\@mainrpi{}%
        {\@percentchar authors=\authors}%
       \protected@write\@mainrpi{}%
        {\@percentchar authors.information={\@names}}%
       \protected@write\@mainrpi{}%
        {\@percentchar title=\@title}%
       \protected@write\@mainrpi{}%
        {\@percentchar year=\currentyear}%
       \protected@write\@mainrpi{}%
        {\@percentchar volume=\currentvolume}%
       \protected@write\@mainrpi{}%
        {\@percentchar issue=\currentissue}%
       \protected@write\@mainrpi{}%
        {\@percentchar paper=\currentpaper}%
       \protected@write\@mainrpi{}%
        {\@percentchar startpage=\start@page}%
       \protected@write\@mainrpi{}%
        {\@percentchar endpage=\@tempa}%
       \protected@write\@mainrpi{}%
        {\@percentchar doi=\@doinumber}%
       \ifx\@zblnumber\@empty\else
       \protected@write\@mainrpi{}%
        {\@percentchar zbl=\@zblnumber}%
       \fi
       \ifx\@mrnumber\@empty\else
       \protected@write\@mainrpi{}%
        {\@percentchar mr=\@mrnumber}%
       \fi
       \ifx\@arxivnumber\@empty\else
       \protected@write\@mainrpi{}%
        {\@percentchar arxiv=\@arxivnumber}%
       \fi
       \protected@write\@mainrpi{}%
        {\@percentchar subjects=Primary \@primarysubjects; Secondary:
          \@secondarysubjects}%
       \protected@write\@mainrpi{}%
        {\@percentchar keywords=\@keywords}%
       \protected@write\@mainrpi{}%
        {\@percentchar abstract=\@aom@abstract}%
       \protected@write\@mainrpi{}%
         {\@percentchar articlelanguage=\languagename}%
       \def\paperUrl{https://annals.math.princeton.edu/\currentyear/\currentvolume-\currentissue/p\currentpaper}%
       \protected@write\@mainrpi{}%
         {\@percentchar paperUrl=\paperUrl}%
        \AtEndDocument{\closeout\@mainrpi}%
        \fi
    \egroup}
    \def\@maketitle@hook{\aom@write@paper@info\global\let\@maketitle@hook\@empty}
    \def\@settitle{\begin{center}%
      \baselineskip20\p@\relax
        \bfseries\LARGE
      \@title
      \ifpdf
        \hypersetup{pdftitle=\@title}%
      \fi
      \end{center}%
    }
    \def\@setauthors{%
      \ifx\authors\@empty\relax\else
        \begingroup
        \def\thanks{\protect\thanks@warning}%
        \trivlist
        \centering\footnotesize \@topsep30\p@\relax
        \advance\@topsep by -\baselineskip
        \item\relax
        \def\@@and{{\upshape \@aom@and}}%
        \author@andify\authors
        \ifpdf
          \bgroup
             \def\aom@orcidlink##1{}%
             \xdef\@tempa{\authors}%
          \egroup
          \hypersetup{pdfauthor=\@tempa}%
        \fi
        \def\\{\protect\linebreak}%
        \small \@aom@by{} \scshape\authors%
        \@processcurrentcontribgroup
        \ifx\@empty\contribs
        \else
          ,\penalty-3 \space \@setcontribs
        \fi
        \endtrivlist
        \endgroup
        \fi}
    \def\@setcontribs{%
        \def\@@and{{\upshape \@aom@and}}%
        \author@andify\contribs
        \contribs
    }
    \def\@adminfootnotes{%
      \let\@makefnmark\relax  \let\@thefnmark\relax
      \ifx\@empty\@date\else \@footnotetext{\@setdate}\fi
      \ifx\@empty\@subjclass\else \@footnotetext{\@setsubjclass}\fi
      \ifx\@empty\@keywords\else\@setkeywords\fi
      \ifx\@empty\@primarysubjects
         \ifx\@empty\@secondarysubjects
         \else\@setsubjects\fi
      \else\@setsubjects\fi
      \ifx\@empty\thankses\else \@footnotetext{%
        \def\par{\let\par\@par}\@setthanks}%
      \fi
      \ifx\@empty\@copyrightnote\else \@footnotetext{%
        \def\par{\let\par\@par}\@copyrightnote\@addpunct.}%
      \fi
    }
    \def\@setkeywords{%
        \ifpdf
          \hypersetup{pdfkeywords=\@keywords}%
        \fi
        \if@aom@oldkeywords\else
        \@footnotetext{Keywords: \@keywords}%
        \fi
    }
    \def\@setsubjects{%
      \let\@subjects\@empty
       \ifx\@primarysubjects\@empty\else
         \edef\@subjects{Primary:~\@primarysubjects}%
        \fi
       \ifx\@secondarysubjects\@empty\else
         \ifx\@primarysubjects\@empty
           \edef\@subjects{Secondary:~\@secondarysubjects}%
         \else
           \edef\@subjects{\@subjects; Secondary:~\@secondarysubjects}%
         \fi
        \fi
        \ifpdf
          \hypersetup{pdfsubject=\@subjects}%
        \fi
        \if@aom@oldkeywords\else
        \@footnotetext{AMS Classification:~\@subjects.}%
        \fi
    }
    \def\@@and{\MakeLowercase{\@aom@and}}
    \def\enddoc@text{%
      \ifx\@empty\@translators \else\@settranslators\fi
      \ifx\@empty\@received \else\@setreceived\fi
      \ifx\@empty\@revised \else\@setrevised\fi
      \ifx\@empty\addresses \else\@setaddresses\fi}
    \def\@setreceived{{\centering(Received: \@received)\par}}
    \def\@setrevised{{\centering(Revised: \@revised)\par}}
    \def\@setaccepted{{\centering(Accepted: \@accepted)\par}}
    \def\@setpublished{{\centering(Published: \@published)\par}}
    \def\@setpublishedonline{{\centering(Published online: \@publishedonline)\par}}
    \def\emailaddrname{{\itshape E-mail}}
    \def\@setaddresses{\par
      \nobreak \begingroup
    \footnotesize
      \def\author##1{\goodbreak\addvspace\bigskipamount{\scshape##1\par\nobreak}}%
      \def\\{\unskip, \ignorespaces}%
      \interlinepenalty\@M
      \def\address##1##2{\begingroup\nobreak
        \par\hangindent=22pt\hangafter=0\parindent=0pt
        \@ifnotempty{##1}{(\ignorespaces##1\unskip) }%
        {\ignorespaces##2}\par\endgroup}%
      \def\curraddr##1##2{\begingroup
        \@ifnotempty{##2}{\nobreak\par
              \par\hangindent=22pt\hangafter=0\parindent=0pt\curraddrname
          \@ifnotempty{##1}{, \ignorespaces\scshape##1\unskip}\hskip0.2em:\space
          ##2\par}\endgroup}%
      \def\email##1##2{\begingroup
        \@ifnotempty{##2}{\nobreak
          \par\hangindent=22pt\hangafter=0\parindent=0pt\emailaddrname
          \@ifnotempty{##1}{, \ignorespaces##1\unskip}\hskip0.2em:\space
          \href{mailto:##2}{\nolinkurl{##2}}\par\nobreak}\endgroup}%
      \def\urladdr##1##2{\begingroup
        \@ifnotempty{##2}{\nobreak
          \par\hangindent=22pt\hangafter=0\parindent=0pt%
          \@ifnotempty{##1}{, \ignorespaces##1\unskip}%
          \url{##2}\par\nobreak}\endgroup}%
      \def\orcid##1{\begingroup
        \@ifnotempty{##1}{\nobreak
          \par\hangindent=22pt\hangafter=0\parindent=0pt%
          \url{https://orcid.org/##1}\par\nobreak}\endgroup}%
      \addresses
      \endgroup
    }
    \renewcommand\contentsnamefont{\bfseries}
    \def\section{\@startsection{section}{1}%
      \z@{.7\linespacing\@plus\linespacing}{.5\linespacing}%
      {\normalfont\bfseries\centering}}
    \def\subsection{\@startsection{subsection}{2}%
      {\parindent}{.5\linespacing}{-.5em}%
      {\normalfont\itshape}}
    \def\oldsubsections{%
    \gdef\subsection{\@startsection{subsection}{2}%
      {\parindent}{.5\linespacing\@plus.7\linespacing}{-.5em}%
      {\normalfont\itshape}}}
    \def\subsubsection{\@startsection{subsubsection}{3}%
      {\parindent}{.5\linespacing}{-.5em}%
      {\normalfont\itshape}}
    \providecommand\Hy@AlphNoErr[1]{%
      \ifnum\value{#1}>26 %
        Alph\number\value{#1}%
      \else
        \ifnum\value{#1}<1 %
          Alph\number\value{#1}%
        \else
          \Alph{#1}%
        \fi
      \fi
    }%
    \def\appendix{\par\c@section\z@ \c@subsection\z@
      \gdef\theHsection{\Hy@AlphNoErr{section}}%
       \let\sectionname\appendixname
       \def\thesection{{\upshape\@Alph\c@section}}}
    \def\@captionheadfont{\normalfont}
    \newtheoremstyle{plain}{0.5\linespacing}{0.5\linespacing}{\sishape}%
       {\parindent}{\scshape}{.}{0.5em}%
       {\thmname{#1}\thmnumber{ #2}\thmnote{\normalfont{} (#3)}}
    \newtheoremstyle{definition}{0.5\linespacing}{0.5\linespacing}%
       {\upshape}{\parindent}%
       {\sishape}{.}{0.5em}%
       {\thmname{#1}\thmnumber{ #2}\thmnote{\normalfont{} (#3)}}
    \newtheoremstyle{remark}{0.5\linespacing}{0.5\linespacing}%
       {\upshape}{\parindent}%
       {\sishape}{.}{0.5em}%
       {\thmname{#1}\thmnumber{ #2}\thmnote{\normalfont{} (#3)}}
    \renewcommand{\newtheorem}{\@ifstar{\@aom@newthm@star}{\@aom@newthm}}
    \def\@aom@newthm@star{\@ifnextchar[{\@aom@newthm@star@}{\@aom@newthm@star@[]}}
    \def\@aom@newthm{\@ifnextchar[{\@aom@newthm@}{\@aom@newthm@[]}}
    \def\@aom@newthm@star@[#1]{\@xnthm *}
    \def\@aom@newthm@[#1]{\@xnthm \relax}
    \renewenvironment{proof}[1][\proofname]{\par
      \pushQED{\qed}%
      \normalfont \topsep6\p@\@plus6\p@\relax
      \trivlist
      \item[\hskip\labelsep\hskip\parindent
            \itshape
        #1\@addpunct{.}]\ignorespaces
    }{%
      \popQED\endtrivlist\@endpefalse
    }
    \def\repeatedauthors#1{\ClassWarning{aomart}{The command is obsolte}#1}
    \let\bysame@@orig=\bysame
    \def\bysame{\ClassWarning{aomart}{We no longer omit
        repeated authors}\bysame@@orig}
    \def\doi#1{%
      \if@aom@doiMMXVI
         \url{http://dx.doi.org/#1}%
      \else
         \if@aom@olddoi
             \href{http://dx.doi.org/#1}{doi: \path{#1}}%
          \else
              \url{https://doi.org/#1}%
          \fi
      \fi}
    \def\mr#1{\href{http://www.ams.org/mathscinet-getitem?mr=#1}{MR~\path{#1}}}
    \def\zbl#1{\href{http://www.zentralblatt-math.org/zmath/en/search/?q=an:#1}{Zbl~\path{#1}}}
    \def\arxiv#1{\href{http://www.arxiv.org/abs/#1}{arXiv~\path{#1}}}
    \def\jfm#1{\href{http://www.emis.de/cgi-bin/JFM-item?#1}{JFM~\path{#1}}}
    \renewcommand{\bibliofont}{\small}
    \newcounter{aom@EC@counter}
    \NewDocumentCommand\EditorialComment{O{default} +m O{0pt}}{%
      \if@aom@manuscript@mode\bgroup
      \expandafter\ifx\csname EditorialComment@#1\endcsname\relax\else
        \stepcounter{aom@EC@counter}%
        \setlength\unitlength{1sp}%
        \zsavepos{aom@EC@position\arabic{aom@EC@counter}}%
        \begin{picture}(0,0)%
          \put(\the\dimexpr
          -\zposx{aom@EC@position\arabic{aom@EC@counter}}sp + 15pt,#3){%
            \parbox{80pt}{\raggedright
              \normalfont\scriptsize\raggedright\expandafter\color\expandafter{%
                \csname EditorialComment@#1\endcsname}#2}}%
        \end{picture}%
      \fi
      \egroup
    \fi}
    \newcommand\ECSelect[2][black]{\if@aom@manuscript@mode
        \expandafter\gdef\csname
        EditorialComment@#2\endcsname{#1}%
      \fi}
    \AtBeginDocument{\ECSelect{default}}
    \newcommand\Highlight[2][default]{%
      \expandafter\ifx\csname Highlight@#1\endcsname\relax
      #2\else
      \csname Highlight@#1\endcsname{#2}\fi}
    \newcommand\HSelect[2][red]{\if@aom@manuscript@mode
      \@for\TC@level:=#2\do{\expandafter
        \gdef\csname Highlight@\TC@level\endcsname##1{\bgroup
          \Hy@colorlinksfalse
          \def\Hy@colorlink####1{\begingroup}%
          \def\Hy@endcolorlink{\endgroup}%
          \color{#1}##1\egroup}}%
      \fi}
    \AtBeginDocument{\HSelect{default}}
    \def\@fullref#1#2#3#4{\hyperref[#3]{#1~#2\ref*{#3}#4}}
    \newcommand{\fullref}[2]{\@fullref{#1}{}{#2}{}}
    \newcommand{\pfullref}[2]{\@fullref{#1}{(}{#2}{)}}
    \newcommand{\bfullref}[2]{\@fullref{#1}{[}{#2}{]}}
    \newcommand{\eqfullref}[2]{\hyperref[#2]{#1~\textup{\tagform@{\ref*{#2}}}}}
    \newcommand{\fullpageref}[2][page]{\hyperref[#2]{#1~\pageref*{#2}}}
    \def\eqnarray{%
       \stepcounter{equation}%
       \def\@currentlabel{\p@equation\theequation}%
       \global\@eqnswtrue
       \m@th
       \global\@eqcnt\z@
       \tabskip\@centering
       \let\\\@eqncr
       $$\arraycolsep1\p@
       \everycr{}\halign to\displaywidth\bgroup
           \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
          &\global\@eqcnt\@ne\hskip \tw@\arraycolsep \hfil${##}$\hfil
          &\global\@eqcnt\tw@ \hskip \tw@\arraycolsep
             $\displaystyle{##}$\hfil\tabskip\@centering
          &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
             \tabskip\z@skip
          \cr
    }
    \newcommand\includecolorgraphics[3][]{\if@aom@screen@mode
      \includegraphics[#1]{#2}\else
      \includegraphics[#1]{#3}\fi}
    \newcommand\IfColorTF[2]{\if@aom@screen@mode
      #1\else
      #2\fi}
    \def\@aom@sponsors{}
    \AtEndDocument{%
      \ifx\@aom@sponsort\@empty\else
         \protected@write\@mainrpi{}%
         {\@percentchar grants=\@aom@sponsors}%
      \fi}
    \newcommand\funding[3][]{%
      \ifx\@aom@sponsors\@empty
         \gdef\@aom@sponsors{sponsor=#2, grantid=#3}%
      \else
         \g@addto@macro{\@aom@sponsors}{\protect\and sponsor=#2, grantid=#3}%
      \fi
         \def\@tempa{#1}\relax%
         \ifx\@tempa\@empty\relax
           \def\@tempb{#3}%
            #2%
            \ifx\@tempb\@empty\relax\else\ (grant~#3)\fi
         \else
            #1
         \fi}
    \endinput
    %%
    %% End of file `aomart.cls'.
    
  • aomplain.bst27 KBVendored from mirrors.ctan.org on 2026-08-19.
    %%%
    %%%  This is aomplain.bst file, based on amsplain.bst by AMS
    %%%  to support Annals of Mathematics specific fields.
    %%%  
    % Copyright 2010-2017, The Annals of Mathematics.
    % This work may be distributed and/or modified under the
    % conditions of the LaTeX Project Public License, either
    % version 1.3 of this license or (at your option) any 
    % later version.
    % The latest version of the license is in
    %    http://www.latex-project.org/lppl.txt
    % and version 1.3 or later is part of all distributions of
    % LaTeX version 2005/12/01 or later.
    %
    % This work has the LPPL maintenance status `maintained'.
    %
    % The Current Maintainer of this work is Boris Veytsman,
    % <borisv@lk.net> 
    %
    % This work consists of the file aomart.dtx, the
    % derived file aomart.cls, and the files aomplain.bst and aomalpha.bst
    %
    %
    %%%
    
    
    % This defines the types of fields that can occur in a database entry
    % for this particular bibliography style.  Except for `language',
    % this is the standard list from plain.bst.
    
    %% Types of entries currently allowed in a BibTeX file:
    %%
    %% ARTICLE -- An article from a journal or magazine.
    %%
    %% BOOK -- A book with an explicit publisher.
    %%
    %% BOOKLET -- A work that is printed and bound,
    %% but without a named publisher or sponsoring institution.
    %%
    %% CONFERENCE -- The same as INPROCEEDINGS,
    %% included for Scribe compatibility.
    %%
    %% INBOOK -- A part of a book,
    %% which may be a chapter (or section or whatever) and/or a range of pages.
    %%
    %% INCOLLECTION -- A part of a book having its own title.
    %%
    %% INPROCEEDINGS -- An article in a conference proceedings.
    %%
    %% MANUAL -- Technical documentation.
    %%
    %% MASTERSTHESIS -- A Master's thesis.
    %%
    %% MISC -- Use this type when nothing else fits.
    %%
    %% PHDTHESIS -- A PhD thesis.
    %%
    %% PROCEEDINGS -- The proceedings of a conference.
    %%
    %% TECHREPORT -- A report published by a school or other institution,
    %% usually numbered within a series.
    %%
    %% UNPUBLISHED -- A document having an author and title, but not formally
    %% published.
    
    ENTRY
      { 
        address
        arxiv
        author
        booktitle
        chapter
        doi
        edition
        editor
        howpublished
        institution
        issue
        jfmnumber
        journal
        key
        language
        month
        mrnumber
        note
        number
        organization
        pages
        publisher
        school
        series
        sortyear
        title
        type
        url
        venue
        volume
        year
        zblnumber
        titlenote
        totalpages
        pagetotal
      }
      {}
      { label bysame }
    
    % Removed after.sentence, after.block---not needed.
    
    INTEGERS { output.state before.all mid.sentence }
    
    FUNCTION {init.state.consts}
    { #0 'before.all :=
      #1 'mid.sentence :=
    }
    
    % Scratch variables:
    
    STRINGS { s t }
    
    % Utility functions
    
    FUNCTION {shows}
    { duplicate$ "::::  `" swap$ * "'" * top$
    }
    
    FUNCTION {showstack}
    {"STACK====================================================================="
    top$
    stack$
    "ENDSTACK=================================================================="
    top$
    }
    
    FUNCTION {not}
    {   { #0 }
        { #1 }
      if$
    }
    
    FUNCTION {and}
    {   'skip$
        { pop$ #0 }
      if$
    }
    
    FUNCTION {or}
    {   { pop$ #1 }
        'skip$
      if$
    }
    
    FUNCTION {field.or.null}
    { duplicate$ empty$
        { pop$ "" }
        'skip$
      if$
    }
    
    FUNCTION {emphasize}
    { duplicate$ empty$
        { pop$ "" }
        { "\emph{" swap$ * "}" * }
      if$
    }
    
    % n.dashify is used to make sure page ranges get the TeX code
    % (two hyphens) for en-dashes.
    
    FUNCTION {n.dashify}
    { 't :=
      ""
        { t empty$ not }
        { t #1 #1 substring$ "-" =
    	{ t #1 #2 substring$ "--" = not
    	    { "--" *
    	      t #2 global.max$ substring$ 't :=
    	    }
    	    {   { t #1 #1 substring$ "-" = }
    		{ "-" *
    		  t #2 global.max$ substring$ 't :=
    		}
    	      while$
    	    }
    	  if$
    	}
    	{ t #1 #1 substring$ *
    	  t #2 global.max$ substring$ 't :=
    	}
          if$
        }
      while$
    }
    
    % tie.or.space.connect connects two items with a ~ if the
    % second item is less than 3 letters long, otherwise it just puts an
    % ordinary space.
    
    FUNCTION {tie.or.space.connect}
    { duplicate$ text.length$ #3 <
        { "~" }
        { " " }
      if$
      swap$ * *
    }
    
    FUNCTION {add.space.if.necessary}
    { duplicate$ "" =
        'skip$
        { " " * }
      if$
    }
    
    % either.or.check gives a warning if two mutually exclusive fields
    % were used in the database.
    
    FUNCTION {either.or.check}
    { empty$
        'pop$
        { "can't use both " swap$ * " fields in " * cite$ * warning$ }
      if$
    }
    
    % output.nonnull is called by output.
    
    FUNCTION {output.nonnull}
    % remove the top item from the stack because it's in the way.
    { 's :=
      output.state mid.sentence =
    % If we're in mid-sentence, add a comma to the new top item and write it
        { ", " * write$ }
    % Otherwise, if we're at the beginning of a bibitem,
        { output.state before.all =
    % just write out the top item from the stack;
          'write$
    % and the last alternative is that we're at the end of the current
    % bibitem, so we add a period to the top stack item and write it out.
            { add.period$ " " * write$ }
          if$
          mid.sentence 'output.state :=
        }
      if$
    % Put the top item back on the stack that we removed earlier.
      s
    }
    
    % Output checks to see if the stack top is empty; if not, it
    % calls output.nonnull to write it out.
    
    FUNCTION {output}
    { duplicate$ empty$
        'pop$
        'output.nonnull
      if$
    }
    
    % Standard warning message for a missing or empty field. For the user
    % we call any such field `missing' without respect to the distinction
    % made by BibTeX between missing and empty.
    
    FUNCTION {missing.warning}
    { "missing " swap$ * " in " * cite$ * warning$ }
    
    % Output.check is like output except that it gives a warning on-screen
    % if the given field in the database entry is empty.  t is the field
    % name.
    
    FUNCTION {output.check}
    { 't :=
      duplicate$ empty$
        { pop$ t missing.warning }
        'output.nonnull
      if$
    }
    
    FUNCTION {output.bibitem}
    { newline$
      "\bibitem{" write$
      cite$ write$
      "}" write$
      newline$
    % This empty string is the first thing that will be written
    % the next time write$ is called.  Done this way because each
    % item is saved on the stack until we find out what punctuation
    % should be added after it.  Therefore we need an empty first item.
      ""
      before.all 'output.state :=
    }
    
    FUNCTION {output.nonempty.mrnumber}
    { duplicate$ missing$
        { pop$ "" }
        'skip$
      if$
      duplicate$ empty$
        'pop$
        { " \mr{" swap$ * "}. " * write$ }
      if$
    }
    
    
    FUNCTION {output.nonempty.zblnumber}
    { duplicate$ missing$
        { pop$ "" }
        'skip$
      if$
      duplicate$ empty$
        'pop$
        { " \zbl{" swap$ * "}. " * write$ }
      if$
    }
    
    FUNCTION {output.nonempty.jfmnumber}
    { duplicate$ missing$
        { pop$ "" }
        'skip$
      if$
      duplicate$ empty$
        'pop$
        { " \jfm{" swap$ * "}. " * write$ }
      if$
    }
    
    
    FUNCTION {output.nonempty.arxiv}
    { duplicate$ missing$
        { pop$ "" }
        'skip$
      if$
      duplicate$ empty$
        'pop$
        { " \arxiv{" swap$ * "}. " * write$ }
      if$
    }
    
    FUNCTION {output.nonempty.doi}
    { duplicate$ missing$
        { pop$ "" }
        'skip$
      if$
      duplicate$ empty$
        'pop$
        { " \doi{" swap$ * "}. " * write$ }
      if$
    }
    
    
    FUNCTION {output.nonempty.url}
    { duplicate$ missing$
        { pop$ "" }
        'skip$
      if$
      duplicate$ empty$
        'pop$
        { " Available at \url{" swap$ * "}. " * write$ }
      if$
    }
    
    
    FUNCTION {fin.entry}
    { add.period$
      write$
      mrnumber output.nonempty.mrnumber
      zblnumber output.nonempty.zblnumber
      jfmnumber output.nonempty.jfmnumber
      arxiv output.nonempty.arxiv
      doi output.nonempty.doi
      doi empty$
        { url output.nonempty.url }
        { doi missing$
          { url output.nonempty.url }
          'skip$
          if$}
      if$
      newline$
    }
    
    
    FUNCTION {fin.entry.misc}
    { add.period$
      write$
      arxiv output.nonempty.arxiv
      doi output.nonempty.doi
      doi empty$
        { url output.nonempty.url }
        { doi missing$
          { url output.nonempty.url }
          'skip$
          if$}
      if$
      newline$
    }
    
    % Removed new.block, new.block.checka, new.block.checkb, new.sentence,
    % new.sentence.checka, and new.sentence.checkb functions here, since they
    % don't seem to be needed in the AMS style.  Also moved some real
    % basic functions like `and' and 'or' earlier in the file.
    
    INTEGERS { nameptr namesleft numnames }
    
    % The extra section to write out a language field was added
    % for AMSPLAIN.BST.  Not present in plain.bst.
    
    FUNCTION {format.language}
    { language empty$
        { "" }
        { " (" language * ")" * }
      if$
    }
    
    % This version of format.names puts names in the format
    %
    % F. von Last, Jr.
    %
    % (i.e., first name first, abbreviating initials).
    
    FUNCTION {format.names}
    { 's :=
      #1 'nameptr :=
      s num.names$ 'numnames :=
      numnames 'namesleft :=
        { namesleft #0 > }
        { s nameptr "\bgroup\scshape{{}}{f.~}{vv~}{ll}{, jj}\egroup{{}}" format.name$ 't :=
          nameptr #1 >
    	{ namesleft #1 >
    	    { ", " * t * }
    	    { numnames #2 >
    		{ "," * }
    		'skip$
    	      if$
    	      t "others" =
    		{ " et~al." * }
    		{ " and " * t * }
    	      if$
    	    }
    	  if$
    	}
    	't
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
    }
    
    FUNCTION {format.authors}
    { author empty$
        { "" }
        { bysame "\bysame" =
             {"\bysame"}
             { author format.names }
         if$
        }
      if$
    }
    
    FUNCTION {format.editors}
    { editor empty$
        { "" }
        { editor format.names
          editor num.names$ #1 >
    	{ " (eds.)" * }
    	{ " (ed.)" * }
          if$
        }
      if$
    }
    
    FUNCTION {format.nonauthor.editors}
    { editor empty$
        { "" }
        { editor format.names
          editor num.names$ #1 >
    	{ ", eds." * }
    	{ ", ed." * }
          if$
        }
      if$
    }
    
    FUNCTION {format.title}
    { title empty$
        { "" }
        { title "t" change.case$ }
      if$
    }
    
    FUNCTION {format.booktitle}
    { title empty$
        { "" }
        { title emphasize }
      if$
    }
    
    
    FUNCTION {format.journal.vol.num.year}
    { journal empty$
        { "journal name" missing.warning ""}
        { " \emph{"  journal * "}" * }
      if$
      volume empty$
        'skip$
        { " \textbf{" * volume * "}" * }
      if$
      number empty$
        { issue empty$
            'skip$
            { " no.~" * issue * }
          if$
        }
        { issue empty$
            'skip$
            {"both number and issue are present in " cite$ * warning$}
          if$
          " no.~" * number *
        }
      if$
      year empty$
        { "year" missing.warning }
        { " (" * year * ")" * }
      if$
    }
    
    % For formatting the issue number for a journal article.
    
    FUNCTION {format.number}
    { number empty$
        { "" }
        { "no.~" number * }
      if$
    }
    
    % For formatting miscellaneous dates
    
    FUNCTION {format.date}
    { year empty$
        { month empty$
    	{ "" }
    	{ "there's a month but no year in " cite$ * warning$
    	  month
    	}
          if$
        }
        { month empty$
    	'year
    	{ month " " * year * }
          if$
        }
      if$
    }
    
    %%      The volume, series and number information is sort of tricky.
    %%      This code handles it as follows:
    %%      If the series is present, and the volume, but not the number,
    %%        then we do "\emph{Book title}, \emph{Series Name} \bf{000}"
    %%      If the series is present, and the number, but not the volume,
    %%        then we do "\emph{Book title}, \emph{Series Name} no. 000"
    %%      If the series is present, and both number and volume,
    %%        then we do "\emph{Book title}, \bf{XX} \emph{Series Name} no. 000"
    %%      Finally, if the series is absent,
    %%        then we do "\emph{Book title}, \bf{XX}"
    %%        or         "\emph{Book title}, no. 000"
    %%        and if both volume and number are present, give a warning message.
    
    FUNCTION {format.bookvolume.series.number}
    { volume empty$
        { "" % Push the empty string as a placeholder in case everything else
             % is empty too.
          series empty$
            'skip$
            { pop$ "\emph{" series * "}" * } % if series is not empty put in stack
          if$
          number empty$
            'skip$
            { duplicate$ empty$ % if no preceding material,
                'skip$          % do nothing, otherwise
                { " " * }      % add a  space to separate.
              if$
              "no." number tie.or.space.connect * % add the number information
            }
          if$
        }
    %% If the volume is NOT EMPTY:
        { "\textbf{" volume * "}" *
          number empty$
            { series empty$
                'skip$
                { "\emph{" series * "}" * " " * swap$ *}    % Series Name, vol. XX
              if$
            }
            { series empty$
                { "can't use both volume and number if series info is missing"
                  warning$
                  "in BibTeX entry type `" type$ * "'" * top$
                }
                { " " * series * " no." * number tie.or.space.connect }
              if$
            }
          if$
        }
      if$
    
    }  % end of format.bookvolume.series.number
    
    %% format.inproc.title.where.editors is used by inproceedings entry types
    
    %%      No case changing or emphasizing for the title.  We want initial
    %%      caps, roman.
    %%      We add parentheses around the venue (place where conference
    %%      was held).
    %%      Likewise we add parentheses around the editors' names.
    
    FUNCTION {format.inproc.title.venue.editors}
    { booktitle empty$
        { "" }
        {  " in \emph{"  booktitle * "}" *
          venue empty$
            'skip$
            { add.space.if.necessary "(" * venue * ")" * }
          if$
          editor empty$
            'skip$
            { add.space.if.necessary "(" * format.nonauthor.editors * ")" * }
          if$
        }
      if$
    }
    
    
    FUNCTION {format.edition}
    { edition empty$
        { "" }
        { output.state mid.sentence =
    	{ edition "l" change.case$ " ed." * }
    	{ edition "t" change.case$ " ed." * }
          if$
        }
      if$
    }
    
    INTEGERS { multiresult }
    
    FUNCTION {multi.page.check}
    { 't :=
      #0 'multiresult :=
        { multiresult not
          t empty$ not
          and
        }
        { t #1 #1 substring$
          duplicate$ "-" =
          swap$ duplicate$ "," =
          swap$ "+" =
          or or
    	{ #1 'multiresult := }
    	{ t #2 global.max$ substring$ 't := }
          if$
        }
      while$
      multiresult
    }
    
    % pagetotal is a synonym of totalpages: some styles use
    % one, and some another
    
    FUNCTION {format.pages}
    { pages empty$
        {  totalpages empty$
    	 {  pagetotal empty$
    	      { "" }
    	      { pagetotal "~pp." *}
    	    if$
    	 }
    	 { totalpages "~pp." *}
           if$
        }
        { pages n.dashify }
      if$
    }
    
    FUNCTION {format.book.pages}
    { pages empty$
        { "" }
        { pages multi.page.check
    	{ "pp.~" pages n.dashify * }
    	{ "p.~" pages * }
          if$
        }
      if$
    }
    
    FUNCTION {format.chapter.pages}
    { chapter empty$
        'format.book.pages
        { type empty$
    	{ "ch.~" }
    	{ type "l" change.case$ " " * }
          if$
          chapter *
          pages empty$
    	'skip$
    	{ ", " * format.book.pages * }
          if$
        }
      if$
    }
    
    FUNCTION {empty.misc.check}
    { author empty$ title empty$ howpublished empty$
      month empty$ year empty$ note empty$
      and and and and and
      key empty$ not and
        { "all relevant fields are empty in " cite$ * warning$ }
        'skip$
      if$
    }
    
    FUNCTION {format.thesis.type}
    { type empty$
        'skip$
        { pop$
          type "t" change.case$
        }
      if$
    }
    
    FUNCTION {format.tr.number}
    { type empty$
        { "Tech. Report" }
        'type
      if$
      number empty$
        { "t" change.case$ }
        { number tie.or.space.connect }
      if$
    }
    
    % The format.crossref functions haven't been paid much attention
    % at the present time (June 1990) and could probably use some
    % work.  MJD
    
    FUNCTION {format.article.crossref}
    { key empty$
        { journal empty$
    	{ "need key or journal for " cite$ * " to crossref " * crossref *
    	  warning$
    	  ""
    	}
    	{ "in " journal * }
          if$
        }
        { "in " key * }
      if$
      " \cite{" * crossref * "}" *
    }
    
    FUNCTION {format.crossref.editor}
    { editor #1 "{vv~}{ll}" format.name$
      editor num.names$ duplicate$
      #2 >
        { pop$ " et~al." * }
        { #2 <
    	'skip$
    	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
    	    { " et~al." * }
    	    { " and " * editor #2 "{vv~}{ll}" format.name$ * }
    	  if$
    	}
          if$
        }
      if$
    }
    
    FUNCTION {format.book.crossref}
    { volume empty$
        { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
          "in "
        }
        { "vol." volume tie.or.space.connect
          " of " *
        }
      if$
      editor empty$
      editor field.or.null author field.or.null =
      or
        { key empty$
    	{ series empty$
    	    { "need editor, key, or series for " cite$ * " to crossref " *
    	      crossref * warning$
    	      "" *
    	    }
    	    { series * }
    	  if$
    	}
    	{ key * }
          if$
        }
        { format.crossref.editor * }
      if$
      " \cite{" * crossref * "}" *
    }
    
    FUNCTION {format.incoll.inproc.crossref}
    { editor empty$
      editor field.or.null author field.or.null =
      or
        { key empty$
    	{ booktitle empty$
    	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
    	      crossref * warning$
    	      ""
    	    }
    	    { "in \emph{" booktitle * "}" * }
    	  if$
    	}
    	{ "in " key * }
          if$
        }
        { "in " format.crossref.editor * }
      if$
      " \cite{" * crossref * "}" *
    }
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    % The main functions for each entry type.
    
    % journal, vol and year are formatted together because they are
    % not separated by commas.
    
    FUNCTION {article}
    { output.bibitem
      format.authors "author" output.check
      format.title "title" output.check
      titlenote output
      crossref missing$
        { format.journal.vol.num.year output
          format.pages "pages" output.check
        }
        { format.article.crossref output.nonnull
          format.pages "pages" output.check
        }
      if$
      format.language *
      note output
      fin.entry
    }
    
    FUNCTION {book}
    { output.bibitem
      author empty$
        { format.editors "author and editor" output.check }
        { format.authors output.nonnull
          crossref missing$
    	{ "author and editor" editor either.or.check }
    	'skip$
          if$
        }
      if$
      format.booktitle "title" output.check
      titlenote output
      format.edition output
      crossref missing$
        { format.bookvolume.series.number output
          publisher "publisher" output.check
          address output
        }
        { format.book.crossref output.nonnull
        }
      if$
      format.date "year" output.check
      format.pages output
      format.language *
      note output
      fin.entry
    }
    
    FUNCTION {booklet}
    { output.bibitem
      format.authors output
      format.title "title" output.check
      titlenote output
      howpublished output
      address output
      format.pages output
      format.date output
      note output
      fin.entry
    }
    
    FUNCTION {inbook}
    { output.bibitem
      author empty$
        { format.editors "author and editor" output.check }
        { format.authors output.nonnull
          crossref missing$
    	{ "author and editor" editor either.or.check }
    	'skip$
          if$
        }
      if$
      format.booktitle "title" output.check
      titlenote output
      format.edition output
      crossref missing$
        { format.bookvolume.series.number output
          format.chapter.pages "chapter and pages" output.check
          publisher "publisher" output.check
          address output
        }
        { format.chapter.pages "chapter and pages" output.check
          format.book.crossref output.nonnull
        }
      if$
      format.date "year" output.check
      format.language *
      note output
      fin.entry
    }
    
    FUNCTION {incollection}
    { output.bibitem
      format.authors "author" output.check
      format.title "title" output.check
      titlenote output
      crossref missing$
        { format.inproc.title.venue.editors "booktitle" output.check
          format.bookvolume.series.number output
          publisher "publisher" output.check
          address output
          format.edition output
          format.date "year" output.check
        }
        { format.incoll.inproc.crossref output.nonnull
        }
      if$
      note output
      format.book.pages output
      format.language *
      fin.entry
    }
    
    FUNCTION {inproceedings}
    { output.bibitem
      format.authors "author" output.check
      format.title "title" output.check
      titlenote output
      crossref missing$
        { format.inproc.title.venue.editors "booktitle" output.check
          format.bookvolume.series.number output
          organization output
          publisher output
          address output
          format.date "year" output.check
        }
        { format.incoll.inproc.crossref output.nonnull
        }
      if$
      note output
      format.book.pages output
      format.language *
      fin.entry
    }
    
    FUNCTION {conference} { inproceedings }
    
    FUNCTION {manual}
    { output.bibitem
      author empty$
        { organization empty$
    	'skip$
    	{ organization output.nonnull
    	  address output
    	}
          if$
        }
        { format.authors output.nonnull }
      if$
      format.booktitle "title" output.check
      titlenote output
      author empty$
        { organization empty$
    	{ address output }
    	'skip$
          if$
        }
        { organization output
          address output
        }
      if$
      format.edition output
      format.date output
      format.pages output
      note output
      fin.entry
    }
    
    FUNCTION {mastersthesis}
    { output.bibitem
      format.authors "author" output.check
      format.booktitle "title" output.check
      titlenote output
      "Master's thesis" format.thesis.type output.nonnull
      school "school" output.check
      address output
      format.date "year" output.check
      note output
      format.pages output
      fin.entry
    }
    
    FUNCTION {misc}
    { output.bibitem
      format.authors output
      format.title output
      titlenote output
      howpublished output
      format.date output
      note output
      format.book.pages output
      fin.entry.misc
      empty.misc.check
    }
    
    FUNCTION {phdthesis}
    { output.bibitem
      format.authors "author" output.check
      format.booktitle "title" output.check
      titlenote output
      "Ph.D. thesis" format.thesis.type output.nonnull
      school "school" output.check
      address output
      format.date "year" output.check
      note output
      format.pages output
      fin.entry
    }
    
    FUNCTION {proceedings}
    { output.bibitem
      editor empty$
        { organization output }
        { format.editors output.nonnull }
      if$
      format.booktitle "title" output.check
      titlenote output
      venue empty$
        'skip$
        { add.space.if.necessary "(" * venue * ")" * }
      if$
      format.bookvolume.series.number output
      address empty$
        { editor empty$
            'skip$
    	{ organization output }
          if$
          publisher output
          format.date "year" output.check
        }
        { address output.nonnull
          editor empty$
    	'skip$
    	{ organization output }
          if$
          publisher output
          format.date "year" output.check
        }
      if$
      format.pages output
      note output
      fin.entry
    }
    
    FUNCTION {techreport}
    { output.bibitem
      format.authors "author" output.check
      format.booktitle "title" output.check
      titlenote output
      format.tr.number output.nonnull
      institution "institution" output.check
      address output
      format.date "year" output.check
      format.pages output
      note output
      fin.entry
    }
    
    FUNCTION {unpublished}
    { output.bibitem
      format.authors "author" output.check
      format.booktitle "title" output.check
      titlenote output
      note "note" output.check
      format.date output
      format.pages output
      fin.entry.misc
    }
    
    FUNCTION {default.type} { misc }
    
    MACRO {jan} {"January"}
    
    MACRO {feb} {"February"}
    
    MACRO {mar} {"March"}
    
    MACRO {apr} {"April"}
    
    MACRO {may} {"May"}
    
    MACRO {jun} {"June"}
    
    MACRO {jul} {"July"}
    
    MACRO {aug} {"August"}
    
    MACRO {sep} {"September"}
    
    MACRO {oct} {"October"}
    
    MACRO {nov} {"November"}
    
    MACRO {dec} {"December"}
    
    READ
    
    FUNCTION {sortify}
    { purify$
      "l" change.case$
    }
    
    INTEGERS { len }
    
    FUNCTION {chop.word}
    { 's :=
      'len :=
      s #1 len substring$ =
        { s len #1 + global.max$ substring$ }
        's
      if$
    }
    
    FUNCTION {sort.format.names}
    { 's :=
      #1 'nameptr :=
      ""
      s num.names$ 'numnames :=
      numnames 'namesleft :=
        { namesleft #0 > }
        { nameptr #1 >
    	{ "   " * }
    	'skip$
          if$
          s nameptr "{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
          nameptr numnames = t "others" = and
    	{ "et al" * }
    	{ t sortify * }
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
    }
    
    FUNCTION {sort.format.title}
    { 't :=
      "A " #2
        "An " #3
          "The " #4 t chop.word
        chop.word
      chop.word
      sortify
      #1 global.max$ substring$
    }
    
    FUNCTION {author.sort}
    { author empty$
        { key empty$
    	{ "to sort, need author or key in " cite$ * warning$
    	  ""
    	}
    	{ key sortify }
          if$
        }
        { author sort.format.names }
      if$
    }
    
    FUNCTION {author.editor.sort}
    { author empty$
        { editor empty$
    	{ key empty$
    	    { "to sort, need author, editor, or key in " cite$ * warning$
    	      ""
    	    }
    	    { key sortify }
    	  if$
    	}
    	{ editor sort.format.names }
          if$
        }
        { author sort.format.names }
      if$
    }
    
    FUNCTION {author.organization.sort}
    { author empty$
        { organization empty$
    	{ key empty$
    	    { "to sort, need author, organization, or key in " cite$ * warning$
    	      ""
    	    }
    	    { key sortify }
    	  if$
    	}
    	{ "The " #4 organization chop.word sortify }
          if$
        }
        { author sort.format.names }
      if$
    }
    
    FUNCTION {editor.organization.sort}
    { editor empty$
        { organization empty$
    	{ key empty$
    	    { "to sort, need editor, organization, or key in " cite$ * warning$
    	      ""
    	    }
    	    { key sortify }
    	  if$
    	}
    	{ "The " #4 organization chop.word sortify }
          if$
        }
        { editor sort.format.names }
      if$
    }
    
    FUNCTION {presort}
    { type$ "book" =
      type$ "inbook" =
      or
        'author.editor.sort
        { type$ "proceedings" =
    	'editor.organization.sort
    	{ type$ "manual" =
    	    'author.organization.sort
    	    'author.sort
    	  if$
    	}
          if$
        }
      if$
      "    "
      *
      sortyear field.or.null sortify
      *
      year field.or.null sortify
      *
      "    "
      *
      title field.or.null
      sort.format.title
      *
      #1 entry.max$ substring$
      'sort.key$ :=
    }
    
    ITERATE {presort}
    
    SORT
    
    STRINGS { longest.label prev.author this.author }
    
    INTEGERS { number.label longest.label.width }
    
    FUNCTION {initialize.longest.label}
    { "" 'longest.label :=
      #1 'number.label :=
      #0 'longest.label.width :=
      "abcxyz" 'prev.author :=
      "" 'this.author :=
    }
    
    FUNCTION {longest.label.pass}
    { number.label int.to.str$ 'label :=
      number.label #1 + 'number.label :=
      label width$ longest.label.width >
        { label 'longest.label :=
          label width$ 'longest.label.width :=
        }
        'skip$
      if$
      author empty$
        { editor empty$
          { "" }
          'editor
          if$
        }
        'author
      if$
      'this.author :=
    }
    
    EXECUTE {initialize.longest.label}
    
    ITERATE {longest.label.pass}
    
    FUNCTION {write.lines}
    { { duplicate$ "." = NOT }
        { write$ newline$ }
      while$
      pop$
    }
    
    FUNCTION {begin.bib}
    { preamble$ empty$
        'skip$
        { preamble$ write$ newline$ }
      if$
      "\providecommand{\bysame}{\leavevmode\hbox to3em{\hrulefill}\thinspace}"
        write$ newline$
      "\providecommand{\noopsort}[1]{}"
        write$ newline$
      "\providecommand{\mr}[1]{\href{http://www.ams.org/mathscinet-getitem?mr=#1}{MR~#1}}"
        write$ newline$
      "\providecommand{\zbl}[1]{\href{http://www.zentralblatt-math.org/zmath/en/search/?q=an:#1}{Zbl~#1}}"
        write$ newline$
      "\providecommand{\jfm}[1]{\href{http://www.emis.de/cgi-bin/JFM-item?#1}{JFM~#1}}"
        write$ newline$
      "\providecommand{\arxiv}[1]{\href{http://www.arxiv.org/abs/#1}{arXiv~#1}}"
        write$ newline$
      "\providecommand{\doi}[1]{\url{https://doi.org/#1}}"
        write$ newline$
      "\providecommand{\MR}{\relax\ifhmode\unskip\space\fi MR }"
        write$ newline$
      "% \MRhref is called by the amsart/book/proc definition of \MR."
        write$ newline$
      "\providecommand{\MRhref}[2]{%"
        write$ newline$
      "  \href{http://www.ams.org/mathscinet-getitem?mr=#1}{#2}"
        write$ newline$
      "}"
        write$ newline$
      "\providecommand{\href}[2]{#2}"
        write$ newline$
      "\begin{thebibliography}{"  longest.label  * "}" *
        write$ newline$
    }
    
    EXECUTE {begin.bib}
    
    EXECUTE {init.state.consts}
    
    ITERATE {call.type$}
    
    FUNCTION {end.bib}
    { newline$
      "\end{thebibliography}" write$ newline$
    }
    
    EXECUTE {end.bib}
    %% \CharacterTable
    %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
    %%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
    %%   Digits        \0\1\2\3\4\5\6\7\8\9
    %%   Exclamation   \!     Double quote  \"     Hash (number) \#
    %%   Dollar        \$     Percent       \%     Ampersand     \&
    %%   Acute accent  \'     Left paren    \(     Right paren   \)
    %%   Asterisk      \*     Plus          \+     Comma         \,
    %%   Minus         \-     Point         \.     Solidus       \/
    %%   Colon         \:     Semicolon     \;     Less than     \<
    %%   Equals        \=     Greater than  \>     Question mark \?
    %%   Commercial at \@     Left bracket  \[     Backslash     \\
    %%   Right bracket \]     Circumflex    \^     Underscore    \_
    %%   Grave accent  \`     Left brace    \{     Vertical bar  \|
    %%   Right brace   \}     Tilde         \~}
    
  • references.bib813 B
    @article{matsumura1963,
      author  = {Matsumura, Hideyuki},
      title   = {On algebraic groups of birational transformations},
      journal = {Atti Accad. Naz. Lincei Rend. Cl. Sci. Fis. Mat. Natur. (8)},
      volume  = {34},
      pages   = {151--155},
      year    = {1963}
    }
    
    @article{hacon2006,
      author  = {Hacon, Christopher D. and McKernan, James},
      title   = {Boundedness of pluricanonical maps of varieties of general type},
      journal = {Invent. Math.},
      volume  = {166},
      number  = {1},
      pages   = {1--25},
      year    = {2006}
    }
    
    @article{hacon2013,
      author  = {Hacon, Christopher D. and McKernan, James and Xu, Chenyang},
      title   = {On the birational automorphisms of varieties of general type},
      journal = {Ann. of Math. (2)},
      volume  = {177},
      number  = {3},
      pages   = {1077--1111},
      year    = {2013}
    }
    
  • main.pdfprebuilt · 195 KBReplaced by the first recompile.

    Binary file, seeded as-is.

  • main.synctex.gzprebuilt · 17 KBReplaced by the first recompile.

    Binary file, seeded as-is.