A major difficulty with logic programming is combinatorial explosion: since goals are solved with possibly indeterminate (i.e., branching) reductions, the resulting search trees may grow wildly. Constraint logic programming systems try to avoid combinatorial explosion by building in strong determinate (i.e., non-branching) reduction in the form of constraint simplification. In this paper we present two concepts, residuation and guarded rules, for further strengthening determinate reduction. Both concepts apply to constraint logic programming in general and yield an operational semantics that coincides with the declarative semantics. Residuation is a control strategy giving priority to determinate reductions. Guarded rules are logical consequences of programs adding otherwise unavailable determinate reductions.
Download PDF Show BibTeX
Login to edit