All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cvc5-cvc5-1.2.0.src.theory.strings.rewrites-regexp-membership Maven / Gradle / Ivy

The newest version!
; =============== Regular expression membership rules

(define-rule re-in-empty ((t String)) (str.in_re t re.none) false)
(define-rule re-in-sigma ((t String)) (str.in_re t re.allchar) (= (str.len t) 1))
(define-rule re-in-sigma-star ((t String)) (str.in_re t (re.* re.allchar)) true)
(define-rule re-in-cstring ((t String) (s String)) (str.in_re t (str.to_re s)) (= t s))
(define-rule re-in-comp ((t String) (r RegLan)) (str.in_re t (re.comp r)) (not (str.in_re t r)))

(define-rule* str-in-re-union-elim ((s String) (r1 RegLan) (r2 RegLan) (rs RegLan :list))
  (str.in_re s (re.union r1 r2 rs))
  (str.in_re s (re.union r2 rs))
  (or (str.in_re s r1) _))

(define-rule* str-in-re-inter-elim ((s String) (r1 RegLan) (r2 RegLan) (rs RegLan :list))
  (str.in_re s (re.inter r1 r2 rs))
  (str.in_re s (re.inter r2 rs))
  (and (str.in_re s r1) _))

(define-cond-rule str-in-re-range-elim ((s String) (c1 String) (c2 String))
  (and (= (str.len c1) 1) (= (str.len c2) 1))
  (str.in_re s (re.range c1 c2))
  (and (<= (str.to_code c1) (str.to_code s)) (<= (str.to_code s) (str.to_code c2))))

(define-rule str-in-re-contains ((t String) (s String))
  (str.in_re t (re.++ (re.* re.allchar) (str.to_re s) (re.* re.allchar)))
  (str.contains t s))

(define-rule* str-in-re-strip-prefix ((s String) (s1 String) (s2 String :list) (sr1 String) (sr2 String :list) (r RegLan :list))
  (str.in_re (str.++ s s1 s2) (re.++ (str.to_re (str.++ s sr1 sr2)) r))  
  (str.in_re (str.++ s1 s2) (re.++ (str.to_re (str.++ sr1 sr2)) r))
  _)

(define-cond-rule str-in-re-strip-prefix-neg ((s String) (t String) (s1 String) (s2 String :list) (sr1 String) (sr2 String :list) (r RegLan :list))
  (and (= (str.len s) (str.len t)) (not (= s t)))
  (str.in_re (str.++ s s1 s2) (re.++ (str.to_re (str.++ t sr1 sr2)) r))  
  false)

(define-rule* str-in-re-strip-prefix-sr-single ((s String) (s1 String) (s2 String :list) (r1 RegLan) (r2 RegLan :list))
  (str.in_re (str.++ s s1 s2) (re.++ (str.to_re s) r1 r2))  
  (str.in_re (str.++ s1 s2) (re.++ r1 r2))
  _)

(define-cond-rule str-in-re-strip-prefix-sr-single-neg ((s String) (t String) (s1 String) (s2 String :list) (r1 RegLan) (r2 RegLan :list))
  (and (= (str.len s) (str.len t)) (not (= s t)))
  (str.in_re (str.++ s s1 s2) (re.++ (str.to_re t) r1 r2))  
  false)

(define-rule str-in-re-strip-prefix-srs-single ((s String) (r1 RegLan) (r2 RegLan :list))
  (str.in_re s (re.++ (str.to_re s) r1 r2))  
  (str.in_re "" (re.++ r1 r2)))

(define-cond-rule str-in-re-strip-prefix-srs-single-neg ((s String) (t String) (r1 RegLan) (r2 RegLan :list))
  (and (= (str.len s) (str.len t)) (not (= s t)))
  (str.in_re s (re.++ (str.to_re t) r1 r2))  
  false)

(define-rule str-in-re-strip-prefix-s-single ((s String) (sr1 String) (sr2 String :list) (r RegLan :list))
  (str.in_re s (re.++ (str.to_re (str.++ s sr1 sr2)) r))  
  (str.in_re "" (re.++ (str.to_re (str.++ sr1 sr2)) r)))

(define-cond-rule str-in-re-strip-prefix-s-single-neg ((s String) (t String) (sr1 String) (sr2 String :list) (r RegLan :list))
  (and (= (str.len s) (str.len t)) (not (= s t)))
  (str.in_re s (re.++ (str.to_re (str.++ t sr1 sr2)) r))  
  false)

