Understanding A Recursive Definition of CL-Terms in Combinatory Logic
Here are some considerations that could have been used to sort of "derive" the (f) rule:


it is natural to define our type of conversion recursively;
the general case when the body of "$\lambda$" is an application $(UV)$ needs to be addressed;
we certainly would like to get $[x].([y].([z].xz(yz)))$ converted into  its corresponding combinator $\mathsf{S}$.


Using the above we get an intermediate version of the (f) rule:

$$[x].UV \equiv A([x].U)([x].V),$$ where some closed CL-term $A$ is to be determined. The position of $A$ is chosen so that the subsequent "calls" of the (c) rule would be possible, or all three positions could be tried in turn.

$$\begin{array}
([x].([y].([z].xz(yz)))) &amp;\equiv [x].([y].A([z].xz)([z].yz)) &amp;\text{rule (f)}\\
                       &amp;\equiv [x].([y].(A x) y)           &amp;2 \times \text{rule (c)}\\
                       &amp;\equiv [x].Ax                      &amp;\text{rule (c)}\\
                       &amp;\equiv A                           &amp;\text{rule (c)},
\end{array}$$
hence $A = \mathsf{S}$ and the final version of the (f) rule 
$$[x].UV \equiv \mathbf{S}([x].U)([x].V).$$

Note that the above is not a "real derivation", it's just some informal speculations, which I hope can help you to build up some intuition about that conversion.