• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
      • Std/lists
      • Std/alists
      • Obags
      • Std/util
      • Std/strings
        • Pretty-printing
        • Printtree
        • Base64
        • Charset-p
        • Strtok!
        • Cases
        • Concatenation
        • Html-encoding
        • Character-kinds
        • Substrings
          • Istrpos
          • Strrpos
          • Strpos
          • Collect-syms-with-isubstr
          • Istrprefixp
          • Collect-strs-with-isubstr
          • Iprefixp
          • Strsuffixp
          • Firstn-chars
          • Strprefixp
            • Strprefixp-impl
            • Isubstrp
            • Substrp
          • Strtok
          • Equivalences
          • Url-encoding
          • Lines
          • Explode-implode-equalities
          • Ordering
          • Numbers
          • Pad-trim
          • Coercion
          • Std/strings/digit-to-char
          • Substitution
          • Symbols
        • Std/osets
        • Std/io
        • Std/basic
        • Std/system
        • Std/typed-lists
        • Std/bitsets
        • Std/testing
        • Std/typed-alists
        • Std/stobjs
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Strprefixp

    Strprefixp-impl

    Fast implementation of strprefixp.

    Definitions and Theorems

    Function: strprefixp-impl

    (defun strprefixp-impl (x y xn yn xl yl)
     (declare (type string x)
              (type string y)
              (type integer xn)
              (type integer yn)
              (type integer xl)
              (type integer yl)
              (xargs :guard (and (stringp x)
                                 (stringp y)
                                 (natp xn)
                                 (natp yn)
                                 (natp xl)
                                 (natp yl)
                                 (= xl (length x))
                                 (= yl (length y))
                                 (<= xn (length x))
                                 (<= yn (length y)))))
     (cond
       ((mbe :logic (zp (- (nfix xl) (nfix xn)))
             :exec (int= xn xl))
        t)
       ((mbe :logic (zp (- (nfix yl) (nfix yn)))
             :exec (int= yn yl))
        nil)
       ((eql (the character (char x xn))
             (the character (char y yn)))
        (mbe :logic (strprefixp-impl x y (+ (nfix xn) 1)
                                     (+ (nfix yn) 1)
                                     xl yl)
             :exec (strprefixp-impl (the string x)
                                    (the string y)
                                    (the integer (+ (the integer xn) 1))
                                    (the integer (+ (the integer yn) 1))
                                    (the integer xl)
                                    (the integer yl))))
       (t nil)))

    Theorem: strprefixp-impl-elim

    (defthm strprefixp-impl-elim
      (implies (and (force (stringp x))
                    (force (stringp y))
                    (force (natp xn))
                    (force (natp yn))
                    (force (= xl (length x)))
                    (force (= yl (length y))))
               (equal (strprefixp-impl x y xn yn xl yl)
                      (prefixp (nthcdr xn (explode x))
                               (nthcdr yn (explode y))))))