Is the following a valid proof? And also is there an easier way to prove it?
Let P(n) be the proposition that:
$\mathbb{Z}_2^n$ contains $2^n$ elements
Clearly $\mathbb{Z}_2^1$ contains $2^1 = 2$ elements: $\{0, 1\}$
Suppose P(k) true:
$\mathbb{Z}_2^k$ contains $2^k$ elements
We will prove P(k+1):
$\mathbb{Z}_2^{k+1}$ contains $2^{k+1}$ elements
It is clear that $\mathbb{Z}_2^{k+1}$ contains every vector in $\mathbb{Z}_2^{k}$ with either 0 or 1 appended to it.
So $\mathbb{Z}_2^{k+1}$ contains $2^{k} + 2^{k} = 2(2^k) = 2^{k+1}$ vectors.
Thus by induction we have proven $\mathbb{Z}_2^{n}$ contains $2^n$ vectors.
The proof is valid, but especially for proofs of basic facts I would avoid sentences that start with "It is clear...".
One way to clarify: $\mathbb{Z}_2^{k+1}$ is equal to the disjoint union $A_0\sqcup A_1$, where $A_i = \{(x_1, \ldots, x_k, i):\,x_i\in\mathbb{Z}_2\}$. Both $A_0$ and $A_1$ are in bijection with $\mathbb{Z}_2^k$ by omitting the last coordinate. So $\# \mathbb{Z}_2^{k+1} = \# A_0 + \# A_1=\#\mathbb{Z}_2^k+\#\mathbb{Z}_2^k$.
I can't think of an easier proof of this but the exact same argument can be used to prove that $\# (X^k) = (\# X)^k$ for any finite set $X$, which to me makes the special case $X=\mathbb{Z}_2$ clearer.