Minimizes the proof of this.log.formula's unsatisfiability using the specified proof reduction strategy. The strategy argument is ignored (it can be null) if this.formula is trivially unsatisfiable with respect to this.bounds. In that case, the core is reduced using the trivial strategy that does one of the following: (1) if there is a root that simplified to FALSE, sets the minimal core to that root; or (2) if not, then there must be two roots that translated to x and -x, where x is a boolean literal, so we pick those two as the minimal core.
Note: the core minimization is performed at the level of the transformed formula, not the original formula if the problem was translated with a non-zero {@linkplain Options#coreGranularity() core granularity} setting.In other words, after this method has been called, {@linkplain #highLevelCore() highLevelCore()} returns a map M such that M.keySet() is a minimal core with respect to this.log.bounds. In contrast, {@linkplain Nodes#allRoots(Formula,java.util.Collection) Nodes.roots(this.log.originalFormula, M.values())} is unsatisfiable with respect this.log.originalBounds. These formulas, however, do not necessarily form a minimal core of this.log.originalFormula if the original problem was translated with a non-zero {@linkplain Options#coreGranularity() core granularity} setting.
@effects minimizes the proof of this.log.formula's unsatisfiabilityusing the specified proof reduction strategy (or the trivial strategy if this.formula is trivially unsatisfiable with respect to this.bounds).
@see kodkod.engine.satlab.ReductionStrategy