The Picat CP Solver Neng-Fa Zhou and Hakan Kjellerstrand Picat is a simple, and yet powerful, logic-based multi-paradigm programming language aimed for general-purpose applications. Picat is a rule-based language, in which predicates, functions, and actors are defined with pattern-matching rules. Picat incorporates many declarative language features for better productivity of software development, including explicit non-determinism, explicit unification, functions, list comprehensions, constraints, and tabling. Picat also provides imperative language constructs, such as assignments and loops, for programming everyday things. The Picat implementation, which is based on a well-designed virtual machine and incorporates a memory manager that garbage-collects and expands the stacks and data areas when needed, is efficient and scalable. Picat can be used for not only symbolic computations, which is a traditional application domain of declarative languages, but also for scripting and modeling tasks. Picat provides facilities for solving combinatorial search problems, including a common interface with CP, SAT, and MIP solvers, tabling for dynamic programming, and a module for planning. The common interface allows for seamless switching from one solver module to another. The CP solver is taken from B-Prolog. Like many Prolog-based finite-domain constraint solvers, B-Prolog's CP solver was heavily influenced by the CHIP system. The first fully-fledged solver was released with B-Prolog version 2.1 in March 1997. The action rule language is used as an intermediate language for compiling constraints over finite-domain variables. A constraint is compiled into propagators defined in action rules, which maintain some sort of consistency for the constraint. The availability of fine-grained domain events facilitates programming {AC-4} like propagation algorithms. As propagators are stored on the stack as suspension frames, allocation of frames is not needed to activate propagators and hence context switching among propagators becomes faster. The virtual machine provides specialized instructions for encoding well-used actions in propagators. The FlatZinc parser is based on the one by Joachim Schimpf.