Backtracking without trailing in CLP (RLin)

  • Authors:
  • Pascal Van Hentenryck;Viswanath Ramachandran

  • Affiliations:
  • -;-

  • Venue:
  • PLDI '94 Proceedings of the ACM SIGPLAN 1994 conference on Programming language design and implementation
  • Year:
  • 1994

Quantified Score

Hi-index 0.00

Visualization

Abstract

Constraint logic programming (CLP) is a generalization of logicprogramming where unification is replaced by constraint solving as thebasic operation of the language. The combination of constraint solvingand nondeterminism (approximated by backtracking) makes these languagesappealing for a variety of combinatorial search problems. Existing CLPlanguages support backtracking by generalizing traditional Prologimplementations: modifications to the constraint system are trailed andrestored on backtracking. Although simple and efficient, trailing may bevery demanding in memory space, since the constraint system maypotentially be saved at each choice point. This paper proposes afundamentally new implementation scheme for backtracking inCLP languages over linear (rational or real) arithmetic. The newscheme, called semantic backtracking,does not use trailing but rather exploits the semantics of the constraints to undo the effect of newly added constraints. Semantic backtracking reduces the space complexity by an order of magnitude compared to implementations based on trailing and makes space complexity essentially independent of the number of choice points. In addition, semantic backtracking introduces negligible space and time overhead on deterministic programs. The price for this improvement is an increase in backtracking time, although constraint-solving time may actually decrease. The scheme has been implemented as part of a complete CLPsystem CLP(RLin) and compared analytically and experimentally withan optimized trailing implementation. Experimental results indicate that semantic backtracking produces significant reduction in memory space, while keeping the time overhead reasonably small.