% \NeedsTeXFormat{LaTeX2e}
% Release Notes see README
%CHECK DEF OF COMPAT
% POSSIBLE ALT: \mathrel{\rlap{\ensuremath{\not}}\ensuremath{\mid}}

\RequirePackage{expl3}
\RequirePackage{ltxcmds}
\RequirePackage{iftex,ifpdf}
\RequirePackage{suffix}
\RequirePackage{ifmtarg}
\RequirePackage{xifthen}
\RequirePackage{xkeyval}
\RequirePackage{etoolbox}
\RequirePackage{pict2e,picture}
\RequirePackage{xparse}
% \RequirePackage{amsmath} required below if not already loaded and we aren't using asl.cls
\def\recthyVersion{4.0}
\ProvidesExplPackage
  {rec-thy}
  {2024/03/29}
  {\recthyVersion}
  {Provides commands for writing up recursion theory papers}



\ExplSyntaxOff

% \ProvidesExplPackage{rec-thy}{2020/06/04}{3.5}{Provides commands for writing up recursion theory papers} % Description
% \ProvidesPackage{rec-thy}[2021/02/05 v\recthyVersion Provides commands for writing up recursion theory papers]
\makeatletter
% \newcommand*{\@curpack}{\@currname} %rec-thy.sty
\newcommand*{\@packinfo}[1]{\PackageInfo{rec-thy}{#1}}
\newcommand*{\recthy@strip}[1]{%
\ifcsname #1\endcsname%
\else%
\expandafter\edef\csname #1\endcsname{\expandafter\noexpand\csname @recthy@#1\endcsname}
\fi
}
%leaves us a command \arg defined to do \@recthy@arg
% \ProvidesPackage{\@curpack}  %file name is package name



\robustify\(
\robustify\)
%\RequirePackage{mathbbol}}
\@ifclassloaded{asl}{
  
}{
    \ltx@ifpackageloaded{amsmath}{}{\RequirePackage{amsmath}}
}


\AtBeginDocument{
% \@ifundefined{hyperref}{\providecommand{\texorpdfstring}[2]{def}  }

  % \ltx@ifpackageloaded{mathtools}{}{\RequirePackage{mathtools}}
  \ltx@ifpackageloaded{unicode-math}{
    \def\@recthy@tpathSYM{\mathbb{f}}
    \Umathchardef\@recthy@xnot="3 \symoperators "0338
  }{
    \ltx@ifpackageloaded{bbm}{\def\@recthy@tpathSYM{\mathbbm{f}}}{\mathbf{f}}
  }
  % Undertilde doesn't exist in texlive so we remove the dependency and define it again.
  \ltx@ifpackageloaded{undertilde}{}{
      \newlength\knuthian@fdfive
      \def\mathpal@save#1{\let\was@math@style=#1\relax}
      \def\utilde#1{\mathpalette\mathpal@save
                    {\setbox124=\hbox{$\was@math@style#1$}%
      \setbox125=\hbox{$\fam=3\global\knuthian@fdfive=\fontdimen5\font$}
      \setbox125=\hbox{$\widetilde{\vrule height 0pt depth 0pt width \wd124}$}%
                     \baselineskip=1pt\relax
                     \vtop{\copy124\copy125\vskip -\knuthian@fdfive}}}
      }
}

% \ifxetex  %workaround for bug...hopefully can dispense on later
\ifpdftex
    \def\symbf#1{\mathbf{#1}}
    \mathchardef\@recthy@mhyphen="2D % Define a "math hyphen"
\else
  \def\@recthy@mhyphen{\mathhyphen}
\fi



\def\PMG@arginit{\let\@PMG@parenarg\@PMG@undefined\let\@PMG@braketarg\@PMG@undefined}

\def\@recthy@family{\@currname.\@currext} %The default family for this package...filename.ext
%Define boolean options true if option passed false otherwise


\newif\ifrecthy@nomath          \recthy@nomathfalse
\newif\ifrecthy@nosymb         \recthy@nosymbfalse
\newif\ifrecthy@nosets          \recthy@nosetsfalse
\newif\ifrecthy@noquants        \recthy@noquantsfalse
\newif\ifrecthy@nospaces        \recthy@nospacesfalse
\newif\ifrecthy@nostrings       \recthy@nostringsfalse
\newif\ifrecthy@notrees         \recthy@notreesfalse
\newif\ifrecthy@nopair          \recthy@nopairfalse
\newif\ifrecthy@nosetrels       \recthy@nosetrelsfalse
\newif\ifrecthy@noordinalnotations  \recthy@noordinalnotationsfalse
\newif\ifrecthy@nosyntax        \recthy@nosyntaxfalse
\newif\ifrecthy@shortsyntax        \recthy@shortsyntaxtrue
\newif\ifrecthy@nodegclasses        \recthy@nodegclassesfalse
\newif\ifrecthy@noforcing       \recthy@noforcingfalse
\newif\ifrecthy@nodegrees       \recthy@nodegreesfalse
\newif\ifrecthy@nocomputations      \recthy@nocomputationsfalse
\newif\ifrecthy@nostructresets \recthy@nostructresetsfalse
\newif\ifrecthy@noreqhelper \recthy@noreqhelperfalse
\newif\ifrecthy@nosubfun \recthy@nosubfunfalse
\newif\ifrecthy@nopfcases \@ifclassloaded{beamer}{\recthy@nopfcasestrue}{\recthy@nopfcasesfalse}
\newif\ifrecthy@beamersupp \@ifclassloaded{beamer}{\recthy@beamersupptrue}{\recthy@beamersuppfalse}
\newif\ifrecthy@noprioritytrees \recthy@noprioritytreesfalse
% \newif\ifrecthy@nosuppprioritytrees \recthy@nosuppprioritytreestrue
\newif\ifrecthy@hyperreqs \recthy@hyperreqstrue
\newif\ifrecthy@nooperators \recthy@nooperatorsfalse
\newif\ifrecthy@fix@typeset \recthy@fix@typesettrue
\newif\ifrecthy@nodoubleangles \recthy@nodoubleanglesfalse
\newif\ifrecthy@stepsenv \recthy@stepsenvfalse
\newif\ifrecthy@shortO \recthy@shortOtrue
\newif\ifrecthy@midincompat \recthy@midincompattrue
\newif\ifrecthy@norsfs \recthy@norsfsfalse
\newif\ifrecthy@nobbm \recthy@nobbmfalse

\DeclareOptionX{nomath}{\recthy@nomathtrue}
\DeclareOptionX{nosymb}{\recthy@nosymbtrue}
\DeclareOptionX{nosets}{\recthy@nosetstrue}
\DeclareOptionX{noquants}{\recthy@noquantstrue}
\DeclareOptionX{nospaces}{\recthy@nospacestrue}
\DeclareOptionX{nostrings}{\recthy@nostringstrue}
\DeclareOptionX{notrees}{\recthy@notreestrue}
\DeclareOptionX{nopair}{\recthy@nopairtrue}
\DeclareOptionX{nosetrels}{\recthy@nosetrelstrue}
\DeclareOptionX{noordinalnotations}{\recthy@noordinalnotationstrue}
\DeclareOptionX{nosyntax}{\recthy@nosyntaxtrue}
\DeclareOptionX{noshortsyntax}{\recthy@shortsyntaxfalse}
\DeclareOptionX{noforcing}{\recthy@noforcingtrue}
\DeclareOptionX{nodegrees}{\recthy@nodegreestrue}
\DeclareOptionX{nocomputations}{\recthy@nocomputationstrue}
\DeclareOptionX{nostructresets}{\recthy@nostructresetstrue}
\DeclareOptionX{noreqhelper}{\recthy@noreqhelpertrue}
\DeclareOptionX{nosubfun}{\recthy@nosubfuntrue}
\DeclareOptionX{nopfcases}{\recthy@nopfcasestrue}
\DeclareOptionX{noprioritytrees}{\recthy@noprioritytreestrue}
\DeclareOptionX{nohyperreqs}{\recthy@hyperreqsfalse}
\DeclareOptionX{nooperators}{\recthy@nooperatorstrue}
\DeclareOptionX{nofixtype}{\recthy@fix@typesetfalse}
\DeclareOptionX{nodoubleangles}{\recthy@nodoubleanglestrue}
\DeclareOptionX{steps}{\recthy@stepsenvtrue}
\DeclareOptionX{noshortO}{\recthy@shortOfalse}
\DeclareOptionX{altcompat}{\recthy@midincompattrue}
\DeclareOptionX{norsfs}{\recthy@norsfstrue}
\DeclareOptionX{nobbm}{\recthy@nobbmtrue}


% \DeclareOptionX{degjoin}{\def\Tjoin{\Tdegjoin}}

\let\@recthy@modulescr\mathcal
\DeclareOptionX{modulescr}[mathcal]{\letcs{\@recthy@modulescr}{#1}}











\let\pmg@casefont\textsc
\DeclareOptionX{pfcasefont}[textsc]{\letcs{\pmg@casefont}{#1}}



\def\@recthy@reqscr{\mathscr}
\DeclareOptionX{reqscr}{\letcs{\@recthy@reqscr}{#1}}




\def\@recthy@recfSYM@default{\phi}
\let\@recthy@recfSYM=\@recthy@recfSYM@default
\def\@recthy@recfnlSYM@default{\Phi}
\let\@recthy@recfnlSYM=\@recthy@recfnlSYM@default
\def\@recthy@useSYM@default{\ltx@ifpackageloaded{unicode-math}{\symbffrak{u}}{\mathfrak{u}}}
\let\@recthy@useSYM=\@recthy@useSYM@default





\DeclareOptionX{recfnlsym}[@recthy@recfnlSYM@default]{\letcs{\@recthy@recfnlSYM}{#1}}
\DeclareOptionX{recfsym}[@recthy@recfSYM@default]{\letcs{\@recthy@recfSYM}{#1}}
\DeclareOptionX{usesym}[@recthy@useSYM@default]{\letcs{\@recthy@useSYM}{#1}}

\newcommand*{\@recthy@llangle}{\langle\!\langle}
\newcommand*{\@recthy@rrangle}{\rangle\!\rangle}


\let\@recthy@llangle@orig=\llangle
\let\@recthy@rrangle@orig=\rrangle



\let\@recthy@EmptyStr=\@recthy@EmptyStr@Default
\let\@recthy@concatSYM=\@recthy@concatSYM@Default
\def\@recthy@langle{\langle}
\def\@recthy@rangle{\rangle}
\let\@recthy@lstrdelim=\@recthy@langle
\let\@recthy@rstrdelim=\@recthy@rangle
\let\@recthy@lcodedelim=\@recthy@llangle
\let\@recthy@rcodedelim=\@recthy@rrangle
\let\@recthy@lpairdelim=\@recthy@langle
\let\@recthy@rpairdelim=\@recthy@rangle


\def\@recthy@concatSYM@Default{\widehat{\phantom{x}}}
\def\@recthy@EmptyStr@Default{\mathopen{\langle}\mathclose{\rangle}}
\let\@recthy@concatSYM\@recthy@concatSYM@Default
\let\@recthy@EmptyStr\@recthy@EmptyStr@Default

\DeclareOptionX{emptystr}[@recthy@EmptyStr@Default]{\letcs{\@recthy@EmptyStr}{#1}}
\DeclareOptionX{concatsym}[@recthy@concatSYM@Default]{\letcs{\@recthy@concatSYM}{#1}}
\DeclareOptionX{lstrdelim}[@recthy@langle]{\letcs{\@recthy@lstrdelim}{#1}}
\DeclareOptionX{rstrdelim}[@recthy@rangle]{\letcs{\@recthy@rstrdelim}{#1}}
\DeclareOptionX{lcodedelim}[@recthy@langle]{\letcs{\@recthy@lcodedelim}{#1}}
\DeclareOptionX{rcodedelim}[@recthy@rangle]{\letcs{\@recthy@rcodedelim}{#1}}
\DeclareOptionX{lpairdelim}[@recthy@llangle]{\letcs{\@recthy@lpairdelim}{#1}}
\DeclareOptionX{rpairdelim}[@recthy@rrangle]{\letcs{\@recthy@rpairdelim}{#1}}




  % \AtBeginDocument{\@ifundefined{hyperref}{\newcommand*{\texorpdfstring}[2]{#1}}{}}

% \ProcessOptions*
% \ProcessOptionsX<\@recthy@family>
\ProcessOptionsX

\ifrecthy@norsfs
\else
  \ltx@ifpackageloaded{unicode-math}{}{\RequirePackage{mathrsfs}}
\fi

\ifrecthy@nobbm
\else
  \ltx@ifpackageloaded{unicode-math}{}{\RequirePackage{bbm}}
\fi

%misc tools

\def\@recthy@ignorespacesandallparsafterend{\ifhmode\unskip\fi
\aftergroup\@recthy@useignorespacesandallpars}
\def\@recthy@useignorespacesandallpars#1\ignorespaces\fi{%
#1\fi\@recthy@ignorespacesandallpars}
\def\@recthy@ignorespacesandallpars{%
  \@ifnextchar\par
    {\expandafter\@recthy@ignorespacesandallpars\@gobble}%
    {}%
}


\ifrecthy@fix@typeset
      %Defining \overbar
      \let\save@mathaccent\mathaccent
  \newcommand*\if@single[3]{%
    \setbox0\hbox{${\mathaccent"0362{#1}}^H$}%
    \setbox2\hbox{${\mathaccent"0362{\kern0pt#1}}^H$}%
    \ifdim\ht0=\ht2 #3\else #2\fi
    }
  %The bar will be moved to the right by a half of \macc@kerna, which is computed by amsmath:
  \newcommand*\rel@kern[1]{\kern#1\dimexpr\macc@kerna}
  %If there's a superscript following the bar, then no negative kern may follow the bar;
  %an additional {} makes sure that the superscript is high enough in this case:
  \providecommand*\overbar{\relax}
  \renewcommand*\overbar[1]{\@ifnextchar^{{\over@bar{#1}{0}}}{\over@bar{#1}{1}}}
  %Use a separate algorithm for single symbols:
  \newcommand*\over@bar[2]{\if@single{#1}{\over@bar@{#1}{#2}{1}}{\over@bar@{#1}{#2}{2}}}
  \newcommand*\over@bar@[3]{%
    \begingroup
    \def\mathaccent##1##2{%
  %Enable nesting of accents:
      \let\mathaccent\save@mathaccent
  %If there's more than a single symbol, use the first character instead (see below):
      \if#32 \let\macc@nucleus\first@char \fi
  %Determine the italic correction:
      \setbox\z@\hbox{$\macc@style{\macc@nucleus}_{}$}%
      \setbox\tw@\hbox{$\macc@style{\macc@nucleus}{}_{}$}%
      \dimen@\wd\tw@
      \advance\dimen@-\wd\z@
  %Now \dimen@ is the italic correction of the symbol.
      \divide\dimen@ 3
      \@tempdima\wd\tw@
      \advance\@tempdima-\scriptspace
  %Now \@tempdima is the width of the symbol.
      \divide\@tempdima 10
      \advance\dimen@-\@tempdima
  %Now \dimen@ = (italic correction / 3) - (Breite / 10)
      \ifdim\dimen@>\z@ \dimen@0pt\fi
  %The bar will be shortened in the case \dimen@<0 !
      \rel@kern{0.6}\kern-\dimen@
      \if#31
        \overline{\rel@kern{-0.6}\kern\dimen@\macc@nucleus\rel@kern{0.4}\kern\dimen@}%
        \advance\dimen@0.4\dimexpr\macc@kerna
  %Place the combined final kern (-\dimen@) if it is >0 or if a superscript follows:
        \let\final@kern#2%
        \ifdim\dimen@<\z@ \let\final@kern1\fi
        \if\final@kern1 \kern-\dimen@\fi
      \else
        \overline{\rel@kern{-0.6}\kern\dimen@#1}%
      \fi
    }%
    \macc@depth\@ne
    \let\math@bgroup\@empty \let\math@egroup\macc@set@skewchar
    \mathsurround\z@ \frozen@everymath{\mathgroup\macc@group\relax}%
    \macc@set@skewchar\relax
    \let\mathaccentV\macc@nested@a
  %The following initialises \macc@kerna and calls \mathaccent:
    \if#31
      \macc@nested@a\relax111{#1}%
    \else
  %If the argument consists of more than one symbol, and if the first token is
  %a letter, use that letter for the computations:
      \def\gobble@till@marker##1\endmarker{}%
      \futurelet\first@char\gobble@till@marker#1\endmarker
      \ifcat\noexpand\first@char A\else
        \def\first@char{}%
      \fi
      \macc@nested@a\relax111{\first@char}%
    \fi
    \endgroup
  }
\else
  \@packinfo{Not loading Fix Typesetting}
\fi


%Strings



  

  \newcommand*{\@recthy@pair}[2]{\mathopen{\@recthy@lpairdelim} #1, #2 \mathclose{\@recthy@rpairdelim}}
  \newcommand*{\@recthy@str}[1]{\mathopen{\@recthy@lstrdelim}#1\mathclose{\@recthy@rstrdelim}}
  \newcommand*{\@recthy@code}[1]{\mathopen{\@recthy@lcodedelim}#1\mathclose{\@recthy@rcodedelim}}


  \let\godelpair=\@recthy@pair
  \ifrecthy@nopair
      \@packinfo{No redefining pair.}
  \else
      \@packinfo{pair=godelpair.}
      \let\pair=\@recthy@pair
  \fi


  \newcommand{\succprec@recthy}{\mathrel{\mathpalette\succ@prec@recthy{\succ\prec}}}
  \newcommand{\precsucc@recthy}{\mathrel{\mathpalette\succ@prec@recthy{\prec\succ}}}

  \newcommand{\nsuccprec@recthy}{\ltx@ifpackageloaded{unicode-math}{\succprec@recthy\!\@recthy@xnot}{\not\succprec@recthy}}
  \newcommand{\nprecsucc@recthy}{\ltx@ifpackageloaded{unicode-math}{\precsucc@recthy\!\@recthy@xnot}{\not\precsucc@recthy}}

    \newcommand{\succ@prec@recthy}[2]{\succ@@prec@recthy#1#2}
    \newcommand{\succ@@prec@recthy}[3]{%
      \vcenter{\m@th\offinterlineskip
        \sbox\z@{$#1#3$}%
        \hbox{$#1#2$}\kern-0.4\ht\z@\box\z@
      }%
    }

    \def\defaultincompatsymb@recthy{\mathrel{\mid}}
    \def\defaulcompatSymb@recthy{\mathrel{\,\not|\,}}
    \let\ncompatsymb@recthy=\nsuccprec@recthy
    \ifrecthy@midincompat
      \@packinfo{Using mid as incompat symbol}
      \let\compatsymb@recthy=\defaulcompatSymb@recthy
      \let\incompatsymb@recthy=\defaultincompatsymb@recthy
    \else
      \@packinfo{Using precc over succ as compat symbol}
      \let\compatsymb@recthy=\succprec@recthy
      \let\incompatsymb@recthy=\nsuccprec@recthy
    \fi






\NewDocumentCommand{\incompat@recthy}{o}{\incompatsymb@recthy\IfValueTF{#1}{_{#1}}{}}
\NewDocumentCommand{\compat@recthy}{o}{{\compatsymb@recthy\IfValueTF{#1}{_{#1}}{}}}


\ifrecthy@nostrings
    \@packinfo{No strings loading.}
\else
    \@packinfo{Strings loading.}
    % \appto{\recthy@rollback@threeSix}{\newcommand*{\closedn}[1]{{#1}^\blacktriangledown}}
    \let\code=\@recthy@code
    \let\str=\@recthy@str
    \newcommand*{\EmptyStr}{\@recthy@EmptyStr}
    \newcommand*{\estr}{\@recthy@EmptyStr}
    \newcommand*{\decode}[2]{\left(#1\right)_{#2}}
    \newcommand*{\godelnum}[1]{\left\ulcorner #1 \right\urcorner}
    \let\cornerquote=\godelnum
    \newcommand*{\concat}{\@recthy@concatSYM}
    \WithSuffix\def\concat[#1]{\concat\str{#1}}
    \newcommand*{\strpred}[1]{{#1}^{-}}
    \providecommand*{\lh}[2][]{\@recthy@abs{#2}_{#1}} %% Gives length of a string

    \providecommand*{\incompat}{\incompat@recthy} %incompatible stringes FIX SPACING
    % \providecommand*{\incomp}{\incompat@recthy}
    \providecommand*{\compat}{\compat@recthy}
    \let\succprec=\succprec@recthy
    \let\nsuccprec=\nsuccprec@recthy
    \let\precsucc=\precsucc@recthy
    \let\nprecsucc=\nprecsucc@recthy
    % \providecommand*{\nincompat}{\compat@recthy}
    % \providecommand*{\nincomp}{\compat@recthy}
    % \newcommand*{\setcol}[2]{{#1}^{[#2]}}
    \ExplSyntaxOn %thx stackexghance
      \NewDocumentCommand \setcol {m m}
      {
        \bool_lazy_and:nnTF
          { \int_compare_p:nNn { \tl_count:n {#1} } = 3 }
          { \tl_if_head_eq_meaning_p:nN {#1} \setcol }
          {
            \pgerdes_setcol_special:nnnn #1 {#2}
          }
          {
            \pgerdes_setcol_normal:nn {#1} {#2}
          }
      }
      \cs_new:Npn \pgerdes_setcol_special:nnnn #1 #2 #3 #4
      {
        {#2} \sp { [#3] [#4] }
      }
      \cs_new:Npn \pgerdes_setcol_normal:nn #1 #2
      {
        {#1} \sp { [#2] }
      }
    \ExplSyntaxOff


\fi

\ifrecthy@noprioritytrees
    \@packinfo{Not loading Priority Tree Helper}
\else
    \@packinfo{Loading Priority Tree Helper.}
    \providecommand{\PriorityTree}{\mathbb{T}}
    \providecommand{\tpath}[1][]{\ifthenelse{\isempty{#1}}{\@recthy@tpathSYM}{\@recthy@tpathSYM_{#1}}}
    \providecommand{\leftof}{\mathbin{<_L}}
    \providecommand{\leftofeq}{\mathbin{\leq_L}}
    \providecommand{\rightof}{\mathbin{>_L}}
    \providecommand{\rightofeq}{\mathbin{\geq_L}}
    \providecommand{\nleftof}{\mathbin{\nless_L}}
    \providecommand{\nleftofeq}{\mathbin{\nleq_L}}
    \providecommand{\nrightof}{\mathbin{\ngtr_L}}
    \providecommand{\nrightofeq}{\mathbin{\ngeq_L}}
    \NewDocumentCommand{\PriorityTreeModule}{mO{}m}{\ensuremath{{\@recthy@modulescr{#1}}^{#2}_{#3} }}
    \let\module=\PriorityTreeModule
\fi





\ifrecthy@nopfcases
    \@packinfo{Not loading Proof Cases Helper}
\else
    \@packinfo{Loading Proof Cases Helper.}
    \RequirePackage{enumitem}

  \ltx@ifpackageloaded{cleveref}{
    \crefformat{pfcasesnonumi}{#2case~#1#3}
    \Crefformat{pfcasesnonumi}{#2Case~#1#3}
    \crefformat{pfcasesnonumii}{#2subcase~#1#3}
    \Crefformat{pfcasesnonumii}{#2Subcase~#1#3}
    \crefformat{pfcasesnonumiii}{#2subsubcase~#1#3}
    \Crefformat{pfcasesnonumiii}{#2Subsubcase~#1#3}
    \crefformat{pfcasesnumberedi}{#2case~#1#3}
    \Crefformat{pfcasesnumberedi}{#2Case~#1#3}
    \crefformat{pfcasesnumberedii}{#2case~#1#3}
    \Crefformat{pfcasesnumberedii}{#2Case~#1#3}
    \crefformat{pfcasesnumberediii}{#2case~#1#3}
    \Crefformat{pfcasesnumberediii}{#2Case~#1#3}
  }{}

    \newlist{pfcasesnonum}{enumerate}{3}
    \setlist[pfcasesnonum]{
      label={\pmg@casefont{Case}},
      align=left,
      left=0pt .. 1.5em,
      itemindent=* 
    }
    \setlist[pfcasesnonum,1]{
        before=\def\pfcasecounter@pmg{pfcasesnonumi},
    }
    \setlist[pfcasesnonum,2]{
        before=\def\pfcasecounter@pmg{pfcasesnonumii},
    }
    \setlist[pfcasesnonum,3]{
        before=\def\pfcasecounter@pmg{pfcasesnonumiii},
    }
    \newlist{pfcasesnumbered}{enumerate}{3}
    \setlist[pfcasesnumbered]{
      align=left,
      left=0pt .. 1.5em,
      itemindent=* 
    }
    % \setlist[pfcasesnumbered]{
    %   align=left,
    %   labelsep=0pt,
    %   itemindent=!,
    %   leftmargin=2em,
    %   labelindent=0pt,
    %   labelwidth=0pt
    % }
    \setlist[pfcasesnumbered,1]{
        before=\def\pfcasecounter@pmg{pfcasesnumberedi},
      label={{\pmg@casefont{Case}}~\arabic*},
      ref={\arabic*},
    }
    \setlist[pfcasesnumbered,2]{
        before=\def\pfcasecounter@pmg{pfcasesnumberedii},
      label={{\pmg@casefont{Case}}~\arabic{pfcasesnumberedi}\alph*},
      ref={\arabic{pfcasesnumberedi}\alph*},
      labelindent=-1em,
    }
    \setlist[pfcasesnumbered,3]{
        before=\def\pfcasecounter@pmg{pfcasesnumberediii},
      label={{\pmg@casefont{Case}}~\arabic{pfcasesnumberedi}\alph{pfcasesnumberedii}.\roman*},
      ref={\arabic{pfcasesnumberedi}\alph{pfcasesnumberedii}.\roman*},
      labelindent=-1em,
    }
    \def\@recthy@cases@labelindent{0pt}
    \newenvironment{pfcases*}{
        \def\@recthy@cases@labelindent{-1em}
        \ProvideDocumentCommand{\case}{r[]}{
                \def\thiscase{~##1}%
            \item~##1\textbf{:} %
            \ltx@ifpackageloaded{cleveref}{%
            \cref@constructprefix{pfcases}{\cref@result}%
            \protected@xdef\cref@currentlabel{[\pfcasecounter@pmg][][\cref@result]##1}}{}  \protected@edef\@currentlabel{##1}\ignorespaces}
        \begin{pfcasesnonum}\def\@recthy@cases@labelindent{1em}\ignorespaces}{\end{pfcasesnonum}\ignorespacesafterend}

    \newenvironment{pfcases}{
        \ProvideDocumentCommand{\case}{o}{
            \IfNoValueTF{##1}{
                \def\thiscase{}\item\!\!\textbf{:} \allowbreak%\linebreak[1]%
            }{
                \def\thiscase{~##1}\item~##1\textbf{:} \allowbreak%\linebreak[1]%
            }
            \ltx@ifpackageloaded{cleveref}{%
            \cref@constructprefix{\pfcasecounter@pmg}{\cref@result}%
            \protected@xdef\cref@currentlabel{[\pfcasecounter@pmg][][\cref@result]\csname the\pfcasecounter@pmg \endcsname}}{}\ignorespaces}
    
    \begin{pfcasesnumbered}[labelindent=\@recthy@cases@labelindent]\def\@recthy@cases@labelindent{-1em}\ignorespaces}{\end{pfcasesnumbered}\ignorespacesafterend}
\fi


\ifrecthy@nosubfun
    \@packinfo{Not loading subfun defs.}
\else
    \@packinfo{Loading subfun defs.}
    %DOCUMENT ME
  \newcommand{\@pnrelbar}{%
    \linethickness{\dimen2}%
    \sbox\z@{$\m@th\prec$}%
    \dimen@=1.1\ht\z@
    \begin{picture}(\dimen@,.4ex)
    \roundcap
    \put(0,.2ex){\line(1,0){\dimen@}}
    \put(\dimexpr 0.5\dimen@-.2ex\relax,0){\line(1,1){.4ex}}
    \end{picture}%
  }


  \newcommand{\@snrelbar}{%
    \linethickness{\dimen2}%
    \sbox\z@{$\m@th\succ$}%
    \dimen@=1.1\ht\z@
    \begin{picture}(\dimen@,.4ex)
    \roundcap
    \put(0,.2ex){\line(1,0){\dimen@}}
    \put(\dimexpr 0.5\dimen@-.2ex\relax,0){\line(1,1){.4ex}}
    \end{picture}%
  }


  \newcommand{\@precneq}{\mathrel{\vcenter{\hbox{\text{\prec@neq}}}}}
  \newcommand{\prec@neq}{%
    \dimen2=\f@size\dimexpr.04pt\relax
    \oalign{%
      \noalign{\kern\dimexpr.2ex-.5\dimen2\relax}
      $\m@th\prec$\cr
      \noalign{\kern-.5\dimen2}
      \hidewidth\@pnrelbar\hidewidth\cr
    }%
  }


  \newcommand{\@succneq}{\mathrel{\vcenter{\hbox{\text{\succ@neq}}}}}
  \newcommand{\succ@neq}{%
    \dimen2=\f@size\dimexpr.04pt\relax
    \oalign{%
      \noalign{\kern\dimexpr.2ex-.5\dimen2\relax}
      $\m@th\prec$\cr
      \noalign{\kern-.5\dimen2}
      \hidewidth\@snrelbar\hidewidth\cr
    }%
  }


  \NewDocumentCommand{\subfun}{o}{\prec\IfNoValueTF{#1}{}{_{#1}}}
  \NewDocumentCommand{\supfun}{o}{\succ\IfNoValueTF{#1}{}{_{#1}}}
  \NewDocumentCommand{\nsubfun}{o}{\nprec\IfNoValueTF{#1}{}{_{#1}}}
  \NewDocumentCommand{\nsupfun}{o}{\nsucc\IfNoValueTF{#1}{}{_{#1}}}
  \NewDocumentCommand{\subfuneq}{o}{\preceq\IfNoValueTF{#1}{}{_{#1}}}
  \NewDocumentCommand{\subfunneq}{o}{\@precneq\IfNoValueTF{#1}{}{_{#1}}}
  \NewDocumentCommand{\supfuneq}{o}{\succeq\IfNoValueTF{#1}{}{_{#1}}}
  \NewDocumentCommand{\supfunneq}{o}{\@succneq\IfNoValueTF{#1}{}{_{#1}}}
  \NewDocumentCommand{\nsubfuneq}{o}{\npreceq\IfNoValueTF{#1}{}{_{#1}}}
  \NewDocumentCommand{\nsupfuneq}{o}{\nsucceq\IfNoValueTF{#1}{}{_{#1}}}
\fi




% \let\recthy@origtagform@=\tagform@
\newcommand*{\@pmg@saveeqstate}{
  \let\@origif@fleqn@pmg=\if@fleqn
  \let\@origiftagsleft@pmg=\iftagsleft@
  \let\recthy@savedtagform@=\tagform@
}
\newcommand*{\@pmg@restoreeqstate}{
  \let\if@fleqn=\@origif@fleqn@pmg
  \let\iftagsleft@=\@origiftagsleft@pmg
  \let\tagform@=\recthy@savedtagform@
  }

\ifrecthy@noreqhelper
    \@packinfo{Not loading requirement assist.}
\else
    \@packinfo{Loading requirement assist.}
    % \newcommand*{\req@beamer}[3][]{\ensuremath{\@recthy@reqscr{#2}^{#1}_{#3}}}
    \newcommand*{\req@orig}[3]{\ensuremath{\@ifmtarg{#1}{\@recthy@reqscr{#2}_{#3}}{\@recthy@reqscr{#2}_{#3}^{#1}}}} 
    \NewDocumentCommand{\req@nohref}{sO{}mO{}m}{\req@orig{#2#4}{#3}{#5}}
    \NewDocumentCommand{\req@href}{O{}mO{}m}{\hyperref[\detokenize{req:#2@#1#3}]{\req@orig{#1#3}{#2}{#4}}}

   \NewDocumentCommand\req@href@star{s}{\IfBooleanTF#1{\req@nohref}{\req@href}}
   \newcommand{\req}{\req@nohref}
    \ifrecthy@hyperreqs
      \AtBeginDocument{\@ifundefined{hyperref}{}{\let\req=\req@href@star}}
    \fi
    
    % \newtagform{colon}{}{:}
    \def\recthy@colontagform@#1{\maketag@@@{\ignorespaces#1\unskip:}}


    \NewDocumentCommand{\refreq}{O{}mO{}}{\ref{\detokenize{req:#2@#1#3}}}

    \NewDocumentCommand{\require@nested}{sO{}mO{}m}{%
        \tag{\req@nohref[#2#4]{#3}{#5}}\IfBooleanTF{#1}{}{\label{\detokenize{req:#3@#2#4}}}%
    }



\ifrecthy@beamersupp

\AtBeginDocument{
        \theoremstyle{plain}
        \newtheorem{reqsblock@recthy}{Requirements}
        \newtheorem{reqblock@recthy}{Requirement}
    \let\OLDreqsblock@recthy=\reqsblock@recthy
    \let\OLDreqblock@recthy=\reqblock@recthy
    \def\reqsblock@recthy{%
      \setbeamercolor{block title}{fg=white,bg=Maroon}%
      \setbeamercolor{block body}{fg=black,bg=Maroon!10}\OLDreqsblock@recthy
    }
    \def\reqblock@recthy{%
      \setbeamercolor{block title}{fg=white,bg=Maroon}%
      \setbeamercolor{block body}{fg=black,bg=Maroon!10}\OLDreqblock@recthy
    }
  }

      \NewDocumentCommand{\require@beamer}{sO{}mO{}m}{\tag{$\@ifmtarg{#2#4}{\mathscr{#3}_{#5}}{\mathscr{#3}_{#5}^{#2#4}}$} \IfBooleanTF{#1}{}{\label{\detokenize{req:#3@#2#4}}} & }

    \NewDocumentEnvironment{requirements}{d<>b}{\IfValueTF{#1}{\begin{reqsblock@recthy}<#1>}{\begin{reqsblock@recthy}}%
      \setlength{\abovedisplayskip}{0pt}%
      \setlength{\belowdisplayskip}{0pt}%
    \begin{requirements*}
      #2
    \end{requirements*}
          \end{reqsblock@recthy}}{}

    \NewDocumentEnvironment{requirement}{d<>b}{\IfValueTF{#1}{\begin{reqblock@recthy}<#1>}{\begin{reqblock@recthy}}%
      \setlength{\abovedisplayskip}{0pt}%
      \setlength{\belowdisplayskip}{0pt}%
    \begin{requirements*}
      #2
    \end{requirements*}
          \end{reqblock@recthy}}{}

    \NewDocumentEnvironment{requirements*}{b}{\let\tagform@=\recthy@colontagform@
          \let\myhalign\halign%
            \def\halign{\let\mylb\\ \renewcommand{\\}{& \mylb}\myhalign}%
          \let\require=\require@beamer %
          \begin{flalign*}%
          #1
          \end{flalign*}}{\ignorespacesafterend}%\@recthy@ignorespacesandallparsafter}


   % \NewDocumentEnvironment{BeamerRequire}{d<>O{}mO{}m}{\IfValueTF{#1}{\begin{reqblock@recthy}<#1>}{\begin{reqblock@recthy}}%
   %      \setlength{\abovedisplayskip}{0pt}%
   %      \setlength{\belowdisplayskip}{0pt}%
   %      \begin{requirement}{\req@nohref[#2#4]{#3}{#5}} \label{\detokenize{req:#3@#2#4}}%
   %  }{
   %      \end{requirement}%
   %      \vspace*{-.3cm}%
   %      \end{reqblock@recthy}%
   %  }
   %  \NewDocumentEnvironment{BeamerRequire*}{d<>O{}mO{}m}{\IfValueTF{#1}{\begin{reqblock@recthy}<#1>}{\begin{reqblock@recthy}}%
   %      \setlength{\abovedisplayskip}{0pt}%
   %      \setlength{\belowdisplayskip}{0pt}%
   %      \begin{requirement}{\req@nohref[#2#4]{#3}{#5}}
   %  }{
   %      \end{requirement}%
   %      \vspace*{-.3cm}%
   %      \end{reqblock@recthy}%
   %  }       
\else

      \newenvironment{requirement}[1]{
          \@pmg@saveeqstate
          \@fleqntrue
          \setlength\@mathmargin{1.5cm}
          \tagsleft@true
          \let\tagform@=\recthy@colontagform@%
          % \usetagform{colon}
          \begin{equation}\tag{#1}
      }{
          \end{equation}
          \@pmg@restoreeqstate
          % \usetagform{default}
          % \let\maketag@@@=\maketag@@@orig@pmg  
      }

      \NewDocumentEnvironment{require}{O{}mO{}m}{
          \begin{requirement}{\req@nohref[#1#3]{#2}{#4}} \label{\detokenize{req:#2@#1#3}}%
      }{
          \end{requirement}%
      }
      \NewDocumentEnvironment{require*}{O{}mO{}m}{
          \begin{requirement}{\req@nohref[#1#3]{#2}{#4}}
      }{
          \end{requirement}%
      }


        \NewDocumentEnvironment{requirements}{}{%
        \@pmg@saveeqstate%
        \@fleqntrue%
        \setlength\@mathmargin{1.5cm}%
        \tagsleft@true%
        % \usetagform{colon}%
        \let\tagform@=\recthy@colontagform@%
        \let\require=\require@nested%
        \gather
        }{\endgather%
        \@pmg@restoreeqstate%
        % \usetagform{default}%
        \ignorespacesafterend}

 \fi


\fi


\ifrecthy@nostructresets
    \@packinfo{Not loading r.e. subset commands}
\else
  \@packinfo{Loading r.e. subset commands}

  %%TODO: This stuff should be in a different section
  % \let\@orig@setminus=\setminus
  \newcommand*{\promptdif}{\@orig@setminus_{\downarrow}}
  \let\setbefore=\promptdif
  \let\promptminus=\promptdif
  \let\promptsetminus=\promptdif
  \newcommand*{\splitof}{\sqsubset}
  \newcommand*{\splitby}{\sqsupset}

  %%TODO depreciate capital S for commands...and generally remove the R and D stuff
  \newcommand*{\strcE}{\ensuremath{\mathscr{E}}}
  \WithSuffix\def\strcE*{\ensuremath{\mathscr{E}^{*}}}
  % \let\strcE\StrcE
  \newcommand*{\strcL}[1]{\mathscr{L}(#1)}
  \newcommand*{\strcStarL}[1]{\mathscr{L}^{*}(#1)}
  \WithSuffix\def\strcL*{\StrcStarL}

  % \let\strcR=\StrcR
  % \let\strcD=\StrcD


\fi








% \newcommand*{\@recthy@abs}[1]{\lvert#1\rvert}
\NewDocumentCommand{\@recthy@abs}{sm}{\IfBooleanT{#1}{\left}\lvert #2 \IfBooleanT{#1}{\right}\rvert}
% \DeclarePairedDelimiter\@recthy@abs{\lvert}{\rvert}
\newcommand*{\@recthy@ensuretext}[1]{\ensuremath{\text{#1}}}


\ifrecthy@nomath
    \@packinfo{No math loading.}
\else
    \@packinfo{math loading.}
    \providecommand*{\eqdef}{\overset{\text{\tiny def}}{=}} %\newcommand*{\eqdef}{\ensuremath{=\limits_{\text{\tiny def}}}}
    \providecommand*{\iffdef}{\stackrel{\text{\tiny def}}{\iff}}
    \ifdefined\aut
    \else
        \DeclareMathOperator{\aut}{Aut}
    \fi
    \ifdefined\Ord
    \else
        \DeclareMathOperator{\Ord}{Ord}
    \fi
    \NewDocumentCommand{\ceil}{sm}{\IfBooleanT{#1}{\left}\lceil #2 \IfBooleanT{#1}{\right}\rceil}
    % \DeclarePairedDelimiter\ceil{\lceil}{\rceil}
    % \DeclarePairedDelimiter\floor{\lfloor}{\rfloor}
    \NewDocumentCommand{\floor}{sm}{\IfBooleanT{#1}{\left}\lfloor #2 \IfBooleanT{#1}{\right}\rfloor}

    \recthy@strip{abs}
    \ifdefined\dom
    \else
        \DeclareMathOperator{\dom}{dom}
    \fi
    \ifdefined\rng
    \else
        \DeclareMathOperator{\rng}{rng}
    \fi
    \providecommand*{\restr}[1]{\mathpunct{\restriction_{#1}}}
    \providecommand*{\ordpair}[2]{\left( #1, #2 \right) }
    %%%%%%%%Function commands
    \providecommand*{\maps}[2]{\mathop{:}#1\mapsto #2}


    \providecommand*{\compfunc}{\mathbin{\circ}}
    \ifdefined\compose
    \else
        \let\compose=\compfunc
    \fi
    \ltx@ifpackageloaded{unicode-math}{
            \newcommand{\pmapsto}{\mathrel{\nvrightarrow}}
            \newcommand{\pmapsfrom}{\mathrel{\nvleftarrow}}
    }{
        % \newcommand{\pmapsto}{}% just for safety
        % \newcommand{\pmapsfrom}{}% just for safety

        \DeclareRobustCommand{\pmapsto}{\mathrel{\mathpalette\p@to@gets\to}}
        \DeclareRobustCommand{\pmapsfrom}{\mathrel{\mathpalette\p@to@gets\gets}}

        \newcommand{\p@to@gets}[2]{%
          \ooalign{\hidewidth$\m@th#1\mapstochar\mkern5mu$\hidewidth\cr$\m@th#1\to$\cr}%
        }
    }
    \newcommand{\fpmapsto}{\mathrel{\pmapsto_{< \infty}}}
    \newcommand{\fpmapsfrom}{\mathrel{\pmapsfrom_{< \infty}}}
    \newcommand{\ParFuncs}[2]{{#2}^{\subset #1}}
    \newcommand{\FinParFuncs}[2]{{#2}^{\subset_{< \infty} #1}}
    \recthy@strip{ensuretext}
    \providecommand{\quotient}{\quotient@recthy}
\fi




\ifrecthy@nooperators
    \@packinfo{No operators loading.}
\else
    \@packinfo{Operators loading.}
    \providecommand*{\Land}{\mathop{\bigwedge}}
    \providecommand*{\Lor}{\mathop{\bigvee}}
    \providecommand*{\LLand}{\mathop{\bigwedge\mkern-15mu\bigwedge}}
    \providecommand*{\LLor}{\mathop{\bigvee\mkern-15mu\bigvee}}

     %save MnVersion in case wanted
   
    \AtBeginDocument{
      \let\Join=\@recthy@Join
    }
    \ifdefined\xor
    \else
        \DeclareMathOperator{\xor}{xor}
    \fi
\fi








\ifrecthy@nosymb
    \@packinfo{No Special Symbols Loading.}
  \newcommand*{\ndownarrow}{\mathpunct{\mkern-4mu{\arrownot\mkern 4mu \downarrow}}}
\else
    \ltx@ifpackageloaded{MnSymbol}{}{ 
    \DeclareFontFamily{OMX}{MnSymbolE}{}
    \DeclareFontFamily{U} {MnSymbolB}{}
    \DeclareSymbolFont{MnSyB}         {U}  {MnSymbolB}{m}{n}
    \DeclareSymbolFont{MnLargeSymbols}{OMX}{MnSymbolE}{m}{n}
    \SetSymbolFont{MnLargeSymbols}{bold}{OMX}{MnSymbolE}{b}{n}
    \DeclareFontShape{OMX}{MnSymbolE}{m}{n}{
        <-6>  MnSymbolE5
       <6-7>  MnSymbolE6
       <7-8>  MnSymbolE7
       <8-9>  MnSymbolE8
       <9-10> MnSymbolE9
      <10-12> MnSymbolE10
      <12->   MnSymbolE12
    }{}
    \DeclareFontShape{OMX}{MnSymbolE}{b}{n}{
        <-6>  MnSymbolE-Bold5
       <6-7>  MnSymbolE-Bold6
       <7-8>  MnSymbolE-Bold7
       <8-9>  MnSymbolE-Bold8
       <9-10> MnSymbolE-Bold9
      <10-12> MnSymbolE-Bold10
      <12->   MnSymbolE-Bold12
    }{}
      \DeclareFontShape{U}{MnSymbolB}{m}{n}{
      <-6>  MnSymbolB5
     <6-7>  MnSymbolB6
     <7-8>  MnSymbolB7
     <8-9>  MnSymbolB8
     <9-10> MnSymbolB9
    <10-12> MnSymbolB10
    <12->   MnSymbolB12}{}
  \DeclareFontShape{U}{MnSymbolB}{b}{n}{
      <-6>  MnSymbolB-Bold5
     <6-7>  MnSymbolB-Bold6
     <7-8>  MnSymbolB-Bold7
     <8-9>  MnSymbolB-Bold8
     <9-10> MnSymbolB-Bold9
    <10-12> MnSymbolB-Bold10
    <12->   MnSymbolB-Bold12}{}
    \DeclareSymbolFont{MnSyA} {U} {MnSymbolA}{m}{n}
    \DeclareFontFamily{U} {MnSymbolA}{}
    \DeclareFontShape{U}{MnSymbolA}{m}{n}{
      <-6> MnSymbolA5
      <6-7> MnSymbolA6
      <7-8> MnSymbolA7
      <8-9> MnSymbolA8
      <9-10> MnSymbolA9
      <10-12> MnSymbolA10
      <12-> MnSymbolA12}{}
    \DeclareFontShape{U}{MnSymbolA}{b}{n}{
      <-6> MnSymbolA-Bold5
      <6-7> MnSymbolA-Bold6
      <7-8> MnSymbolA-Bold7
      <8-9> MnSymbolA-Bold8
      <9-10> MnSymbolA-Bold9
      <10-12> MnSymbolA-Bold10
      <12-> MnSymbolA-Bold12}{}


    \DeclareMathDelimiter{\@recthy@ulcorner}
        {\mathopen}{MnLargeSymbols}{'036}{MnLargeSymbols}{'036}
    \DeclareMathDelimiter{\@recthy@urcorner}
        {\mathclose}{MnLargeSymbols}{'043}{MnLargeSymbols}{'043}
        \let\ulcorner=\@recthy@ulcorner
        \let\urcorner=\@recthy@urcorner
    \DeclareMathSymbol{\ndownarrow}{\mathpunct}{MnSyB}{3}
    \DeclareMathDelimiter{\@recthy@ulcorner}
        {\mathopen}{MnLargeSymbols}{'036}{MnLargeSymbols}{'036}
    \DeclareMathDelimiter{\@recthy@urcorner}
        {\mathclose}{MnLargeSymbols}{'043}{MnLargeSymbols}{'043}
    \DeclareMathSymbol{\Searrow}{\mathrel}{MnSyA}{15}
    \DeclareMathSymbol{\nSearrow}{\mathrel}{MnSyB}{15}
}
  \ifrecthy@nodoubleangles
  \else
        \let\llangle=\@recthy@llangle
        \let\rrangle=\@recthy@rrangle
  \fi
\fi




\NewDocumentCommand{\REA}{d()o}{\ensuremath{\IfValueTF{#2}{#2 \@recthy@mhyphen}{}\text{REA}\IfValueTF{#1}{(#1)}{}}}
\NewDocumentCommand{\CEA}{d()o}{\ensuremath{\IfValueTF{#2}{#2 \@recthy@mhyphen}{}\text{CEA}\IfValueTF{#1}{(#1)}{}}}




% Set stuff



\NewDocumentCommand{\@recthy@set}{m!G{}}{{\let\st=\mid\left\{#1 \ifthenelse{\isempty{#2}}{}{\mid #2} \right\}}}

% \def\@recthy@set#1{\def\@set@argi@pmg{#1}\@ifnextchar\bgroup\@setst@pmg\@setplain@pmg}
% \newcommand*{\@setst@pmg}[1]{\ifthenelse{\isempty{#1}}{\@setplain@pmg}{\left \{ \@set@argi@pmg \middle | #1\right \}}}
% \newcommand*{\@setplain@pmg}{\left \{ \@set@argi@pmg \right \}}
% \newcommand*{\@recthy@set}[2]{\ifthenelse{\isempty{#2}}{\left \{  #1 \right \}}{\left \{ #1 \middle | #2\right \}} }
% \DeclareOptionX{setminussym}[@recthy@defaultsetminusSYM]{\edef\@recthy@setminusSYM{\expandafter\noexpand\csname #1 \endcsname}}


\newcommand*{\@recthy@card}[1]{\lvert#1\rvert}
\newcommand*{\@recthy@union}{\mathbin{\cup}}
\newcommand*{\@recthy@Union}{\mathop{\bigcup}}
\newcommand*{\@recthy@isect}{\mathbin{\cap}}
\newcommand*{\@recthy@Isect}{\mathop{\bigcap}}
\newcommand*{\@recthy@nin}{\notin}
\NewDocumentCommand{\@recthy@powset}{O{}m}{\mathcal{P}_{#1}\left(#2\right)}
\NewDocumentCommand{\@recthy@finSsets}{r[]E{^}{{< \omega}}}{\left[#1\right]^{#2}}
\newcommand*{\@recthy@eset}{\emptyset}
\newcommand*{\@recthy@setovercmp}[1]{\overline{#1}}
\newcommand*{\@recthy@setsimcmp}[1]{\backsim #1}
\let\@recthy@setcmp=\@recthy@setovercmp








% \WithSuffix\def\@recthy@setcmp[#1]#2{#1\@recthy@setminus#2}
\ifrecthy@nosets
    \@packinfo{No set cmds loading.}
\else
    \@packinfo{Set cmds loading.}
    \recthy@strip{set}
    \recthy@strip{card}
    \recthy@strip{union}
    \recthy@strip{Union}
    \recthy@strip{isect}
    \recthy@strip{Isect}
    \recthy@strip{powset}
    \recthy@strip{finSsets}
    \let\ssetsOfsize\finSsets
    \newcommand*{\finsets}{\finSsets[\omega]\relax}
    \recthy@strip{eset}
    \recthy@strip{nin}
    \recthy@strip{setcmp}
    % \recthy@strip{setovercmp}
    % \recthy@strip{setminuscmp}
    \let\crossOrig=\cross
    \def\cross{}
    \renewcommand*{\cross}{\mathbin{\times}}
    \let\CrossOrig=\Cross
    \def\Cross{}
    \renewcommand*{\Cross}{\mathop{\Pi}}
    \providecommand*{\symdiff}{\mathbin{\Delta}}
\fi



\ifrecthy@noquants
    \@packinfo{No quants loading.}
\else
    \@packinfo{Quants loading.}
    \AtBeginDocument{
        \let\exists@orig@recthy=\exists
        \let\forall@orig@recthy=\forall
        \newcommand*{\exists@recthy}{\exists@orig@recthy}
        \newcommand*{\forall@recthy}{\forall@orig@recthy}
        % \NewDocumentCommand{\exists@paren@recthy}{O{}m}{\left(\exists@orig@recthy^{#1} #2 \right)\!}
        % \NewDocumentCommand{\exists@brak@recthy}{O{}m}{\left[\exists@orig@recthy^{#1} #2 \right]\!}
        \let\nexists@orig@recthy=\nexists
        \newcommand*{\nexists@recthy}{\nexists@orig@recthy}
        \let\nforall@orig@recthy=\nforall
        \newcommand*{\nforall@recthy}{\nforall@orig@recthy}
        \newcommand*{\existsuniq}{\exists@orig@recthy !}
        \newcommand*{\nexistsuniq}{\nexists@orig@recthy !}

        \WithSuffix\def\existsuniq(#1){\left(\existsuniq #1 \right)\!}
        \WithSuffix\def\nexistsuniq(#1){\left(\nexistsuniq #1 \right)\!}
        \WithSuffix\def\existsuniq[#1]{\left[\existsuniq #1 \right]\!}
        \WithSuffix\def\nexistsuniq[#1]{\left[\nexistsuniq #1 \right]\!}

        \newcommand*{\forallae}{\forall@orig@recthy^{*}}
        \WithSuffix\def\forallae(#1){\left(\forallae #1\right)\!}
        \WithSuffix\def\forallae[#1]{\left[\forallae #1\right]\!}

        \newcommand*{\nforallae}{\nforall@orig@recthy^{*}}
        \WithSuffix\def\nforallae(#1){\left(\nforallae #1\right)\!}
        \WithSuffix\def\nforallae[#1]{\left[\nforallae #1\right]\!}

        \providecommand*{\existsinf}{\exists@orig@recthy^{\infty}}
        \WithSuffix\def\existsinf(#1){\left(\existsinf #1\right)\!}
        \WithSuffix\def\existsinf[#1]{\left[\existsinf #1\right]\!}

        \providecommand*{\nexistsinf}{\nexists^{\infty}}
        \WithSuffix\def\nexistsinf(#1){\left(\nexistsinf #1\right)\!}
        \WithSuffix\def\nexistsinf[#1]{\left[\nexistsinf #1\right]\!}


        \WithSuffix\def\exists@recthy(#1){\left(\exists #1 \right)\!}
        % \NewDocumentCommand{\exists@recthy}{d()od()o}{\IfValueTF{#1}{\exists@paren@recthy{#1}}{\IfValueTF{#1}{\exists@brak@recthy{#2}} } }
        \WithSuffix\def\forall@recthy(#1){\left(\forall #1 \right)\!}
        \WithSuffix\def\nexists@recthy(#1){\left(\nexists #1 \right)\!}
        \WithSuffix\def\exists@recthy[#1]{\left[\exists #1 \right]\!}
        \WithSuffix\def\forall@recthy[#1]{\left[\forall #1 \right]\!}
        \WithSuffix\def\nexists@recthy[#1]{\left[\nexists #1 \right]\!}
        \WithSuffix\def\forall@recthy*{\forallae}
        \WithSuffix\def\nforall@recthy*{\nforallae}
        \WithSuffix\def\exists@recthy*{\existsinf}
        \WithSuffix\def\nexists@recthy*{\nexistsinf}
        \WithSuffix\def\exists@recthy!{\existsuniq}
        \let\exists=\exists@recthy
        \let\forall=\forall@recthy
        \let\nexists=\nexists@recthy
        \let\nforall=\nforall@recthy
    }



    % \providecommand*{\True}{\top}
    % \providecommand*{\False}{\bot}

    % \providecommand*{\liff}{\ensuremath{\leftrightarrow}}
    % \providecommand*{\limplies}{\ensuremath{\rightarrow}}

\fi

%%%%%%%%% Formula Classes




\ifrecthy@nosyntax
    \@packinfo{No syntax loading.}
\else
    \@packinfo{syntax loading.}
    \NewDocumentCommand{\DeltaN}{sod()m}{{\IfBooleanTF{#1}{\symbf{\Delta}}{\Delta}}\IfValueT{#2}{^{#2}}_{#4}\IfValueT{#3}{\!\left(#3\right)}}
    \NewDocumentCommand{\PiN}{sod()m}{{\IfBooleanTF{#1}{\symbf{\Pi}}{\Pi}}\IfValueT{#2}{^{#2}}_{#4}\IfValueT{#3}{\!\left(#3\right)}}
    \NewDocumentCommand{\SigmaN}{sod()m}{{\IfBooleanTF{#1}{\symbf{\Sigma}}{\Sigma}}\IfValueT{#2}{^{#2}}_{#4}\IfValueT{#3}{\!\left(#3\right)}}

    \NewDocumentCommand{\DeltaZeroN}{sod()m}{{\IfBooleanTF{#1}{\symbf{\Delta}}{\Delta}}^{0\IfValueT{#2}{, #2}}_{#4}\IfValueT{#3}{\!\left(#3\right)}}
    \NewDocumentCommand{\PiZeroN}{sod()m}{{\IfBooleanTF{#1}{\symbf{\Pi}}{\Pi}}^{0\IfValueT{#2}{, #2}}_{#4}\IfValueT{#3}{\!\left(#3\right)}}
    \NewDocumentCommand{\SigmaZeroN}{sod()m}{{\IfBooleanTF{#1}{\symbf{\Sigma}}{\Sigma}}^{0\IfValueT{#2}{, #2}}_{#4}\IfValueT{#3}{\!\left(#3\right)}}

    \NewDocumentCommand{\DeltaOneN}{sod()m}{{\IfBooleanTF{#1}{\symbf{\Delta}}{\Delta}}^{1\IfValueT{#2}{, #2}}_{#4}\IfValueT{#3}{\!\left(#3\right)}}
    \NewDocumentCommand{\PiOneN}{sod()m}{{\IfBooleanTF{#1}{\symbf{\Pi}}{\Pi}}^{1\IfValueT{#2}{, #2}}_{#4}\IfValueT{#3}{\!\left(#3\right)}}
    \NewDocumentCommand{\SigmaOneN}{sod()m}{{\IfBooleanTF{#1}{\symbf{\Sigma}}{\Sigma}}^{1\IfValueT{#2}{, #2}}_{#4}\IfValueT{#3}{\!\left(#3\right)}}


    \ifrecthy@shortsyntax
      \@packinfo{No syntax abbreviations loading.}
      \let\pizn=\PiZeroN
      \let\deltazn=\DeltaZeroN
      \let\sigmazn=\SigmaOneN
      \let\piin=\PiOneN
      \let\deltain=\DeltaOneN
      \let\sigmain=\SigmaOneN
    \fi


    \newcommand*{\logic}[2]{\mathcal{L}_{#1,#2}}
\fi





\ifrecthy@nospaces
    \@packinfo{No spaces loading.}
\else
    \@packinfo{Spaces loading.}

    \providecommand*{\bstrs}{2^{<\omega}}
    \NewDocumentCommand{\cbstrs}{}{{2^{< \omega}}^{< \omega}}
    \newcommand{\bpfuncs}{{\lbrace 0,1, \diverge \rbrace}^{< \omega}}
    \providecommand*{\wstrs}{\omega^{<\omega}}

    \providecommand*{\cantor}{2^{\omega}}
    % \WithSuffix\def\cantor*{\left(2\union \diverge \right)^{\omega}}
    \providecommand*{\baire}{\omega^{\omega}}
    % \WithSuffix\def\baire*{\left(\omega \union \diverge \right)^{\omega}}
    \providecommand*{\Baire}{\mathcal{N}}
\fi





    \newcommand\quotient@recthy[2]{
        \mathchoice
            {% \displaystyle
                \text{\raise1ex\hbox{$#1$}\Big/\lower1ex\hbox{$#2$}}%
            }
            {% \textstyle
                #1\,/\,#2
            }
            {% \scriptstyle
                #1\,/\,#2
            }
            {% \scriptscriptstyle  
                #1\,/\,#2
            }
    }
    \DeclareRobustCommand{\unlhdneq@recthy}{\mathrel{\text{$\m@th\@unlhdneq@recthy$}}}
    \newcommand{\@unlhdneq@recthy}{%
      \ooalign{$\lneq$\cr\raise.22ex\hbox{$\lhd$}\cr}%
    }
    \DeclareRobustCommand{\unrhdneq@recthy}{\mathrel{\text{$\m@th\@unrhdneq@recthy$}}}
    \newcommand{\@unrhdneq@recthy}{%
      \ooalign{$\gneq$\cr\raise.22ex\hbox{$\rhd$}\cr}%
    }
  %   \newcommand*{\unlhdneq@recthy}{%
  % \mathrel{\ooalign{$\lneq$\cr\raise.22ex\hbox{$\lhd$}\cr}}}


\ifrecthy@notrees
    \@packinfo{No trees loading.}
\else
    \@packinfo{Trees loading.}
    \newcommand*{\CBderiv}[2][1]{#2^{\langle#1\rangle}}
    \newcommand*{\pruneTree}[1]{\CBderiv[\infty]{#1}}
    \newcommand*{\hgt}[1]{\lVert #1 \rVert}
    \let\TreeMod=\quotient@recthy
    \newcommand*{\TreeMul}{\mathbin{\ast}}
    \newcommand*{\TreeExt}{\mathrel{\triangleleft}}
    \newcommand*{\TreeExtNeq}{\mathrel{\unlhdneq@recthy}}
\fi







%re set relations
\ifrecthy@nosetrels
    \@packinfo{No setrels loading.}
\else
    \@packinfo{setrels loading.}
    \AtBeginDocument{
        \providecommand*{\nsupset}{\not\supset@recthy@orig}
        \providecommand*{\nsubset}{\not\subset@recthy@orig}
        \let\nsubset@recthy@orig=\nsubset
        \let\nsupset@recthy@orig=\nsupset
        \let\subset@recthy@orig=\subset
        \let\supset@recthy@orig=\supset
        \let\subseteq@recthy@orig=\subseteq
        \let\supseteq@recthy@orig=\supseteq
        \let\subsetneq@recthy@orig=\subsetneq
        \let\supsetneq@recthy@orig=\supsetneq
    }
        \newcommand*{\subset@recthy}{\subset@recthy@orig}
        \newcommand*{\supset@recthy}{\supset@recthy@orig}
        \newcommand*{\subseteq@recthy}{\subseteq@recthy@orig}
        \newcommand*{\supseteq@recthy}{\supseteq@recthy@orig}
        \newcommand*{\nsubset@recthy}{\nsubset@recthy@orig}
        \newcommand*{\nsupset@recthy}{\nsupset@recthy@orig}
        \newcommand*{\nsubseteq@recthy}{\nsubseteq@recthy@orig}
        \newcommand*{\nsupseteq@recthy}{\nsupseteq@recthy@orig}
        \WithSuffix\def\subset@recthy*{\subset@recthy@orig^{*}}
        \WithSuffix\def\supset@recthy*{\supset@recthy@orig^{*}}
        \WithSuffix\def\subseteq@recthy*{\subseteq@recthy@orig^{*}}
        \WithSuffix\def\supseteq@recthy*{\supseteq@recthy@orig^{*}}
        \WithSuffix\def\subsetneq@recthy*{\subsetneq@recthy@orig^{*}}
        \WithSuffix\def\supsetneq@recthy*{\supsetneq@recthy@orig^{*}}
        \WithSuffix\def\nsubset@recthy*{\nsubset^{*}}
        \WithSuffix\def\nsupset@recthy*{\nsupset^{*}}
        \WithSuffix\def\nsubseteq@recthy*{\nsubseteq^{*}}
        \WithSuffix\def\nsupseteq@recthy*{\nsupseteq^{*}}
        \AtBeginDocument{
          \let\subset=\subset@recthy
          \let\supset=\supset@recthy
          \let\subseteq=\subseteq@recthy
          \let\supseteq=\supseteq@recthy
          \let\subsetneq=\subsetneq@recthy
          \let\supsetneq=\supsetneq@recthy
          \let\nsubset=\nsubset@recthy
          \let\nsupset=\nsupset@recthy
          \let\nsubseteq=\nsubseteq@recthy
          \let\nsupseteq=\nsupseteq@recthy
        }

        \newcommand*{\eq}{=}
        \WithSuffix\def\eq*{=^{*}}
        \newcommand*{\eqae}{=^{*}}
            \newcommand*{\neqae}{\neq^{*}}
        \WithSuffix\def\neq*{\neq^{*}}

        \newcommand*{\infsubset}{\subset_{\infty}}
        \WithSuffix\def\infsubset*{\infsubset^{*}}
        \let\subsetnaeq=\infsubset
        \newcommand*{\infsupset}{\supset_{\infty}}
        \WithSuffix\def\infsupset*{\infsupset^{*}}
        \let\supsetnaeq=\infsupset
        \newcommand*{\majsubset}{\subset_{m}}
        \newcommand*{\majsupset}{\supset_{m}}
\fi












%%% ORdinal notations
% constructive/recursive ordinals

% \DeclarePairedDelimiter\@recthy@Vert{\lVert}{\rVert}

\ifrecthy@noordinalnotations
    \@packinfo{No ordinal notations loading.}
\else
    \@packinfo{ordinal notations loading.}

\providecommand*{\wck}{\ensuremath{\omega^{\mathrm{CK}}_1}}
  % \newcommand*{\ordtype}[1]{\ensuremath{\@recthy@abs{#1}_{\kleeneO}}}
    % \newcommand*{\ordzero}{\ensuremath{0}}
  \def\kleeneOSYM{\mathcal{O}}
     \NewDocumentCommand{\kleeneO}{st+t-D(){}o}{\IfBooleanTF{#2}{\vphantom{\kleeneOSYM}^{+}{\kleeneOSYM}}{\IfBooleanTF{#3}{\overrightarrow{\kleeneOSYM}}{\kleeneOSYM}}^{#4}_{\IfBooleanTF{#1}{1\IfValueTF{#5}{,\, #5}{}}{\IfValueTF{#5}{#5}{}}}}
     \newcommand*{\Ouniq}{\kleeneO*}

    % \newcommand*{\kleeneO}{\let\@PMG@parenarg\@PMG@undefined\let\@PMG@braketarg\@PMG@undefined\@kleeneObody}
    % \newcommand*{\@kleeneObody}{\kleeneOSYM\ifdefined\@PMG@parenarg
    % ^{\@PMG@parenarg}%
    % \fi%
    % \ifdefined\@PMG@braketarg
    % _{\abs{\@PMG@braketarg}}%
    % \fi}
    % \WithSuffix\def\@kleeneObody(#1){\def\@PMG@parenarg{#1}\@kleeneObody}
    % \WithSuffix\def\@kleeneObody[#1]{\def\@PMG@braketarg{#1}\@kleeneObody}
    % \WithSuffix\def\@kleeneObody*{\def\kleeneOSYM{\mathcal{O}}\@kleeneObody}

% \newcommand*{\kleeneObelow}[2][]{\kleeneOSYM_{<#2\ifthenelse{\isempty{#1}}{}{, #1}}}
% \let\kleeneOless\kleeneObelow

   
    
    % \NewDocumentCommand{\Obelow}{sm}{\IfNoValueTF{#1}{\kleeneO[#1]}{\kleeneO*[#1]}}
    % \NewDocumentCommand{\ObelowOrd}{sm}{\IfNoValueTF{#1}{\kleeneO[\abs{#1}]}{\kleeneO*[\abs{#1}]}}
    % \let\uniqOrdNotations=\kleeneOuniq
    % \newcommand*{\kleeneNum}[1]{{#1}_{\kleeneOSYM}}
    \NewDocumentCommand{\Oless}{o}{<_{\kleeneOSYM\IfNoValueTF{#1}{}{, #1}}}
    % \let\kleenel=\kleeneless
    \NewDocumentCommand{\Oleq}{o}{\leq_{\kleeneOSYM\IfNoValueTF{#1}{}{,#1}}}
    \NewDocumentCommand{\Onless}{o}{\nless_{\kleeneOSYM\IfNoValueTF{#1}{}{,#1}}}
    % \let\kleenenl=\kleenenless
    \NewDocumentCommand{\Onleq}{o}{\nleq_{\kleeneOSYM\IfNoValueTF{#1}{}{,#1}}}
    \NewDocumentCommand{\Ogtr}{o}{>_{\kleeneOSYM\IfNoValueTF{#1}{}{,#1}}}
    % \let\kleeneg=\kleenegtr
    \NewDocumentCommand{\Ogeq}{o}{\geq_{\kleeneO\IfNoValueTF{#1}{}{,#1}}}
    \NewDocumentCommand{\Ongtr}{o}{\ngtr_{\kleeneO\IfNoValueTF{#1}{}{,#1}}}
    % \let\kleeneng=\kleenengtr
    \NewDocumentCommand{\Ongeq}{o}{\ngeq_{\kleeneO\IfNoValueTF{#1}{}{,#1}}}
    \newcommand*{\Oadd}{\mathbin{+_{\kleeneOSYM}}}
    \newcommand*{\Omul}{\times_{\kleeneOSYM}}
    \NewDocumentCommand{\Ohgt}{sm}{\IfBooleanT{#1}{\left}\lVert #2 \IfBooleanT{#1}{\right}\rVert_{\kleeneOSYM}}
    % \newcommand*{\Ohgt}[1]{\lVert #1\rVert_{\kleeneOSYM}}
    \let\Oabs=\Ohgt
    % \let\hgtO=\kleenehgt
    \newcommand*{\Olim}[2]{{#1}_{[#2]}}
    \newcommand*{\Opred}[1]{{#1}^{-}}
    \NewDocumentCommand{\Ofunc}{mod()}{{\left\{ #1 \right\}}^{\kleeneOSYM}\IfValueTF{#2}{_{#2}}{}\IfValueTF{#3}{\left(#3\right)}{}}

    % \ifrecthy@shortO
    %   \@packinfo{Short O enabled (disable if you define O to be a macro elsewhere).}
    %   \let\Oless=\kleeneless
    %   % \NewDocumentCommand{\Oless}{o}{<_{\kleeneO\IfNoValueTF{#1}{}{,#1}}}
    %   \newcommand*{\Ouniq}{\kleeneO*}
    % % \let\kleenel=\kleeneless
    %   \let\Oleq=\kleeneleq
    %   \let\Onless=\kleenenless
    %   \let\Onleq=\kleenenleq
    %   \let\Ogtr=\kleenegtr


    % % \NewDocumentCommand{\Oleq}{o}{\leq_{\kleeneO\IfNoValueTF{#1}{}{,#1}}}
    % % \NewDocumentCommand{\Onless}{o}{\nless_{\kleeneO\IfNoValueTF{#1}{}{,#1}}}
    % % \let\Onl=\kleenenless
    % % \NewDocumentCommand{\Onleq}{o}{\nleq_{\kleeneO\IfNoValueTF{#1}{}{,#1}}}
    % \NewDocumentCommand{\Ogtr}{o}{>_{\kleeneO\IfNoValueTF{#1}{}{,#1}}}
    % % \let\Og=\kleenegtr
    % \NewDocumentCommand{\Ogeq}{o}{\geq_{\kleeneO\IfNoValueTF{#1}{}{,#1}}}
    % \NewDocumentCommand{\Ongtr}{o}{\ngtr_{\kleeneO\IfNoValueTF{#1}{}{,#1}}}
    % \let\Ongeq=\kleenengeq
    % \NewDocumentCommand{\Ongeq}{o}{\ngeq_{\kleeneO\IfNoValueTF{#1}{}{,#1}}}
    % \newcommand*{\OPlus}{\mathbin{+_{\kleeneO}}}
    % % \newcommand*{\kleeneMul}{\cdot_{\kleeneO}}
    % \newcommand*{\Oabs}[1]{\lvert #1\rvert_{\kleeneOSYM}}
    % % \let\Oabs=\Ohgt
    % % \let\kleeneHgt=\kleenehgt
    % % \let\hgtO=\kleenehgt

    % % \newcommand*{\Ofunc}[2]{\lbracket{#1}\rbracket^{\kleeneOSYM}\left(#2\right)}}
    % % \newcommand*{\kleenepred}[1]{{#1}^{-}}
    % % \newcomand*{\limOrd}
    % % \DeclareMathOperator{\limO}
    % \else
    % \fi
\fi





% \newcommand*{\axiom}{2}{#1}
%alpha REA stuff
% \newcommand*{\alphaREA}[1][\alpha]{\ensuremath{ #1 \text{-REA}} }


\newcommand*{\@PMG@VdashStar}{{\Vdash\smash{\mkern-12mu\raise4\p@\hbox{\text{\tiny*}}}\mkern2mu}}

% Forcing
\ifrecthy@noforcing
    \@packinfo{No forcing loading.}
\else
    \@packinfo{forcing loading.}
    \def\@PMG@curfrcsym{\Vdash}
    \providecommand*{\forces}{\def\@PMG@frcparenarg{}\def\@PMG@frcbraketarg{}\@forcesBody}
    \newcommand*{\@forcesBody}{\mathrel{{\@PMG@curfrcsym}^{\@PMG@frcparenarg}_{\@PMG@frcbraketarg}}}
    \WithSuffix\def\@forcesBody(#1){\def\@PMG@frcparenarg{#1}\@forcesBody}
    \WithSuffix\def\@forcesBody[#1]{\def\@PMG@frcbraketarg{#1}\@forcesBody}
    \WithSuffix\def\@forcesBody*{\let\@PMG@curfrcsym=\@PMG@VdashStar\@forcesBody}
    % \newcommand*{\wforces}[]{\forces(w)[#1]}
    \NewDocumentCommand{\wforces}{d()O{}}{{\forces(w\IfValueT{#1}{, #1})[#2]}}
    % \newcommand*{\wforces}[1][]{\forces(w)[#1]}
    % \newcommand*{\wforces}[1][]{\mathrel{{\@PMG@curfrcsym}^{w}_{#1}}}

    % \long\def\forces@[#1][#2]{\Vdash^{#2}_{#1}}
    % \newcommand{\forces}{\optparams{\forces@}{[][]}%
    % }
    % \providecommand*{\frc}{\forces}
\fi




%%%ABREVIATIONS


% %Degree Classes
% \ifrecthy@nodegclasses
%     \@packinfo{No degree classes loading.}
% \else
%     \@packinfo{Degree classes loading.}

% \fi



\ifrecthy@nocomputations
    \@packinfo{No computations loading.}
\else
%%%%%%
    \newcommand*{\murec}[2]{\ensuremath{\mu#1\left( #2 \right) }}

    %\newcommand*{\brecfSYM}{\phi}

    % \newcommand*{\recf}[3][]{\@recthy@recfSYM^{#1}_{#2}\ifthenelse{\isempty{#3}}{}{\left(#3\right)}} %If give an empty arg just print function no parens
    %\newcommand*{\brecf}[3][]{\brecfSYM^{#1}_{#2}\ifthenelse{\isempty{#3}}{}{\left(#3\right)}}
    %\recfnl[d]{i}{Y}{x} gives i-th d-recursive functional operating on set Y and integer x

    \NewDocumentCommand{\recfnl}{oD(){}m!G{#2}!g!d()}{{
      \def\temp@pmg@arg{}
      \IfValueTF{#5}{\ifthenelse{\isempty{#5}}{}{\def\temp@pmg@arg{; #5}}}{\IfValueTF{#6}{\ifthenelse{\isempty{#6}}{}{\def\temp@pmg@arg{; #6}}}}
        \@recthy@recfnlSYM_{#3\IfValueT{#1}{, #1}}\ifthenelse{\isempty{#4}}{}{\!\left(#4\temp@pmg@arg \right)}
    }}



    \NewDocumentCommand{\recf}{od()md()}{
        \@recthy@recfSYM_{#3\IfNoValueTF{#1}{}{\ifthenelse{\isempty{#3}}{}{, }{#1}}}\IfNoValueTF{#2}{}{^{#2}}\IfNoValueTF{#4}{}{(#4)}
    }



    \newcommand*{\cequiv}{\mathrel{\simeq}}
    \newcommand*{\ncequiv}{\mathrel{\not\simeq}}
    \NewDocumentCommand{\conv}{O{}}{\mathpunct{\downarrow}_{#1}}
    \let\converge=\conv
    %\newcommand*{\convs}[1]{\ensuremath{\conv_{#1}}}
%   \NewDocumentCommand{\nconv}{o}{\mathpunct{\mkern-4mu{\arrownot\mkern 4mu \downarrow}_{#1}}}
    \NewDocumentCommand{\nconv}{O{}}{\mathpunct{\ndownarrow_{#1}}}
    \newcommand*{\diverge}{\mathpunct{\uparrow}}
    \newcommand*{\use}[1]{\mathop{\@recthy@useSYM}\left[#1\right]}
% \newcommand*{\use}[1]{\ltx@ifpackageloaded{unicode-math}{\symbffrak{u}}{\mathfrak{u}}\left(#1\right)}
    % \NewDocumentCommand{\REset}{D(){}omd()}{
    % W_{#2\IfNoValueTF{#1}{}{, #1}}\IfNoValueTF{#3}{}{^{#3}}
    % }
    \NewDocumentCommand{\REset}{D(){}oD(){#1}mO{#2}}{{W_{#4\IfValueTF{#5}{, #5}{}}^{#3}}}

    \NewDocumentCommand{\Hop}{oD(){}mD(){}}{\mathcal{H}_{#3\IfValueTF{#1}{, #1}{}}\left(\ifthenelse{\isempty{#2#4}}{\eset}{#2#4} \right)}
    \NewDocumentCommand{\REAop}{st+d()od()mm}{%
      {\IfBooleanTF{#1}%
        {\widehat{\mathcal{J}}}%
        {\mathcal{J}}%
      }^{%
          \IfBooleanTF{#2}{\vphantom{x}^\dagger}{}%
          #7}_{#6\IfValueTF{#4}{, #4}{}}%
          \IfValueTF{#3}{\left(#3\right)}{\IfValueTF{#5}{\left(#5\right)}{}}%
    }
     

    \newcommand*{\entersat}[1]{\mathbin{\searrow_{#1}}}
    
\fi

\newcommand*{\@recthy@join}{\mathbin{\vee}}
\newcommand*{\@recthy@meet}{\mathbin{\wedge}}
\newcommand*{\@recthy@Meet}{\mathop{\bigwedge}}
\newcommand*{\@recthy@Join}{\mathop{\bigvee}}

\ifrecthy@nodegrees
    \@packinfo{No degrees loading.}
\else
    \DeclareMathOperator{\@recthy@HYP}{HYP}
    \NewDocumentCommand{\HYP}{o}{\@recthy@HYP\IfValueTF{#1}{\left(#1\right)}{}}
    \let\hyp=\HYP
    \newcommand*{\@recthy@TSYM}{\symbf{T}}
    \newcommand*{\@recthy@ASYM}{\symbf{a}}
    \newcommand*{\Tdegrees}{\ensuremath{\mathscr{D}}}
    \let\strcD=\Tdegrees
    \newcommand*{\Tdegreesjump}{\ensuremath{\mathscr{D}'}}
    % \WithSuffix\def\Tdegrees'\Tdegreesjump
    % \WithSuffix\def\Tdegrees(#1){\Tdegrees\left(#1\right)}
    % \WithSuffix\def\Tdegreesjump(#1){\Tdegreesjump\left(#1\right)}
    \newcommand*{\REdegrees}{\ensuremath{\mathscr{R}}}
    \let\strcR=\REdegrees
    % \WithSuffix\def\REdegrees(#1){\REdegrees\left(#1\right)}

    \newcommand*{\Adegrees}{\ensuremath{\mathscr{D}_{\@recthy@ASYM}}}
    \let\strcDa=\Adegrees
    % \WithSuffix\def\Adegrees(#1){\Adegrees\left(#1\right)}
    \newcommand*{\Adegreesjump}{\ensuremath{\mathscr{D}'_\@recthy@ASYM}}
    % \WithSuffix\def\Adegrees'\Adegreesjump
    % \WithSuffix\def\Adegreesjump(#1){\Adegreesjump\left(#1\right)}
    \newcommand*{\AREAdegrees}{\ensuremath{\mathscr{R}_\@recthy@ASYM}}
    \let\strcRa=\AREAdegrees
    % \WithSuffix\def\AREdegrees(#1){\AREdegrees\left(#1\right)}
    \newcommand{\Low}[1][]{\ensuremath{ \text{Low}^{#1} }}
    \newcommand{\LowN}[2][]{\ensuremath{ \text{Low}^{#1}_{#2} }}
    \newcommand{\lowN}[2][]{\ensuremath{ \mathcal{L}^{#1}_{#2} }}

    %%%%%%Turing Degrees
    \def\firsttokof@pmg#1{\first@pmg@rdmxs(#1)}
    \def\first@pmg@rdmxs(#1#2){#1}

    \let\Tdegvar=\symbf
    % \providecommand*{\Tdegvar}[1]{\symbf{#1}}
    % \providecommand*{\Tdegof}[1]{\utilde{#1}}
    \protected\def\Tdeg#1{\ifthenelse{
    % \equal{\detokenize{\Tzero}}{\futurelet\next@pmg\discard#1\@nil\expandafter\detokenize{\next@pmg}}
                                        \equal{\detokenize{\Tzero}}{\detokenize{#1}} \OR   
                                        \equal{\detokenize{\zeroj}}{\detokenize{#1}} \OR 
                                        \equal{\detokenize{\zerojj}}{\detokenize{#1}} \OR 
                                        \equal{\detokenize{\zerojjj}}{\detokenize{#1}} \OR 
                                        \equal{\string \zeron }{\expandafter\string \first@pmg@rdmxs(#1)}  
                                       }{#1}{\Tdegvar{#1}}}


   % \let\Adef=\Tdeg
    \providecommand*{\Tjump}[1]{{#1}'}
    \let\jump=\Tjump
    \providecommand*{\jumpn}[2]{{#1}^{(#2)}}
    \providecommand*{\jjump}[1]{{#1}''}
    \providecommand*{\jjjump}[1]{{#1}'''}
    % \newcommand*{\Tzerosym}{\MVZero}
    \newcommand*{\Tzerosym}{\symbf{0}}
    \providecommand*{\Tzero}{{\Tzerosym}}
    \providecommand*{\zeron}[1]{{\Tzerosym}^{(#1)}}
    \providecommand*{\zeroj}{\jump{{\Tzerosym}}}
    \providecommand*{\zerojj}{\jjump{\Tzerosym}}
    \providecommand*{\zerojjj}{\jjjump{\Tzerosym}}
    % \let\Tzerojj=\zerojj
    % \let\Tzerojjj=\zerojjj

    %%Misc Recursion theory stuff
    %turing equivalent
    
    \providecommand*{\Tequiv}{\mathrel{\equiv_{\@recthy@TSYM}}} %DEPRECIATED
    \providecommand*{\Teq}{\Tequiv}
    \providecommand*{\nTequiv}{\mathrel{\ncong_{\@recthy@TSYM}}}
    \providecommand*{\nTeq}{\nTequiv}
    \providecommand*{\Tlneq}{\lneq_{\@recthy@TSYM}}
    \providecommand*{\Tleq}{\leq_{\@recthy@TSYM}}
    \providecommand*{\Tgneq}{\gneq_{\@recthy@TSYM}}
    \providecommand*{\Tgeq}{\geq_{\@recthy@TSYM}}
    \providecommand*{\Tgtr}{>_{\@recthy@TSYM}}
    \providecommand*{\Tless}{<_{\@recthy@TSYM}}
    \providecommand*{\nTleq}{\nleq_{\@recthy@TSYM}}
    \providecommand*{\nTgeq}{\ngeq_{\@recthy@TSYM}}

    \providecommand*{\Aeq}{\mathrel{\equiv_{\@recthy@ASYM}}}
    \providecommand*{\nAeq}{\mathrel{\ncong_{\@recthy@ASYM}}}
    \providecommand*{\Alneq}{\lneq_{\@recthy@ASYM}}
    \providecommand*{\Aleq}{\leq_{\@recthy@ASYM}}
    \providecommand*{\Agneq}{\gneq_{\@recthy@ASYM}}
    \providecommand*{\Ageq}{\geq_{\@recthy@ASYM}}
    \providecommand*{\Agtr}{>_{\@recthy@ASYM}}
    \providecommand*{\Aless}{<_{\@recthy@ASYM}}
    \providecommand*{\nAleq}{\nleq_{\@recthy@ASYM}}
    \providecommand*{\nAgeq}{\ngeq_{\@recthy@ASYM}}

    % \providecommand*{\Tdegjoin}{\mathbin{\vee}}
    % \providecommand*{\Tdegmeet}{\mathbin{\wedge}}
    \let\MnJoin=\Join
    \let\meet=\@recthy@meet
    \let\join=\@recthy@join
    \let\Join=\@recthy@Join
    \let\Meet=\@recthy@Meet
    % \let\Tjoin=\degjoin
    % \let\Tjoin=\degJoin
    % \let\Tmeet=\degmeet
    % \let\TMeet=\degMeet
    \providecommand*{\Tplus}{\mathbin{\oplus}}
    \providecommand*{\TPlus}{\mathop{\bigoplus}}
    \let\Oplus=\TPlus
    \providecommand*{\Tincompat}{\incompat@recthy[\@recthy@TSYM]}
    % \providecommand*{\Tincomp}{\Tincompat}
    \providecommand*{\Tcompat}{\compat@recthy[\@recthy@TSYM]}
    \providecommand*{\nTincompat}{\Tcompat}
    % \providecommand*{\nTincomp}{\Tcompat}



    \newcommand*{\@recthy@ttSYM}{\ensuremath{\mathtt{tt}}}
    \newcommand*{\ttSYM}{\@recthy@ttSYM}
    \newcommand*{\ttlneq}{\lneq_{\@recthy@ttSYM}}
    \newcommand*{\ttleq}{\leq_{\@recthy@ttSYM}}
    \newcommand*{\ttgneq}{\gneq_{\@recthy@ttSYM}}
    \newcommand*{\ttgeq}{\geq_{\@recthy@ttSYM}}
    \newcommand*{\ttgtr}{>_{\@recthy@ttSYM}}
    \newcommand*{\ttless}{<_{\@recthy@ttSYM}}
    \newcommand*{\ttnleq}{\nleq_{\@recthy@ttSYM}}
    \newcommand*{\ttngeq}{\ngeq_{\@recthy@ttSYM}}

%arithmetic comparisons



    
    % \providecommand*{\Adegvar}[1]{\symbf{#1}_{\@recthy@ASYM}}
    % \protected\def\Adeg#1{\ifthenelse{

    %                                     \equal{\detokenize{\Azero}}{\detokenize{#1}} \OR  
    %                                     \equal{\detokenize{\Azeroj}}{\detokenize{#1}} \OR 
    %                                     \equal{\detokenize{\Azerojj}}{\detokenize{#1}} \OR
    %                                     \equal{\detokenize{\Azerojjj}}{\detokenize{#1}} \OR  
    %                                     \equal{\detokenize{\zeroj}}{\detokenize{#1}} \OR 
    %                                     \equal{\detokenize{\zerojj}}{\detokenize{#1}} \OR 
    %                                     \equal{\detokenize{\zerojjj}}{\detokenize{#1}} \OR 
    %                                     \equal{\string \Azeron }{\expandafter\string \first@pmg@rdmxs(#1)}  
    %                                    }{#1}{\Adegvar{#1}}}
    \providecommand*{\Aequiv}{\mathrel{\equiv_{\@recthy@ASYM}}}
    \providecommand*{\Aeq}{\Aequiv}
    \providecommand*{\nAequiv}{\mathrel{\ncong_{\@recthy@ASYM}}}
    \providecommand*{\nAeq}{\nAequiv}
    \providecommand*{\Alneq}{\lneq_{\@recthy@ASYM}}
    \providecommand*{\Aleq}{\leq_{\@recthy@ASYM}}
    \providecommand*{\Agneq}{\gneq_{\@recthy@ASYM}}
    \providecommand*{\Ageq}{\geq_{\@recthy@ASYM}}
    \providecommand*{\Agtr}{>_{\@recthy@ASYM}}
    \providecommand*{\Aless}{<_{\@recthy@ASYM}}
    \providecommand*{\nAleq}{\nleq_{\@recthy@ASYM}}
    \providecommand*{\nAgeq}{\ngeq_{\@recthy@ASYM}}
    \providecommand*{\wjump}[1]{\jumpn{#1}{\omega}}
    \providecommand*{\zerow}[1]{\zeron{\omega}}

    \newcommand*{\Azerosym}{\symbf{0}_{\@recthy@ASYM}}
    \providecommand*{\Azero}{{\Azerosym}}
    \providecommand*{\Azeron}[1]{{\Azerosym}^{(#1)}}
    \providecommand*{\Azeroj}{\jump{\Azerosym}}
    \providecommand*{\Azerojj}{\jjump{\Azerosym}}
    \providecommand*{\Azerojjj}{\jjjump{\Azerosym}}
    \providecommand*{\Azeron}[1]{{\Azerosym}^{(#1)}}
    \providecommand*{\Aincompat}{\incompat@recthy[\@recthy@ASYM]}
    % \providecommand*{\Tincomp}{\Tincompat}
    \providecommand*{\Acompat}{\compat@recthy[\@recthy@ASYM]}
    \providecommand*{\nAincompat}{\Tcompat}

\fi


\ifrecthy@stepsenv
  \@packinfo{Experimental steps code loaded.}
  \newlist{pmg@steps}{enumerate}{4}
  \setlist[pmg@steps,1]{label={Step \arabic*}, ref={\arabic*}, labelsep=1em}
  \setlist[pmg@steps,2]{label={Step \arabic{pmg@stepsi}\alph*}, ref={\arabic{pmg@stepsi}\alph*}}
  \setlist[pmg@steps,3]{label={Step \arabic{pmg@stepsi}\alph{pmg@stepsii}.\Roman*}, ref={\arabic{pmg@stepsi}\alph{pmg@stepsii}.\Roman*}}
  \setlist[pmg@steps,4]{label={Step \arabic{pmg@stepsi}\alph{pmg@stepsii}.\Roman{pmg@stepsiii}\Alph*}, ref={\arabic{pmg@stepsi}\alph{pmg@stepsii}.\Roman{pmg@stepsiii}\Alph*}}
  \crefname{pmg@stepsi}{step}{steps}
  \Crefname{pmg@stepsi}{Step}{Steps}
  \crefname{pmg@stepsii}{step}{steps}
  \Crefname{pmg@stepsii}{Step}{Steps}
  \crefname{pmg@stepsiii}{step}{steps}
  \Crefname{pmg@stepsiii}{Step}{Steps}
  \crefname{pmg@stepsiiii}{step}{steps}
  \Crefname{pmg@stepsiiii}{Step}{Steps}
  \NewDocumentEnvironment{steps}{o}{
      \begingroup
      \ProvideDocumentCommand{\step}{o}{\IfValueTF{##1}{\item\textbf{##1}:}{\item}}
      \IfValueTF{#1}{\begin{pmg@steps}[#1]}{\begin{pmg@steps}}%
  }{%
      \end{pmg@steps}%
      \endgroup\ignorespacesafterend%
      }


  % \ExplSyntaxOn
  % \cs_new:cpn {steps*} {\steps*}
  % \cs_new_eq:cN {endsteps*} \endsteps
  % \ExplSyntaxOff
\else
    \@packinfo{No steps}
\fi