Section Tabulate.
Implicit Type  X: Type.
Fixpoint tab {X} (f: nat -> X) k  :=
match k with
| 0 => nil
| S n => tab f n ++ [f n]
end.

Lemma tab_S X (f: nat -> X) n:
tab f (S n) = f 0 :: tab (fun k => f (S k)) n.