Concrete implementation of strin-cdr.
(sin$c-cdr sin$c) → sin$c
This is not very efficient. It's better to use sin$c-nthcdr than to use this in a loop.
Function:
(defun sin$c-cdr (sin$c) (declare (xargs :stobjs (sin$c))) (declare (xargs :guard (sin$c-okp sin$c))) (let ((__function__ 'sin$c-cdr)) (declare (ignorable __function__)) (b* (((the string str) (sin$c-str sin$c)) ((the (unsigned-byte 60) pos) (sin$c-pos sin$c)) ((the (unsigned-byte 60) len) (length str)) ((when (eql pos len)) sin$c) ((the character char1) (char str pos)) ((the (unsigned-byte 60) pos) (+ 1 pos))) (if (eql char1 #\Newline) (b* (((the (unsigned-byte 60) line) (sin$c-line sin$c)) ((the (unsigned-byte 60) line) (+ 1 line)) (sin$c (update-sin$c-col 0 sin$c)) (sin$c (update-sin$c-line line sin$c))) (update-sin$c-pos pos sin$c)) (b* (((the (unsigned-byte 60) col) (sin$c-col sin$c)) ((the (unsigned-byte 60) col) (+ 1 col)) (sin$c (update-sin$c-col col sin$c))) (update-sin$c-pos pos sin$c))))))
Theorem:
(defthm sin-cdr{correspondence} (implies (and (sin$corr sin$c sin) (strin-p sin)) (sin$corr (sin$c-cdr sin$c) (strin-cdr sin))))