mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-31 19:52:29 +00:00 
			
		
		
		
	
							parent
							
								
									96f113afee
								
							
						
					
					
						commit
						05a784fa9e
					
				
					 3 changed files with 18 additions and 7 deletions
				
			
		|  | @ -638,9 +638,13 @@ br_status arith_rewriter::mk_div_core(expr * arg1, expr * arg2, expr_ref & resul | |||
|     set_curr_sort(m().get_sort(arg1)); | ||||
|     numeral v1, v2; | ||||
|     bool is_int; | ||||
|     if (m_util.is_numeral(arg2, v2, is_int) && !v2.is_zero()) { | ||||
|     if (m_util.is_numeral(arg2, v2, is_int)) { | ||||
|         SASSERT(!is_int); | ||||
|         if (m_util.is_numeral(arg1, v1, is_int)) { | ||||
|         if (v2.is_zero()) { | ||||
|             result = m_util.mk_div0(arg1); | ||||
|             return BR_REWRITE1; | ||||
|         } | ||||
|         else if (m_util.is_numeral(arg1, v1, is_int)) { | ||||
|             result = m_util.mk_numeral(v1/v2, false); | ||||
|             return BR_DONE; | ||||
|         } | ||||
|  | @ -691,6 +695,10 @@ br_status arith_rewriter::mk_idiv_core(expr * arg1, expr * arg2, expr_ref & resu | |||
|         result = m_util.mk_numeral(div(v1, v2), is_int); | ||||
|         return BR_DONE; | ||||
|     } | ||||
|     if (m_util.is_numeral(arg2, v2, is_int) & v2.is_zero()) { | ||||
|         result = m_util.mk_idiv0(arg1); | ||||
|         return BR_REWRITE1; | ||||
|     } | ||||
|     return BR_FAILED; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -178,7 +178,7 @@ struct evaluator_cfg : public default_rewriter_cfg { | |||
|                 return BR_DONE; | ||||
|             } | ||||
|         } | ||||
|         TRACE("model_evaluator", tout << f->get_name() << "\n";); | ||||
|         CTRACE("model_evaluator", st != BR_FAILED, tout << result << "\n";); | ||||
|         return st; | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -309,13 +309,16 @@ namespace qe { | |||
|                 expr_ref_vector args(m); | ||||
|                 sort* range = get_array_range(m.get_sort(s)); | ||||
|                 for (unsigned i = 0; i < idxs.size(); ++i) { | ||||
|                     app_ref var(m); | ||||
|                     var = m.mk_fresh_const("value", range); | ||||
|                     vars.push_back(var); | ||||
|                     //app_ref var(m);
 | ||||
|                     //var = m.mk_fresh_const("value", range);
 | ||||
|                     //vars.push_back(var);
 | ||||
|                     expr_ref val(m); | ||||
|                     args.reset(); | ||||
|                     args.push_back(result); | ||||
|                     args.append(idxs[i].m_values.size(), idxs[i].m_vars); | ||||
|                     args.push_back(var); | ||||
|                     result = a.mk_select(args.size(), args.c_ptr()); | ||||
|                     VERIFY(model.eval(result, val)); | ||||
|                     args.push_back(val); | ||||
|                     result = a.mk_store(args.size(), args.c_ptr()); | ||||
|                 } | ||||
|                 expr_safe_replace sub(m); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue