Note that the assignment to a may be eliminated as a is not used later, but there is insufficient information to justify removing all of line 3 as f may have side effects (printing b * c, perhaps).
The analysis is done in a backwards order, and the dataflow confluence operator is set union.
This is in contrast to a "backwards must" analysis which would instead enforce this condition on all branches moving forward.
Solving the data flow equations starts with initializing all in-states and out-states to the empty set.
Its computed in-state differs from the previous one, so its predecessors b1 and b2 are inserted and the process continues.
Aho, Alfred; Lam, Monica; Sethi, Ravi; Ullman, Jeffrey (2007).