mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-31 03:32:28 +00:00 
			
		
		
		
	
							parent
							
								
									e770f37f52
								
							
						
					
					
						commit
						71e239c08e
					
				
					 3 changed files with 38 additions and 2 deletions
				
			
		|  | @ -459,6 +459,9 @@ br_status seq_rewriter::mk_app_core(func_decl * f, unsigned num_args, expr * con | |||
|     case OP_SEQ_AT: | ||||
|         SASSERT(num_args == 2); | ||||
|         return mk_seq_at(args[0], args[1], result);  | ||||
|     case OP_SEQ_NTH: | ||||
|         SASSERT(num_args == 2); | ||||
|         return mk_seq_nth(args[0], args[1], result);  | ||||
|     case OP_SEQ_PREFIX:  | ||||
|         SASSERT(num_args == 2); | ||||
|         return mk_seq_prefix(args[0], args[1], result); | ||||
|  | @ -877,6 +880,38 @@ br_status seq_rewriter::mk_seq_at(expr* a, expr* b, expr_ref& result) { | |||
|     return BR_DONE; | ||||
| } | ||||
| 
 | ||||
| br_status seq_rewriter::mk_seq_nth(expr* a, expr* b, expr_ref& result) { | ||||
|     zstring c; | ||||
|     rational r; | ||||
|     if (!m_autil.is_numeral(b, r) || !r.is_unsigned()) { | ||||
|         return BR_FAILED; | ||||
|     } | ||||
|     unsigned len = r.get_unsigned(); | ||||
| 
 | ||||
|     expr_ref_vector as(m()); | ||||
|     m_util.str.get_concat_units(a, as); | ||||
| 
 | ||||
|     for (unsigned i = 0; i < as.size(); ++i) { | ||||
|         expr* a = as.get(i), *u = nullptr; | ||||
|         if (m_util.str.is_unit(a, u)) { | ||||
|             if (len == i) { | ||||
|                 result = u; | ||||
|                 return BR_REWRITE1; | ||||
|             }             | ||||
|         } | ||||
|         else if (i > 0) { | ||||
|             SASSERT(len >= i); | ||||
|             result = m_util.str.mk_concat(as.size() - i, as.c_ptr() + i); | ||||
|             result = m().mk_app(m_util.get_family_id(), OP_SEQ_NTH, result, m_autil.mk_int(len - i)); | ||||
|             return BR_REWRITE2; | ||||
|         } | ||||
|         else { | ||||
|             return BR_FAILED; | ||||
|         } | ||||
|     } | ||||
|     return BR_FAILED; | ||||
| } | ||||
| 
 | ||||
| br_status seq_rewriter::mk_seq_index(expr* a, expr* b, expr* c, expr_ref& result) { | ||||
|     zstring s1, s2; | ||||
|     rational r; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue