[< 0 > + < 1 > * < 2 >] : nat [< b > + < b > * < 2 >] : nat [<< # 0 >>] : option nat [1 {f 1}] : Expr fun (x : nat) (y z : Expr) => [1 + y z + {f x}] : nat -> Expr -> Expr -> Expr fun e : Expr => match e with | [x y + z] => [x + y z] | [1 + 1] => [1] | _ => [e + e] end : Expr -> Expr [(1 + 1)] : Expr