mirror of
https://github.com/Z3Prover/z3
synced 2026-06-26 10:28:48 +00:00
36 lines
759 B
C++
36 lines
759 B
C++
/*++
|
|
Copyright (c) 2026 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
seq_subset.h
|
|
|
|
Abstract:
|
|
|
|
Heuristic regular-expression subset checks used by seq_rewriter.
|
|
|
|
Author:
|
|
|
|
Nikolaj Bjorner (nbjorner) 2026-6-8
|
|
|
|
--*/
|
|
#pragma once
|
|
|
|
#include "ast/seq_decl_plugin.h"
|
|
|
|
class seq_subset {
|
|
seq_util::rex& m_re;
|
|
static constexpr unsigned m_max_depth = 3;
|
|
|
|
bool is_subset_rec(expr* a, expr* b, unsigned depth) const;
|
|
|
|
// true if regex a, viewed as a flattened concatenation, has suf as a
|
|
// structural (concatenation) suffix.
|
|
bool ends_with(expr* a, expr* suf) const;
|
|
|
|
void flatten_concat(expr* a, ptr_vector<expr>& out) const;
|
|
|
|
public:
|
|
explicit seq_subset(seq_util::rex& re) : m_re(re) {}
|
|
bool is_subset(expr* a, expr* b) const;
|
|
};
|