I am studying the (basics of) solving functional equations. My teacher stipulates that we check any solutions obtained by substitution. Similar guidelines are given in this IMO training material.
For a typical example, consider $f:\mathbb{R} \setminus \{0\} \mapsto \mathbb{R}$
$$ 2f(x) + f \left( \frac{1}{x} \right) = x.$$
The substitutions $x \mapsto y$ and $x \mapsto \frac{1}{y}$ yield (after some algebra) the solution $f(y) = \frac{2y}{3} - \frac{1}{3y}$. Verifying, we see this is indeed a solution.
My question: In algebra we have some well-known possibilities how extraneous solutions can appear. Are there additional ways of obtaining extraneous solutions in functional equations?
Let's address solutions in algebra first and then move to functional equations. Suppose you have an equation $F_1(x) = 0$ where you are solving for $x$. Then you perform some transformation(s) to yield $F_2(x) = 0$.
In general, there are 3 cases:
For example, $f(x) = g(x) \implies f^2 (x) = g^2(x)$, but the inverse does not always hold. Hence extraneous solutions can arise and you must check your final solution against $f(x) = g(x)$.
The logic is similar for functional equations. Note that substitution, the most common tool for solving functional equations, is not an equivalence transformation. Say we are solving the functional equation $F(x, f) = 0 \ \forall x \in \mathbb{R}$ for $f: \mathbb{R} \to \mathbb{R}$, and we substitute $x \mapsto g(x)$ for some function $g: \mathbb{R} \to \mathbb{R}$. Clearly, $$ \left( F(x, f) = 0 \ \forall x \in \mathbb{R} \right) \implies \left( F(g(x), f) = 0 \ \forall x \in \mathbb{R} \right), \tag{1}$$ but the inverse does not always hold.
$(1)$ becomes an equivalence if $g$ is a bijection, but this is rarely the case. E.g., if you substitute $x \mapsto a$ for some number $a \in \mathbb{R}$, then it is not bijective and extraneous solutions may arise. This is the reason why in practically all applications the final solution must be checked and it is not worth checking every substitution for bijectivity just so that you wouldn't need to check the final solution.