mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-30 19:22:28 +00:00 
			
		
		
		
	fixing handling of arrays
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									361e9039bb
								
							
						
					
					
						commit
						67485b8af7
					
				
					 3 changed files with 20 additions and 15 deletions
				
			
		|  | @ -1809,11 +1809,12 @@ namespace pdr { | ||||||
| 
 | 
 | ||||||
|         n.set_rule(&r); |         n.set_rule(&r); | ||||||
| 
 | 
 | ||||||
|         IF_VERBOSE(3, verbose_stream() << "Model:\n"; |         TRACE("pdr",  | ||||||
|                    model_smt2_pp(verbose_stream(), m, *M, 0); |               tout << "Model:\n"; | ||||||
|                    verbose_stream() << "\n"; |               model_smt2_pp(tout, m, *M, 0); | ||||||
|                    verbose_stream() << "Transition:\n" << mk_pp(T, m) << "\n"; |               tout << "\n"; | ||||||
|                    verbose_stream() << "Phi:\n" << mk_pp(phi, m) << "\n";); |               tout << "Transition:\n" << mk_pp(T, m) << "\n"; | ||||||
|  |               tout << "Phi:\n" << mk_pp(phi, m) << "\n";); | ||||||
|                        |                        | ||||||
|         model_evaluator mev(m); |         model_evaluator mev(m); | ||||||
|         expr_ref_vector mdl(m), forms(m), Phi(m); |         expr_ref_vector mdl(m), forms(m), Phi(m); | ||||||
|  | @ -1843,19 +1844,21 @@ namespace pdr { | ||||||
|         qe_lite qe(m); |         qe_lite qe(m); | ||||||
|         expr_ref phi1 = m_pm.mk_and(Phi); |         expr_ref phi1 = m_pm.mk_and(Phi); | ||||||
|         qe(vars, phi1); |         qe(vars, phi1); | ||||||
|  |         TRACE("pdr", tout << "Eliminated\n" << mk_pp(phi1, m) << "\n";); | ||||||
|         if (!use_model_generalizer) { |         if (!use_model_generalizer) { | ||||||
|             reduce_disequalities(*M, 3, phi1); |             reduce_disequalities(*M, 3, phi1); | ||||||
|  |             TRACE("pdr", tout  << "Reduced-eq\n" << mk_pp(phi1, m) << "\n";); | ||||||
|         } |         } | ||||||
|         get_context().get_rewriter()(phi1); |         get_context().get_rewriter()(phi1); | ||||||
| 
 | 
 | ||||||
|         IF_VERBOSE(2,  |         TRACE("pdr",  | ||||||
|                    verbose_stream() << "Vars:\n"; |               tout << "Vars:\n"; | ||||||
|               for (unsigned i = 0; i < vars.size(); ++i) { |               for (unsigned i = 0; i < vars.size(); ++i) { | ||||||
|                        verbose_stream() << mk_pp(vars[i].get(), m) << "\n"; |                   tout << mk_pp(vars[i].get(), m) << "\n"; | ||||||
|               } |               } | ||||||
|                    verbose_stream() << "Literals\n"; |               tout << "Literals\n"; | ||||||
|                    verbose_stream() << mk_pp(m_pm.mk_and(Phi), m) << "\n"; |               tout << mk_pp(m_pm.mk_and(Phi), m) << "\n"; | ||||||
|                    verbose_stream() << "Reduced\n" << mk_pp(phi1, m) << "\n";); |               tout << "Reduced\n" << mk_pp(phi1, m) << "\n";); | ||||||
|          |          | ||||||
|         if (!vars.empty()) { |         if (!vars.empty()) { | ||||||
|             // also fresh names for auxiliary variables in body?
 |             // also fresh names for auxiliary variables in body?
 | ||||||
|  | @ -1870,7 +1873,7 @@ namespace pdr { | ||||||
|             if (!rep) rep = mk_expr_simp_replacer(m); |             if (!rep) rep = mk_expr_simp_replacer(m); | ||||||
|             rep->set_substitution(&sub); |             rep->set_substitution(&sub); | ||||||
|             (*rep)(phi1); |             (*rep)(phi1); | ||||||
|             IF_VERBOSE(2, verbose_stream() << "Projected:\n" << mk_pp(phi1, m) << "\n";); |             TRACE("pdr", tout << "Projected:\n" << mk_pp(phi1, m) << "\n";); | ||||||
|         } |         } | ||||||
|         Phi.reset(); |         Phi.reset(); | ||||||
|         datalog::flatten_and(phi1, Phi); |         datalog::flatten_and(phi1, Phi); | ||||||
|  |  | ||||||
|  | @ -536,7 +536,7 @@ namespace pdr { | ||||||
|         if (!node.get_model_ptr()) { |         if (!node.get_model_ptr()) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         m_current_rule = &pt.find_rule(node.get_model());    |         m_current_rule = node.get_rule(); | ||||||
|         m_current_pt = &pt; |         m_current_pt = &pt; | ||||||
|         m_current_node = &node; |         m_current_node = &node; | ||||||
|         if (!m_current_rule) {  |         if (!m_current_rule) {  | ||||||
|  |  | ||||||
|  | @ -238,11 +238,13 @@ namespace pdr { | ||||||
|                 result.push_back(m.mk_not(e)); |                 result.push_back(m.mk_not(e)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | #if 0 | ||||||
|         select_elim_star select_elim(m, m_model); |         select_elim_star select_elim(m, m_model); | ||||||
|         for (unsigned i = 0; i < result.size(); ++i) { |         for (unsigned i = 0; i < result.size(); ++i) { | ||||||
|             select_elim(result[i].get(), tmp); |             select_elim(result[i].get(), tmp); | ||||||
|             result[i] = tmp; |             result[i] = tmp; | ||||||
|         } |         } | ||||||
|  | #endif | ||||||
|         reset(); |         reset(); | ||||||
|         TRACE("pdr",  |         TRACE("pdr",  | ||||||
|               tout << "minimized model:\n"; |               tout << "minimized model:\n"; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue