diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2020-08-15 06:06:28 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-15 06:06:28 -0500 |
commit | 3b230077d51c8445328f0b5d5ff94bbd988d1c83 (patch) | |
tree | 70d9eb305857c3c36d71cf42382bee7a6633b908 /src/expr | |
parent | 42cd0a7bcbe993870d76d8cc9db7acc0a9ae70f9 (diff) |
(proof-new) Add the strings proof checker (#4858)
It also adds enumeration for two new rules that have been recently added.
Diffstat (limited to 'src/expr')
-rw-r--r-- | src/expr/proof_rule.cpp | 2 | ||||
-rw-r--r-- | src/expr/proof_rule.h | 16 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/expr/proof_rule.cpp b/src/expr/proof_rule.cpp index c4b72208e..be8aaea9b 100644 --- a/src/expr/proof_rule.cpp +++ b/src/expr/proof_rule.cpp @@ -115,6 +115,8 @@ const char* toString(PfRule id) return "RE_UNFOLD_NEG_CONCAT_FIXED"; case PfRule::RE_ELIM: return "RE_ELIM"; case PfRule::STRING_CODE_INJ: return "STRING_CODE_INJ"; + case PfRule::STRING_SEQ_UNIT_INJ: return "STRING_SEQ_UNIT_INJ"; + case PfRule::STRING_TRUST: return "STRING_TRUST"; //================================================= Arith rules case PfRule::ARITH_SCALE_SUM_UPPER_BOUNDS: return "ARITH_SCALE_SUM_UPPER_BOUNDS"; case PfRule::ARITH_TRICHOTOMY: return "ARITH_TRICHOTOMY"; diff --git a/src/expr/proof_rule.h b/src/expr/proof_rule.h index 364598cf4..a83e043bf 100644 --- a/src/expr/proof_rule.h +++ b/src/expr/proof_rule.h @@ -766,6 +766,22 @@ enum class PfRule : uint32_t // (not (= (str.code t) (str.code s))) // (not (= t s))) STRING_CODE_INJ, + //======================== Sequence unit + // Children: (P:(= (seq.unit x) (seq.unit y))) + // Arguments: none + // --------------------- + // Conclusion:(= x y) + // Also applies to the case where (seq.unit y) is a constant sequence + // of length one. + STRING_SEQ_UNIT_INJ, + // ======== String Trust + // Children: none + // Arguments: (Q) + // --------------------- + // Conclusion: (Q) + STRING_TRUST, + + //================================================= Arithmetic rules // ======== Adding Inequalities // Note: an ArithLiteral is a term of the form (>< poly const) // where |