Skip to main content

Module clp

Module clp 

Source
Expand description

§Constraint Logic Programming (CLP) Module

This module implements constraint domains, constraint propagation, and constraint satisfaction problem (CSP) solving for TensorLogic.

§Overview

Constraint Logic Programming extends logic programming with constraints over specific domains (finite domains, intervals, reals, etc.). Instead of solving problems through backtracking search alone, CLP uses:

  • Constraint propagation: Automatically deduce information from constraints
  • Domain reduction: Narrow down possible values for variables
  • Consistency checking: Detect unsatisfiable constraints early

§Constraint Domains

This module supports several constraint domains:

§Finite Domain (FD)

  • Variables range over finite sets of integers
  • Constraints: equality, inequality, arithmetic relations
  • Propagation: Arc consistency (AC-3), forward checking

§Interval Domain

  • Variables range over continuous intervals [lower, upper]
  • Constraints: linear inequalities, polynomial constraints
  • Propagation: Interval arithmetic, box consistency

§Boolean Domain

  • Variables are true/false
  • Constraints: logical formulas (CNF, DNF)
  • Propagation: Unit propagation, Boolean constraint propagation (BCP)

§Applications

  • Scheduling: Resource allocation, task scheduling
  • Planning: Action planning with temporal constraints
  • Configuration: Product configuration with compatibility constraints
  • Verification: Model checking, bounded model checking
  • Optimization: Constraint-based optimization problems

§Example

use tensorlogic_ir::clp::{CspSolver, Variable, Constraint, Domain};

// Create variables
let x = Variable::new("x", Domain::finite_domain(vec![1, 2, 3]));
let y = Variable::new("y", Domain::finite_domain(vec![2, 3, 4]));

// Add constraints: x < y, x + y = 5
let mut solver = CspSolver::new();
solver.add_variable(x);
solver.add_variable(y);
solver.add_constraint(Constraint::less_than("x", "y"));
solver.add_constraint(Constraint::sum_equals(vec!["x", "y"], 5));

// Solve
let solution = solver.solve();
assert!(solution.is_some());

Structs§

CspSolver
A constraint satisfaction problem (CSP) solver.
SolverStats
Statistics about CSP solving.
Variable
A constraint variable with a name and domain.

Enums§

BinaryRelation
Binary relation between two variables.
Constraint
A constraint between variables.
Domain
A constraint domain specifies the set of possible values for variables.
GlobalConstraintType
Global constraint types (high-level patterns).
NAryRelation
N-ary relation among multiple variables.
PropagationAlgorithm
Constraint propagation algorithms.
UnaryPredicate
Unary predicate on a single variable.
ValueSelectionHeuristic
Value selection heuristics for search.
VariableSelectionHeuristic
Variable selection heuristics for search.