Let us consider an arbitrary constraint matrix as shown below.

This corresponding function is said to have a cyclic core. A function has a cyclic core if we cannot identify columns of the constraint that must be part of the solution or that can be eliminated. In the arbitrary constraint matrix, each row is covered by exactly two columns and each column covers exactly two rows. There is no essential primes. There is no apparent reason to prefer one column over another. For this matrix we must proceed by choosing one column arbitrarily and finding the best solution subject to the assumption that the column is selected. We must then assume that the column is not in the solution and find another solution. This process is repeated till the whole solution space is explored.
From the two previous examples, we note that two important mechanisms are involved in determining the cover (of minterms using prime implicants)
1. Reduction of the constraint matrix by selecting columns that cover singleton rows (i.e., essential primes)
2. Exploring solution space by branching in case of cyclic cores.
We will discuss algorithms to perform the above two tasks. Before that, however, we formulate the covering problem as a constraint matrix, formally. It may be noted that once the matrix is created, it becomes a problem of determining minimum cost columns that cover all rows, which can be thought independently of Boolean functions, prime implicants, minterms etc.
One may readily see that the rows of the constraint matrix in our first example can be written as the switching function as follows

The switching function
for the 1 st row evaluates to one if either
or
or both .
We interpret
as “column i is selected,” and all j “rows covered” for which the matrix has
. We can proceed similarly for the other rows. The expressions thus obtained are switching functions that must all be 1 for a solution to be valid. Hence, their product must be 1. We can therefore write the following equation as an equivalent to the constraint matrix
![]()
This equation is called the constraint equation of the covering problem (represented by the constrained matrix). The covering problem can be stated in this setting as the problem of finding an assignment of zeroes and ones to the variables that is a solution to the constraint equation and that is of minimum cost. Cost is predefined on the variables depending on the literals in the corresponding prime implicant.
We may note that all variables in the constraint equation are un-complemented. This is not a coincidence, but rather a direct consequence of the way the equation is built; we do not put the concept “not considering a column” in the equation. A formula where no letter appears with both phases is said unate. A non-unate formula is called binate. Because of the form of the constraint equation that we get, the covering problem we are dealing with is sometimes called unate covering. In the next sub-section we will discuss the unate covering problem.