Notes: Tao's axioms and original proposition statement and proof are given below. Similar questions have been asked here and here, but I was not able to resolve my issues. In particular, I have realized, it seems, there is a great deal of set theory going on "underneath the hood", and I find it rather conceptually and logically problematic that Tao introduces this proposition in a chapter before any set theory is even discussed. He remarks in a footnote how the proposition can be formulated more rigorously in the language of set theory, but he leaves that as the last exercise in a section in the chapter on set theory. This seems pretty sloppy to me, but I'm doing the best I can to follow what he's trying to communicate and the how/why of his proof. I found this blog post from Keith Devlin to be interesting but a little over my head. Is there any real good way to understand Tao's proposition without a thorough grounding in axiomatic set theory?
EDIT: I have reformulated my question as largely a request for people to comment on or critique my attempt at "a more fleshed out inductive proof." Since the proof is by induction, I'll try to outline my thoughts according to the typical way an induction proof works. Any comments as to where I am going wrong or what needs to be fixed would be greatly appreciated.
Proof attempt:
Base case: The procedure gives a single value to $a_0$, namely $c$. My understanding is that we basically assume a natural number $c$ exists due to Assumption 2.6, and we simply make the definition $a_0\colon=c$. None of the other definitions $a_{n++}\colon=f_n(a_n)$ will redefine the value of $a_0$ because the way in which a natural number $a_n$ is assigned to another natural number $n$ is by the assignment $a_{n++}\colon=f_n(a_n)$ which involves the successor, and Axiom 2.3 tells us that $n++\neq0$ for every natural number $n$. Hence, it's impossible to define (again) $a_0$ once the procedure has begun.
Inductive step: Suppose inductively that the procedure gives a single value to $a_n$. We want to show that a single value is then given to $a_{n++}$, namely $a_{n++}\colon=f_n(a_n)$. We should first note that $a_n$ being single-valued is critical because $a_{n++}$ is going to be defined to be $a_{n++}\colon=f_n(a_n)$, and it would not be sensible to start thinking about $a_{n++}$ being single-valued if $a_{n++}$ were defined in terms of a function whose argument was multi-valued (i.e., if $a_n$ were multi-valued, then we could reasonably expect $f_n(a_n)$ to return multiple distinct values as well). It may seem as though we can now safely rely on $a_{n++}$ being single-valued, but there is a concern we must address, namely the possibility that for a later natural number $m$ the corresponding definition $a_{m++}\colon=f_m(a_m)$ could somehow cause $a_{n++}$ to be multi-valued. How?
If we came across an $m$ for which $n++=m++$ but $f_n(a_n)\neq f_m(a_m)$, then we would have an issue because $n++=m++$ implies that $a_{n++}=a_{m++}$. Why would this be a problem? Well, with $a_{n++}\colon= f_n(a_n)$ and $a_{m++}\colon= f_m(a_m)$, we would have $a_{n++}=f_n(a_n),f_m(a_m)$ even though $f_n(a_n)\neq f_m(a_m)$, indicating that $a_{++}$ would not have a single value assigned to it, as desired. How do we resolve this potential issue?
Suppose that later in the process we came across an $m$ corresponding to the definition $a_{m++}\colon= f_m(a_m)$, where we also had $n++=m++$. Since $n++=m++$, it must be the case that $n=m$ by Axiom 2.4. Hence, we must also have $f_n(a_n)=f_m(a_m)$, thus showing that none of the other definitions $a_{m++}\colon= f_m(a_m)$ will redefine the value of $a_{n++}$, and hence only a single value is assigned to $a_{n++}$.
This completes the induction, and so $a_n$ is defined for each natural number $n$, with a single value assigned to each $a_n$.
Content by Tao:
Axiom 2.1. $0$ is a natural number.
Axiom 2.2. If $n$ is a natural number, then $n{++}$ is also a natural number.
Axiom 2.3. $0$ is not the successor of any natural number ; i.e., we have $n{++} \ne 0$ for every natural number $n$.
Axiom 2.4. Different natural numbers must have different successors ; i.e., if $n, m$ are natural numbers and $n \ne m$, then $n{++} \ne m{++}$. Equivalently, if $n{++} = m{++}$, then we must have $n=m$.
Axiom 2.5. (Principle of mathematical induction). Let $P(n)$ be any property pertaining to a natural number $n$. Suppose that $P(0)$ is true, and suppose that whenever $P(n)$ is true, $P(n{++})$ is also true. Then $P(n)$ is true for every natural number $n$.
Assumption 2.6. (Informal) There exists a number system $\mathbb{N}$, whose elements we will call natural numbers, for which Axioms 2.1-2.5 are true.
Proposition 2.1.16 (Recursive definitions). Suppose for each natural number $n$, we have some function $f_{n} : \mathbb{N} \rightarrow \mathbb{N}$ from the natural numbers to the natural numbers. Let $c$ be a natural number. Then we can assign a unique natural number $a_{n}$ to each natural number $n$, such that $a_{0} = c$ and $a_{n{++}} = f_{n} (a_{n})$ for each natural number $n$.
Proof. (Informal) We use induction. We first observe that this procedure gives a single value to $a_0$, namely $c$. (None of the other definitions $a_{n{++}}:= f_{n} (a_n)$ will redefine the value of $a_0$, because of Axiom 2.3.) Now suppose inductively that the procedure gives a single value to $a_n$. Then it gives a single value to $a_{n{++}}$, namely $a_{n{++}}:= f_{n} (a_n)$. (None of the other definitions $a_{m{++}}:= f_{m} (a_{m})$ will redefine the value of $a_{n{++}}$, because of Axiom 2.4.) This completes the induction, and so $a_n$ is defined for each natural number $n$, with a single value assigned to each $a_n$.