I'm looking for a polynomial algorithm to find a minimal unsatisfiable core of a given CNF formula. In other words, an algorithm that if it inputs a Boolean unsatisfiable CNF, it outputs a subset of the clauses of the given CNF such that they are unsatisfiable and become satisfiable when we remove a clause from the subset. If the give CNF is satisfiable, the algorithm returns a satisfiable subset of the clauses of the given CNF. The algorithm complexity must be polynomial.