View Javadoc

1   /*
2    * SAT4J: a SATisfiability library for Java Copyright (C) 2004-2006 Daniel Le Berre
3    * 
4    * Based on the original minisat specification from:
5    * 
6    * An extensible SAT solver. Niklas E?n and Niklas S?rensson. Proceedings of the
7    * Sixth International Conference on Theory and Applications of Satisfiability
8    * Testing, LNCS 2919, pp 502-518, 2003.
9    * 
10   * This library is free software; you can redistribute it and/or modify it under
11   * the terms of the GNU Lesser General Public License as published by the Free
12   * Software Foundation; either version 2.1 of the License, or (at your option)
13   * any later version.
14   * 
15   * This library is distributed in the hope that it will be useful, but WITHOUT
16   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
18   * details.
19   * 
20   * You should have received a copy of the GNU Lesser General Public License
21   * along with this library; if not, write to the Free Software Foundation, Inc.,
22   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23   * 
24   */
25  
26  package org.sat4j.minisat.core;
27  
28  import org.sat4j.specs.IConstr;
29  
30  /**
31   * An assertingClauseGenerator is responsible for the creation of an asserting
32   * clause during conflict analysis. An asserting clause is a clause that will
33   * become unit when the solver will backtrack to the latest decision level,
34   * providing a nice way for the solver to backtrack.
35   * 
36   * @author leberre
37   */
38  public interface AssertingClauseGenerator {
39  
40      /**
41       * hook method called before the analysis.
42       */
43      void initAnalyze();
44  
45      /**
46       * hook method called when a literal from the current decision lelvel is
47       * found.
48       * 
49       * @param p
50       *            the literal in the current decision level
51       */
52      void onCurrentDecisionLevelLiteral(int p);
53  
54      /**
55       * method indicating if an asserting clause has been built. note that this
56       * method is called right after a resolution step is finished.
57       * 
58       * @param reason
59       *            the reason of the current literal assignment
60       * @return false iff the current clause is assertive
61       */
62      boolean clauseNonAssertive(IConstr reason);
63  }