Induction scheme for exec-expr applied to a pure expression.
This concerns both the expression structure and the limit.
Function:
(defun induct-exec-expr-of-pure (expr limit) (declare (xargs :guard (and (exprp expr) (natp limit)))) (expr-case expr :ident nil :const nil :arrsub (list (induct-exec-expr-of-pure expr.arr (1- limit)) (induct-exec-expr-of-pure expr.sub (1- limit))) :member (induct-exec-expr-of-pure expr.target (1- limit)) :memberp (induct-exec-expr-of-pure expr.target (1- limit)) :unary (induct-exec-expr-of-pure expr.arg (1- limit)) :cast (induct-exec-expr-of-pure expr.arg (1- limit)) :binary (list (induct-exec-expr-of-pure expr.arg1 (1- limit)) (induct-exec-expr-of-pure expr.arg2 (1- limit))) :cond (list (induct-exec-expr-of-pure expr.test (1- limit)) (induct-exec-expr-of-pure expr.then (1- limit)) (induct-exec-expr-of-pure expr.else (1- limit))) :otherwise nil))