mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-30 19:22:28 +00:00 
			
		
		
		
	clause_builder::set_redundant
This commit is contained in:
		
							parent
							
								
									9b10733ebd
								
							
						
					
					
						commit
						29180e7d0b
					
				
					 4 changed files with 15 additions and 6 deletions
				
			
		|  | @ -20,10 +20,6 @@ namespace polysat { | ||||||
|     class signed_constraint; |     class signed_constraint; | ||||||
|     class simplify_clause; |     class simplify_clause; | ||||||
| 
 | 
 | ||||||
|     class clause; |  | ||||||
|     using clause_ref = ref<clause>; |  | ||||||
|     using clause_ref_vector = sref_vector<clause>; |  | ||||||
| 
 |  | ||||||
|     /// Disjunction of constraints represented by boolean literals
 |     /// Disjunction of constraints represented by boolean literals
 | ||||||
|     // NB code review:
 |     // NB code review:
 | ||||||
|     // right, ref-count is unlikely the right mechanism.
 |     // right, ref-count is unlikely the right mechanism.
 | ||||||
|  | @ -31,11 +27,14 @@ namespace polysat { | ||||||
|     // and deleted when they exist the arena.
 |     // and deleted when they exist the arena.
 | ||||||
|     //
 |     //
 | ||||||
|     class clause { |     class clause { | ||||||
|  |     public: | ||||||
|  |         static inline const bool redundant_default = true; | ||||||
|  |     private: | ||||||
|         friend class constraint_manager; |         friend class constraint_manager; | ||||||
|         friend class simplify_clause; |         friend class simplify_clause; | ||||||
| 
 | 
 | ||||||
|         unsigned m_ref_count = 0;  // TODO: remove refcount once we confirm it's not needed anymore
 |         unsigned m_ref_count = 0;  // TODO: remove refcount once we confirm it's not needed anymore
 | ||||||
|         bool m_redundant = true; |         bool m_redundant = redundant_default; | ||||||
|         sat::literal_vector m_literals; |         sat::literal_vector m_literals; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -29,6 +29,7 @@ namespace polysat { | ||||||
|     void clause_builder::reset() { |     void clause_builder::reset() { | ||||||
|         m_literals.reset(); |         m_literals.reset(); | ||||||
|         m_is_tautology = false; |         m_is_tautology = false; | ||||||
|  |         m_redundant = clause::redundant_default; | ||||||
|         SASSERT(empty()); |         SASSERT(empty()); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -49,6 +50,9 @@ namespace polysat { | ||||||
|         } |         } | ||||||
|         m_literals.shrink(j); |         m_literals.shrink(j); | ||||||
|         clause_ref cl = clause::from_literals(std::move(m_literals)); |         clause_ref cl = clause::from_literals(std::move(m_literals)); | ||||||
|  |         SASSERT(cl); | ||||||
|  |         cl->set_redundant(m_redundant); | ||||||
|  |         m_redundant = clause::redundant_default; | ||||||
|         SASSERT(empty()); |         SASSERT(empty()); | ||||||
|         return cl; |         return cl; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -28,6 +28,7 @@ namespace polysat { | ||||||
|         /// True iff clause contains a literal that is always true
 |         /// True iff clause contains a literal that is always true
 | ||||||
|         /// (only this specific case of tautology is covered by this flag)
 |         /// (only this specific case of tautology is covered by this flag)
 | ||||||
|         bool                  m_is_tautology = false; |         bool                  m_is_tautology = false; | ||||||
|  |         bool                  m_redundant = clause::redundant_default; | ||||||
| 
 | 
 | ||||||
|     public: |     public: | ||||||
|         clause_builder(solver& s); |         clause_builder(solver& s); | ||||||
|  | @ -36,9 +37,11 @@ namespace polysat { | ||||||
|         clause_builder& operator=(clause_builder const& s) = delete; |         clause_builder& operator=(clause_builder const& s) = delete; | ||||||
|         clause_builder& operator=(clause_builder&& s) = default; |         clause_builder& operator=(clause_builder&& s) = default; | ||||||
| 
 | 
 | ||||||
|         bool empty() const { return m_literals.empty() && !m_is_tautology; } |         bool empty() const { return m_literals.empty() && !m_is_tautology && m_redundant == clause::redundant_default; } | ||||||
|         void reset(); |         void reset(); | ||||||
| 
 | 
 | ||||||
|  |         void set_redundant(bool r) { m_redundant = r; } | ||||||
|  | 
 | ||||||
|         /// Build the clause. This will reset the clause builder so it can be reused.
 |         /// Build the clause. This will reset the clause builder so it can be reused.
 | ||||||
|         /// Returns nullptr if the clause is a tautology and should not be added to the solver.
 |         /// Returns nullptr if the clause is a tautology and should not be added to the solver.
 | ||||||
|         clause_ref build(); |         clause_ref build(); | ||||||
|  |  | ||||||
|  | @ -28,6 +28,9 @@ namespace polysat { | ||||||
|     class solver; |     class solver; | ||||||
|     class clause; |     class clause; | ||||||
| 
 | 
 | ||||||
|  |     using clause_ref = ref<clause>; | ||||||
|  |     using clause_ref_vector = sref_vector<clause>; | ||||||
|  | 
 | ||||||
|     typedef dd::pdd pdd; |     typedef dd::pdd pdd; | ||||||
|     typedef dd::bdd bdd; |     typedef dd::bdd bdd; | ||||||
|     typedef dd::bddv bddv; |     typedef dd::bddv bddv; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue