\newcommand{\bnfeq}{\mathrel{::=}\;} \newcommand{\bnfor}{\mathrel{\vert}} \newcommand{\paramrel}[3]{#2 \mathrel{\approx_{#1}} #3} \newcommand{\nparamrel}[3]{#2 \mathrel{{\not\approx}_{#1}} #3} \newcommand{\vrel}[2]{\paramrel{\mathsf{val}}{#1}{#2}} \newcommand{\erel}[2]{\paramrel{\mathsf{expr}}{#1}{#2}} \newcommand{\clerel}[2]{\paramrel{\mathsf{cl-expr}}{#1}{#2}} \newcommand{\envrel}[2]{\paramrel{\mathsf{env}}{#1}{#2}} \newcommand{\resrel}[2]{\paramrel{\mathsf{res}}{#1}{#2}} \newcommand{\runrel}[2]{\paramrel{\mathsf{run}}{#1}{#2}} \newcommand{\progrel}[2]{\paramrel{\mathsf{prog}}{#1}{#2}} \newcommand{\sem}[1]{{\llbracket{#1}\rrbracket}} \newcommand{\Fam}[2]{{(#2)}^{#1}} \newcommand{\match}[2]{\mathtt{match}(#1,#2)} \newcommand{\var}[1]{\mathtt{#1}} \newcommand{\pK}{\mathtt{K}} \newcommand{\any}{\mathtt{\_}} % \equiv is already taken \newcommand{\SimpleEquiv}[3]{\mathsf{equiv}(#1, #2, #3)} \newcommand{\SourceEquiv}[2]{\mathsf{equiv}(#1, #2)} \newcommand{\Equiv}[4]{\mathsf{equiv}(#1, #2, #3, #4)} \newcommand{\Equivrel}[4]{#1 \vdash_{#4} #2 \approx #3} \newcommand{\covers}[2]{#1 \mathrel{\mathsf{covers}} #2} \newcommand{\Yes}{\mathsf{Yes}} \newcommand{\No}[2]{\mathsf{No}(#1, #2)} \newcommand{\Root}{\mathsf{Root}} \newcommand{\cle}{\underline{e}} \newcommand{\NoMatch}{\mathsf{NoMatch}} \newcommand{\Match}[1]{\mathsf{Match}(#1)} \newcommand{\Leaf}[1]{\mathsf{Leaf}(#1)} \newcommand{\Failure}{\mathsf{Failure}} \newcommand{\Switch}[3]{\mathsf{Switch}(#1, #2, #3)} \newcommand{\Guard}[3]{\mathsf{Guard}(#1, #2, #3)} \newcommand{\Int}[1]{\mathsf{int}\,#1} \newcommand{\Tag}[1]{\mathsf{tag}\,#1} \newcommand{\emptyqueue}{\mathord{[]}} \newcommand{\Dfb}{D_{\mathsf{fb}}} \newcommand{\trim}[2]{\mathsf{trim}(#1, #2)}