\newif\ifacmart \acmarttrue \ifacmart \documentclass[acmsmall, anonymous, review, natbib=false, pbalance]{acmart} \else \documentclass[a4paper]{article} \fi %% Package Imports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Provided by acmart \ifacmart\else \usepackage{amsthm} %% proof environments \fi %% Incompatible with acmart \ifacmart\else \usepackage[ warnings-off={mathtools-colon,mathtools-overbracket} ]{unicode-math} %% math symbols \usepackage[subtle, margins=tight]{savetrees} \fi \usepackage[ datamodel=acmdatamodel, style=acmnumeric, giveninits, doi, eprint = false ]{biblatex} %% bibliography configuration \usepackage{booktabs} %% table formatting \usepackage{ebproof} %% proof trees \usepackage{expl3} %% Latex 3 \usepackage{enumitem} %% format contributions list \usepackage{float} %% forcing appendix figures \usepackage{hyperref} %% hyperlinks within document \usepackage{mathtools} %% matrix alignment \usepackage[outputdir=build]{minted} %% code formatting \usepackage{stackrel} %% Annotating judgements \usepackage{subcaption} %% subfigures with captions \usepackage{subfiles} %% splitting file into sections \usepackage{thmtools} %% proof environments \usepackage{tikz} %% diagram \usepackage[dvipsnames]{xcolor} %% color TODO and FIXME \usepackage{xr} %% cross reference between sections %% After hyperref \usepackage{cleveref} %% easier citations %% Document Metadata %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \author{Greg Brown} \ifacmart \orcid{0009-0000-3401-8637} \affiliation{% \institution{University of Edinburgh} \city{Edinburgh} \country{UK} } \email{greg.brown01@ed.ac.uk}{} \fi \ifacmart \acmJournal{PACMPL} %% \acmConference[ICFP '25]{}{January 21, 2025}{Denver, CO, USA} \fi \ifacmart \setcopyright{none} \fi \title{ARTiST:\ Adding Regular Types in System~T} \ifacmart \keywords{} \fi %% Package Configuration %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% biblatex \addbibresource{\subfix{main.bib}} %% hyperref \ifacmart\else \makeatletter \hypersetup{ pdftitle={\@title}, pdfauthor={\@author}, } \makeatother \fi %% Minted centered \RecustomVerbatimEnvironment{Verbatim}{BVerbatim}{} %% xr \externaldocument[M-]{\subfix{main}} %% Possessive textcite \DeclareNameWrapperFormat{labelname:poss}{#1's} \DeclareFieldFormat{shorthand:poss}{% \ifnameundef{labelname}{#1's}{#1}} \DeclareFieldFormat{citetitle:poss}{\mkbibemph{#1}'s} \DeclareFieldFormat{label:poss}{#1's} \newrobustcmd*{\posscitealias}{% \AtNextCite{% \DeclareNameWrapperAlias{labelname}{labelname:poss}% \DeclareFieldAlias{shorthand}{shorthand:poss}% \DeclareFieldAlias{citetitle}{citetitle:poss}% \DeclareFieldAlias{label}{label:poss}}} \newrobustcmd*{\posscite}{% \posscitealias% \textcite} \newrobustcmd*{\Posscite}{\bibsentence\posscite} \newrobustcmd*{\posscites}{% \posscitealias% \textcites} %% Theorem Environments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifacmart\else \declaretheorem[ style=plain, numberwithin=section ]{definition} \declaretheorem[ numberwithin=section, sibling=definition ]{lemma,corollary,proposition,theorem, conjecture} \declaretheorem[ style=remark, numberwithin=section, sibling=definition ]{remark,example} \fi \renewcommand*{\textcitedelim}{\addcomma\addspace\iflastcitekey{\bibstring{and}\addspace}{}} %% Custom Macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Needed for compatibility \ifacmart\else \newcommand{\bibliofont}{\footnotesize} \fi % Psuedocode \newminted[systemt]{'lexer.py:SystemTLexer -x'}{} \newmintinline[systemtinline]{'lexer.py:SystemTLexer -x'}{} % TODOS and such \newcommand\lang{{\color{Green} ARTiST}} \newcommand\TODO[1]{{\color{Blue}TODO:\ {#1}}} \newcommand\FIXME[1]{{\color{Red}FIXME:\ {#1}}} % Quantification: e.g. \rangeover{x_i}{i < n} \newcommand\rangeover[2]{\overrightarrow{#1}} % Judgements for typing and such \newcommand\judgement[4][]{{#2} \vdash^{#1} {#3} : {#4}} \newcommand\jdgmnt[3]{{#2} \vdash {#3}~\mathrm{#1}} %%% Term syntax %% Godel encoding \newcommand\encode[1]{\llcorner {#1} \lrcorner} %% Tuples \DeclarePairedDelimiter\tuple{\langle}{\rangle} \newcommand\lettm[3]{\mathsf{let}~{#1} \coloneq {#2}~\mathsf{in}~{#3}} %% Naturals \newcommand\nat{\mathsf{N}} \newcommand\zero{\ensuremath{\mathsf{zero}}} \newcommand\suc{\ensuremath{\mathsf{suc}}} \newcommand\primreckw{\ensuremath{\mathsf{primrec}}} \NewDocumentCommand\primrec{m m g}{% \primreckw~{#1}~{#2}\IfValueT{#3}{~{#3}}% } \newcommand\pairingkw{\ensuremath{\mathsf{pair}}} \NewDocumentCommand\pairing{m m}{% \pairingkw~{#1}~{#2}% } %% Functors \newcommand\mapkw{\ensuremath{\mathsf{map}}} % e.g. \maptm{X}{1 + X} \newcommand\maptm[2]{\mapkw_{\Lambda {#1}.{#2}}} %% Recursive types \newcommand\foldkw{\ensuremath{\mathsf{fold}}} \newcommand\foldtm[3]{\foldkw~{#1}~\mathsf{with}~{{#2}.~{#3}}} %% Sums \newcommand\matchtm[2]{\mathsf{match}~{#1}~\mathsf{with}~{#2}} \newcommand\casetm[5]{\matchtm{#1}{\rangeover{\tuple{{#4}, {#2}}.~{#3}}{{#4}<{#5}}}} %%% Substitution \ExplSyntaxOn \NewDocumentCommand \squid_subpart:nn {m m} {{#1} \mapsto {#2}} \NewDocumentCommand \squid_contsub:n {> {\SplitArgument{1}{/}} m} { \squid_subpart:nn #1 \squid_checksub } \NewDocumentCommand \squid_checksub {O{\parallel}} { \peek_meaning_ignore_spaces:NTF \bgroup {#1 \squid_contsub:n} {]} } \NewDocumentCommand \squid_startsub:n {m} { {#1} [ \squid_checksub [] } \NewDocumentCommand \sub {m > {\SplitList{,}} m} { \squid_startsub:n {#1} #2 } \ExplSyntaxOff %% Document %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} \ifacmart\else \maketitle{} \fi \begin{abstract} G\"odel's System T is a simple calculus that performs computation. The absence of any type abstractions, such as products or sums, along with the limited form of recursion makes using System T as a target language difficult. In this paper we introduce \lang{}, a new intermediate language. One can compile \lang{} into System~T using well-known type encodings, and we have written this algorithm within \lang{} itself. We also describe a compiler for \lang{} written in Idris 2, featuring an intrinsically well-scoped AST and runtime-erased type-checking proofs. \end{abstract} \ifacmart \maketitle{} \fi %% Body \subfile{sec/intro.ltx} \subfile{sec/systemt.ltx} \subfile{sec/lang.ltx} \subfile{sec/embedding.ltx} \subfile{sec/reducer.ltx} \subfile{sec/compiler.ltx} \subfile{sec/related.ltx} \printbibliography{} \appendix \end{document}