Obtaining the constraint on a function symbol
For a function symbol,
We illustrate with the following example.
(encapsulate (((f1 *) => *) ((f3 *) => *)) (local (defun f1 (x) x)) (defun f2 (x) (f1 x)) (local (defun f3 (x) x)) (defun f4 (x) (f3 x)) (defthm f1-prop (equal (f1 x) (f4 x))))
Then we can see the results of
ACL2 !>(let ((wrld (w state))) (list 'result 'f1 (mv-let (flg1 c1) (constraint-info 'f1 wrld) (list flg1 c1)) 'f2 (mv-let (flg2 c2) (constraint-info 'f2 wrld) (list flg2 c2)) 'f3 (mv-let (flg3 c3) (constraint-info 'f3 wrld) (list flg3 c3)) 'f4 (mv-let (flg4 c4) (constraint-info 'f4 wrld) (list flg4 c4)))) (RESULT F1 (F1 ((EQUAL (F4 X) (F3 X)) (EQUAL (F1 X) (F4 X)))) F2 (NIL (EQUAL (F2 X) (F1 X))) F3 (F1 ((EQUAL (F4 X) (F3 X)) (EQUAL (F1 X) (F4 X)))) F4 (F1 ((EQUAL (F4 X) (F3 X)) (EQUAL (F1 X) (F4 X))))) ACL2 !>
Notice that the flag (first result) for
Also see constraint. For more details, see comments in the
definition of