C.3 Program synthesis and execution

Using intermediate reasoning steps has a long history in program synthesis and execution (Zaremba
and Sutskever, 2014, inter alia). Recent work along in this direction has included a number of
architectural innovations (Cai et al., 2017; Dong et al., 2019; Yan et al., 2020), as well as the use of
large language models (Chen et al., 2021; Austin et al., 2021). The program execution work closest to
ours is perhaps Nye et al. (2021), which show that large language models can perform up to 10-digit
addition, evaluate polynomials, and execute python programs. Whereas generating a program and
then executing it can be viewed as a type of reasoning, our work generalizes such domain-speciﬁc
primitives to natural language, which is open-domain and relevant to any text-to-text NLP task in
principle.

C.4 Numeric and logical reasoning
Chain-of-Thought Prompting Elicits Reasoning in Large Language Models