mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-31 19:52:29 +00:00 
			
		
		
		
	add QF_DT
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									a0d0812b0c
								
							
						
					
					
						commit
						8ff1e070be
					
				
					 5 changed files with 20 additions and 4 deletions
				
			
		|  | @ -244,7 +244,7 @@ struct pull_quant::imp { | |||
|                     quantifier * q1 = m_manager.update_quantifier(to_quantifier(n), new_expr); | ||||
|                     proof * p1 = 0; | ||||
|                     if (n != q1) { | ||||
|                         proof * p0 = m_manager.mk_pull_quant(to_quantifier(n)->get_expr(), to_quantifier(new_expr)); | ||||
|                         proof * p0 = m_manager.mk_pull_quant(n, to_quantifier(new_expr)); | ||||
|                         p1 = m_manager.mk_quant_intro(to_quantifier(n), q1, p0); | ||||
|                     } | ||||
|                     proof * p2 = q1 == r ? 0 : m_manager.mk_pull_quant(q1, to_quantifier(r)); | ||||
|  |  | |||
|  | @ -37,6 +37,7 @@ struct check_logic::imp { | |||
|     datatype_util m_dt_util; | ||||
|     pb_util       m_pb_util; | ||||
|     bool          m_uf;        // true if the logic supports uninterpreted functions
 | ||||
|     bool          m_dt;        // true if the lgoic supports dattypes
 | ||||
|     bool          m_arrays;    // true if the logic supports arbitrary arrays
 | ||||
|     bool          m_bv_arrays; // true if the logic supports only bv arrays
 | ||||
|     bool          m_reals;     // true if the logic supports reals
 | ||||
|  | @ -53,6 +54,7 @@ struct check_logic::imp { | |||
| 
 | ||||
|     void reset() { | ||||
|         m_uf          = false; | ||||
|         m_dt          = false; | ||||
|         m_arrays      = false; | ||||
|         m_bv_arrays   = false; | ||||
|         m_reals       = false; | ||||
|  | @ -105,6 +107,10 @@ struct check_logic::imp { | |||
|             m_uf        = true; | ||||
|             m_bvs       = true; | ||||
|         } | ||||
|         else if (logic == "QF_DT") { | ||||
|             m_uf        = true;             | ||||
|             m_dt        = true; | ||||
|         } | ||||
|         else if (logic == "QF_AUFLIA") { | ||||
|             m_uf     = true; | ||||
|             m_arrays = true; | ||||
|  | @ -187,6 +193,7 @@ struct check_logic::imp { | |||
|             m_bvs         = true; | ||||
|             m_uf          = true; | ||||
|             m_ints        = true; | ||||
|             m_dt          = true; | ||||
|             m_nonlinear   = true; // non-linear 0-1 variables may get eliminated
 | ||||
|         } | ||||
|         else { | ||||
|  | @ -443,7 +450,7 @@ struct check_logic::imp { | |||
|         else if (fid == m_seq_util.get_family_id()) { | ||||
|             // nothing to check
 | ||||
|         } | ||||
|         else if (fid == m_dt_util.get_family_id() && m_logic == "QF_FD") { | ||||
|         else if (fid == m_dt_util.get_family_id() && m_dt) { | ||||
|             // nothing to check
 | ||||
|         } | ||||
|         else if (fid == m_pb_util.get_family_id() && m_logic == "QF_FD") { | ||||
|  |  | |||
|  | @ -125,6 +125,8 @@ namespace smt { | |||
|             setup_QF_FPBV(); | ||||
|         else if (m_logic == "QF_S") | ||||
|             setup_QF_S(); | ||||
|         else if (m_logic == "QF_DT") | ||||
|             setup_QF_DT(); | ||||
|         else | ||||
|             setup_unknown(); | ||||
|     } | ||||
|  | @ -190,6 +192,8 @@ namespace smt { | |||
|                 setup_AUFLIRA(); | ||||
|             else if (m_logic == "UFNIA") | ||||
|                 setup_UFNIA(); | ||||
|             else if (m_logic == "QF_DT") | ||||
|                 setup_QF_DT(); | ||||
|             else if (m_logic == "LRA") | ||||
|                 setup_LRA(); | ||||
|             else  | ||||
|  | @ -210,6 +214,10 @@ namespace smt { | |||
|         m_params.m_random_initial_activity = IA_RANDOM; | ||||
|     } | ||||
| 
 | ||||
|     void setup::setup_QF_DT() { | ||||
|         setup_QF_UF(); | ||||
|     } | ||||
| 
 | ||||
|     void setup::setup_QF_BVRE() { | ||||
|         setup_QF_BV(); | ||||
|         setup_QF_LIA(); | ||||
|  |  | |||
|  | @ -54,6 +54,7 @@ namespace smt { | |||
|         // setup_<logic>(static_features & st) can only be used if the logical context will perform a single 
 | ||||
|         // check.
 | ||||
|         // 
 | ||||
|         void setup_QF_DT(); | ||||
|         void setup_QF_UF(); | ||||
|         void setup_QF_UF(static_features const & st); | ||||
|         void setup_QF_RDL(); | ||||
|  |  | |||
|  | @ -141,7 +141,7 @@ bool smt_logics::logic_has_fpa(symbol const & s) { | |||
| } | ||||
| 
 | ||||
| bool smt_logics::logic_has_uf(symbol const & s) { | ||||
|     return s == "QF_UF" || s == "UF"; | ||||
|     return s == "QF_UF" || s == "UF" || s == "QF_DT"; | ||||
| } | ||||
| 
 | ||||
| bool smt_logics::logic_has_horn(symbol const& s) { | ||||
|  | @ -153,5 +153,5 @@ bool smt_logics::logic_has_pb(symbol const& s) { | |||
| } | ||||
| 
 | ||||
| bool smt_logics::logic_has_datatype(symbol const& s) { | ||||
|     return s == "QF_FD" || s == "ALL"; | ||||
|     return s == "QF_FD" || s == "ALL" || s == "QF_DT"; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue