Proceed by the Principle of Structural Induction on the bottom-up specification of predicate logic, applied to $\mathbf A$. If $\mathbf A = p \left({\tau_1, \ldots, \tau_n}\right)$, then: :$\mathbf A \left({x \gets \tau}\right) = p \left({\tau_1 \left({x \gets \tau}\right), \ldots, \tau_n \left({x \gets \tau}\right)}\right)$ where $\tau_i \left({x \gets \tau}\right)$ is the substitution instance of $\tau_i$. Now: {{begin-eqn}} {{eqn|l = \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf A \left({x \gets \tau}\right) }\right) } \left[{\sigma}\right]      |r = \mathop{ \operatorname{val}_{\mathcal A} \left({p \left({\tau_1 \left({x \gets \tau}\right), \ldots, \tau_n \left({x \gets \tau}\right)}\right) }\right) } \left[{\sigma}\right] }} {{eqn|r = p_{\mathcal A} \left({ \mathop{ \operatorname{val}_{\mathcal A} \left({\tau_1 \left({x \gets \tau}\right) }\right) } \left[{\sigma}\right], \ldots, \mathop{ \operatorname{val}_{\mathcal A} \left({\tau_n \left({x \gets \tau}\right) }\right) } \left[{\sigma}\right] }\right)      |c = Definition of value under $\sigma$ }} {{eqn|r = p_{\mathcal A} \left({ \mathop{ \operatorname{val}_{\mathcal A} \left({\tau_1}\right) } \left[{\sigma + \left({x / a}\right)}\right], \ldots, \mathop{ \operatorname{val}_{\mathcal A} \left({\tau_n}\right) } \left[{\sigma + \left({x / a}\right)}\right] }\right)      |c = Substitution Theorem for Terms }} {{eqn|r = \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf A}\right) } \left[{\sigma + \left({x / a}\right)}\right]      |c = Definition of value under $\sigma + \left({x / a}\right)$ }} {{end-eqn}} Suppose $\mathbf A = \neg \mathbf B$ and the induction hypothesis applies to $\mathbf B$. Then since $\tau$ is also free for $x$ in $\mathbf B$: {{begin-eqn}} {{eqn|l = \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf A \left({x \gets \tau}\right) }\right) } \left[{\sigma}\right]      |r = f^\neg \left({ \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf B}\right) } \left[{\sigma}\right] }\right)      |c = Definition of value under $\sigma$ }} {{eqn|r = f^\neg \left({ \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf B}\right) } \left[{\sigma + \left({x / a}\right)}\right] }\right)      |c = Induction Hypothesis }} {{eqn|r = \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf A}\right) } \left[{\sigma + \left({x / a}\right)}\right]      |c = Definition of value under $\sigma + \left({x / a}\right)$ }} {{end-eqn}} Suppose $\mathbf A = \mathbf B \circ \mathbf B'$ for $\circ$ one of $\land, \lor, \implies, \iff$ and the induction hypothesis applies to $\mathbf B, \mathbf B'$. Then since $\tau$ is also free for $x$ in $\mathbf B$ and $\mathbf B'$: {{begin-eqn}} {{eqn|l = \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf A \left({x \gets \tau}\right) }\right) } \left[{\sigma}\right]      |r = f^\circ \left({ \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf B}\right) } \left[{\sigma}\right], \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf B}\right) } \left[{\sigma}\right] }\right)      |c = Definition of value under $\sigma$ }} {{eqn|r = f^\circ \left({ \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf B}\right) } \left[{\sigma + \left({x / a}\right)}\right], \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf B}\right) } \left[{\sigma + \left({x / a}\right)}\right] }\right)      |c = Induction Hypothesis }} {{eqn|r = \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf A}\right) } \left[{\sigma + \left({x / a}\right)}\right]      |c = Definition of value under $\sigma + \left({x / a}\right)$ }} {{end-eqn}} Suppose $\mathbf A = \exists y: \mathbf B$ or $\mathbf A = \forall y: \mathbf B$, and the induction hypothesis applies to $\mathbf B$. Because $\tau$ is free for $x$ in $\mathbf A$, it must be that either $x$ does not occur freely in $\mathbf A$, or $y$ does not occur in $\tau$. In the first case: :$\mathbf A \left({x \gets \tau}\right) = \mathbf A$ and by Value of Formula under Assignment Determined by Free Variables: :$\mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf A }\right) } \left[{\sigma}\right] = \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf A }\right) } \left[{\sigma + \left({x / a}\right)}\right]$ Now consider the case where $y$ does not occur in $\tau$. From the definition of value under $\sigma$, $\mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf A \left({x \gets \tau}\right) }\right) } \left[{\sigma}\right]$ is determined by: :$\mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf B \left({x \gets \tau}\right) }\right) } \left[{\sigma + \left({y / a'}\right) }\right]$ where $a'$ ranges over $\mathcal A$. Now from Value of Term under Assignment Determined by Variables, since $y$ does not occur in $\tau$: :$\mathop{ \operatorname{val}_{\mathcal A} \left({\tau}\right) } \left[{\sigma + \left({y / a'}\right)}\right] = \mathop{ \operatorname{val}_{\mathcal A} \left({\tau}\right) } \left[{\sigma}\right] = a$ for all $a'$. Hence the induction hypothesis also applies to the assignment $\sigma + \left({y / a'}\right)$. Thus, for all $a'$: {{begin-eqn}} {{eqn|l = \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf B \left({x \gets \tau}\right) }\right) } \left[{\sigma + \left({y / a'}\right) }\right]      |r = \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf B}\right) } \left[{\sigma + \left({y / a'}\right) + \left({x / a}\right) }\right]      |c = Induction Hypothesis }} {{eqn|r = \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf B}\right) } \left[{\sigma + \left({x / a}\right) + \left({y / a'}\right) }\right]      |c = Definition of Extension of Assignment }} {{end-eqn}} from which we infer: :$\mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf A \left({x \gets \tau}\right) }\right) } \left[{\sigma}\right] = \mathop{ \operatorname{val}_{\mathcal A} \left({\mathbf A}\right) } \left[{\sigma + \left({x / a}\right)}\right]$ as desired. The result follows by the Principle of Structural Induction. {{qed}}