Turn a function parameter into static information about the parameter as a variable or constant.
(funparam-to-var/const-sinfo param) → info
For now we treat public and private parameters as just variables, and we treat constant and const parameters as just constants. We may extend this in the future.
Function:
(defun funparam-to-var/const-sinfo (param) (declare (xargs :guard (funparamp param))) (let ((__function__ 'funparam-to-var/const-sinfo)) (declare (ignorable __function__)) (b* (((funparam param) param) (constp (or (var/const-sort-case param.sort :constant) (var/const-sort-case param.sort :const)))) (make-var/const-sinfo :type param.type :constp constp))))
Theorem:
(defthm var/const-sinfop-of-funparam-to-var/const-sinfo (b* ((info (funparam-to-var/const-sinfo param))) (var/const-sinfop info)) :rule-classes :rewrite)
Theorem:
(defthm funparam-to-var/const-sinfo-of-funparam-fix-param (equal (funparam-to-var/const-sinfo (funparam-fix param)) (funparam-to-var/const-sinfo param)))
Theorem:
(defthm funparam-to-var/const-sinfo-funparam-equiv-congruence-on-param (implies (funparam-equiv param param-equiv) (equal (funparam-to-var/const-sinfo param) (funparam-to-var/const-sinfo param-equiv))) :rule-classes :congruence)