Functions called by expressions and lists of expressions.
Function:
(defun expression-callees (expr) (declare (xargs :guard (expressionp expr))) (let ((__function__ 'expression-callees)) (declare (ignorable __function__)) (expression-case expr :literal nil :var/const nil :assoc-const nil :unary (expression-callees expr.arg) :binary (union (expression-callees expr.arg1) (expression-callees expr.arg2)) :cond (union (expression-callees expr.test) (union (expression-callees expr.then) (expression-callees expr.else))) :unit nil :tuple (expression-list-callees expr.components) :tuple-component (expression-callees expr.tuple) :struct (struct-init-list-callees expr.components) :struct-component (expression-callees expr.struct) :internal-call (insert expr.fun (expression-list-callees expr.args)) :external-call nil :static-call nil)))
Function:
(defun expression-list-callees (exprs) (declare (xargs :guard (expression-listp exprs))) (let ((__function__ 'expression-list-callees)) (declare (ignorable __function__)) (cond ((endp exprs) nil) (t (union (expression-callees (car exprs)) (expression-list-callees (cdr exprs)))))))
Function:
(defun struct-init-callees (cinit) (declare (xargs :guard (struct-initp cinit))) (let ((__function__ 'struct-init-callees)) (declare (ignorable __function__)) (expression-callees (struct-init->expr cinit))))
Function:
(defun struct-init-list-callees (cinits) (declare (xargs :guard (struct-init-listp cinits))) (let ((__function__ 'struct-init-list-callees)) (declare (ignorable __function__)) (cond ((endp cinits) nil) (t (union (struct-init-callees (car cinits)) (struct-init-list-callees (cdr cinits)))))))
Theorem:
(defthm return-type-of-expression-callees.callees (b* ((?callees (expression-callees expr))) (identifier-setp callees)) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-expression-list-callees.callees (b* ((?callees (expression-list-callees exprs))) (identifier-setp callees)) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-struct-init-callees.callees (b* ((?callees (struct-init-callees cinit))) (identifier-setp callees)) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-struct-init-list-callees.callees (b* ((?callees (struct-init-list-callees cinits))) (identifier-setp callees)) :rule-classes :rewrite)
Theorem:
(defthm expression-callees-of-expression-fix-expr (equal (expression-callees (expression-fix expr)) (expression-callees expr)))
Theorem:
(defthm expression-list-callees-of-expression-list-fix-exprs (equal (expression-list-callees (expression-list-fix exprs)) (expression-list-callees exprs)))
Theorem:
(defthm struct-init-callees-of-struct-init-fix-cinit (equal (struct-init-callees (struct-init-fix cinit)) (struct-init-callees cinit)))
Theorem:
(defthm struct-init-list-callees-of-struct-init-list-fix-cinits (equal (struct-init-list-callees (struct-init-list-fix cinits)) (struct-init-list-callees cinits)))
Theorem:
(defthm expression-callees-expression-equiv-congruence-on-expr (implies (expression-equiv expr expr-equiv) (equal (expression-callees expr) (expression-callees expr-equiv))) :rule-classes :congruence)
Theorem:
(defthm expression-list-callees-expression-list-equiv-congruence-on-exprs (implies (expression-list-equiv exprs exprs-equiv) (equal (expression-list-callees exprs) (expression-list-callees exprs-equiv))) :rule-classes :congruence)
Theorem:
(defthm struct-init-callees-struct-init-equiv-congruence-on-cinit (implies (struct-init-equiv cinit cinit-equiv) (equal (struct-init-callees cinit) (struct-init-callees cinit-equiv))) :rule-classes :congruence)
Theorem:
(defthm struct-init-list-callees-struct-init-list-equiv-congruence-on-cinits (implies (struct-init-list-equiv cinits cinits-equiv) (equal (struct-init-list-callees cinits) (struct-init-list-callees cinits-equiv))) :rule-classes :congruence)