Computer processes have traditionally been specified by means of procedural languages. That is, a computer program is generally expressed as a sequence of steps. ... A non-procedural programming language may be defined as one in which a computer process is expressed solely in terms of the results of the process, rather than in terms of a procedure by which the results are to be produced. In engineering terms, the non-procedural language allows the programmer to define the final state ... as a function of ... initial states. — Katz & McGee, An Experiment in Non-Procedural Programming (1963)
with the benefit of hindsight, we can also appreciate their prediction that:
The extent to which procedural languages are now ingrained makes it certain that they will be with us for many years to come.