mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-03 21:09:11 +00:00 
			
		
		
		
	add regular expression membership for range of int.to.str functions. Issue #957
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									be3cc91323
								
							
						
					
					
						commit
						4140afa4cb
					
				
					 2 changed files with 12 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -304,6 +304,7 @@ public:
 | 
			
		|||
 | 
			
		||||
        app* mk_to_re(expr* s) { return m.mk_app(m_fid, OP_SEQ_TO_RE, 1, &s); }
 | 
			
		||||
        app* mk_in_re(expr* s, expr* r) { return m.mk_app(m_fid, OP_SEQ_IN_RE, s, r); }
 | 
			
		||||
        app* mk_range(expr* s1, expr* s2) { return m.mk_app(m_fid, OP_RE_RANGE, s1, s2); }
 | 
			
		||||
        app* mk_concat(expr* r1, expr* r2) { return m.mk_app(m_fid, OP_RE_CONCAT, r1, r2); }
 | 
			
		||||
        app* mk_union(expr* r1, expr* r2) { return m.mk_app(m_fid, OP_RE_UNION, r1, r2); }
 | 
			
		||||
        app* mk_inter(expr* r1, expr* r2) { return m.mk_app(m_fid, OP_RE_INTERSECT, r1, r2); }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2345,6 +2345,17 @@ bool theory_seq::add_itos_axiom(expr* e) {
 | 
			
		|||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        add_axiom(mk_eq(e2, n, false));
 | 
			
		||||
 | 
			
		||||
#if 1
 | 
			
		||||
        expr_ref num_re(m), opt_re(m);
 | 
			
		||||
        num_re = m_util.re.mk_range(m_util.str.mk_string(symbol("0")), m_util.str.mk_string(symbol("9")));
 | 
			
		||||
        num_re = m_util.re.mk_plus(num_re);
 | 
			
		||||
        opt_re = m_util.re.mk_opt(m_util.re.mk_to_re(m_util.str.mk_string(symbol("-"))));
 | 
			
		||||
        num_re = m_util.re.mk_concat(opt_re, num_re);
 | 
			
		||||
        app_ref in_re(m_util.re.mk_in_re(e, num_re), m);
 | 
			
		||||
        internalize_term(in_re);
 | 
			
		||||
        propagate_in_re(in_re, true);
 | 
			
		||||
#endif
 | 
			
		||||
        m_trail_stack.push(push_replay(alloc(replay_axiom, m, e)));
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue