• Top
    • Documentation
    • Books
    • Recursion-and-induction
    • Boolean-reasoning
    • Debugging
    • Projects
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
      • Esim
        • Symbolic-test-vectors
        • Esim-primitives
        • E-conversion
        • Esim-steps
        • Patterns
        • Mod-internal-paths
          • Fast-canonicalize-path
          • Extend-internal-paths
            • Follow-esim-path
          • Defmodules
          • Esim-simplify-update-fns
          • Esim-tutorial
          • Esim-vl
        • Vl2014
        • Sv
        • Fgl
        • Vl
        • X86isa
        • Svl
        • Rtl
      • Software-verification
      • Testing-utilities
      • Math
    • Mod-internal-paths

    Extend-internal-paths

    (extend-internal-paths a x) constructs a new list where a has been consed onto each element of x.

    This is used to extend a list of paths with a new level of the module hierarchy. That is, suppose a is the name of a submodule occurrence, and that x = (x1 x2 ... xn) is the list of paths for all internal wires of that submodule. Then we generate the list:

    (list (hons a x1)
          (hons a x2)
          ...
          (hons a xn))

    which can loosely be thought of as, a.x1, a.x2, etc.

    Definitions and Theorems

    Function: extend-internal-paths-exec

    (defun extend-internal-paths-exec (a x acc)
           (declare (xargs :guard t))
           (if (atom x)
               acc
               (let ((acc (cons (hons a (car x)) acc)))
                    (extend-internal-paths-exec a (cdr x)
                                                acc))))

    Function: extend-internal-paths-exec-cons

    (defun
         extend-internal-paths-exec-cons
         (a x acc)
         (declare (xargs :guard t))
         (mbe :logic (extend-internal-paths-exec a x acc)
              :exec (if (atom x)
                        acc
                        (let ((acc (cons (cons a (car x)) acc)))
                             (extend-internal-paths-exec-cons a (cdr x)
                                                              acc)))))

    Function: extend-internal-paths

    (defun extend-internal-paths (a x)
           (declare (xargs :guard t))
           (mbe :logic (if (atom x)
                           nil
                           (cons (hons a (car x))
                                 (extend-internal-paths a (cdr x))))
                :exec (reverse (extend-internal-paths-exec a x nil))))

    Theorem: extend-internal-paths-exec-removal

    (defthm extend-internal-paths-exec-removal
            (equal (extend-internal-paths-exec a x acc)
                   (revappend (extend-internal-paths a x)
                              acc)))

    Function: extend-internal-paths-cons

    (defun
        extend-internal-paths-cons (a x)
        (declare (xargs :guard t))
        (mbe :logic (extend-internal-paths a x)
             :exec (reverse (extend-internal-paths-exec-cons a x nil))))

    Theorem: cons-listp-of-extend-internal-paths

    (defthm cons-listp-of-extend-internal-paths
            (cons-listp (extend-internal-paths a x)))

    Theorem: len-extend-internal-paths

    (defthm len-extend-internal-paths
            (equal (len (extend-internal-paths u lst))
                   (len lst)))