mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-31 03:32:28 +00:00 
			
		
		
		
	re-propagate needs to be checked for all literals
This commit is contained in:
		
							parent
							
								
									c60a2b10a5
								
							
						
					
					
						commit
						4813fcfe0d
					
				
					 1 changed files with 4 additions and 2 deletions
				
			
		|  | @ -530,8 +530,7 @@ namespace polysat { | |||
|                 LOG_V(20, "Undo assign_bool_i: " << lit); | ||||
|                 unsigned active_level = m_bvars.level(lit); | ||||
| 
 | ||||
|                 if (m_bvars.is_decision(lit)) | ||||
|                     repropagate.push_back(lit); | ||||
|                 repropagate.push_back(lit); | ||||
| 
 | ||||
|                 if (active_level <= target_level) { | ||||
|                     SASSERT(!m_bvars.is_decision(lit)); | ||||
|  | @ -555,6 +554,9 @@ namespace polysat { | |||
|         // 3. For whatever reason we now backtrack to 0 or 1.
 | ||||
|         //    We have unassigned L but the unit propagation for C does not trigger.
 | ||||
|         // 4. To fix that situation we explicitly "repropagate" C after backtracking.
 | ||||
|         // NOTE: the same may happen if L is a propagation/evaluation/assumption, and there now exists a new clause that propagates L at an earlier level.
 | ||||
|         // TODO: for assumptions this isn't implemented yet. But if we can bool-propagate an assumption from other literals,
 | ||||
|         //       it means that the external dependency on the assumed literal is unnecessary and a resulting unsat core may be smaller.
 | ||||
|         for (sat::literal lit : repropagate) | ||||
|             for (clause* cl : m_bvars.watch(lit)) | ||||
|                 propagate_clause(*cl); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue