mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 13:29:11 +00:00 
			
		
		
		
	
							parent
							
								
									026265f9a3
								
							
						
					
					
						commit
						ec6260342b
					
				
					 1 changed files with 14 additions and 17 deletions
				
			
		| 
						 | 
					@ -521,31 +521,28 @@ bool theory_seq::eq_unit(expr* const& l, expr* const &r) const {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// exists x, y, rs' != empty s.t.  (ls = x ++ rs' ++ y & rs = rs') || (ls = rs' ++ x && rs = y ++ rs')
 | 
					// exists x, y, rs' != empty s.t.  (ls = x ++ rs' ++ y & rs = rs') || (ls = rs' ++ x && rs = y ++ rs')
 | 
				
			||||||
 | 
					// TBD: spec comment above doesn't seem to match what this function does.
 | 
				
			||||||
unsigned_vector theory_seq::overlap(expr_ref_vector const& ls, expr_ref_vector const& rs) {
 | 
					unsigned_vector theory_seq::overlap(expr_ref_vector const& ls, expr_ref_vector const& rs) {
 | 
				
			||||||
    SASSERT(!ls.empty() && !rs.empty());
 | 
					    SASSERT(!ls.empty() && !rs.empty());
 | 
				
			||||||
    unsigned_vector res;
 | 
					    unsigned_vector result;
 | 
				
			||||||
    expr_ref l = mk_concat(ls);
 | 
					    expr_ref l = mk_concat(ls);
 | 
				
			||||||
    expr_ref r = mk_concat(rs);
 | 
					    expr_ref r = mk_concat(rs);
 | 
				
			||||||
    expr_ref pair(m.mk_eq(l,r), m);
 | 
					    expr_ref pair(m.mk_eq(l,r), m);
 | 
				
			||||||
    if (m_overlap.find(pair, res)) {
 | 
					    if (m_overlap.find(pair, result)) {
 | 
				
			||||||
        return res;
 | 
					        return result;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    unsigned_vector result;
 | 
					    result.reset();
 | 
				
			||||||
    for (unsigned i = 0; i < ls.size(); ++i) {
 | 
					    if (eq_unit(ls[0], rs.back())) {
 | 
				
			||||||
 | 
					       result.push_back(1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    for (unsigned i = 1; i < ls.size(); ++i) {
 | 
				
			||||||
        if (eq_unit(ls[i], rs.back())) {
 | 
					        if (eq_unit(ls[i], rs.back())) {
 | 
				
			||||||
            bool same = true;
 | 
					            bool same = rs.size() > i;
 | 
				
			||||||
            if (i >= 1) {
 | 
					            for (unsigned j = 0; same && j < i; ++j) {
 | 
				
			||||||
                for (unsigned j = i - 1; rs.size() + j >= 1 + i; --j) {
 | 
					                same = eq_unit(ls[j], rs[rs.size() - 1 - i + j]);        
 | 
				
			||||||
                    if (!eq_unit(ls[j], rs[rs.size()+j-i-1])) {
 | 
					 | 
				
			||||||
                        same = false;
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                if (same)
 | 
					 | 
				
			||||||
                    result.push_back(i+1);
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else 
 | 
					            if (same)
 | 
				
			||||||
                result.push_back(1);
 | 
					                result.push_back(i+1);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    m_overlap.insert(pair, result);
 | 
					    m_overlap.insert(pair, result);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue