open nat

inductive tree (A : Type)
| leaf : A → tree
| node : tree → tree → tree

-- set_option elaborator.lift_coercions false

definition size {A : Type} (t : tree A) :nat:=
tree.rec (λ a, 1) (λ t₁ t₂ n₁ n₂, n₁ + n₂) t

--set_option elaborator.lift_coercions true

definition size2 {A : Type} (t : tree A) :nat:=
tree.rec (λ a, 1) (λ t₁ t₂ n₁ n₂, n₁ + n₂) t