(define-rule* str-in-re-strip-prefix-base ((s String) (s1 String) (s2 String :list) (sr1 String) (sr2 String :list))
  (str.in_re (str.++ s s1 s2) (str.to_re (str.++ s sr1 sr2)))
  (str.in_re (str.++ s1 s2) (str.to_re (str.++ sr1 sr2)))
  _)

(define-cond-rule str-in-re-strip-prefix-base-neg ((s String) (t String) (s1 String) (s2 String :list) (sr1 String) (sr2 String :list))
  (and (= (str.len s) (str.len t)) (not (= s t)))
  (str.in_re (str.++ s s1 s2) (str.to_re (str.++ t sr1 sr2)))
  false)

(define-rule str-in-re-strip-prefix-base-s-single ((s String) (sr1 String) (sr2 String :list))
  (str.in_re s (str.to_re (str.++ s sr1 sr2)))
  (str.in_re "" (str.to_re (str.++ sr1 sr2))))

(define-cond-rule str-in-re-strip-prefix-base-s-single-neg ((s String) (t String) (sr1 String) (sr2 String :list))
  (and (= (str.len s) (str.len t)) (not (= s t)))
  (str.in_re s (str.to_re (str.++ t sr1 sr2)))
  false)

(define-cond-rule str-in-re-strip-char ((s String) (s1 String) (s2 String :list) (r1 RegLan) (r2 RegLan :list))
  (= (str.len s) 1)
  (str.in_re (str.++ s s1 s2) (re.++ re.allchar r1 r2))
  (str.in_re (str.++ s1 s2) (re.++ r1 r2)))

(define-cond-rule str-in-re-strip-char-s-single ((s String) (r1 RegLan) (r2 RegLan :list))
  (= (str.len s) 1)
  (str.in_re s (re.++ re.allchar r1 r2))
  (str.in_re "" (re.++ r1 r2)))

(define-rule* str-in-re-strip-prefix-rev ((s String) (s1 String) (s2 String :list) (sr1 String) (sr2 String :list) (r RegLan :list))
  (str.in_re (str.++ s1 s2 s) (re.++ r (str.to_re (str.++ sr1 sr2 s))))
  (str.in_re (str.++ s1 s2) (re.++ r (str.to_re (str.++ sr1 sr2))))
  _)

(define-cond-rule str-in-re-strip-prefix-neg-rev ((s String) (t String) (s1 String) (s2 String :list) (sr1 String) (sr2 String :list) (r RegLan :list))
  (and (= (str.len s) (str.len t)) (not (= s t)))
  (str.in_re (str.++ s1 s2 s) (re.++ r (str.to_re (str.++ sr1 sr2 t))))
  false)

(define-rule* str-in-re-strip-prefix-sr-single-rev ((s String) (s1 String) (s2 String :list) (r1 RegLan) (r2 RegLan :list))
  (str.in_re (str.++ s1 s2 s) (re.++ r1 r2 (str.to_re s)))
  (str.in_re (str.++ s1 s2) (re.++ r1 r2))
  _)

(define-cond-rule str-in-re-strip-prefix-sr-single-neg-rev ((s String) (t String) (s1 String) (s2 String :list) (r1 RegLan) (r2 RegLan :list))
  (and (= (str.len s) (str.len t)) (not (= s t)))
  (str.in_re (str.++ s1 s2 s) (re.++ r1 r2 (str.to_re t)))
  false)

(define-rule str-in-re-strip-prefix-srs-single-rev ((s String) (r1 RegLan) (r2 RegLan :list))
  (str.in_re s (re.++ r1 r2 (str.to_re s)))  
  (str.in_re "" (re.++ r1 r2)))

(define-cond-rule str-in-re-strip-prefix-srs-single-neg-rev ((s String) (t String) (r1 RegLan) (r2 RegLan :list))
  (and (= (str.len s) (str.len t)) (not (= s t)))
  (str.in_re s (re.++ r1 r2 (str.to_re t)))  
  false)

(define-rule str-in-re-strip-prefix-s-single-rev ((s String) (sr1 String) (sr2 String :list) (r RegLan :list))
  (str.in_re s (re.++ r (str.to_re (str.++ sr1 sr2 s))))  
  (str.in_re "" (re.++ r (str.to_re (str.++ sr1 sr2)))))

