The function hint-please in SMT is for passing hints to subgoals using the clause-processor and computed-hint mechanism.
Function:
(defun hint-please (hint) (declare (xargs :guard (listp hint))) (declare (ignore hint) (xargs :guard t)) (let ((acl2::__function__ 'hint-please)) (declare (ignorable acl2::__function__)) nil))
Theorem:
(defthm hint-please-forward (implies (hint-please hint) nil) :rule-classes :forward-chaining)
Function:
(defun remove-hint-please (cl) (declare (xargs :guard (pseudo-term-listp cl))) (let ((acl2::__function__ 'remove-hint-please)) (declare (ignorable acl2::__function__)) (b* ((cl (pseudo-term-list-fix cl)) ((unless (consp cl)) (list cl))) (case-match cl ((('hint-please &) . term) (list term)) (& (list cl))))))
Theorem:
(defthm pseudo-term-list-listp-of-remove-hint-please (b* ((cl-removed (remove-hint-please cl))) (pseudo-term-list-listp cl-removed)) :rule-classes :rewrite)
Theorem:
(defthm ev-remove-hint-please-constraint-0 (implies (and (consp acl2::x) (syntaxp (not (equal acl2::a ''nil))) (not (equal (car acl2::x) 'quote))) (equal (ev-remove-hint-please acl2::x acl2::a) (ev-remove-hint-please (cons (car acl2::x) (kwote-lst (ev-lst-remove-hint-please (cdr acl2::x) acl2::a))) nil))))
Theorem:
(defthm ev-remove-hint-please-constraint-1 (implies (symbolp acl2::x) (equal (ev-remove-hint-please acl2::x acl2::a) (and acl2::x (cdr (assoc-equal acl2::x acl2::a))))))
Theorem:
(defthm ev-remove-hint-please-constraint-2 (implies (and (consp acl2::x) (equal (car acl2::x) 'quote)) (equal (ev-remove-hint-please acl2::x acl2::a) (cadr acl2::x))))
Theorem:
(defthm ev-remove-hint-please-constraint-3 (implies (and (consp acl2::x) (consp (car acl2::x))) (equal (ev-remove-hint-please acl2::x acl2::a) (ev-remove-hint-please (caddr (car acl2::x)) (pairlis$ (cadr (car acl2::x)) (ev-lst-remove-hint-please (cdr acl2::x) acl2::a))))))
Theorem:
(defthm ev-remove-hint-please-constraint-4 (implies (not (consp acl2::x-lst)) (equal (ev-lst-remove-hint-please acl2::x-lst acl2::a) nil)))
Theorem:
(defthm ev-remove-hint-please-constraint-5 (implies (consp acl2::x-lst) (equal (ev-lst-remove-hint-please acl2::x-lst acl2::a) (cons (ev-remove-hint-please (car acl2::x-lst) acl2::a) (ev-lst-remove-hint-please (cdr acl2::x-lst) acl2::a)))))
Theorem:
(defthm ev-remove-hint-please-constraint-6 (implies (and (not (consp acl2::x)) (not (symbolp acl2::x))) (equal (ev-remove-hint-please acl2::x acl2::a) nil)))
Theorem:
(defthm ev-remove-hint-please-constraint-7 (implies (and (consp acl2::x) (not (consp (car acl2::x))) (not (symbolp (car acl2::x)))) (equal (ev-remove-hint-please acl2::x acl2::a) nil)))
Theorem:
(defthm ev-remove-hint-please-constraint-8 (implies (and (consp acl2::x) (equal (car acl2::x) 'not)) (equal (ev-remove-hint-please acl2::x acl2::a) (not (ev-remove-hint-please (cadr acl2::x) acl2::a)))))
Theorem:
(defthm ev-remove-hint-please-constraint-9 (implies (and (consp acl2::x) (equal (car acl2::x) 'if)) (equal (ev-remove-hint-please acl2::x acl2::a) (if (ev-remove-hint-please (cadr acl2::x) acl2::a) (ev-remove-hint-please (caddr acl2::x) acl2::a) (ev-remove-hint-please (cadddr acl2::x) acl2::a)))))
Theorem:
(defthm ev-remove-hint-please-constraint-10 (implies (and (consp acl2::x) (equal (car acl2::x) 'hint-please)) (equal (ev-remove-hint-please acl2::x acl2::a) (hint-please (ev-remove-hint-please (cadr acl2::x) acl2::a)))))
Theorem:
(defthm ev-remove-hint-please-disjoin-cons (iff (ev-remove-hint-please (disjoin (cons acl2::x acl2::y)) acl2::a) (or (ev-remove-hint-please acl2::x acl2::a) (ev-remove-hint-please (disjoin acl2::y) acl2::a))))
Theorem:
(defthm ev-remove-hint-please-disjoin-when-consp (implies (consp acl2::x) (iff (ev-remove-hint-please (disjoin acl2::x) acl2::a) (or (ev-remove-hint-please (car acl2::x) acl2::a) (ev-remove-hint-please (disjoin (cdr acl2::x)) acl2::a)))))
Theorem:
(defthm ev-remove-hint-please-disjoin-atom (implies (not (consp acl2::x)) (equal (ev-remove-hint-please (disjoin acl2::x) acl2::a) nil)) :rule-classes ((:rewrite :backchain-limit-lst 0)))
Theorem:
(defthm ev-remove-hint-please-disjoin-append (iff (ev-remove-hint-please (disjoin (append acl2::x acl2::y)) acl2::a) (or (ev-remove-hint-please (disjoin acl2::x) acl2::a) (ev-remove-hint-please (disjoin acl2::y) acl2::a))))
Theorem:
(defthm ev-remove-hint-please-conjoin-cons (iff (ev-remove-hint-please (conjoin (cons acl2::x acl2::y)) acl2::a) (and (ev-remove-hint-please acl2::x acl2::a) (ev-remove-hint-please (conjoin acl2::y) acl2::a))))
Theorem:
(defthm ev-remove-hint-please-conjoin-when-consp (implies (consp acl2::x) (iff (ev-remove-hint-please (conjoin acl2::x) acl2::a) (and (ev-remove-hint-please (car acl2::x) acl2::a) (ev-remove-hint-please (conjoin (cdr acl2::x)) acl2::a)))))
Theorem:
(defthm ev-remove-hint-please-conjoin-atom (implies (not (consp acl2::x)) (equal (ev-remove-hint-please (conjoin acl2::x) acl2::a) t)) :rule-classes ((:rewrite :backchain-limit-lst 0)))
Theorem:
(defthm ev-remove-hint-please-conjoin-append (iff (ev-remove-hint-please (conjoin (append acl2::x acl2::y)) acl2::a) (and (ev-remove-hint-please (conjoin acl2::x) acl2::a) (ev-remove-hint-please (conjoin acl2::y) acl2::a))))
Theorem:
(defthm ev-remove-hint-please-conjoin-clauses-cons (iff (ev-remove-hint-please (conjoin-clauses (cons acl2::x acl2::y)) acl2::a) (and (ev-remove-hint-please (disjoin acl2::x) acl2::a) (ev-remove-hint-please (conjoin-clauses acl2::y) acl2::a))))
Theorem:
(defthm ev-remove-hint-please-conjoin-clauses-when-consp (implies (consp acl2::x) (iff (ev-remove-hint-please (conjoin-clauses acl2::x) acl2::a) (and (ev-remove-hint-please (disjoin (car acl2::x)) acl2::a) (ev-remove-hint-please (conjoin-clauses (cdr acl2::x)) acl2::a)))))
Theorem:
(defthm ev-remove-hint-please-conjoin-clauses-atom (implies (not (consp acl2::x)) (equal (ev-remove-hint-please (conjoin-clauses acl2::x) acl2::a) t)) :rule-classes ((:rewrite :backchain-limit-lst 0)))
Theorem:
(defthm ev-remove-hint-please-conjoin-clauses-append (iff (ev-remove-hint-please (conjoin-clauses (append acl2::x acl2::y)) acl2::a) (and (ev-remove-hint-please (conjoin-clauses acl2::x) acl2::a) (ev-remove-hint-please (conjoin-clauses acl2::y) acl2::a))))
Theorem:
(defthm correctness-of-remove-hint-please (implies (and (pseudo-term-listp cl) (alistp b) (ev-remove-hint-please (conjoin-clauses (remove-hint-please cl)) b)) (ev-remove-hint-please (disjoin cl) b)) :rule-classes :clause-processor)