Multi-step execution.
We perform
Function:
(defun stepn (n stat feat) (declare (xargs :guard (and (natp n) (statp stat) (featp feat)))) (declare (xargs :guard (stat-validp stat feat))) (let ((__function__ 'stepn)) (declare (ignorable __function__)) (cond ((zp n) (stat-fix stat)) ((errorp stat feat) (stat-fix stat)) (t (stepn (1- n) (step stat feat) feat)))))
Theorem:
(defthm statp-of-stepn (b* ((new-stat (stepn n stat feat))) (statp new-stat)) :rule-classes :rewrite)
Theorem:
(defthm stat-validp-of-stepn (implies (stat-validp stat feat) (b* ((?new-stat (stepn n stat feat))) (stat-validp new-stat feat))))
Theorem:
(defthm stepn-of-nfix-n (equal (stepn (nfix n) stat feat) (stepn n stat feat)))
Theorem:
(defthm stepn-nat-equiv-congruence-on-n (implies (acl2::nat-equiv n n-equiv) (equal (stepn n stat feat) (stepn n-equiv stat feat))) :rule-classes :congruence)
Theorem:
(defthm stepn-of-stat-fix-stat (equal (stepn n (stat-fix stat) feat) (stepn n stat feat)))
Theorem:
(defthm stepn-stat-equiv-congruence-on-stat (implies (stat-equiv stat stat-equiv) (equal (stepn n stat feat) (stepn n stat-equiv feat))) :rule-classes :congruence)
Theorem:
(defthm stepn-of-feat-fix-feat (equal (stepn n stat (feat-fix feat)) (stepn n stat feat)))
Theorem:
(defthm stepn-feat-equiv-congruence-on-feat (implies (feat-equiv feat feat-equiv) (equal (stepn n stat feat) (stepn n stat feat-equiv))) :rule-classes :congruence)