  Boolean Satisfiability Problem (SAT) is one of the core problems in computer
science. As one of the fundamental NP-complete problems, it can be used - by
known reductions - to represent instances of variety of hard decision problems.
Additionally, those representations can be passed to a program for finding
satisfying assignments to Boolean formulas, for example, to a program called
MiniSat. Those programs (called SAT-solvers) have been intensively developed
for many years and - despite their worst-case exponential time complexity - are
able to solve a multitude of hard practical instances. A drawback of this
approach is that clauses are neither expressive, nor compact, and using them to
describe decision problems can pose a big challenge on its own.
  We can improve this by using high-level constraints as a bridge between a
problem at hand and SAT. Such constraints are then automatically translated to
eqisatisfiable Boolean formulas. The main theme of this thesis revolves around
one type of such constraints, namely Boolean Cardinality Constraints (or simply
cardinality constraints). Cardinality constraints state that at most (at least,
or exactly) k out of n propositional literals can be true. Such cardinality
constraints appear naturally in formulations of different real-world problems
including cumulative scheduling, timetabling or formal hardware verification.
  The goal of this thesis is to propose and analyze new and efficient methods
to encode (translate) cardinality constraints into equisatisfiable proposition
formulas in CNF, such that the resulting SAT instances are small and that the
SAT-solver runtime is as short as possible.
