Read the first
(take-bytes n channel state) is like take for an
Function:
(defun take-bytes (n channel state) (declare (xargs :guard (and (natp n) (state-p state) (symbolp channel) (open-input-channel-p channel :byte state)))) (b* (((when (zp n)) (mv nil state)) ((mv a state) (read-byte$ channel state)) ((mv x state) (take-bytes (1- n) channel state))) (mv (cons a x) state)))
Theorem:
(defthm state-p1-of-take-bytes (implies (and (force (state-p1 state)) (force (symbolp channel)) (force (open-input-channel-p1 channel :byte state))) (state-p1 (mv-nth 1 (take-bytes n channel state)))))
Theorem:
(defthm open-input-channel-p1-of-take-bytes (implies (and (force (state-p1 state)) (force (symbolp channel)) (force (open-input-channel-p1 channel :byte state))) (open-input-channel-p1 channel :byte (mv-nth 1 (take-bytes n channel state)))))
Theorem:
(defthm mv-nth0-of-take-bytes (implies (and (force (state-p1 state)) (force (symbolp channel)) (force (open-input-channel-p1 channel :byte state))) (equal (mv-nth 0 (take-bytes n channel state)) (take n (mv-nth 0 (read-byte$-all channel state))))))
Theorem:
(defthm mv-nth1-of-take-bytes$ (implies (and (force (state-p1 state)) (force (symbolp channel)) (force (open-input-channel-p1 channel :byte state))) (equal (mv-nth 1 (take-bytes n channel state)) (nthcdr-bytes n channel state))))