mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-26 09:24:36 +00:00 
			
		
		
		
	merged with unstable
This commit is contained in:
		
							parent
							
								
									7bf87e76ea
								
							
						
					
					
						commit
						c007a5e5bd
					
				
					 48 changed files with 537 additions and 256 deletions
				
			
		|  | @ -87,7 +87,7 @@ namespace datalog { | |||
|         else { | ||||
|             if (m_next_var == 0) { | ||||
|                 ptr_vector<sort> vars; | ||||
|                 r.get_vars(vars); | ||||
|                 r.get_vars(m, vars); | ||||
|                 m_next_var = vars.size() + 1; | ||||
|             } | ||||
|             v = m.mk_var(m_next_var, m.get_sort(e)); | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ Revision History: | |||
| #include "dl_mk_interp_tail_simplifier.h" | ||||
| #include "fixedpoint_params.hpp" | ||||
| #include "scoped_proof.h" | ||||
| #include "model_v2_pp.h" | ||||
| 
 | ||||
| namespace datalog { | ||||
| 
 | ||||
|  | @ -67,11 +68,17 @@ namespace datalog { | |||
|                 func_decl* p = m_new_funcs[i].get(); | ||||
|                 func_decl* q = m_old_funcs[i].get(); | ||||
|                 func_interp* f = model->get_func_interp(p); | ||||
|                 if (!f) continue; | ||||
|                 expr_ref body(m);                 | ||||
|                 unsigned arity_p = p->get_arity(); | ||||
|                 unsigned arity_q = q->get_arity(); | ||||
|                 TRACE("dl", | ||||
|                       model_v2_pp(tout, *model); | ||||
|                       tout << mk_pp(p, m) << "\n"; | ||||
|                       tout << mk_pp(q, m) << "\n";); | ||||
|                 SASSERT(0 < arity_p); | ||||
|                 model->register_decl(p, f); | ||||
|                 SASSERT(f); | ||||
|                 model->register_decl(p, f->copy()); | ||||
|                 func_interp* g = alloc(func_interp, m, arity_q); | ||||
| 
 | ||||
|                 if (f) { | ||||
|  | @ -88,11 +95,12 @@ namespace datalog { | |||
|                 for (unsigned j = 0; j < arity_q; ++j) { | ||||
|                     sort* s = q->get_domain(j); | ||||
|                     arg = m.mk_var(j, s); | ||||
|                     expr* t = arg; | ||||
|                     if (m_bv.is_bv_sort(s)) { | ||||
|                         expr* args[1] = { arg }; | ||||
|                         unsigned sz = m_bv.get_bv_size(s); | ||||
|                         for (unsigned k = 0; k < sz; ++k) { | ||||
|                             proj = m.mk_app(m_bv.get_family_id(), OP_BIT2BOOL, 1, args); | ||||
|                             parameter p(k); | ||||
|                             proj = m.mk_app(m_bv.get_family_id(), OP_BIT2BOOL, 1, &p, 1, &t); | ||||
|                             sub.insert(m.mk_var(idx++, m.mk_bool_sort()), proj);  | ||||
|                         } | ||||
|                     } | ||||
|  |  | |||
|  | @ -62,7 +62,7 @@ namespace datalog { | |||
|         rule_ref r(const_cast<rule*>(&rl), rm); | ||||
|         ptr_vector<sort> sorts; | ||||
|         expr_ref_vector revsub(m), conjs(m); | ||||
|         rl.get_vars(sorts); | ||||
|         rl.get_vars(m, sorts); | ||||
|         revsub.resize(sorts.size());   | ||||
|         svector<bool> valid(sorts.size(), true); | ||||
|         for (unsigned i = 0; i < sub.size(); ++i) { | ||||
|  | @ -117,8 +117,8 @@ namespace datalog { | |||
|         rule_ref res(rm); | ||||
|         bool_rewriter bwr(m); | ||||
|         svector<bool> is_neg; | ||||
|         tgt->get_vars(sorts1); | ||||
|         src.get_vars(sorts2); | ||||
|         tgt->get_vars(m, sorts1); | ||||
|         src.get_vars(m, sorts2); | ||||
| 
 | ||||
|         mk_pred(head, src.get_head(), tgt->get_head());  | ||||
|         for (unsigned i = 0; i < src.get_uninterpreted_tail_size(); ++i) { | ||||
|  |  | |||
|  | @ -205,7 +205,6 @@ namespace datalog { | |||
|                 for (unsigned i = 0; i < rules.size(); ++i) { | ||||
|                     app* head = rules[i]->get_head(); | ||||
|                     expr_ref_vector conj(m); | ||||
|                     unsigned n = head->get_num_args()-1; | ||||
|                     for (unsigned j = 0; j < head->get_num_args(); ++j) { | ||||
|                         expr* arg = head->get_arg(j); | ||||
|                         if (!is_var(arg)) { | ||||
|  |  | |||
|  | @ -199,7 +199,7 @@ namespace datalog { | |||
|         expr_ref fml(m), cnst(m); | ||||
|         var_ref var(m); | ||||
|         ptr_vector<sort> sorts; | ||||
|         r.get_vars(sorts); | ||||
|         r.get_vars(m, sorts); | ||||
|         m_uf.reset(); | ||||
|         m_terms.reset(); | ||||
|         m_var2cnst.reset(); | ||||
|  | @ -207,9 +207,6 @@ namespace datalog { | |||
|         fml = m.mk_and(conjs.size(), conjs.c_ptr()); | ||||
| 
 | ||||
|         for (unsigned i = 0; i < sorts.size(); ++i) { | ||||
|             if (!sorts[i]) { | ||||
|                 sorts[i] = m.mk_bool_sort(); | ||||
|             } | ||||
|             var = m.mk_var(i, sorts[i]); | ||||
|             cnst = m.mk_fresh_const("C", sorts[i]); | ||||
|             m_var2cnst.insert(var, cnst); | ||||
|  |  | |||
|  | @ -143,11 +143,8 @@ namespace datalog { | |||
|         expr_ref_vector result(m); | ||||
|         ptr_vector<sort> sorts; | ||||
|         expr_ref v(m), w(m); | ||||
|         r.get_vars(sorts); | ||||
|         r.get_vars(m, sorts); | ||||
|         for (unsigned i = 0; i < sorts.size(); ++i) { | ||||
|             if (!sorts[i]) { | ||||
|                 sorts[i] = m.mk_bool_sort(); | ||||
|             } | ||||
|             v = m.mk_var(i, sorts[i]); | ||||
|             m_subst.apply(2, m_deltas, expr_offset(v, is_tgt?0:1), w); | ||||
|             result.push_back(w);             | ||||
|  | @ -423,6 +420,11 @@ namespace datalog { | |||
|         } | ||||
| 
 | ||||
|         TRACE("dl", tout << "inlined rules after mutual inlining:\n" << m_inlined_rules;  ); | ||||
| 
 | ||||
|         for (unsigned i = 0; i < m_inlined_rules.get_num_rules(); ++i) { | ||||
|             rule* r = m_inlined_rules.get_rule(i); | ||||
|             datalog::del_rule(m_mc, *r); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     bool mk_rule_inliner::transform_rule(rule_set const& orig, rule * r0, rule_set& tgt) { | ||||
|  |  | |||
|  | @ -141,7 +141,7 @@ namespace datalog { | |||
|             m_cache.reset(); | ||||
|             m_trail.reset(); | ||||
|             m_eqs.reset(); | ||||
|             r.get_vars(vars); | ||||
|             r.get_vars(m, vars); | ||||
|             unsigned num_vars = vars.size(); | ||||
|             for (unsigned j = 0; j < utsz; ++j) { | ||||
|                 tail.push_back(mk_pred(num_vars, r.get_tail(j))); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue