mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-03 21:09:11 +00:00 
			
		
		
		
	add array selects to basic ackerman reduction improves performance significantly for #2525 as it now uses the SAT solver core instead of SMT core
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									7823117776
								
							
						
					
					
						commit
						000e485794
					
				
					 25 changed files with 706 additions and 572 deletions
				
			
		| 
						 | 
				
			
			@ -816,7 +816,7 @@ expr_ref model_evaluator::eval(const model_ref& model, expr* e){
 | 
			
		|||
                args.resize(1);
 | 
			
		||||
                args[0] = result;
 | 
			
		||||
                args.append(stores[i]);
 | 
			
		||||
                result = m_array.mk_store(args.size(), args.c_ptr());
 | 
			
		||||
                result = m_array.mk_store(args);
 | 
			
		||||
            }
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -153,8 +153,8 @@ void model_evaluator_array_util::eval_array_eq(model& mdl, app* e, expr* arg1, e
 | 
			
		|||
        args2.resize(1);
 | 
			
		||||
        args1.append(store[i].size()-1, store[i].c_ptr());
 | 
			
		||||
        args2.append(store[i].size()-1, store[i].c_ptr());
 | 
			
		||||
        s1 = m_array.mk_select(args1.size(), args1.c_ptr());
 | 
			
		||||
        s2 = m_array.mk_select(args2.size(), args2.c_ptr());
 | 
			
		||||
        s1 = m_array.mk_select(args1);
 | 
			
		||||
        s2 = m_array.mk_select(args2);
 | 
			
		||||
        eval (mdl, s1, w1);
 | 
			
		||||
        eval (mdl, s2, w2);
 | 
			
		||||
        if (w1 == w2) {
 | 
			
		||||
| 
						 | 
				
			
			@ -207,7 +207,7 @@ void model_evaluator_array_util::eval(model& mdl, expr* e, expr_ref& r, bool mod
 | 
			
		|||
                args.resize(1);
 | 
			
		||||
                args[0] = r;
 | 
			
		||||
                args.append(stores[i]);
 | 
			
		||||
                r = m_array.mk_store(args.size(), args.c_ptr());
 | 
			
		||||
                r = m_array.mk_store(args);
 | 
			
		||||
            }
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -170,7 +170,7 @@ void peq::mk_eq (app_ref_vector& aux_consts, app_ref& result, bool stores_on_rhs
 | 
			
		|||
            store_args.push_back (rhs);
 | 
			
		||||
            store_args.push_back (*it);
 | 
			
		||||
            store_args.push_back (val);
 | 
			
		||||
            rhs = m_arr_u.mk_store (store_args.size (), store_args.c_ptr ());
 | 
			
		||||
            rhs = m_arr_u.mk_store (store_args);
 | 
			
		||||
            aux_consts.push_back (val);
 | 
			
		||||
        }
 | 
			
		||||
        m_eq = m.mk_eq (lhs, rhs);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue