inductive Expr where
  | app (f : String) (args : Array Expr)

def Expr.size (e : Expr) : Nat := Id.run do
  match e with
  | app f args =>
    let mut sz := 1
    for h : i in *...args.size do
      sz := sz + size args[i]
    return sz

namespace Ex2
inductive Expr where
  | app (f : String) (args : List Expr)

def Expr.size (e : Expr) : Nat := Id.run do
  match e with
  | app f args =>
    let mut sz := 1
    for h : arg in args do
      sz := sz + size arg
    return sz

end Ex2
