Introductions
If you've just finished the natural number game you may be familiar with the intro
tactic, this can be used to create implications / functions. However this tactic is rarely the golfiest.
If your intro is the first part of your proof then an implicit forall is probably better. Compare:
def q:list ℕ→ℕ:=by{intro x,induction x,exact 0,exact x_hd+x_ih}
with
def q(x:list ℕ):ℕ:=by{induction x,exact 0,exact x_hd+x_ih}
This is frequently always your best option. However if the type of your function can be inferred you have other options.
def f:ℕ→ℕ:=by{intro x,exact x+3}
def f(x:ℕ):ℕ:=by{exact x+3}
def f:=λx,by{exact x+3}
def f(x):=by{exact x+3}
These are ordered by length so implicit forall (the last option is still implicit forall) is the shortest. But the lambda can expression can have the def f:=
removed if the function is your submission, making it the shortest in that case.