% beginning of m4 macros % For those m4 macros which coincide with English words, we rename them to % all-caps versions. WARNING: If in the future additional commands are added % to the m4 language, there could be trouble. define(`DEFINE', defn(`define')) undefine(`define') DEFINE(`INDEX', defn(`index')) undefine(`index') DEFINE(`INCLUDE', defn(`include')) undefine(`include') DEFINE(`DIVERT', defn(`divert')) undefine(`divert') DEFINE(`FILE', defn(`file')) undefine(`file') DEFINE(`FORMAT', defn(`format')) undefine(`format') DEFINE(`LINE', defn(`line')) undefine(`line') DEFINE(`SHIFT', defn(`shift')) undefine(`shift') changequote(`![',`]!') DEFINE(current_compile_file,cc/code.c) DEFINE(set_compile_file,![DEFINE(![current_compile_file]!,cc/$1) |-> current_compile_file, TEX_IN]!) DEFINE(set_include_file,![DEFINE(![current_compile_file]!,inc/$1) |-> current_compile_file, TEX_IN]!) DEFINE(TEX,![|-> TEX_IN \end{svb} \par\noindent $* \begin{svb} |-> current_compile_file, TEX_IN]!) DEFINE(HIDE,![|-> current_compile_file $* |-> current_compile_file, TEX_IN]!) DEFINE(DHIDE, ) DEFINE(BHIDE1,![|-> current_compile_file { $1 |-> TEX_IN { $2 |-> current_compile_file $2 |-> current_compile_file, TEX_IN ]!) DEFINE(BHIDE2,![|-> current_compile_file { $1 |-> TEX_IN { $2 |-> current_compile_file $2 |-> current_compile_file, TEX_IN ]!) DEFINE(index_method,![|-> TEX_IN \end{svb}\indexa{patsubst($1,_,![\\_]!)}\begin{svb} |-> current_compile_file, TEX_IN]!) DEFINE(index_class,![|-> TEX_IN \end{svb}\indexz{patsubst($1,_,![\\_]!)}\begin{svb} |-> current_compile_file, TEX_IN]!) DEFINE(index_command,![|-> TEX_IN \end{svb}\indexb{patsubst($1,_,![\\_]!)}\begin{svb} |-> current_compile_file, TEX_IN]!) DEFINE(data_comment,![|-> TEX_IN \end{svb} \par\noindent $* \begin{svb} |-> TEX_IN, DATA_IN]!) DEFINE(command_qed,![|-> TEX_IN \end{svb} \par\noindent\verb|$*| \qed |-> DATA_IN $* |-> TEX_IN \begin{svb} |-> TEX_IN, DATA_IN]!) DEFINE(one_line_proof,![|-> TEX_IN \end{svb} \par\noindent{\sc Proof.}\kern10pt\verb|$*| \qed |-> DATA_IN $* |-> TEX_IN \begin{svb} |-> TEX_IN, DATA_IN]!) DEFINE(data_block,![|-> TEX_IN \end{svb} \par\noindent \block{$*} \begin{svb} |-> TEX_IN, DATA_IN]!) DEFINE(STATUS_WE,![|-> TEX_IN \end{svb} \par\noindent\verb|status: enumerator = | $patsubst($1, ![\^\([0-9]*\)]!, ![^{\1}]!)${\tt;} \begin{svb} |-> DATA_IN status: enumerator = $1; |-> TEX_IN, DATA_IN]! ) DEFINE(STATUS_CLASS_WE,![|-> TEX_IN \end{svb} \par\noindent\verb|status: classified, enumerator = | $patsubst($1, ![\^\([0-9]*\)]!, ![^{\1}]!)${\tt;} \begin{svb} |-> DATA_IN status: classified, enumerator = $1; |-> TEX_IN, DATA_IN]! ) DEFINE(STATUS_UNIQUE_WE,![|-> TEX_IN \end{svb} \par\noindent\hangindent=0.5in\hangafter=1\verb|status: unique, enumerator = | $patsubst($1, ![\^\([0-9]*\)]!, ![^{\1}]!)${\tt;} \begin{svb} |-> DATA_IN status: unique, enumerator = $1; |-> TEX_IN, DATA_IN]! ) DEFINE(STATUS_RE_CLASS_WE,![|-> TEX_IN \end{svb} \par\noindent\verb|status: realizable, classified, enumerator = | $patsubst($1, ![\^\([0-9]*\)]!, ![^{\1}]!)${\tt;} \begin{svb} |-> DATA_IN status: realizable, classified, enumerator = $1; |-> TEX_IN, DATA_IN]! ) DEFINE(STATUS_RE_WE,![|-> TEX_IN \end{svb} \par\noindent\verb|status: realizable, enumerator = | $patsubst($1, ![\^\([0-9]*\)]!, ![^{\1}]!)${\tt;} \begin{svb} |-> DATA_IN status: realizable, enumerator = $1; |-> TEX_IN, DATA_IN]! ) DEFINE(EX_STATUS_UNIQUE_WE,![\end{svb} \par\noindent\hangindent=0.5in\hangafter=1\verb|status: unique, enumerator = | $patsubst($1, ![\^\([0-9]*\)]!, ![^{\1}]!)${\tt;} \begin{svb}]! ) DEFINE(TYPE_WE,![|-> TEX_IN \end{svb} \par\noindent\verb|type [$1,$2,$3]; status: enumerator = | $patsubst($4, ![\^\([0-9]*\)]!, ![^{\1}]!)${\tt;} \begin{svb} |-> DATA_IN type [$1,$2,$3]; status: enumerator = $4; |-> TEX_IN, DATA_IN]! ) DEFINE(DUAL_TRANSFORM,![|-> TEX_IN \end{svb} \par\noindent$\verb|$1 := $2|^T\kern5pt\verb|using | \{patsubst( ![$3]!, ![-\([0-9]+\)]!, ![\\ol{\1}]! )\}${\tt;} \begin{svb} |-> DATA_IN $1 := $2^T using {$3}; |-> TEX_IN, DATA_IN]! ) DEFINE(DUAL_TRANSFORM_CH,![|-> TEX_IN \end{svb} \par\noindent$\verb|$1 := $2|^T\kern5pt\verb|using | \{patsubst( ![$3]!, ![-\([0-9]+\)]!, ![\\ol{\1}]! )\}$\kern5pt{\tt + check;} \begin{svb} |-> DATA_IN $1 := $2^T using {$3} + check; |-> TEX_IN, DATA_IN]! ) DEFINE(DUAL_TRANSFORM_PLUS,![|-> TEX_IN \end{svb} \par\noindent\hangindent=0.5in\hangafter=1% $\verb|$1 := $2|^T\kern5pt\verb|using | \{patsubst( ![$3]!, ![-\([0-9]+\)]!, ![\\ol{\1}]! )\}$\kern5pt{\tt $4;} \begin{svb} |-> DATA_IN $1 := $2^T using {$3} $4; |-> TEX_IN, DATA_IN]! ) DEFINE(DUAL_TRANSFORM_PLUS2,![|-> TEX_IN \end{svb} \par\noindent\hangindent=0.5in\hangafter=1% $\verb|$1 := $2|^T\kern5pt\verb|using | \{patsubst( ![$3]!, ![-\([0-9]+\)]!, ![\\ol{\1}]! )\}$\\ {\tt $4;} \begin{svb} |-> DATA_IN $1 := $2^T using {$3} $4; |-> TEX_IN, DATA_IN]! ) DEFINE(DUAL_ORBIT,![|-> TEX_IN \end{svb} \par\noindent\hangindent=0.5in\hangafter=1% $\verb|$1 := $2|^T\kern5pt\verb|using {$3 : |$% {\tt patsubst( ![patsubst(![$4]!, ![ ]!)]!, ![,]!, ![,\\snap]!)}\verb|};| \begin{svb} |-> DATA_IN $1 := $2^T using {$3:$4}; |-> TEX_IN, DATA_IN]! ) DEFINE(DUAL_ORBIT_CH,![|-> TEX_IN \end{svb} \par\noindent\hangindent=0.5in\hangafter=1% $\verb|$1 := $2|^T\kern5pt\verb|using {$3 : |$% {\tt patsubst( ![patsubst(![$4]!, ![ ]!)]!, ![,]!, ![,\\snap]!)}% \verb|} + check;| \begin{svb} |-> DATA_IN $1 := $2^T using {$3:$4} + check; |-> TEX_IN, DATA_IN]! ) DEFINE(DUAL_ORBIT_PLUS,![|-> TEX_IN \end{svb} \par\noindent\hangindent=0.5in\hangafter=1% $\verb|$1 := $2|^T\kern5pt\verb|using {$3 : |$% {\tt patsubst( ![patsubst(![$4]!, ![ ]!)]!, ![,]!, ![,\\snap]!)}\verb|} $5;| \begin{svb} |-> DATA_IN $1 := $2^T using {$3:$4} $5; |-> TEX_IN, DATA_IN]! ) DEFINE(DUAL_ORBIT_PLUS2,![|-> TEX_IN \end{svb} \par\noindent\hangindent=0.5in\hangafter=1% $\verb|$1 := $2|^T\kern5pt\verb|using {$3 : |$% {\tt patsubst( ![patsubst(![$4]!, ![ ]!)]!, ![,]!, ![,\\snap]!)}\verb|}|\\ \verb|$5;| \begin{svb} |-> DATA_IN $1 := $2^T using {$3:$4} $5; |-> TEX_IN, DATA_IN]! ) DEFINE(CLASS_TO,![|-> TEX_IN \end{svb} \par\noindent \verb|$1|\kern5pt$\Longleftrightarrow$\kern5pt\verb|$2;| \begin{svb} |-> DATA_IN $1 <--> $2; |-> TEX_IN, DATA_IN]! ) DEFINE(EX_CLASS_TO,![\end{svb} \par\noindent \verb|$1|\kern5pt$\Longleftrightarrow$\kern5pt\verb|$2;| \begin{svb}]!) DEFINE(EX_CLASSIFICATION_OF,![\end{svb} \par\noindent \verb#classification of $1: $2#\kern5pt$\Longrightarrow$\kern5pt\verb|$3;| \begin{svb}]!) DEFINE(CLASSIFICATION_OF,![|-> TEX_IN \end{svb} \par\noindent \verb#classification of $1: $2#\kern5pt$\Longrightarrow$\kern5pt\verb|$3;| \begin{svb} |-> DATA_IN classification of $1: $2 --> $3; |-> TEX_IN, DATA_IN]! ) DEFINE(ICLASSIFICATION_OF,![|-> TEX_IN \end{svb} \par\noindent \verb# classification of $1: $2#\kern5pt$\Longrightarrow$\kern5pt\verb|$3;| \begin{svb} |-> inputs/code.data1 classification of $1: $2 --> $3; |-> TEX_IN, DATA_IN]! ) DEFINE(CLASSIFICATION_OF2,![|-> TEX_IN \end{svb} \par\noindent \verb#classification of $1: $2#\kern5pt$\Longrightarrow$ \par\noindent\verb| $3;| \begin{svb} |-> DATA_IN classification of $1: $2 --> $3; |-> TEX_IN, DATA_IN]! ) DEFINE(CLASSIFICATION_OF3,![|-> TEX_IN \end{svb} \par\noindent\verb#classification of $1: $2# \kern5pt$\Longrightarrow$\kern5pt\verb|$3| \par\noindent\verb| $4| \par\noindent\verb| $5;| \begin{svb} |-> DATA_IN classification of $1: $2 --> $3 $4 $5; |-> TEX_IN, DATA_IN]! ) DEFINE(CLASSIFICATION_OF4,![|-> TEX_IN \end{svb} \par\noindent \verb#classification of $1:# \par\noindent\verb# $2#\kern5pt$\Longrightarrow$ \par\noindent\verb| $3;| \begin{svb} |-> DATA_IN classification of $1: $2 --> $3; |-> TEX_IN, DATA_IN]! ) DEFINE(CLASSIFICATION_OF5,![|-> TEX_IN \end{svb} \par\noindent \verb#classification of $1:# \par\noindent\verb| $2|\kern5pt$\Longrightarrow$\kern5pt\verb|;| \begin{svb} |-> DATA_IN classification of $1: $2 --> ; |-> TEX_IN, DATA_IN]! ) DEFINE(TDEFINE, ![DEFINE($1,![|-> TEX_IN \end{svb} $2 \begin{svb} |-> DATA_IN $3 |-> TEX_IN, DATA_IN]! ) ]!) TDEFINE(NOTE, ![\par\noindent\hangindent=0.5in\hangafter=1\verb|note: |$1\verb|;|]!, ![note: $1;]!) TDEFINE(CREDIT, ![\par\noindent\verb|credit: |$1 [.$2.]\verb|;|]!, ![credit: $1 [.$2.];]!) TDEFINE(CREDITX, ![\par\noindent{\tt credit:\ }$1{\tt;}]!, ![credit: $1;]!) TDEFINE(WECAT, ![\par\noindent% \verb@$1 :: {@$patsubst($2, ![\^\([0-9]*\)]!, ![^{\1}]!)$\verb|};|]!, ![$1 :: {$2};]!) TDEFINE(WECAT2, ![\par\noindent\verb|$1| \par\noindent\verb| $2 :: {| $patsubst($3, ![\^\([0-9]*\)]!, ![^{\1}]!)$\verb|};|]!, ![$1 $2 :: {$3};]!) DEFINE(WECAT2B,![|-> TEX_IN $1 \end{svb} \par\noindent \verb| :: {|$patsubst($2, ![\^\([0-9]*\)]!, ![^{\1}]!)$\verb|};| \begin{svb} |-> DATA_IN $1 :: {$2}; |-> TEX_IN, DATA_IN]! ) TDEFINE(WECAT2C, ![\par\noindent% {\obeyspaces\obeylines\tt $1}% \verb@ :: {@$patsubst($2, ![\^\([0-9]*\)]!, ![^{\1}]!)$\verb|};|]!, ![$1 :: {$2};]!) DEFINE(EX_WECAT,![\end{svb} \par\noindent\verb|$1 :: {|$patsubst($2, ![\^\([0-9]*\)]!, ![^{\1}]!)$\verb|};| \begin{svb}]!) DEFINE(EX_WECAT2,![\end{svb} \par\noindent\verb|$1| \par\noindent\verb| $2 :: {| $patsubst($3, ![\^\([0-9]*\)]!, ![^{\1}]!)$\verb|};| \begin{svb}]!) DEFINE(WECAT3,![|-> TEX_IN \end{svb} \par\noindent\verb|$1|\par\noindent\verb| $2|\par\noindent \verb| $3 :: {|$patsubst($4, ![\^\([0-9]*\)]!, ![^{\1}]!)$\verb|};| \begin{svb} |-> DATA_IN $1 $2 $3 :: {$4}; |-> TEX_IN, DATA_IN]! ) DEFINE(WECATX,![|-> TEX_IN \end{svb} \par\noindent\verb|$1:: {|$patsubst($2, ![\^\([0-9]*\)]!, ![^{\1}]!)$\verb|};| \begin{svb} |-> DATA_IN $1:: {$2}; |-> TEX_IN, DATA_IN]! ) DEFINE(CYCLIC_WE,![|-> TEX_IN \end{svb} \par\noindent \verb|$1 := Cyclic(1, $2, $3, $4) :: {|$patsubst($5, ![\^\([0-9]*\)]!, ![^{\1}]!)$\verb|};| \begin{svb} |-> DATA_IN $1 := Cyclic(1, $2, $3, $4) :: {$5}; |-> TEX_IN, DATA_IN]! ) DEFINE(RCYCLIC_WE,![|-> TEX_IN \end{svb} \par\noindent \verb|$1 := Cyclic($2, $3, $4, $5) :: {|$patsubst($6, ![\^\([0-9]*\)]!, ![^{\1}]!)$\verb|};| \begin{svb} |-> DATA_IN $1 := Cyclic($2, $3, $4, $5) :: {$6}; |-> TEX_IN, DATA_IN]! ) DEFINE(EX_CYCLIC_WE,![\end{svb} \par\noindent \verb|$1 := Cyclic(1, $2, $3, $4) :: {|$patsubst($5, ![\^\([0-9]*\)]!, ![^{\1}]!)$\verb|};| \begin{svb}]!) DEFINE(sn,![ |-> TEX_IN ) trunc show newline ( |-> TEX_IN, DATA_IN]!) DEFINE(EX_sn,![ |-> TEX_IN ) trunc show newline ( |-> TEX_IN]!) DEFINE(coderef,![ |-> TEX_IN ) trunc show /Times-Roman findfont 5 scalefont setfont gsave 0 3.4 rmoveto ([) show (<.$1.>) dup length 3 sub 1 exch getinterval show (]) show grestore cour ( |-> TEX_IN, DATA_IN ]!) DEFINE(EX_coderef,![ |-> TEX_IN ) trunc show /Times-Roman findfont 5 scalefont setfont gsave 0 3.4 rmoveto ([) show (<.$1.>) dup length 3 sub 1 exch getinterval show (]) show grestore cour ( |-> TEX_IN ]!) DEFINE(new_no,![DEFINE(![newresultcounter]!,incr(newresultcounter))no [$1,$2,$3];]!) DEFINE(newd,![DEFINE(![newresultcounter]!,incr(newresultcounter)) |-> TEX_IN ) trunc show 10.8 0 rmoveto /Symbol findfont 5 scalefont setfont gsave -3 0 rmoveto show grestore cour ( |-> TEX_IN, DATA_IN ]!) DEFINE(EX_newd,![DEFINE(![newresultcounter]!,incr(newresultcounter)) |-> tex/code.tex1 ) trunc show 10.8 0 rmoveto /Symbol findfont 5 scalefont setfont gsave -3 0 rmoveto show grestore cour ( |-> tex/code.tex1 ]!) DEFINE(newd1,![DEFINE(![newresultcounter]!,incr(newresultcounter)) |-> TEX_IN ) trunc show 5.4 0 rmoveto /Symbol findfont 5 scalefont setfont gsave -3 0 rmoveto show grestore cour ( |-> TEX_IN, DATA_IN ]!) DEFINE(newd1k,![DEFINE(![newresultcounter]!,incr(newresultcounter)) |-> TEX_IN ) trunc show 5.4 0 rmoveto $1 0 rmoveto /Symbol findfont 5 scalefont setfont gsave -3 0 rmoveto show grestore cour ( |-> TEX_IN, DATA_IN ]!) DEFINE(quest,![ |-> TEX_IN ) trunc show 10.8 0 rmoveto /Times-Bold findfont 5 scalefont setfont gsave -2 4.4 rmoveto (?) show grestore cour ( |-> TEX_IN, DATA_IN ]!) DEFINE(quest1,![ |-> TEX_IN ) quest1body ( |-> TEX_IN, DATA_IN ]!) DEFINE(newdquest,![DEFINE(![newresultcounter]!,incr(newresultcounter)) |-> TEX_IN ) trunc show 10.7 0 rmoveto /Times-Bold findfont 5 scalefont setfont gsave -2 4.4 rmoveto (?) show /Symbol findfont 5 scalefont setfont -3.3 -4.4 rmoveto show grestore cour ( |-> TEX_IN, DATA_IN ]!) DEFINE(newdquest1,![DEFINE(![newresultcounter]!,incr(newresultcounter)) |-> TEX_IN ) newdquest1body ( |-> TEX_IN, DATA_IN ]!) DEFINE(pshead,![ |-> TEX_IN {\obeyspaces\def\LAcitemark{}\def\RAcitemark{} \wpost{$1}{$1}{ /LM 0 def /newline { currentpoint 12 sub exch pop LM exch moveto } def /cour { /Courier findfont 9 scalefont setfont } def /trunc { dup length 2 sub 1 exch getinterval } def /quest1body { trunc show 5.4 0 rmoveto /Times-Bold findfont 5 scalefont setfont gsave -2 4.4 rmoveto (?) show grestore cour } def /newdquest1body { trunc show 5.4 0 rmoveto /Times-Bold findfont 5 scalefont setfont gsave -2 4.4 rmoveto (?) show /Symbol findfont 5 scalefont setfont -3.3 -4.4 rmoveto show grestore cour } def cour newpath 0 0 moveto newline (]!) DEFINE(psheadx,![ |-> TEX_IN \end{svb} \vspace*{-0.2in} \par\noindent {\obeyspaces\def\LAcitemark{}\def\RAcitemark{} \wpost{$1}{$1}{ /LM 0 def /newline { currentpoint 12 sub exch pop LM exch moveto } def /cour { /Courier findfont 9 scalefont setfont } def /trunc { dup length 2 sub 1 exch getinterval } def /quest1body { trunc show 5.4 0 rmoveto /Times-Bold findfont 5 scalefont setfont gsave -2 4.4 rmoveto (?) show grestore cour } def /newdquest1body { trunc show 5.4 0 rmoveto /Times-Bold findfont 5 scalefont setfont gsave -2 4.4 rmoveto (?) show /Symbol findfont 5 scalefont setfont -3.3 -4.4 rmoveto show grestore cour } def cour newpath 0 0 moveto newline (]!) DEFINE(psnext,![) trunc show newline newline ( |-> TEX_IN, DATA_IN]!) DEFINE(EX_psnext,![) trunc show newline newline ( |-> tex/code.tex1]!) DEFINE(pstail,![|-> TEX_IN ) trunc show }}]!) DEFINE(pstailx,![|-> TEX_IN ) trunc show }} \begin{svb} |-> TEX_IN, DATA_IN ]!) DEFINE(PBLOCK, ![\section[patsubst(![$1]!, ![\[[^]]*\]]!, ![\\protect{$\&$}]!)]% {patsubst(![$1]!, ![\[[^]]*\]]!, ![\\boldmath{\&}]!)}]!) DEFINE(PRINT, ![cerr << "$1 = " << $1 << "\n";]!) DEFINE(APPLY1, ![$\verb|$1(|$2\verb|)|$]!)