The process/2 predicate provides for the transformation of the input list to the output list.
This does some compulsory tidying using swap/2, then uses pick_up_transform/2 to picks up a potential transformation rule, then see if it usable using match/2. If so, then match/2 binds any variables it can -otherwise we backtrack to pick_up_transform/2 to find another potentially useful rule.