The computer language Prolog pretends to be a declarative language with which you describe the requirements of your solution and the computer finds concrete situations that satisfy your requirements. It is usually reported that unless the programmer understands cause and effect that transpires as the computer does its part, then the Prolog program seldom succeeds. There yet remains an advantage to Prolog even in this case. There are two readings of the program, one declarative and the other imperative. Part of the brain understands things about declarations that support reasoning about problems. The declarative reading helps people understand if we have asked the computer the right question. I wonder if there are significant bodies of Prolog code that when embedded in different Prolog programs lead to different cause and effect chains thru the body depending on which program the body is embedded in. I recently saw a real circuit that could be used in a real computer in which a particular wire carried information in different directions at different times.

The two readings of a Prolog program correspond to the What-is—How-to distinction.