(******************************)
(** ** Last element of a list *)
(******************************)
(** [last l d] returns the last element of the list [l], or the default value [d] if [l] is empty. *)
Fixpoint last (l:list A) (d:A) : A :=
match l with
| [] => d
| [a] => a
| a :: l' => last l' d
end.

Lemma last_last : forall l a d, last (l ++ [a]) d = a.
Fixpoint removelast (l:list A) : list A :=
match l with
| [] =>  []
| [a] => []
| a :: l' => a :: removelast l'
end.