(define-cond-rule str-in-re-strip-prefix-s-single-neg-rev ((s String) (t String) (sr1 String) (sr2 String :list) (r RegLan :list))
  (and (= (str.len s) (str.len t)) (not (= s t)))
  (str.in_re s (re.++ r (str.to_re (str.++ sr1 sr2 t))))
  false)

(define-rule* str-in-re-strip-prefix-base-rev ((s String) (s1 String) (s2 String :list) (sr1 String) (sr2 String :list))
  (str.in_re (str.++ s1 s2 s) (str.to_re (str.++ sr1 sr2 s)))
  (str.in_re (str.++ s1 s2) (str.to_re (str.++ sr1 sr2)))
  _)

(define-cond-rule str-in-re-strip-prefix-base-neg-rev ((s String) (t String) (s1 String) (s2 String :list) (sr1 String) (sr2 String :list))
  (and (= (str.len s) (str.len t)) (not (= s t)))
  (str.in_re (str.++ s1 s2 s) (str.to_re (str.++ sr1 sr2 t)))
  false)

(define-rule str-in-re-strip-prefix-base-s-single-rev ((s String) (sr1 String) (sr2 String :list))
  (str.in_re s (str.to_re (str.++ sr1 sr2 s)))
  (str.in_re "" (str.to_re (str.++ sr1 sr2))))

(define-cond-rule str-in-re-strip-prefix-base-s-single-neg-rev ((s String) (t String) (sr1 String) (sr2 String :list))
  (and (= (str.len s) (str.len t)) (not (= s t)))
  (str.in_re s (str.to_re (str.++ sr1 sr2 t)))
  false)

(define-cond-rule str-in-re-strip-char-rev ((s String) (s1 String) (s2 String :list) (r1 RegLan) (r2 RegLan :list))
  (= (str.len s) 1)
  (str.in_re (str.++ s1 s2 s) (re.++ r1 r2 re.allchar))
  (str.in_re (str.++ s1 s2) (re.++ r1 r2)))

(define-cond-rule str-in-re-strip-char-s-single-rev ((s String) (r1 RegLan) (r2 RegLan :list))
  (= (str.len s) 1)
  (str.in_re s (re.++ r1 r2 re.allchar))
  (str.in_re "" (re.++ r1 r2)))

(define-cond-rule str-in-re-req-unfold ((s String) (r1 RegLan) (r2 RegLan) (r3 RegLan :list))
  (not (str.in_re s (re.++ r2 r3)))
  (str.in_re s (re.++ (re.* r1) r2 r3))
  (str.in_re s (re.++ r1 (re.* r1) r2 r3)))

(define-cond-rule str-in-re-req-unfold-rev ((s String) (r1 RegLan) (r2 RegLan :list) (r3 RegLan))
  (not (str.in_re s (re.++ r1 r2)))
  (str.in_re s (re.++ r1 r2 (re.* r3)))
  (str.in_re s (re.++ r1 r2 (re.* r3) r3)))

(define-cond-rule str-in-re-skip-unfold ((s String) (r1 RegLan) (r2 RegLan) (r3 RegLan :list))
  (not (str.in_re s (re.++ r1 (re.* r1) r2 r3)))
  (str.in_re s (re.++ (re.* r1) r2 r3))
  (str.in_re s (re.++ r2 r3)))

(define-cond-rule str-in-re-skip-unfold-rev ((s String) (r1 RegLan) (r2 RegLan :list) (r3 RegLan))
  (not (str.in_re s (re.++ r1 r2 (re.* r3) r3)))
  (str.in_re s (re.++ r1 r2 (re.* r3)))
  (str.in_re s (re.++ r1 r2)))

(define-cond-rule str-in-re-test-unfold ((s String) (r1 RegLan) (r2 RegLan) (r3 RegLan :list))
  (and (not (str.in_re s (re.++ r2 r3))) (not (str.in_re s (re.++ r1 (re.* r1) r2 r3))))
  (str.in_re s (re.++ (re.* r1) r2 r3))
  false)

(define-cond-rule str-in-re-test-unfold-rev ((s String) (r1 RegLan) (r2 RegLan :list) (r3 RegLan))
  (and (not (str.in_re s (re.++ r1 r2))) (not (str.in_re s (re.++ r1 r2 (re.* r3) r3))))
  (str.in_re s (re.++ r1 r2 (re.* r3)))
  false)




© 2015 - 2025 Weber Informatics LLC | Privacy Policy