Alphabet

abs:(a → a) → aa
app:aa → a → a
let:ta → (a → ta) → ta
return:a → ta

Variables

F:a → a
Y:a
U:aa
V:a
I:a → ta
P:ta
X1:ta
Z1:a → ta
G1:a → ta

Rules

app · (abs · (λ%X:a.F · %X)) · YF · Y
abs · (λ%Y:a.app · U · %Y)U
let · (return · V) · (λ%Z:a.I · %Z)I · V
let · P · (λ%U:a.return · %U)P
let · (let · X1 · (λ%W:a.Z1 · %W)) · (λ%V:a.G1 · %V)let · X1 · (λ%G:a.let · (Z1 · %G) · (λ%F:a.G1 · %F))