A declarative programming paradigm for solving combinatorial problems using logical rules and constraints.