Filtering...

arrays

books/centaur/misc/arrays
other
(in-package "ACL2")
def-array-set-fnfunction
(defun def-array-set-fn
  (name stobj field update length guard fix check)
  (let* ((length (or length
         (intern-in-package-of-symbol (concatenate 'string (symbol-name field) "-LENGTH")
           field))) (update (or update
          (intern-in-package-of-symbol (concatenate 'string "UPDATE-" (symbol-name field) "I")
            field)))
      (fast-name (intern-in-package-of-symbol (concatenate 'string (symbol-name name) "-FAST")
          name)))
    `(progn (definline ,NAME
        (idx x ,STOBJ)
        (declare (xargs :guard (and (natp idx) ,GUARD) :stobjs ,STOBJ))
        (mbe :logic (,UPDATE (nfix idx) ,FIX ,STOBJ)
          :exec (if (and (< idx (,LENGTH ,STOBJ)) ,CHECK)
            (,UPDATE idx x ,STOBJ)
            (ec-call (,UPDATE idx x ,STOBJ)))))
      (definline ,FAST-NAME
        (idx x ,STOBJ)
        (declare (xargs :guard (and (natp idx) (< idx (,LENGTH ,STOBJ)) ,GUARD)
            :stobjs ,STOBJ))
        (mbe :logic (,UPDATE (nfix idx) ,FIX ,STOBJ)
          :exec ,(IF (EQUAL CHECK ''T)
     `(,UPDATE IDX X ,STOBJ)
     `(IF ,CHECK
          (,UPDATE IDX X ,STOBJ)
          (EC-CALL (,UPDATE IDX X ,STOBJ)))))))))
def-array-setmacro
(defmacro def-array-set
  (name &key stobj field update length guard fix (check 't))
  (def-array-set-fn name
    stobj
    field
    update
    length
    guard
    fix
    check))
def-slot-set-fnfunction
(defun def-slot-set-fn
  (name stobj field update guard fix check)
  (let* ((update (or update
         (intern-in-package-of-symbol (concatenate 'string "UPDATE-" (symbol-name field))
           field))))
    `(definline ,NAME
      (x ,STOBJ)
      (declare (xargs :guard ,GUARD :stobjs ,STOBJ))
      (mbe :logic (,UPDATE ,FIX ,STOBJ)
        :exec (if ,CHECK
          (,UPDATE x ,STOBJ)
          (ec-call (,UPDATE x ,STOBJ)))))))
def-slot-setmacro
(defmacro def-slot-set
  (name &key stobj field update guard fix (check 't))
  (def-slot-set-fn name stobj field update guard fix check))