Please don't mistake me. When I said "backward reasoning" I didn't implied a negative meaning such as "backtracking/trial-and-error". I reckon both "forward" and "backward" reasoning as equally elegant in logical grounds. Just one using the existence of arrows, another using the non-existence.

In hindsight "backward reasoning" is not such a good term to use. I was thinking more in line with the "reverse/inverse" concept in terms of logic theory.
The rule specifies that:
There is an arrow
iff the cell value denotes the number of skyscrapers visible in that direction.
... which implies the following 4 propositions:
1. If the cell value matches the number of skyscrapers visible in a direction, there must be an arrow pointing to that direction.
2. If the cell value
does not match the number of skyscrapers visible in a direction, there must be
no arrow pointing to that direction.
3. If there is an arrow pointing to a direction, then the cell value must match the number of skyscrapers visible in that direction.
4. If there is
no arrow pointing to a direction, then the cell value
must not match the number of skyscrapers visible in that direction.
IMHO, the usage of any of these 4 propositions to make deductions are equally elegant.
