1. A method, executed by a programmable processor, of specifying, generating, and running a data processing system, comprising the steps of: (a) providing a plurality of predicates, each referring to a set of arguments, (b) providing a plurality of specifications, each of which defines valid argument values for said predicates, and refers to: i. a set of variables, and ii. a set of clauses, (c) specifying some clauses of said specifications by referring to one of said predicates, and to variables of the specification to specify values for arguments of the predicate, so that any of said predicates can be defined by referring to other said predicates, (d) providing a plurality of plans, which are able to be run to generate sets of valid argument values for said predicates, (e) providing a planning means which is able to generate said plans from said specifications, (f) providing an evaluation means which is able to run said plans to generate sets of valid argument values, (g) providing an input means which is able to provide input data values for a set of the arguments of a predicate, (h) providing an output means which is able to output data, (i) inputting argument values from said input means, evaluating input argument values to generate output argument values using said evaluation means, and outputting argument values using said output means, (j) providing a data store which is able to store and retrieve data, (k) specifying some of said clauses by referring to locations in said data store, (l) further comprising specifying some of said clauses by specifying an alteration to said data store, so that any predicate or clause may have arbitrary effects on the data store, and (m) wherein said evaluation means further comprises: i. altering said data store in accordance with only the clauses that refer to an alteration in said data store and that are also included in a successfully evaluated plan for said input, and in accordance only with the variable values that were tested successfully.