ACL2 !>(certify-book "notes-version-1") CERTIFICATION ATTEMPT FOR "/Users/moore/courses/cs389r/spring-06/notes-version-1.lisp" ACL2 Version 2.9 * Step 1: Read "/Users/moore/courses/cs389r/spring-06/notes-version-1.lisp" and compute its check sum. * Step 2: There were 329 forms in the file. The check sum is 132297991. We now attempt to establish that each form, whether local or non-local, is indeed an admissible embedded event form in the context of the previously admitted ones. Note that proof-tree output is inhibited during this check; see :DOC proof-tree. ACL2 >>(DEFMACRO THEOREM (NAME FORM &KEY (RULE-CLASSES ':REWRITE RULE-CLASSES-SUPPLIEDP) HINTS) (LET ((OLD-HINTS HINTS) (HINTS (COND ((NULL HINTS) '(("Goal" :DO-NOT-INDUCT T))) ((AND (TRUE-LISTP HINTS) (EQUAL (LENGTH HINTS) 1) (EQUAL (CAR (CAR HINTS)) "Goal")) (CONS (CONS '"Goal" (CONS ':DO-NOT-INDUCT (CONS 'T (APPEND (CDR (CAR HINTS)) 'NIL)))) 'NIL)) (T NIL)))) (COND ((NULL HINTS) (CONS 'ER (CONS 'SOFT (CONS (CONS 'QUOTE (CONS 'THEOREM 'NIL)) (CONS '"The :hints value ~x0 is not allowed ~ by this macro." (CONS (CONS 'QUOTE (CONS OLD-HINTS 'NIL)) 'NIL)))))) ((AND RULE-CLASSES-SUPPLIEDP (EQUAL RULE-CLASSES NIL)) (CONS 'DEFTHM (CONS NAME (CONS FORM (CONS ':RULE-CLASSES (CONS 'NIL (CONS ':HINTS (CONS HINTS 'NIL)))))))) (T (CONS 'PROGN (CONS (CONS 'DEFTHM (CONS NAME (CONS FORM (APPEND (IF RULE-CLASSES-SUPPLIEDP (CONS ':RULE-CLASSES (CONS RULE-CLASSES 'NIL)) NIL) (CONS ':HINTS (CONS HINTS 'NIL)))))) (CONS (CONS 'IN-THEORY (CONS (CONS 'DISABLE (CONS NAME 'NIL)) 'NIL)) (CONS (CONS 'VALUE-TRIPLE (CONS (CONS 'QUOTE (CONS NAME 'NIL)) 'NIL)) 'NIL)))))))) Summary Form: ( DEFMACRO THEOREM ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) THEOREM ACL2 >>(DEFUN ADD-LABEL-TO-BUCKET (LABEL CONST BUCKETS) (IF (ENDP BUCKETS) (LIST (LIST CONST (LIST LABEL))) (IF (EQUAL CONST (CAR (CAR BUCKETS))) (CONS (LIST CONST (APPEND (CADR (CAR BUCKETS)) (LIST LABEL))) (CDR BUCKETS)) (CONS (CAR BUCKETS) (ADD-LABEL-TO-BUCKET LABEL CONST (CDR BUCKETS)))))) The admission of ADD-LABEL-TO-BUCKET is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O- P) and the measure (ACL2-COUNT BUCKETS). We observe that the type of ADD-LABEL-TO-BUCKET is described by the theorem (CONSP (ADD-LABEL-TO-BUCKET LABEL CONST BUCKETS)). We used primitive type reasoning. Summary Form: ( DEFUN ADD-LABEL-TO-BUCKET ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.06 seconds (prove: 0.00, print: 0.02, other: 0.04) ADD-LABEL-TO-BUCKET ACL2 >>(DEFUN MAKE-EQUIV-CLASSES (ALIST BUCKETS) (IF (ENDP ALIST) BUCKETS (MAKE-EQUIV-CLASSES (CDR ALIST) (ADD-LABEL-TO-BUCKET (CAAR ALIST) (CADR (CAR ALIST)) BUCKETS)))) The admission of MAKE-EQUIV-CLASSES is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O- P) and the measure (ACL2-COUNT ALIST). We observe that the type of MAKE-EQUIV-CLASSES is described by the theorem (OR (CONSP (MAKE-EQUIV-CLASSES ALIST BUCKETS)) (EQUAL (MAKE-EQUIV-CLASSES ALIST BUCKETS) BUCKETS)). We used the :type-prescription rule ADD-LABEL-TO-BUCKET. Summary Form: ( DEFUN MAKE-EQUIV-CLASSES ...) Rules: ((:TYPE-PRESCRIPTION ADD-LABEL-TO-BUCKET)) Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.02, other: 0.02) MAKE-EQUIV-CLASSES ACL2 >>(THEOREM PROBLEM-2 (EQUAL (MAKE-EQUIV-CLASSES '((1 (1 2 3)) (2 (NIL NIL NIL)) (3 ((NIL NIL))) (4 (1 (2 . 3) 4)) (5 (NIL NIL)) (6 (1 (2 . 3) 4)) (7 (HELLOWORLD !)) (8 (1 (2 3) 4)) (9 ((A . T) (B) (C))) (10 (NIL NIL)) (11 (1 2 3)) (12 (NIL NIL)) (13 (A B C)) (14 (A B C)) (15 (HELLO WORLD !)) (16 ((A . T) (B) (C)))) NIL) '(((1 2 3) (1 11)) ((NIL NIL NIL) (2)) (((NIL NIL)) (3)) ((1 (2 . 3) 4) (4 6)) ((NIL NIL) (5 10 12)) ((HELLOWORLD !) (7)) ((1 (2 3) 4) (8)) (((A . T) (B) (C)) (9 16)) ((A B C) (13 14)) ((HELLO WORLD !) (15)))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] But we reduce the conjecture to T, by the :executable-counterparts of EQUAL and MAKE-EQUIV-CLASSES. Q.E.D. Summary Form: ( DEFTHM PROBLEM-2 ...) Rules: ((:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART MAKE-EQUIV-CLASSES)) Warnings: None Time: 0.01 seconds (prove: 0.01, print: 0.00, other: 0.00) PROBLEM-2 ACL2 >>(THEOREM PROBLEM-4 (AND (EQUAL '((1 . 2) 3 . 4) (CONS (CONS '1 '2) (CONS '3 '4))) (EQUAL '(1 2 3) (CONS '1 (CONS '2 (CONS '3 'NIL)))) (EQUAL '((1 . T) (2) (3 . T)) (CONS (CONS '1 'T) (CONS (CONS '2 'NIL) (CONS (CONS '3 'T) 'NIL)))) (EQUAL '((A . 1) (B . 2)) (CONS (CONS 'A '1) (CONS (CONS 'B '2) 'NIL)))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] But we reduce the conjecture to T, by case analysis. Q.E.D. Summary Form: ( DEFTHM PROBLEM-4 ...) Rules: NIL Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) PROBLEM-4 ACL2 >>(THEOREM PROBLEM-5 (AND (EQUAL (CONS (CONS '1 '2) (CONS (CONS '3 '4) 'NIL)) '((1 . 2) (3 . 4))) (EQUAL (CONS '1 (CONS '2 '3)) '(1 2 . 3)) (EQUAL (CONS 'NIL (CONS (CONS 'NIL 'NIL) 'NIL)) '(NIL (NIL))) (EQUAL (IF 'NIL '1 '2) '2) (EQUAL (IF '1 '2 '3) '2) (EQUAL (EQUAL 'NIL (CONS 'NIL 'NIL)) 'NIL) (EQUAL (EQUAL 'HELLO 'HELLO) 'T) (EQUAL (EQUAL (CONS '1 '2) (CONS '1 'TWO)) 'NIL)) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] But we reduce the conjecture to T, by case analysis. Q.E.D. Summary Form: ( DEFTHM PROBLEM-5 ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.01, other: 0.00) PROBLEM-5 ACL2 >>(DEFUN APP (X Y) (IF (CONSP X) (CONS (CAR X) (APP (CDR X) Y)) Y)) The admission of APP is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of APP is described by the theorem (OR (CONSP (APP X Y)) (EQUAL (APP X Y) Y)). We used primitive type reasoning. Summary Form: ( DEFUN APP ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) APP ACL2 >>(DEFUN REV (X) (IF (CONSP X) (APP (REV (CDR X)) (CONS (CAR X) NIL)) NIL)) The admission of REV is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of REV is described by the theorem (OR (CONSP (REV X)) (EQUAL (REV X) NIL)). We used primitive type reasoning and the :type-prescription rule APP. Summary Form: ( DEFUN REV ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL) (:TYPE-PRESCRIPTION APP)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) REV ACL2 >>(DEFUN MAPNIL (X) (IF (CONSP X) (CONS NIL (MAPNIL (CDR X))) NIL)) The admission of MAPNIL is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of MAPNIL is described by the theorem (TRUE-LISTP (MAPNIL X)). We used primitive type reasoning. Summary Form: ( DEFUN MAPNIL ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) MAPNIL ACL2 >>(DEFUN SWAP-TREE (X) (IF (CONSP X) (CONS (SWAP-TREE (CDR X)) (SWAP-TREE (CAR X))) X)) The admission of SWAP-TREE is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We could deduce no constraints on the type of SWAP-TREE. However, in normalizing the definition we used primitive type reasoning. Summary Form: ( DEFUN SWAP-TREE ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.01, other: 0.02) SWAP-TREE ACL2 >>(DEFUN MEM (E X) (IF (CONSP X) (IF (EQUAL E (CAR X)) T (MEM E (CDR X))) NIL)) The admission of MEM is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of MEM is described by the theorem (OR (EQUAL (MEM E X) T) (EQUAL (MEM E X) NIL)). Summary Form: ( DEFUN MEM ...) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) MEM ACL2 >>(DEFUN SUB (X Y) (IF (CONSP X) (IF (MEM (CAR X) Y) (SUB (CDR X) Y) NIL) T)) The admission of SUB is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of SUB is described by the theorem (OR (EQUAL (SUB X Y) T) (EQUAL (SUB X Y) NIL)). Summary Form: ( DEFUN SUB ...) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) SUB ACL2 >>(DEFUN INT (X Y) (IF (CONSP X) (IF (MEM (CAR X) Y) (CONS (CAR X) (INT (CDR X) Y)) (INT (CDR X) Y)) NIL)) The admission of INT is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of INT is described by the theorem (TRUE-LISTP (INT X Y)). We used primitive type reasoning. Summary Form: ( DEFUN INT ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) INT ACL2 >>(DEFUN TIP (E X) (IF (CONSP X) (OR (TIP E (CAR X)) (TIP E (CDR X))) (EQUAL E X))) The admission of TIP is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of TIP is described by the theorem (OR (EQUAL (TIP E X) T) (EQUAL (TIP E X) NIL)). We used primitive type reasoning. Summary Form: ( DEFUN TIP ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) TIP ACL2 >>(DEFUN FLATTEN (X) (IF (CONSP X) (APP (FLATTEN (CAR X)) (FLATTEN (CDR X))) (CONS X NIL))) The admission of FLATTEN is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of FLATTEN is described by the theorem (CONSP (FLATTEN X)). We used primitive type reasoning and the :type-prescription rule APP. Summary Form: ( DEFUN FLATTEN ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL) (:TYPE-PRESCRIPTION APP)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.01, other: 0.00) FLATTEN ACL2 >>(DEFUN EVENLEN (X) (IF (CONSP X) (IF (CONSP (CDR X)) (EVENLEN (CDR (CDR X))) NIL) T)) For the admission of EVENLEN we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). The non-trivial part of the measure conjecture is Goal (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (O< (ACL2-COUNT (CDDR X)) (ACL2-COUNT X))). This simplifies, using the :definitions O-FINP and O< and the :type- prescription rule ACL2-COUNT, to Goal' (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (< (ACL2-COUNT (CDDR X)) (ACL2-COUNT X))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of two rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. These steps produce the following goal. Goal'' (IMPLIES (AND (CONSP (CONS X3 X4)) (CONSP (LIST* X1 X3 X4))) (< (ACL2-COUNT X4) (ACL2-COUNT (LIST* X1 X3 X4)))). This simplifies, using the :definition ACL2-COUNT, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Goal''' (< (ACL2-COUNT X4) (+ 1 (ACL2-COUNT X1) 1 (ACL2-COUNT X3) (ACL2-COUNT X4))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule ACL2-COUNT. Q.E.D. That completes the proof of the measure theorem for EVENLEN. Thus, we admit this function under the principle of definition. We observe that the type of EVENLEN is described by the theorem (OR (EQUAL (EVENLEN X) T) (EQUAL (EVENLEN X) NIL)). Summary Form: ( DEFUN EVENLEN ...) Rules: ((:DEFINITION ACL2-COUNT) (:DEFINITION NOT) (:DEFINITION O-FINP) (:DEFINITION O<) (:ELIM CAR-CDR-ELIM) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION ACL2-COUNT)) Warnings: None Time: 0.05 seconds (prove: 0.02, print: 0.02, other: 0.01) EVENLEN ACL2 >>(THEOREM PROBLEM-40 (EQUAL (APP (APP A B) C) (APP A (APP B C))) :HINTS (("Goal" :INDUCT (APP A B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP A B). This suggestion was produced using the :induction rule APP. If we let (:P A B C) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B C)) (IMPLIES (AND (CONSP A) (:P (CDR A) B C)) (:P A B C))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (EQUAL (APP (APP A B) C) (APP A (APP B C)))). But simplification reduces this to T, using the :definition APP and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP A) (EQUAL (APP (APP (CDR A) B) C) (APP (CDR A) (APP B C)))) (EQUAL (APP (APP A B) C) (APP A (APP B C)))). But simplification reduces this to T, using the :definition APP, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-40 ...) Rules: ((:DEFINITION APP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS)) Warnings: None Time: 0.04 seconds (prove: 0.01, print: 0.03, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-40 ACL2 >>(THEOREM PROBLEM-41-COUNTEREXAMPLE (NOT (EQUAL (APP '(1 2 3 . 4) NIL) '(1 2 3 . 4))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] But we reduce the conjecture to T, by the :executable-counterparts of APP and EQUAL. Q.E.D. Summary Form: ( DEFTHM PROBLEM-41-COUNTEREXAMPLE ...) Rules: ((:EXECUTABLE-COUNTERPART APP) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT)) Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) PROBLEM-41-COUNTEREXAMPLE ACL2 >>(DEFUN PROPER (X) (IF (CONSP X) (PROPER (CDR X)) (EQUAL X NIL))) The admission of PROPER is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of PROPER is described by the theorem (OR (EQUAL (PROPER X) T) (EQUAL (PROPER X) NIL)). We used primitive type reasoning. Summary Form: ( DEFUN PROPER ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.01, other: 0.00) PROPER ACL2 >>(THEOREM PROBLEM-41 (IMPLIES (PROPER X) (EQUAL (APP X NIL) X)) :HINTS (("Goal" :INDUCT (APP X NIL)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP X 'NIL). This suggestion was produced using the :induction rule APP. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (IMPLIES (PROPER X) (EQUAL (APP X NIL) X))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (CONSP X)) (PROPER X)) (EQUAL (APP X NIL) X)). But simplification reduces this to T, using the :definition PROPER, the :executable-counterparts of APP, CONSP and EQUAL and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP X) (IMPLIES (PROPER (CDR X)) (EQUAL (APP (CDR X) NIL) (CDR X)))) (IMPLIES (PROPER X) (EQUAL (APP X NIL) X))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (IMPLIES (PROPER (CDR X)) (EQUAL (APP (CDR X) NIL) (CDR X))) (PROPER X)) (EQUAL (APP X NIL) X)). But simplification reduces this to T, using the :definitions APP and PROPER, primitive type reasoning and the :rewrite rule CAR-CDR-ELIM. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-41 ...) Rules: ((:DEFINITION APP) (:DEFINITION NOT) (:DEFINITION PROPER) (:EXECUTABLE-COUNTERPART APP) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP) (:REWRITE CAR-CDR-ELIM)) Warnings: None Time: 0.05 seconds (prove: 0.01, print: 0.03, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-41 ACL2 >>(THEOREM PROBLEM-42 (EQUAL (MAPNIL (APP A B)) (APP (MAPNIL A) (MAPNIL B))) :HINTS (("Goal" :INDUCT (APP A B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP A B). This suggestion was produced using the :induction rule APP. If we let (:P A B) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B)) (IMPLIES (AND (CONSP A) (:P (CDR A) B)) (:P A B))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (EQUAL (MAPNIL (APP A B)) (APP (MAPNIL A) (MAPNIL B)))). But simplification reduces this to T, using the :definitions APP and MAPNIL, the :executable-counterpart of CONSP and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP A) (EQUAL (MAPNIL (APP (CDR A) B)) (APP (MAPNIL (CDR A)) (MAPNIL B)))) (EQUAL (MAPNIL (APP A B)) (APP (MAPNIL A) (MAPNIL B)))). But simplification reduces this to T, using the :definitions APP and MAPNIL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR- CONS and the :type-prescription rule MAPNIL. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-42 ...) Rules: ((:DEFINITION APP) (:DEFINITION MAPNIL) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION MAPNIL)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.01, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-42 ACL2 >>(THEOREM PROBLEM-43 (EQUAL (REV (MAPNIL X)) (MAPNIL (REV X))) :HINTS (("Goal" :INDUCT (REV X) :IN-THEORY (ENABLE PROBLEM-42)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (REV X). This suggestion was produced using the :induction rule REV. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit REV, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (REV (MAPNIL X)) (MAPNIL (REV X)))). But simplification reduces this to T, using the :definitions MAPNIL and REV and the :executable-counterparts of EQUAL, MAPNIL and REV. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (REV (MAPNIL (CDR X))) (MAPNIL (REV (CDR X))))) (EQUAL (REV (MAPNIL X)) (MAPNIL (REV X)))). But simplification reduces this to T, using the :definitions MAPNIL and REV, the :executable-counterparts of CONS and MAPNIL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS and PROBLEM-42 and the :type-prescription rule MAPNIL. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-43 ...) Rules: ((:DEFINITION MAPNIL) (:DEFINITION REV) (:EXECUTABLE-COUNTERPART CONS) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART MAPNIL) (:EXECUTABLE-COUNTERPART REV) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION REV) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-42) (:TYPE-PRESCRIPTION MAPNIL)) Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.03, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-43 ACL2 >>(THEOREM PROBLEM-44-COUNTEREXAMPLE (NOT (EQUAL (REV (REV '(1 2 3 . 4))) '(1 2 3 . 4))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] But we reduce the conjecture to T, by the :executable-counterparts of EQUAL and REV. Q.E.D. Summary Form: ( DEFTHM PROBLEM-44-COUNTEREXAMPLE ...) Rules: ((:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART REV)) Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) PROBLEM-44-COUNTEREXAMPLE ACL2 >>(THEOREM PROBLEM-44C (EQUAL (PROPER (APP A B)) (PROPER B)) :HINTS (("Goal" :INDUCT (APP A B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP A B). This suggestion was produced using the :induction rule APP. If we let (:P A B) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B)) (IMPLIES (AND (CONSP A) (:P (CDR A) B)) (:P A B))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (EQUAL (PROPER (APP A B)) (PROPER B))). But simplification reduces this to T, using the :definition APP and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP A) (EQUAL (PROPER (APP (CDR A) B)) (PROPER B))) (EQUAL (PROPER (APP A B)) (PROPER B))). But simplification reduces this to T, using the :definitions APP and PROPER, primitive type reasoning and the :rewrite rule CDR-CONS. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-44C ...) Rules: ((:DEFINITION APP) (:DEFINITION PROPER) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP) (:REWRITE CDR-CONS)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.03, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-44C ACL2 >>(THEOREM PROBLEM-44B (PROPER (REV X)) :HINTS (("Goal" :INDUCT (REV X) :IN-THEORY (ENABLE PROBLEM-44C)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (REV X). This suggestion was produced using the :induction rule REV. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit REV, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (PROPER (REV X))). But simplification reduces this to T, using the :definition REV and the :executable-counterpart of PROPER. Subgoal *1/1 (IMPLIES (AND (CONSP X) (PROPER (REV (CDR X)))) (PROPER (REV X))). But simplification reduces this to T, using the :definitions PROPER and REV, the :executable-counterpart of PROPER, primitive type reasoning and the :rewrite rules CDR-CONS and PROBLEM-44C. That completes the proof of *1. Q.E.D. The storage of PROBLEM-44B depends upon the :type-prescription rule PROPER. Summary Form: ( DEFTHM PROBLEM-44B ...) Rules: ((:DEFINITION PROPER) (:DEFINITION REV) (:EXECUTABLE-COUNTERPART PROPER) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION REV) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-44C) (:TYPE-PRESCRIPTION PROPER)) Warnings: None Time: 0.04 seconds (prove: 0.02, print: 0.01, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-44B ACL2 >>(THEOREM PROBLEM-44A (EQUAL (REV (APP A B)) (APP (REV B) (REV A))) :HINTS (("Goal" :INDUCT (APP A B) :IN-THEORY (ENABLE PROBLEM-40 PROBLEM-41 PROBLEM-44B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP A B). This suggestion was produced using the :induction rule APP. If we let (:P A B) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B)) (IMPLIES (AND (CONSP A) (:P (CDR A) B)) (:P A B))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (EQUAL (REV (APP A B)) (APP (REV B) (REV A)))). But simplification reduces this to T, using the :definitions APP and REV, primitive type reasoning and the :rewrite rules PROBLEM-41 and PROBLEM-44B. Subgoal *1/1 (IMPLIES (AND (CONSP A) (EQUAL (REV (APP (CDR A) B)) (APP (REV B) (REV (CDR A))))) (EQUAL (REV (APP A B)) (APP (REV B) (REV A)))). This simplifies, using the :definitions APP and REV, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal *1/1' (IMPLIES (AND (CONSP A) (EQUAL (REV (APP (CDR A) B)) (APP (REV B) (REV (CDR A))))) (EQUAL (APP (REV (APP (CDR A) B)) (LIST (CAR A))) (APP (REV B) (APP (REV (CDR A)) (LIST (CAR A)))))). The destructor terms (CAR A) and (CDR A) can be eliminated by using CAR-CDR-ELIM to replace A by (CONS A1 A2), (CAR A) by A1 and (CDR A) by A2. This produces the following goal. Subgoal *1/1'' (IMPLIES (AND (CONSP (CONS A1 A2)) (EQUAL (REV (APP A2 B)) (APP (REV B) (REV A2)))) (EQUAL (APP (REV (APP A2 B)) (LIST A1)) (APP (REV B) (APP (REV A2) (LIST A1))))). This simplifies, using primitive type reasoning, to Subgoal *1/1''' (IMPLIES (EQUAL (REV (APP A2 B)) (APP (REV B) (REV A2))) (EQUAL (APP (REV (APP A2 B)) (LIST A1)) (APP (REV B) (APP (REV A2) (LIST A1))))). We now use the hypothesis by substituting (APP (REV B) (REV A2)) for (REV (APP A2 B)) and throwing away the hypothesis. This produces Subgoal *1/1'4' (EQUAL (APP (APP (REV B) (REV A2)) (LIST A1)) (APP (REV B) (APP (REV A2) (LIST A1)))). But we reduce the conjecture to T, by the simple :rewrite rule PROBLEM- 40. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-44A ...) Rules: ((:DEFINITION APP) (:DEFINITION REV) (:ELIM CAR-CDR-ELIM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-40) (:REWRITE PROBLEM-41) (:REWRITE PROBLEM-44B)) Warnings: None Time: 0.12 seconds (prove: 0.04, print: 0.07, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-44A ACL2 >>(THEOREM PROBLEM-44 (IMPLIES (PROPER X) (EQUAL (REV (REV X)) X)) :HINTS (("Goal" :INDUCT (REV X) :IN-THEORY (ENABLE PROBLEM-44A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (REV X). This suggestion was produced using the :induction rule REV. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit REV, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (IMPLIES (PROPER X) (EQUAL (REV (REV X)) X))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (CONSP X)) (PROPER X)) (EQUAL (REV (REV X)) X)). But simplification reduces this to T, using the :definition PROPER, the :executable-counterparts of CONSP, EQUAL and REV and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP X) (IMPLIES (PROPER (CDR X)) (EQUAL (REV (REV (CDR X))) (CDR X)))) (IMPLIES (PROPER X) (EQUAL (REV (REV X)) X))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (IMPLIES (PROPER (CDR X)) (EQUAL (REV (REV (CDR X))) (CDR X))) (PROPER X)) (EQUAL (REV (REV X)) X)). But simplification reduces this to T, using the :definitions APP, PROPER and REV, the :executable-counterparts of CONSP and REV, primitive type reasoning and the :rewrite rules CAR-CDR-ELIM, CAR-CONS, CDR-CONS and PROBLEM-44A. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-44 ...) Rules: ((:DEFINITION APP) (:DEFINITION NOT) (:DEFINITION PROPER) (:DEFINITION REV) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART REV) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION REV) (:REWRITE CAR-CDR-ELIM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-44A)) Warnings: None Time: 0.06 seconds (prove: 0.02, print: 0.03, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-44 ACL2 >>(THEOREM PROBLEM-45 (EQUAL (SWAP-TREE (SWAP-TREE X)) X) :HINTS (("Goal" :INDUCT (SWAP-TREE X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (SWAP-TREE X). This suggestion was produced using the :induction rule SWAP-TREE. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X)) (:P (CAR X))) (:P X))). This induction is justified by the same argument used to admit SWAP- TREE, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (SWAP-TREE (SWAP-TREE X)) X)). But simplification reduces this to T, using the :definition SWAP-TREE and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (SWAP-TREE (SWAP-TREE (CDR X))) (CDR X)) (EQUAL (SWAP-TREE (SWAP-TREE (CAR X))) (CAR X))) (EQUAL (SWAP-TREE (SWAP-TREE X)) X)). But simplification reduces this to T, using the :definition SWAP-TREE, primitive type reasoning and the :rewrite rules CAR-CDR-ELIM, CAR-CONS and CDR-CONS. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-45 ...) Rules: ((:DEFINITION SWAP-TREE) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION SWAP-TREE) (:REWRITE CAR-CDR-ELIM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS)) Warnings: None Time: 0.04 seconds (prove: 0.01, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-45 ACL2 >>(THEOREM PROBLEM-46 (EQUAL (MEM E (APP A B)) (OR (MEM E A) (MEM E B))) :HINTS (("Goal" :INDUCT (MEM E A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MEM E A). This suggestion was produced using the :induction rule MEM. If we let (:P A B E) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B E)) (IMPLIES (AND (CONSP A) (NOT (EQUAL E (CAR A))) (:P (CDR A) B E)) (:P A B E)) (IMPLIES (AND (CONSP A) (EQUAL E (CAR A))) (:P A B E))). This induction is justified by the same argument used to admit MEM, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP A)) (EQUAL (MEM E (APP A B)) (OR (MEM E A) (MEM E B)))). But simplification reduces this to T, using the :definitions APP and MEM and primitive type reasoning. Subgoal *1/2 (IMPLIES (AND (CONSP A) (NOT (EQUAL E (CAR A))) (EQUAL (MEM E (APP (CDR A) B)) (OR (MEM E (CDR A)) (MEM E B)))) (EQUAL (MEM E (APP A B)) (OR (MEM E A) (MEM E B)))). But simplification reduces this to T, using the :definitions APP and MEM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule MEM. Subgoal *1/1 (IMPLIES (AND (CONSP A) (EQUAL E (CAR A))) (EQUAL (MEM E (APP A B)) (OR (MEM E A) (MEM E B)))). This simplifies, using the :definition MEM, primitive type reasoning and the :type-prescription rule MEM, to Subgoal *1/1' (IMPLIES (CONSP A) (MEM (CAR A) (APP A B))). The destructor terms (CAR A) and (CDR A) can be eliminated by using CAR-CDR-ELIM to replace A by (CONS A1 A2), (CAR A) by A1 and (CDR A) by A2. This produces the following goal. Subgoal *1/1'' (IMPLIES (CONSP (CONS A1 A2)) (MEM A1 (APP (CONS A1 A2) B))). But simplification reduces this to T, using the :definitions APP and MEM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR- CONS. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-46 ...) Rules: ((:DEFINITION APP) (:DEFINITION MEM) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MEM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.03 seconds (prove: 0.01, print: 0.02, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) PROBLEM-46 ACL2 >>(THEOREM PROBLEM-47A (IMPLIES (NOT (MEM E B)) (NOT (MEM E (INT A B)))) :HINTS (("Goal" :INDUCT (INT A B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (INT A B). This suggestion was produced using the :induction rule INT. If we let (:P A B E) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B E)) (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B)) (:P (CDR A) B E)) (:P A B E)) (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (:P (CDR A) B E)) (:P A B E))). This induction is justified by the same argument used to admit INT, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP A)) (IMPLIES (NOT (MEM E B)) (NOT (MEM E (INT A B))))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP A)) (NOT (MEM E B))) (NOT (MEM E (INT A B)))). But simplification reduces this to T, using the :definitions INT and MEM and the :executable-counterpart of CONSP. Subgoal *1/2 (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B)) (IMPLIES (NOT (MEM E B)) (NOT (MEM E (INT (CDR A) B))))) (IMPLIES (NOT (MEM E B)) (NOT (MEM E (INT A B))))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B)) (IMPLIES (NOT (MEM E B)) (NOT (MEM E (INT (CDR A) B)))) (NOT (MEM E B))) (NOT (MEM E (INT A B)))). But simplification reduces this to T, using the :definitions INT and NOT and the :executable-counterpart of NOT. Subgoal *1/1 (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (IMPLIES (NOT (MEM E B)) (NOT (MEM E (INT (CDR A) B))))) (IMPLIES (NOT (MEM E B)) (NOT (MEM E (INT A B))))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (IMPLIES (NOT (MEM E B)) (NOT (MEM E (INT (CDR A) B)))) (NOT (MEM E B))) (NOT (MEM E (INT A B)))). This simplifies, using the :definitions INT, MEM and NOT, the :executable- counterpart of NOT, primitive type reasoning, the :rewrite rules CAR- CONS and CDR-CONS and the :type-prescription rules INT and MEM, to Subgoal *1/1'' (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (NOT (MEM E (INT (CDR A) B))) (NOT (MEM E B))) (NOT (EQUAL E (CAR A)))). But simplification reduces this to T, using trivial observations. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-47A ...) Rules: ((:DEFINITION INT) (:DEFINITION MEM) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION INT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION INT) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.08 seconds (prove: 0.03, print: 0.05, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-47A ACL2 >>(THEOREM PROBLEM-47 (EQUAL (MEM E (INT A B)) (AND (MEM E A) (MEM E B))) :HINTS (("Goal" :INDUCT (MEM E A) :IN-THEORY (ENABLE PROBLEM-47A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MEM E A). This suggestion was produced using the :induction rule MEM. If we let (:P A B E) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B E)) (IMPLIES (AND (CONSP A) (NOT (EQUAL E (CAR A))) (:P (CDR A) B E)) (:P A B E)) (IMPLIES (AND (CONSP A) (EQUAL E (CAR A))) (:P A B E))). This induction is justified by the same argument used to admit MEM, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP A)) (EQUAL (MEM E (INT A B)) (AND (MEM E A) (MEM E B)))). But simplification reduces this to T, using the :definitions INT and MEM and the :executable-counterparts of CONSP and EQUAL. Subgoal *1/2 (IMPLIES (AND (CONSP A) (NOT (EQUAL E (CAR A))) (EQUAL (MEM E (INT (CDR A) B)) (AND (MEM E (CDR A)) (MEM E B)))) (EQUAL (MEM E (INT A B)) (AND (MEM E A) (MEM E B)))). This simplifies, using the :definitions INT and MEM, the :executable- counterpart of NOT, primitive type reasoning and the :type-prescription rule MEM, to the following two conjectures. Subgoal *1/2.2 (IMPLIES (AND (CONSP A) (NOT (EQUAL E (CAR A))) (MEM E (CDR A)) (EQUAL (MEM E (INT (CDR A) B)) (MEM E B)) (MEM (CAR A) B)) (EQUAL (MEM E (CONS (CAR A) (INT (CDR A) B))) (MEM E B))). But simplification reduces this to T, using the :definition MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type- prescription rule INT. Subgoal *1/2.1 (IMPLIES (AND (CONSP A) (NOT (EQUAL E (CAR A))) (NOT (MEM E (CDR A))) (EQUAL (MEM E (INT (CDR A) B)) NIL) (MEM (CAR A) B)) (NOT (MEM E (CONS (CAR A) (INT (CDR A) B))))). By case analysis we reduce the conjecture to Subgoal *1/2.1' (IMPLIES (AND (CONSP A) (NOT (EQUAL E (CAR A))) (NOT (MEM E (CDR A))) (NOT (MEM E (INT (CDR A) B))) (MEM (CAR A) B)) (NOT (MEM E (CONS (CAR A) (INT (CDR A) B))))). But simplification reduces this to T, using the :definition MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type- prescription rule INT. Subgoal *1/1 (IMPLIES (AND (CONSP A) (EQUAL E (CAR A))) (EQUAL (MEM E (INT A B)) (AND (MEM E A) (MEM E B)))). This simplifies, using the :definition MEM and primitive type reasoning, to Subgoal *1/1' (IMPLIES (CONSP A) (EQUAL (MEM (CAR A) (INT A B)) (MEM (CAR A) B))). The destructor terms (CAR A) and (CDR A) can be eliminated by using CAR-CDR-ELIM to replace A by (CONS A1 A2), (CAR A) by A1 and (CDR A) by A2. This produces the following goal. Subgoal *1/1'' (IMPLIES (CONSP (CONS A1 A2)) (EQUAL (MEM A1 (INT (CONS A1 A2) B)) (MEM A1 B))). This simplifies, using the :definition INT, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (MEM A1 B) (EQUAL (MEM A1 (CONS A1 (INT A2 B))) (MEM A1 B))). But simplification reduces this to T, using the :definition MEM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rule CAR-CONS and the :type-prescription rules INT and MEM. Subgoal *1/1.1 (IMPLIES (NOT (MEM A1 B)) (EQUAL (MEM A1 (INT A2 B)) (MEM A1 B))). But simplification reduces this to T, using the :executable-counterpart of EQUAL and the :rewrite rule PROBLEM-47A. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-47 ...) Rules: ((:DEFINITION INT) (:DEFINITION MEM) (:DEFINITION NOT) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MEM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-47A) (:TYPE-PRESCRIPTION INT) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.13 seconds (prove: 0.04, print: 0.08, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-47 ACL2 >>(THEOREM PROBLEM-48A (IMPLIES (SUB X (CDR Y)) (SUB X Y)) :HINTS (("Goal" :INDUCT (SUB X Y)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (SUB X Y). This suggestion was produced using the :induction rule SUB. If we let (:P X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X Y)) (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (:P X Y)) (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (:P (CDR X) Y)) (:P X Y))). This induction is justified by the same argument used to admit SUB, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (SUB X (CDR Y)) (SUB X Y))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (SUB X (CDR Y))) (SUB X Y)). But simplification reduces this to T, using the :definition SUB. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (IMPLIES (SUB X (CDR Y)) (SUB X Y))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y)) (SUB X (CDR Y))) (SUB X Y)). But simplification reduces this to T, using the :definitions MEM and SUB, the :executable-counterpart of CONSP and the :rewrite rule DEFAULT- CDR. Subgoal *1/1 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (SUB (CDR X) (CDR Y)) (SUB (CDR X) Y))) (IMPLIES (SUB X (CDR Y)) (SUB X Y))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (SUB (CDR X) (CDR Y)) (SUB (CDR X) Y)) (SUB X (CDR Y))) (SUB X Y)). But simplification reduces this to T, using the :definitions MEM and SUB, primitive type reasoning and the :type-prescription rules MEM and SUB. That completes the proof of *1. Q.E.D. The storage of PROBLEM-48A depends upon the :type-prescription rule SUB. Summary Form: ( DEFTHM PROBLEM-48A ...) Rules: ((:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION SUB) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION SUB) (:REWRITE DEFAULT-CDR) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION SUB)) Warnings: None Time: 0.05 seconds (prove: 0.01, print: 0.03, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-48A ACL2 >>(THEOREM PROBLEM-48 (SUB X X) :HINTS (("Goal" :INDUCT (SUB X X) :IN-THEORY (ENABLE PROBLEM-48A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (SUB X X). This suggestion was produced using the :induction rule SUB. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) X))) (:P X)) (IMPLIES (AND (CONSP X) (MEM (CAR X) X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit SUB, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (SUB X X)). But simplification reduces this to T, using the :definition SUB, the :executable-counterpart of CDR and the :rewrite rules DEFAULT-CDR and PROBLEM-48A. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) X))) (SUB X X)). But simplification reduces this to T, using the :definition MEM and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP X) (MEM (CAR X) X) (SUB (CDR X) (CDR X))) (SUB X X)). But simplification reduces this to T, using the :definitions MEM and SUB, primitive type reasoning, the :rewrite rule PROBLEM-48A and the :type-prescription rule SUB. That completes the proof of *1. Q.E.D. The storage of PROBLEM-48 depends upon the :type-prescription rule SUB. Summary Form: ( DEFTHM PROBLEM-48 ...) Rules: ((:DEFINITION MEM) (:DEFINITION SUB) (:EXECUTABLE-COUNTERPART CDR) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION SUB) (:REWRITE DEFAULT-CDR) (:REWRITE PROBLEM-48A) (:TYPE-PRESCRIPTION SUB)) Warnings: None Time: 0.10 seconds (prove: 0.01, print: 0.08, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-48 ACL2 >>(THEOREM PROBLEM-49A (IMPLIES (AND (MEM E A) (SUB A B)) (MEM E B)) :HINTS (("Goal" :INDUCT (SUB A B)))) ACL2 Warning [Free] in ( DEFTHM PROBLEM-49A ...): The :REWRITE rule generated from PROBLEM-49A contains the free variable A. This variable will be chosen by searching for an instance of (MEM E A) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :REWRITE rule. See :DOC free-variables. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (SUB A B). This suggestion was produced using the :induction rule SUB. If we let (:P A B E) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B E)) (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B))) (:P A B E)) (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (:P (CDR A) B E)) (:P A B E))). This induction is justified by the same argument used to admit SUB, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP A)) (IMPLIES (AND (MEM E A) (SUB A B)) (MEM E B))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP A)) (MEM E A) (SUB A B)) (MEM E B)). But simplification reduces this to T, using the :definition MEM. Subgoal *1/2 (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B))) (IMPLIES (AND (MEM E A) (SUB A B)) (MEM E B))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B)) (MEM E A) (SUB A B)) (MEM E B)). But simplification reduces this to T, using the :definition SUB. Subgoal *1/1 (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (IMPLIES (AND (MEM E (CDR A)) (SUB (CDR A) B)) (MEM E B))) (IMPLIES (AND (MEM E A) (SUB A B)) (MEM E B))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (IMPLIES (AND (MEM E (CDR A)) (SUB (CDR A) B)) (MEM E B)) (MEM E A) (SUB A B)) (MEM E B)). But simplification reduces this to T, using the :definitions MEM and SUB, primitive type reasoning and the :type-prescription rule MEM. That completes the proof of *1. Q.E.D. The storage of PROBLEM-49A depends upon the :type-prescription rule MEM. Summary Form: ( DEFTHM PROBLEM-49A ...) Rules: ((:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION SUB) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION SUB) (:TYPE-PRESCRIPTION MEM)) Warnings: Free Time: 0.07 seconds (prove: 0.02, print: 0.04, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-49A ACL2 >>(THEOREM PROBLEM-49 (IMPLIES (AND (SUB A B) (SUB B C)) (SUB A C)) :HINTS (("Goal" :INDUCT (SUB A C) :IN-THEORY (ENABLE PROBLEM-48A PROBLEM-49A)))) ACL2 Warning [Free] in ( DEFTHM PROBLEM-49 ...): The :REWRITE rule generated from PROBLEM-49 contains the free variable B. This variable will be chosen by searching for an instance of (SUB A B) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :REWRITE rule. See :DOC free-variables. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (SUB A C). This suggestion was produced using the :induction rule SUB. If we let (:P A B C) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B C)) (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) C))) (:P A B C)) (IMPLIES (AND (CONSP A) (MEM (CAR A) C) (:P (CDR A) B C)) (:P A B C))). This induction is justified by the same argument used to admit SUB, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP A)) (IMPLIES (AND (SUB A B) (SUB B C)) (SUB A C))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP A)) (SUB A B) (SUB B C)) (SUB A C)). But simplification reduces this to T, using the :definition SUB and the :rewrite rule PROBLEM-48A. Subgoal *1/2 (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) C))) (IMPLIES (AND (SUB A B) (SUB B C)) (SUB A C))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) C)) (SUB A B) (SUB B C)) (SUB A C)). This simplifies, using the :definition SUB, to Subgoal *1/2'' (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) C)) (SUB A B)) (NOT (SUB B C))). The destructor terms (CAR A) and (CDR A) can be eliminated by using CAR-CDR-ELIM to replace A by (CONS A1 A2), (CAR A) by A1 and (CDR A) by A2. This produces the following goal. Subgoal *1/2''' (IMPLIES (AND (CONSP (CONS A1 A2)) (NOT (MEM A1 C)) (SUB (CONS A1 A2) B)) (NOT (SUB B C))). This simplifies, using the :definition SUB, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal *1/2'4' (IMPLIES (AND (NOT (MEM A1 C)) (MEM A1 B) (SUB A2 B)) (NOT (SUB B C))). But simplification reduces this to T, using the :rewrite rule PROBLEM- 49A and the :type-prescription rules MEM and SUB. Subgoal *1/1 (IMPLIES (AND (CONSP A) (MEM (CAR A) C) (IMPLIES (AND (SUB (CDR A) B) (SUB B C)) (SUB (CDR A) C))) (IMPLIES (AND (SUB A B) (SUB B C)) (SUB A C))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP A) (MEM (CAR A) C) (IMPLIES (AND (SUB (CDR A) B) (SUB B C)) (SUB (CDR A) C)) (SUB A B) (SUB B C)) (SUB A C)). But simplification reduces this to T, using the :definition SUB, the :rewrite rule PROBLEM-49A and the :type-prescription rules MEM and SUB. That completes the proof of *1. Q.E.D. The storage of PROBLEM-49 depends upon the :type-prescription rule SUB. Summary Form: ( DEFTHM PROBLEM-49 ...) Rules: ((:DEFINITION NOT) (:DEFINITION SUB) (:ELIM CAR-CDR-ELIM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION SUB) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-48A) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION SUB)) Warnings: Free Time: 0.10 seconds (prove: 0.03, print: 0.06, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) PROBLEM-49 ACL2 >>(THEOREM PROBLEM-50A (EQUAL (SUB (APP A B) C) (AND (SUB A C) (SUB B C))) :HINTS (("Goal" :INDUCT (SUB A C) :IN-THEORY (ENABLE PROBLEM-48A PROBLEM-48 PROBLEM-49A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (SUB A C). This suggestion was produced using the :induction rule SUB. If we let (:P A B C) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B C)) (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) C))) (:P A B C)) (IMPLIES (AND (CONSP A) (MEM (CAR A) C) (:P (CDR A) B C)) (:P A B C))). This induction is justified by the same argument used to admit SUB, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP A)) (EQUAL (SUB (APP A B) C) (AND (SUB A C) (SUB B C)))). But simplification reduces this to T, using the :definitions APP and SUB, primitive type reasoning and the :rewrite rule PROBLEM-48A. Subgoal *1/2 (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) C))) (EQUAL (SUB (APP A B) C) (AND (SUB A C) (SUB B C)))). This simplifies, using the :definition SUB and primitive type reasoning, to Subgoal *1/2' (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) C))) (NOT (SUB (APP A B) C))). The destructor terms (CAR A) and (CDR A) can be eliminated by using CAR-CDR-ELIM to replace A by (CONS A1 A2), (CAR A) by A1 and (CDR A) by A2. This produces the following goal. Subgoal *1/2'' (IMPLIES (AND (CONSP (CONS A1 A2)) (NOT (MEM A1 C))) (NOT (SUB (APP (CONS A1 A2) B) C))). But simplification reduces this to T, using the :definitions APP and SUB, primitive type reasoning and the :rewrite rules CAR-CONS and CDR- CONS. Subgoal *1/1 (IMPLIES (AND (CONSP A) (MEM (CAR A) C) (EQUAL (SUB (APP (CDR A) B) C) (AND (SUB (CDR A) C) (SUB B C)))) (EQUAL (SUB (APP A B) C) (AND (SUB A C) (SUB B C)))). But simplification reduces this to T, using the :definitions APP and SUB, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-48 and PROBLEM-49A and the :type-prescription rules MEM and SUB. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-50A ...) Rules: ((:DEFINITION APP) (:DEFINITION SUB) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION SUB) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-48A) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION SUB)) Warnings: None Time: 0.08 seconds (prove: 0.03, print: 0.03, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-50A ACL2 >>(THEOREM PROBLEM-50 (SUB (APP A A) A) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-50A))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] But we reduce the conjecture to T, by the :executable-counterpart of IF and the simple :rewrite rules PROBLEM-48 and PROBLEM-50A. Q.E.D. Summary Form: ( DEFTHM PROBLEM-50 ...) Rules: ((:EXECUTABLE-COUNTERPART IF) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-50A)) Warnings: None Time: 0.02 seconds (prove: 0.01, print: 0.00, other: 0.01) PROBLEM-50 ACL2 >>(DEFUN MAPNIL1 (X A) (IF (CONSP X) (MAPNIL1 (CDR X) (CONS NIL A)) A)) The admission of MAPNIL1 is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of MAPNIL1 is described by the theorem (OR (CONSP (MAPNIL1 X A)) (EQUAL (MAPNIL1 X A) A)). We used primitive type reasoning. Summary Form: ( DEFUN MAPNIL1 ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.02, other: 0.01) MAPNIL1 ACL2 >>(DEFUN NILS (X) (IF (CONSP X) (AND (EQUAL (CAR X) NIL) (NILS (CDR X))) (EQUAL X NIL))) The admission of NILS is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of NILS is described by the theorem (OR (EQUAL (NILS X) T) (EQUAL (NILS X) NIL)). We used primitive type reasoning. Summary Form: ( DEFUN NILS ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.02, other: 0.01) NILS ACL2 >>(THEOREM PROBLEM-51A (EQUAL (MAPNIL1 A (CONS NIL B)) (CONS NIL (MAPNIL1 A B))) :HINTS (("Goal" :INDUCT (MAPNIL1 A B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MAPNIL1 A B). This suggestion was produced using the :induction rule MAPNIL1. If we let (:P A B) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B)) (IMPLIES (AND (CONSP A) (:P (CDR A) (CONS NIL B))) (:P A B))). This induction is justified by the same argument used to admit MAPNIL1, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable B is being instantiated. When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (EQUAL (MAPNIL1 A (CONS NIL B)) (CONS NIL (MAPNIL1 A B)))). But simplification reduces this to T, using the :definition MAPNIL1 and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP A) (EQUAL (MAPNIL1 (CDR A) (LIST* NIL NIL B)) (CONS NIL (MAPNIL1 (CDR A) (CONS NIL B))))) (EQUAL (MAPNIL1 A (CONS NIL B)) (CONS NIL (MAPNIL1 A B)))). But simplification reduces this to T, using the :definition MAPNIL1 and primitive type reasoning. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-51A ...) Rules: ((:DEFINITION MAPNIL1) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MAPNIL1)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-51A ACL2 >>(THEOREM PROBLEM-51B (IMPLIES (NILS X) (EQUAL (MAPNIL1 X NIL) X)) :HINTS (("Goal" :INDUCT (NILS X) :IN-THEORY (ENABLE PROBLEM-51A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (NILS X). This suggestion was produced using the :induction rule NILS. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (CAR X)) (:P X)) (IMPLIES (AND (CONSP X) (NOT (CAR X)) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit NILS, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (NILS X) (EQUAL (MAPNIL1 X NIL) X))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (NILS X)) (EQUAL (MAPNIL1 X NIL) X)). But simplification reduces this to T, using the :definition NILS, the :executable-counterparts of CONSP, EQUAL and MAPNIL1 and primitive type reasoning. Subgoal *1/2 (IMPLIES (AND (CONSP X) (CAR X)) (IMPLIES (NILS X) (EQUAL (MAPNIL1 X NIL) X))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (CAR X) (NILS X)) (EQUAL (MAPNIL1 X NIL) X)). But simplification reduces this to T, using the :definition NILS and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP X) (NOT (CAR X)) (IMPLIES (NILS (CDR X)) (EQUAL (MAPNIL1 (CDR X) NIL) (CDR X)))) (IMPLIES (NILS X) (EQUAL (MAPNIL1 X NIL) X))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (NOT (CAR X)) (IMPLIES (NILS (CDR X)) (EQUAL (MAPNIL1 (CDR X) NIL) (CDR X))) (NILS X)) (EQUAL (MAPNIL1 X NIL) X)). This simplifies, using the :definition NILS and the :executable-counterpart of EQUAL, to Subgoal *1/1'' (IMPLIES (AND (CONSP X) (NOT (CAR X)) (EQUAL (MAPNIL1 (CDR X) NIL) (CDR X)) (NILS (CDR X))) (EQUAL (MAPNIL1 X NIL) X)). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/1''' (IMPLIES (AND (CONSP (CONS X1 X2)) (NOT X1) (EQUAL (MAPNIL1 X2 NIL) X2) (NILS X2)) (EQUAL (MAPNIL1 (CONS X1 X2) NIL) (CONS X1 X2))). But simplification reduces this to T, using the :definition MAPNIL1, the :executable-counterpart of CONS, primitive type reasoning and the :rewrite rules CDR-CONS and PROBLEM-51A. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-51B ...) Rules: ((:DEFINITION MAPNIL1) (:DEFINITION NILS) (:DEFINITION NOT) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART CONS) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART MAPNIL1) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION NILS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-51A)) Warnings: None Time: 0.14 seconds (prove: 0.02, print: 0.11, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) PROBLEM-51B ACL2 >>(THEOREM PROBLEM-51 (IMPLIES (AND (NILS A) (NILS B)) (EQUAL (MAPNIL1 A B) (MAPNIL1 B A))) :HINTS (("Goal" :INDUCT (MAPNIL1 A B) :IN-THEORY (ENABLE PROBLEM-51A PROBLEM-51B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MAPNIL1 A B). This suggestion was produced using the :induction rule MAPNIL1. If we let (:P A B) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B)) (IMPLIES (AND (CONSP A) (:P (CDR A) (CONS NIL B))) (:P A B))). This induction is justified by the same argument used to admit MAPNIL1, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable B is being instantiated. When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (IMPLIES (AND (NILS A) (NILS B)) (EQUAL (MAPNIL1 A B) (MAPNIL1 B A)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (CONSP A)) (NILS A) (NILS B)) (EQUAL (MAPNIL1 A B) (MAPNIL1 B A))). But simplification reduces this to T, using the :definitions MAPNIL1 and NILS, the :executable-counterpart of CONSP, primitive type reasoning, the :rewrite rule PROBLEM-51B and the :type-prescription rule NILS. Subgoal *1/1 (IMPLIES (AND (CONSP A) (IMPLIES (AND (NILS (CDR A)) (NILS (CONS NIL B))) (EQUAL (MAPNIL1 (CDR A) (CONS NIL B)) (MAPNIL1 (CONS NIL B) (CDR A))))) (IMPLIES (AND (NILS A) (NILS B)) (EQUAL (MAPNIL1 A B) (MAPNIL1 B A)))). By the simple :rewrite rule PROBLEM-51A we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP A) (IMPLIES (AND (NILS (CDR A)) (NILS (CONS NIL B))) (EQUAL (CONS NIL (MAPNIL1 (CDR A) B)) (MAPNIL1 (CONS NIL B) (CDR A)))) (NILS A) (NILS B)) (EQUAL (MAPNIL1 A B) (MAPNIL1 B A))). This simplifies, using the :definitions MAPNIL1 and NILS, the :executable- counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, CONS-EQUAL and PROBLEM-51A and the :type-prescription rule NILS, to Subgoal *1/1'' (IMPLIES (AND (CONSP A) (EQUAL (MAPNIL1 (CDR A) B) (MAPNIL1 B (CDR A))) (NOT (CAR A)) (NILS (CDR A)) (NILS B)) (EQUAL (MAPNIL1 (CDR A) (CONS NIL B)) (MAPNIL1 B A))). By the simple :rewrite rule PROBLEM-51A we reduce the conjecture to Subgoal *1/1''' (IMPLIES (AND (CONSP A) (EQUAL (MAPNIL1 (CDR A) B) (MAPNIL1 B (CDR A))) (NOT (CAR A)) (NILS (CDR A)) (NILS B)) (EQUAL (CONS NIL (MAPNIL1 (CDR A) B)) (MAPNIL1 B A))). This simplifies, using trivial observations, to Subgoal *1/1'4' (IMPLIES (AND (CONSP A) (EQUAL (MAPNIL1 (CDR A) B) (MAPNIL1 B (CDR A))) (NOT (CAR A)) (NILS (CDR A)) (NILS B)) (EQUAL (CONS NIL (MAPNIL1 B (CDR A))) (MAPNIL1 B A))). The destructor terms (CAR A) and (CDR A) can be eliminated by using CAR-CDR-ELIM to replace A by (CONS A1 A2), (CAR A) by A1 and (CDR A) by A2. This produces the following goal. Subgoal *1/1'5' (IMPLIES (AND (CONSP (CONS A1 A2)) (EQUAL (MAPNIL1 A2 B) (MAPNIL1 B A2)) (NOT A1) (NILS A2) (NILS B)) (EQUAL (CONS NIL (MAPNIL1 B A2)) (MAPNIL1 B (CONS A1 A2)))). But simplification reduces this to T, using primitive type reasoning and the :rewrite rule PROBLEM-51A. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-51 ...) Rules: ((:DEFINITION MAPNIL1) (:DEFINITION NILS) (:DEFINITION NOT) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MAPNIL1) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE CONS-EQUAL) (:REWRITE PROBLEM-51A) (:REWRITE PROBLEM-51B) (:TYPE-PRESCRIPTION NILS)) Warnings: None Time: 0.07 seconds (prove: 0.02, print: 0.04, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-51 ACL2 >>(DEFUN RM (X Y) (IF (CONSP Y) (IF (EQUAL X (CAR Y)) (CDR Y) (CONS (CAR Y) (RM X (CDR Y)))) Y)) The admission of RM is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT Y). We could deduce no constraints on the type of RM. Summary Form: ( DEFUN RM ...) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.01, other: 0.02) RM ACL2 >>(DEFUN PERM (X Y) (IF (CONSP X) (AND (MEM (CAR X) Y) (PERM (CDR X) (RM (CAR X) Y))) (NOT (CONSP Y)))) The admission of PERM is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of PERM is described by the theorem (OR (EQUAL (PERM X Y) T) (EQUAL (PERM X Y) NIL)). Summary Form: ( DEFUN PERM ...) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) PERM ACL2 >>(THEOREM PROBLEM-53 (PERM X X) :HINTS (("Goal" :INDUCT (PERM X X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PERM X X). This suggestion was produced using the :induction rule PERM. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) X))) (:P X)) (IMPLIES (AND (CONSP X) (MEM (CAR X) X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit PERM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (PERM X X)). But simplification reduces this to T, using the :definition PERM. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) X))) (PERM X X)). But simplification reduces this to T, using the :definition MEM and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP X) (MEM (CAR X) X) (PERM (CDR X) (CDR X))) (PERM X X)). But simplification reduces this to T, using the :definitions MEM, PERM and RM, primitive type reasoning and the :type-prescription rule PERM. That completes the proof of *1. Q.E.D. The storage of PROBLEM-53 depends upon the :type-prescription rule PERM. Summary Form: ( DEFTHM PROBLEM-53 ...) Rules: ((:DEFINITION MEM) (:DEFINITION PERM) (:DEFINITION RM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PERM) (:TYPE-PRESCRIPTION PERM)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.01, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-53 ACL2 >>(THEOREM PROBLEM-54A (IMPLIES (MEM A X) (EQUAL (PERM X (CONS A Y)) (PERM (RM A X) Y))) :HINTS (("Goal" :INDUCT (PERM X Y)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PERM X Y). This suggestion was produced using the :induction rule PERM. If we let (:P A X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P A X Y)) (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (:P A X Y)) (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (:P A (CDR X) (RM (CAR X) Y))) (:P A X Y))). This induction is justified by the same argument used to admit PERM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable Y is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (MEM A X) (EQUAL (PERM X (CONS A Y)) (PERM (RM A X) Y)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (MEM A X)) (EQUAL (PERM X (CONS A Y)) (PERM (RM A X) Y))). But simplification reduces this to T, using the :definition MEM. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (IMPLIES (MEM A X) (EQUAL (PERM X (CONS A Y)) (PERM (RM A X) Y)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y)) (MEM A X)) (EQUAL (PERM X (CONS A Y)) (PERM (RM A X) Y))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/2'' (IMPLIES (AND (CONSP (CONS X1 X2)) (NOT (MEM X1 Y)) (MEM A (CONS X1 X2))) (EQUAL (PERM (CONS X1 X2) (CONS A Y)) (PERM (RM A (CONS X1 X2)) Y))). This simplifies, using the :definitions MEM, PERM and RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal *1/2''' (IMPLIES (AND (NOT (MEM X1 Y)) (MEM A X2) (NOT (EQUAL X1 A))) (EQUAL NIL (PERM (CONS X1 (RM A X2)) Y))). But simplification reduces this to T, using the :definition PERM, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rule CAR-CONS. Subgoal *1/1 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (MEM A (CDR X)) (EQUAL (PERM (CDR X) (CONS A (RM (CAR X) Y))) (PERM (RM A (CDR X)) (RM (CAR X) Y))))) (IMPLIES (MEM A X) (EQUAL (PERM X (CONS A Y)) (PERM (RM A X) Y)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (MEM A (CDR X)) (EQUAL (PERM (CDR X) (CONS A (RM (CAR X) Y))) (PERM (RM A (CDR X)) (RM (CAR X) Y)))) (MEM A X)) (EQUAL (PERM X (CONS A Y)) (PERM (RM A X) Y))). This simplifies, using the :definitions MEM, PERM and RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (EQUAL (PERM (CDR X) (CONS A (RM (CAR X) Y))) (PERM (RM A (CDR X)) (RM (CAR X) Y))) (MEM A (CDR X)) (EQUAL A (CAR X))) (EQUAL (PERM X (CONS A Y)) (PERM (CDR X) Y))). But simplification reduces this to T, using the :definitions MEM, PERM and RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (EQUAL (PERM (CDR X) (CONS A (RM (CAR X) Y))) (PERM (RM A (CDR X)) (RM (CAR X) Y))) (MEM A (CDR X)) (NOT (EQUAL A (CAR X)))) (EQUAL (PERM X (CONS A Y)) (PERM (CONS (CAR X) (RM A (CDR X))) Y))). But simplification reduces this to T, using the :definitions MEM, PERM and RM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR- CONS and the :type-prescription rule MEM. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-54A ...) Rules: ((:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION PERM) (:DEFINITION RM) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PERM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.12 seconds (prove: 0.07, print: 0.05, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-54A ACL2 >>(THEOREM PROBLEM-54 (IMPLIES (PERM X Y) (PERM Y X)) :HINTS (("Goal" :INDUCT (PERM X Y) :IN-THEORY (ENABLE PROBLEM-54A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PERM X Y). This suggestion was produced using the :induction rule PERM. If we let (:P X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X Y)) (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (:P X Y)) (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (:P (CDR X) (RM (CAR X) Y))) (:P X Y))). This induction is justified by the same argument used to admit PERM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable Y is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (PERM X Y) (PERM Y X))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (PERM X Y)) (PERM Y X)). But simplification reduces this to T, using the :definition PERM. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (IMPLIES (PERM X Y) (PERM Y X))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y)) (PERM X Y)) (PERM Y X)). But simplification reduces this to T, using the :definition PERM. Subgoal *1/1 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (PERM (CDR X) (RM (CAR X) Y)) (PERM (RM (CAR X) Y) (CDR X)))) (IMPLIES (PERM X Y) (PERM Y X))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (PERM (CDR X) (RM (CAR X) Y)) (PERM (RM (CAR X) Y) (CDR X))) (PERM X Y)) (PERM Y X)). This simplifies, using the :definition PERM and the :type-prescription rule MEM, to Subgoal *1/1'' (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (PERM (RM (CAR X) Y) (CDR X)) (PERM (CDR X) (RM (CAR X) Y))) (PERM Y X)). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/1''' (IMPLIES (AND (CONSP (CONS X1 X2)) (MEM X1 Y) (PERM (RM X1 Y) X2) (PERM X2 (RM X1 Y))) (PERM Y (CONS X1 X2))). But simplification reduces this to T, using primitive type reasoning, the :rewrite rule PROBLEM-54A and the :type-prescription rules MEM and PERM. That completes the proof of *1. Q.E.D. The storage of PROBLEM-54 depends upon the :type-prescription rule PERM. Summary Form: ( DEFTHM PROBLEM-54 ...) Rules: ((:DEFINITION NOT) (:DEFINITION PERM) (:ELIM CAR-CDR-ELIM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PERM) (:REWRITE PROBLEM-54A) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION PERM)) Warnings: None Time: 0.11 seconds (prove: 0.02, print: 0.08, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-54 ACL2 >>(THEOREM PROBLEM-55A (IMPLIES (MEM A (RM B X)) (MEM A X)) :HINTS (("Goal" :INDUCT (MEM A X)))) ACL2 Warning [Free] in ( DEFTHM PROBLEM-55A ...): The :REWRITE rule generated from PROBLEM-55A contains the free variable B. This variable will be chosen by searching for an instance of (MEM A (RM B X)) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :REWRITE rule. See :DOC free-variables. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MEM A X). This suggestion was produced using the :induction rule MEM. If we let (:P A B X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P A B X)) (IMPLIES (AND (CONSP X) (NOT (EQUAL A (CAR X))) (:P A B (CDR X))) (:P A B X)) (IMPLIES (AND (CONSP X) (EQUAL A (CAR X))) (:P A B X))). This induction is justified by the same argument used to admit MEM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (MEM A (RM B X)) (MEM A X))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (MEM A (RM B X))) (MEM A X)). But simplification reduces this to T, using the :definitions MEM and RM. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (EQUAL A (CAR X))) (IMPLIES (MEM A (RM B (CDR X))) (MEM A (CDR X)))) (IMPLIES (MEM A (RM B X)) (MEM A X))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (EQUAL A (CAR X))) (IMPLIES (MEM A (RM B (CDR X))) (MEM A (CDR X))) (MEM A (RM B X))) (MEM A X)). This simplifies, using the :definitions MEM and RM, primitive type reasoning and the :type-prescription rule MEM, to Subgoal *1/2'' (IMPLIES (AND (CONSP X) (NOT (EQUAL A (CAR X))) (NOT (MEM A (RM B (CDR X)))) (NOT (EQUAL B (CAR X))) (MEM A (CONS (CAR X) (RM B (CDR X))))) (MEM A (CDR X))). But simplification reduces this to T, using the :definition MEM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL A (CAR X))) (IMPLIES (MEM A (RM B X)) (MEM A X))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (EQUAL A (CAR X)) (MEM A (RM B X))) (MEM A X)). But simplification reduces this to T, using the :definition MEM and primitive type reasoning. That completes the proof of *1. Q.E.D. The storage of PROBLEM-55A depends upon the :type-prescription rule MEM. Summary Form: ( DEFTHM PROBLEM-55A ...) Rules: ((:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION RM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MEM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION MEM)) Warnings: Free Time: 0.06 seconds (prove: 0.03, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) PROBLEM-55A ACL2 >>(THEOREM PROBLEM-55B (IMPLIES (AND (PERM X Y) (MEM A X)) (MEM A Y)) :HINTS (("Goal" :INDUCT (PERM X Y) :IN-THEORY (ENABLE PROBLEM-55A)))) ACL2 Warning [Free] in ( DEFTHM PROBLEM-55B ...): The :REWRITE rule generated from PROBLEM-55B contains the free variable X. This variable will be chosen by searching for an instance of (PERM X Y) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :REWRITE rule. See :DOC free-variables. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PERM X Y). This suggestion was produced using the :induction rule PERM. If we let (:P A X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P A X Y)) (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (:P A X Y)) (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (:P A (CDR X) (RM (CAR X) Y))) (:P A X Y))). This induction is justified by the same argument used to admit PERM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable Y is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (AND (PERM X Y) (MEM A X)) (MEM A Y))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (PERM X Y) (MEM A X)) (MEM A Y)). But simplification reduces this to T, using the :definitions MEM and PERM. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (IMPLIES (AND (PERM X Y) (MEM A X)) (MEM A Y))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y)) (PERM X Y) (MEM A X)) (MEM A Y)). But simplification reduces this to T, using the :definition PERM. Subgoal *1/1 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (AND (PERM (CDR X) (RM (CAR X) Y)) (MEM A (CDR X))) (MEM A (RM (CAR X) Y)))) (IMPLIES (AND (PERM X Y) (MEM A X)) (MEM A Y))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (AND (PERM (CDR X) (RM (CAR X) Y)) (MEM A (CDR X))) (MEM A (RM (CAR X) Y))) (PERM X Y) (MEM A X)) (MEM A Y)). This simplifies, using the :definitions MEM and PERM, primitive type reasoning, the :rewrite rule PROBLEM-55A and the :type-prescription rule MEM, to Subgoal *1/1'' (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (NOT (MEM A (CDR X))) (PERM (CDR X) (RM (CAR X) Y)) (EQUAL A (CAR X))) (MEM A Y)). But simplification reduces this to T, using trivial observations. That completes the proof of *1. Q.E.D. The storage of PROBLEM-55B depends upon the :type-prescription rule MEM. Summary Form: ( DEFTHM PROBLEM-55B ...) Rules: ((:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION PERM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PERM) (:REWRITE PROBLEM-55A) (:TYPE-PRESCRIPTION MEM)) Warnings: Free Time: 0.15 seconds (prove: 0.01, print: 0.13, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-55B ACL2 >>(THEOREM PROBLEM-55C (EQUAL (RM A (RM B X)) (RM B (RM A X))) :HINTS (("Goal" :INDUCT (RM A X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (RM A X). This suggestion was produced using the :induction rule RM. If we let (:P A B X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P A B X)) (IMPLIES (AND (CONSP X) (NOT (EQUAL A (CAR X))) (:P A B (CDR X))) (:P A B X)) (IMPLIES (AND (CONSP X) (EQUAL A (CAR X))) (:P A B X))). This induction is justified by the same argument used to admit RM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (EQUAL (RM A (RM B X)) (RM B (RM A X)))). But simplification reduces this to T, using the :definition RM and primitive type reasoning. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (EQUAL A (CAR X))) (EQUAL (RM A (RM B (CDR X))) (RM B (RM A (CDR X))))) (EQUAL (RM A (RM B X)) (RM B (RM A X)))). This simplifies, using the :definition RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (EQUAL A (CAR X))) (EQUAL (RM A (RM B (CDR X))) (RM B (RM A (CDR X)))) (NOT (EQUAL B (CAR X)))) (EQUAL (RM A (CONS (CAR X) (RM B (CDR X)))) (CONS (CAR X) (RM A (RM B (CDR X)))))). But simplification reduces this to T, using the :definition RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL A (CAR X))) (EQUAL (RM A (RM B X)) (RM B (RM A X)))). This simplifies, using the :definition RM and primitive type reasoning, to Subgoal *1/1' (IMPLIES (CONSP X) (EQUAL (RM (CAR X) (RM B X)) (RM B (CDR X)))). This simplifies, using the :definition RM, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (EQUAL B (CAR X))) (EQUAL (RM (CAR X) (CDR X)) (RM B (CDR X)))). But simplification reduces this to T, using trivial observations. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (NOT (EQUAL B (CAR X)))) (EQUAL (RM (CAR X) (CONS (CAR X) (RM B (CDR X)))) (RM B (CDR X)))). But simplification reduces this to T, using the :definition RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-55C ...) Rules: ((:DEFINITION RM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION RM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS)) Warnings: None Time: 0.07 seconds (prove: 0.02, print: 0.05, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-55C ACL2 >>(THEOREM PROBLEM-55D (IMPLIES (AND (NOT (EQUAL E D)) (MEM E X)) (MEM E (RM D X))) :HINTS (("Goal" :INDUCT (RM D X) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (RM D X). This suggestion was produced using the :induction rule RM. If we let (:P D E X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P D E X)) (IMPLIES (AND (CONSP X) (NOT (EQUAL D (CAR X))) (:P D E (CDR X))) (:P D E X)) (IMPLIES (AND (CONSP X) (EQUAL D (CAR X))) (:P D E X))). This induction is justified by the same argument used to admit RM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (AND (NOT (EQUAL E D)) (MEM E X)) (MEM E (RM D X)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (NOT (EQUAL E D)) (MEM E X)) (MEM E (RM D X))). But simplification reduces this to T, using the :definition MEM. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (EQUAL D (CAR X))) (IMPLIES (AND (NOT (EQUAL E D)) (MEM E (CDR X))) (MEM E (RM D (CDR X))))) (IMPLIES (AND (NOT (EQUAL E D)) (MEM E X)) (MEM E (RM D X)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (EQUAL D (CAR X))) (IMPLIES (AND (NOT (EQUAL E D)) (MEM E (CDR X))) (MEM E (RM D (CDR X)))) (NOT (EQUAL E D)) (MEM E X)) (MEM E (RM D X))). But simplification reduces this to T, using the :definitions MEM and RM, the :executable-counterpart of NOT, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL D (CAR X))) (IMPLIES (AND (NOT (EQUAL E D)) (MEM E X)) (MEM E (RM D X)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (EQUAL D (CAR X)) (NOT (EQUAL E D)) (MEM E X)) (MEM E (RM D X))). This simplifies, using the :definition RM and primitive type reasoning, to Subgoal *1/1'' (IMPLIES (AND (CONSP X) (NOT (EQUAL E (CAR X))) (MEM E X)) (MEM E (CDR X))). But simplification reduces this to T, using the :definition MEM and primitive type reasoning. That completes the proof of *1. Q.E.D. The storage of PROBLEM-55D depends upon the :type-prescription rule MEM. Summary Form: ( DEFTHM PROBLEM-55D ...) Rules: ((:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION RM) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION RM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.13 seconds (prove: 0.01, print: 0.10, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-55D ACL2 >>(THEOREM PROBLEM-55E (IMPLIES (PERM X Y) (PERM (RM A X) (RM A Y))) :HINTS (("Goal" :INDUCT (PERM X Y) :IN-THEORY (ENABLE PROBLEM-54A PROBLEM-54 PROBLEM-55C PROBLEM-55D)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PERM X Y). This suggestion was produced using the :induction rule PERM. If we let (:P A X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P A X Y)) (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (:P A X Y)) (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (:P A (CDR X) (RM (CAR X) Y))) (:P A X Y))). This induction is justified by the same argument used to admit PERM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable Y is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (PERM X Y) (PERM (RM A X) (RM A Y)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (PERM X Y)) (PERM (RM A X) (RM A Y))). But simplification reduces this to T, using the :definitions PERM and RM and the :rewrite rule PROBLEM-54. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (IMPLIES (PERM X Y) (PERM (RM A X) (RM A Y)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y)) (PERM X Y)) (PERM (RM A X) (RM A Y))). But simplification reduces this to T, using the :definition PERM. Subgoal *1/1 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (PERM (CDR X) (RM (CAR X) Y)) (PERM (RM A (CDR X)) (RM A (RM (CAR X) Y))))) (IMPLIES (PERM X Y) (PERM (RM A X) (RM A Y)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (PERM (CDR X) (RM (CAR X) Y)) (PERM (RM A (CDR X)) (RM A (RM (CAR X) Y)))) (PERM X Y)) (PERM (RM A X) (RM A Y))). This simplifies, using the :definitions PERM and RM and the :type- prescription rule MEM, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (PERM (RM A (CDR X)) (RM A (RM (CAR X) Y))) (PERM (CDR X) (RM (CAR X) Y)) (EQUAL A (CAR X))) (PERM (CDR X) (RM A Y))). But simplification reduces this to T, using trivial observations. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (PERM (RM A (CDR X)) (RM A (RM (CAR X) Y))) (PERM (CDR X) (RM (CAR X) Y)) (NOT (EQUAL A (CAR X)))) (PERM (CONS (CAR X) (RM A (CDR X))) (RM A Y))). But simplification reduces this to T, using primitive type reasoning, the :rewrite rules PROBLEM-54, PROBLEM-54A, PROBLEM-55C and PROBLEM- 55D and the :type-prescription rules MEM and PERM. That completes the proof of *1. Q.E.D. The storage of PROBLEM-55E depends upon the :type-prescription rule PERM. Summary Form: ( DEFTHM PROBLEM-55E ...) Rules: ((:DEFINITION NOT) (:DEFINITION PERM) (:DEFINITION RM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PERM) (:REWRITE PROBLEM-54) (:REWRITE PROBLEM-54A) (:REWRITE PROBLEM-55C) (:REWRITE PROBLEM-55D) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION PERM)) Warnings: None Time: 0.20 seconds (prove: 0.04, print: 0.15, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-55E ACL2 >>(THEOREM PROBLEM-55 (IMPLIES (AND (PERM X Y) (PERM Y Z)) (PERM X Z)) :HINTS (("Goal" :INDUCT (LIST (PERM X Y) (PERM X Z)) :IN-THEORY (ENABLE PROBLEM-54 PROBLEM-55B PROBLEM-55E)))) ACL2 Warning [Free] in ( DEFTHM PROBLEM-55 ...): The :REWRITE rule generated from PROBLEM-55 contains the free variable Y. This variable will be chosen by searching for an instance of (PERM X Y) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :REWRITE rule. See :DOC free-variables. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. Two induction schemes are suggested by the induction hint. These merge into one derived induction scheme. We will induct according to a scheme suggested by (PERM X Z), but modified to accommodate (PERM X Y). These suggestions were produced using the :induction rule PERM. If we let (:P X Y Z) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X Y Z)) (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Z))) (:P X Y Z)) (IMPLIES (AND (CONSP X) (MEM (CAR X) Z) (:P (CDR X) (RM (CAR X) Y) (RM (CAR X) Z))) (:P X Y Z))). This induction is justified by the same argument used to admit PERM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variables Y and Z are being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (AND (PERM X Y) (PERM Y Z)) (PERM X Z))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (PERM X Y) (PERM Y Z)) (PERM X Z)). But simplification reduces this to T, using the :definition PERM and the :rewrite rule PROBLEM-54. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Z))) (IMPLIES (AND (PERM X Y) (PERM Y Z)) (PERM X Z))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Z)) (PERM X Y) (PERM Y Z)) (PERM X Z)). This simplifies, using the :definition PERM, the :rewrite rule PROBLEM- 55B and the :type-prescription rules MEM and PERM, to Subgoal *1/2'' (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Z)) (MEM (CAR X) Y) (PERM (CDR X) (RM (CAR X) Y)) (PERM Y Z)) (PERM (CDR X) (RM (CAR X) Z))). But simplification reduces this to T, using the :rewrite rule PROBLEM- 55B and the :type-prescription rules MEM and PERM. Subgoal *1/1 (IMPLIES (AND (CONSP X) (MEM (CAR X) Z) (IMPLIES (AND (PERM (CDR X) (RM (CAR X) Y)) (PERM (RM (CAR X) Y) (RM (CAR X) Z))) (PERM (CDR X) (RM (CAR X) Z)))) (IMPLIES (AND (PERM X Y) (PERM Y Z)) (PERM X Z))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (MEM (CAR X) Z) (IMPLIES (AND (PERM (CDR X) (RM (CAR X) Y)) (PERM (RM (CAR X) Y) (RM (CAR X) Z))) (PERM (CDR X) (RM (CAR X) Z))) (PERM X Y) (PERM Y Z)) (PERM X Z)). But simplification reduces this to T, using the :definition PERM, the :rewrite rules PROBLEM-55B and PROBLEM-55E and the :type-prescription rules MEM and PERM. That completes the proof of *1. Q.E.D. The storage of PROBLEM-55 depends upon the :type-prescription rule PERM. Summary Form: ( DEFTHM PROBLEM-55 ...) Rules: ((:DEFINITION NOT) (:DEFINITION PERM) (:INDUCTION PERM) (:REWRITE PROBLEM-54) (:REWRITE PROBLEM-55B) (:REWRITE PROBLEM-55E) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION PERM)) Warnings: Free Time: 0.12 seconds (prove: 0.02, print: 0.06, other: 0.04) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-55 ACL2 >>(DEFUN <<= (X Y) (LEXORDER X Y)) Since <<= is non-recursive, its admission is trivial. We observe that the type of <<= is described by the theorem (OR (EQUAL (<<= X Y) T) (EQUAL (<<= X Y) NIL)). We used the :type- prescription rule LEXORDER. Summary Form: ( DEFUN <<= ...) Rules: ((:TYPE-PRESCRIPTION LEXORDER)) Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) <<= ACL2 >>(THEOREM <<=-NON-STRICT-TOTAL-ORDER (AND (<<= X X) (IMPLIES (AND (<<= X Y) (<<= Y X)) (EQUAL X Y)) (IMPLIES (AND (<<= X Y) (<<= Y Z)) (<<= X Z)) (OR (<<= X Y) (<<= Y X))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definition <<= and the simple :rewrite rule LEXORDER- REFLEXIVE we reduce the conjecture to the following three conjectures. Subgoal 3 (IMPLIES (AND (LEXORDER X Y) (LEXORDER Y X)) (EQUAL X Y)). But we reduce the conjecture to T, by primitive type reasoning, the :forward-chaining rule LEXORDER-ANTI-SYMMETRIC and the :type-prescription rule LEXORDER. Subgoal 2 (IMPLIES (AND (LEXORDER X Y) (LEXORDER Y Z)) (LEXORDER X Z)). But simplification reduces this to T, using the :rewrite rule LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal 1 (OR (LEXORDER X Y) (LEXORDER Y X)). But we reduce the conjecture to T, by primitive type reasoning, the :forward-chaining rule LEXORDER-TOTAL and the :type-prescription rule LEXORDER. Q.E.D. Summary Form: ( DEFTHM <<=-NON-STRICT-TOTAL-ORDER ...) Rules: ((:DEFINITION <<=) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING LEXORDER-ANTI-SYMMETRIC) (:FORWARD-CHAINING LEXORDER-TOTAL) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: None Time: 0.04 seconds (prove: 0.01, print: 0.03, other: 0.00) <<=-NON-STRICT-TOTAL-ORDER ACL2 >>(DEFUN ORDERED (X) (IF (CONSP X) (IF (CONSP (CDR X)) (AND (<<= (CAR X) (CADR X)) (ORDERED (CDR X))) T) T)) The admission of ORDERED is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of ORDERED is described by the theorem (OR (EQUAL (ORDERED X) T) (EQUAL (ORDERED X) NIL)). Summary Form: ( DEFUN ORDERED ...) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) ORDERED ACL2 >>(DEFUN INSERT (E X) (IF (CONSP X) (IF (<<= E (CAR X)) (CONS E X) (CONS (CAR X) (INSERT E (CDR X)))) (CONS E NIL))) The admission of INSERT is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of INSERT is described by the theorem (CONSP (INSERT E X)). We used primitive type reasoning. Summary Form: ( DEFUN INSERT ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) INSERT ACL2 >>(DEFUN ISORT (X) (IF (CONSP X) (INSERT (CAR X) (ISORT (CDR X))) NIL)) The admission of ISORT is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of ISORT is described by the theorem (OR (CONSP (ISORT X)) (EQUAL (ISORT X) NIL)). We used the :type-prescription rule INSERT. Summary Form: ( DEFUN ISORT ...) Rules: ((:TYPE-PRESCRIPTION INSERT)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) ISORT ACL2 >>(THEOREM PROBLEM-58A (IMPLIES (ORDERED X) (ORDERED (INSERT E X))) :HINTS (("Goal" :INDUCT (INSERT E X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (INSERT E X). This suggestion was produced using the :induction rule INSERT. If we let (:P E X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P E X)) (IMPLIES (AND (CONSP X) (NOT (<<= E (CAR X))) (:P E (CDR X))) (:P E X)) (IMPLIES (AND (CONSP X) (<<= E (CAR X))) (:P E X))). This induction is justified by the same argument used to admit INSERT, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (ORDERED X) (ORDERED (INSERT E X)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (ORDERED X)) (ORDERED (INSERT E X))). But simplification reduces this to T, using the :definitions INSERT and ORDERED, the :executable-counterpart of CONSP, primitive type reasoning and the :rewrite rule CDR-CONS. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (<<= E (CAR X))) (IMPLIES (ORDERED (CDR X)) (ORDERED (INSERT E (CDR X))))) (IMPLIES (ORDERED X) (ORDERED (INSERT E X)))). By the simple :definition <<= we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (IMPLIES (ORDERED (CDR X)) (ORDERED (INSERT E (CDR X)))) (ORDERED X)) (ORDERED (INSERT E X))). This simplifies, using the :definitions <<=, INSERT and ORDERED, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type- prescription rules INSERT, LEXORDER and ORDERED, to the following four conjectures. Subgoal *1/2.4 (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (NOT (ORDERED (CDR X))) (NOT (CONSP (CDR X)))) (LEXORDER (CAR X) (CAR (INSERT E (CDR X))))). But simplification reduces this to T, using the :definition ORDERED. Subgoal *1/2.3 (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (NOT (ORDERED (CDR X))) (NOT (CONSP (CDR X)))) (ORDERED (INSERT E (CDR X)))). But simplification reduces this to T, using the :definition ORDERED. Subgoal *1/2.2 (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (ORDERED (INSERT E (CDR X))) (NOT (CONSP (CDR X)))) (LEXORDER (CAR X) (CAR (INSERT E (CDR X))))). But simplification reduces this to T, using the :definitions INSERT and ORDERED, the :executable-counterpart of CONSP, primitive type reasoning, the :forward-chaining rule LEXORDER-TOTAL, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type- prescription rule LEXORDER. Subgoal *1/2.1 (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (ORDERED (INSERT E (CDR X))) (LEXORDER (CAR X) (CADR X)) (ORDERED (CDR X))) (LEXORDER (CAR X) (CAR (INSERT E (CDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of two rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. These steps produce the following two goals. Subgoal *1/2.1.2 (IMPLIES (AND (NOT (CONSP X2)) (CONSP (CONS X1 X2)) (NOT (LEXORDER E X1)) (ORDERED (INSERT E X2)) (LEXORDER X1 (CAR X2)) (ORDERED X2)) (LEXORDER X1 (CAR (INSERT E X2)))). But simplification reduces this to T, using the :definitions INSERT and ORDERED, the :executable-counterpart of CONSP, primitive type reasoning, the :forward-chaining rule LEXORDER-TOTAL, the :rewrite rules CAR-CONS, CDR-CONS, DEFAULT-CAR, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.1.1 (IMPLIES (AND (CONSP (CONS X3 X4)) (CONSP (LIST* X1 X3 X4)) (NOT (LEXORDER E X1)) (ORDERED (INSERT E (CONS X3 X4))) (LEXORDER X1 X3) (ORDERED (CONS X3 X4))) (LEXORDER X1 (CAR (INSERT E (CONS X3 X4))))). But simplification reduces this to T, using the :definitions <<=, INSERT and ORDERED, primitive type reasoning, the :forward-chaining rule LEXORDER- TOTAL, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/1 (IMPLIES (AND (CONSP X) (<<= E (CAR X))) (IMPLIES (ORDERED X) (ORDERED (INSERT E X)))). By the simple :definition <<= we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (LEXORDER E (CAR X)) (ORDERED X)) (ORDERED (INSERT E X))). But simplification reduces this to T, using the :definitions <<=, INSERT and ORDERED, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type- prescription rules LEXORDER and ORDERED. That completes the proof of *1. Q.E.D. The storage of PROBLEM-58A depends upon the :type-prescription rule ORDERED. Summary Form: ( DEFTHM PROBLEM-58A ...) Rules: ((:DEFINITION <<=) (:DEFINITION INSERT) (:DEFINITION NOT) (:DEFINITION ORDERED) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING LEXORDER-TOTAL) (:INDUCTION INSERT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE DEFAULT-CAR) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:TYPE-PRESCRIPTION INSERT) (:TYPE-PRESCRIPTION LEXORDER) (:TYPE-PRESCRIPTION ORDERED)) Warnings: None Time: 0.10 seconds (prove: 0.02, print: 0.07, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) PROBLEM-58A ACL2 >>(THEOREM PROBLEM-58 (ORDERED (ISORT X)) :HINTS (("Goal" :INDUCT (ISORT X) :IN-THEORY (ENABLE PROBLEM-58A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (ISORT X). This suggestion was produced using the :induction rule ISORT. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit ISORT, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (ORDERED (ISORT X))). But simplification reduces this to T, using the :definition ISORT and the :executable-counterpart of ORDERED. Subgoal *1/1 (IMPLIES (AND (CONSP X) (ORDERED (ISORT (CDR X)))) (ORDERED (ISORT X))). But simplification reduces this to T, using the :definition ISORT, the :rewrite rule PROBLEM-58A and the :type-prescription rule ORDERED. That completes the proof of *1. Q.E.D. The storage of PROBLEM-58 depends upon the :type-prescription rule ORDERED. Summary Form: ( DEFTHM PROBLEM-58 ...) Rules: ((:DEFINITION ISORT) (:EXECUTABLE-COUNTERPART ORDERED) (:INDUCTION ISORT) (:REWRITE PROBLEM-58A) (:TYPE-PRESCRIPTION ORDERED)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-58 ACL2 >>(THEOREM PROBLEM-59A (IMPLIES (PERM A B) (PERM (INSERT E A) (CONS E B))) :HINTS (("Goal" :INDUCT (PERM A B) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49A PROBLEM-54A PROBLEM-54)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PERM A B). This suggestion was produced using the :induction rule PERM. If we let (:P A B E) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B E)) (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B))) (:P A B E)) (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (:P (CDR A) (RM (CAR A) B) E)) (:P A B E))). This induction is justified by the same argument used to admit PERM, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable B is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP A)) (IMPLIES (PERM A B) (PERM (INSERT E A) (CONS E B)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP A)) (PERM A B)) (PERM (INSERT E A) (CONS E B))). But simplification reduces this to T, using the :definitions INSERT, MEM, PERM and RM, the :executable-counterpart of CONSP, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-54 and PROBLEM-54A. Subgoal *1/2 (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B))) (IMPLIES (PERM A B) (PERM (INSERT E A) (CONS E B)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B)) (PERM A B)) (PERM (INSERT E A) (CONS E B))). But simplification reduces this to T, using the :definition PERM. Subgoal *1/1 (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (IMPLIES (PERM (CDR A) (RM (CAR A) B)) (PERM (INSERT E (CDR A)) (CONS E (RM (CAR A) B))))) (IMPLIES (PERM A B) (PERM (INSERT E A) (CONS E B)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (IMPLIES (PERM (CDR A) (RM (CAR A) B)) (PERM (INSERT E (CDR A)) (CONS E (RM (CAR A) B)))) (PERM A B)) (PERM (INSERT E A) (CONS E B))). This simplifies, using the :definitions <<=, INSERT and PERM, the :rewrite rules PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (PERM (INSERT E (CDR A)) (CONS E (RM (CAR A) B))) (PERM (CDR A) (RM (CAR A) B)) (LEXORDER E (CAR A))) (PERM (CONS E A) (CONS E B))). But simplification reduces this to T, using the :definitions MEM, PERM and RM, primitive type reasoning, the :rewrite rules CAR-CONS, CDR- CONS, PROBLEM-48, PROBLEM-49A, PROBLEM-54 and PROBLEM-54A and the :type- prescription rules MEM and PERM. Subgoal *1/1.1 (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (PERM (INSERT E (CDR A)) (CONS E (RM (CAR A) B))) (PERM (CDR A) (RM (CAR A) B)) (NOT (LEXORDER E (CAR A)))) (PERM (CONS (CAR A) (INSERT E (CDR A))) (CONS E B))). This simplifies, using the :definitions MEM, PERM and RM, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM, to Subgoal *1/1.1' (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (PERM (INSERT E (CDR A)) (CONS E (RM (CAR A) B))) (PERM (CDR A) (RM (CAR A) B)) (NOT (LEXORDER E (CAR A))) (EQUAL (CAR A) E)) (PERM (INSERT E (CDR A)) B)). But simplification reduces this to T, using primitive type reasoning and the :forward-chaining rule LEXORDER-TOTAL. That completes the proof of *1. Q.E.D. The storage of PROBLEM-59A depends upon the :type-prescription rule PERM. Summary Form: ( DEFTHM PROBLEM-59A ...) Rules: ((:DEFINITION <<=) (:DEFINITION INSERT) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION PERM) (:DEFINITION RM) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING LEXORDER-TOTAL) (:INDUCTION PERM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:REWRITE PROBLEM-54) (:REWRITE PROBLEM-54A) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION PERM)) Warnings: None Time: 0.13 seconds (prove: 0.06, print: 0.07, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-59A ACL2 >>(THEOREM PROBLEM-59 (PERM (ISORT X) X) :HINTS (("Goal" :INDUCT (ISORT X) :IN-THEORY (ENABLE PROBLEM-54 PROBLEM-59A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (ISORT X). This suggestion was produced using the :induction rule ISORT. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit ISORT, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (PERM (ISORT X) X)). But simplification reduces this to T, using the :definitions ISORT and PERM, the :executable-counterpart of CONSP and the :rewrite rule PROBLEM-54. Subgoal *1/1 (IMPLIES (AND (CONSP X) (PERM (ISORT (CDR X)) (CDR X))) (PERM (ISORT X) X)). This simplifies, using the :definition ISORT, to Subgoal *1/1' (IMPLIES (AND (CONSP X) (PERM (ISORT (CDR X)) (CDR X))) (PERM (INSERT (CAR X) (ISORT (CDR X))) X)). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/1'' (IMPLIES (AND (CONSP (CONS X1 X2)) (PERM (ISORT X2) X2)) (PERM (INSERT X1 (ISORT X2)) (CONS X1 X2))). But simplification reduces this to T, using primitive type reasoning, the :rewrite rule PROBLEM-59A and the :type-prescription rule PERM. That completes the proof of *1. Q.E.D. The storage of PROBLEM-59 depends upon the :type-prescription rule PERM. Summary Form: ( DEFTHM PROBLEM-59 ...) Rules: ((:DEFINITION ISORT) (:DEFINITION PERM) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION ISORT) (:REWRITE PROBLEM-54) (:REWRITE PROBLEM-59A) (:TYPE-PRESCRIPTION PERM)) Warnings: None Time: 0.20 seconds (prove: 0.03, print: 0.17, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-59 ACL2 >>(THEOREM PROBLEM-60A (EQUAL (INSERT E (INSERT D X)) (INSERT D (INSERT E X))) :HINTS (("Goal" :INDUCT (INSERT E X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (INSERT E X). This suggestion was produced using the :induction rule INSERT. If we let (:P D E X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P D E X)) (IMPLIES (AND (CONSP X) (NOT (<<= E (CAR X))) (:P D E (CDR X))) (:P D E X)) (IMPLIES (AND (CONSP X) (<<= E (CAR X))) (:P D E X))). This induction is justified by the same argument used to admit INSERT, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (EQUAL (INSERT E (INSERT D X)) (INSERT D (INSERT E X)))). This simplifies, using the :definitions <<= and INSERT, the :executable- counterpart of CONSP, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following two conjectures. Subgoal *1/3.2 (IMPLIES (AND (NOT (CONSP X)) (LEXORDER E D) (LEXORDER D E)) (EQUAL (LIST E D) (LIST D E))). But simplification reduces this to T, using primitive type reasoning, the :forward-chaining rule LEXORDER-ANTI-SYMMETRIC and the :type-prescription rule LEXORDER. Subgoal *1/3.1 (IMPLIES (AND (NOT (CONSP X)) (NOT (LEXORDER E D)) (NOT (LEXORDER D E))) (EQUAL (LIST D E) (LIST E D))). But simplification reduces this to T, using primitive type reasoning and the :forward-chaining rule LEXORDER-TOTAL. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (<<= E (CAR X))) (EQUAL (INSERT E (INSERT D (CDR X))) (INSERT D (INSERT E (CDR X))))) (EQUAL (INSERT E (INSERT D X)) (INSERT D (INSERT E X)))). By the simple :definition <<= we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (EQUAL (INSERT E (INSERT D (CDR X))) (INSERT D (INSERT E (CDR X))))) (EQUAL (INSERT E (INSERT D X)) (INSERT D (INSERT E X)))). This simplifies, using the :definitions <<= and INSERT, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following two conjectures. Subgoal *1/2.2 (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (EQUAL (INSERT E (INSERT D (CDR X))) (INSERT D (INSERT E (CDR X)))) (LEXORDER D (CAR X))) (EQUAL (INSERT E (CONS D X)) (LIST* D (CAR X) (INSERT E (CDR X))))). This simplifies, using the :definitions <<= and INSERT, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal *1/2.2' (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (EQUAL (INSERT E (INSERT D (CDR X))) (INSERT D (INSERT E (CDR X)))) (LEXORDER D (CAR X)) (LEXORDER E D)) (EQUAL (LIST* E D X) (LIST* D (CAR X) (INSERT E (CDR X))))). But simplification reduces this to T, using the :rewrite rule LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.1 (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (EQUAL (INSERT E (INSERT D (CDR X))) (INSERT D (INSERT E (CDR X)))) (NOT (LEXORDER D (CAR X)))) (EQUAL (INSERT E (CONS (CAR X) (INSERT D (CDR X)))) (CONS (CAR X) (INSERT D (INSERT E (CDR X)))))). But simplification reduces this to T, using the :definitions <<= and INSERT, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/1 (IMPLIES (AND (CONSP X) (<<= E (CAR X))) (EQUAL (INSERT E (INSERT D X)) (INSERT D (INSERT E X)))). By the simple :definition <<= we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (LEXORDER E (CAR X))) (EQUAL (INSERT E (INSERT D X)) (INSERT D (INSERT E X)))). This simplifies, using the :definitions <<= and INSERT, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (LEXORDER E (CAR X)) (LEXORDER D E)) (EQUAL (INSERT E (INSERT D X)) (LIST* D E X))). This simplifies, using the :definitions <<= and INSERT, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER, to Subgoal *1/1.2' (IMPLIES (AND (CONSP X) (LEXORDER E (CAR X)) (LEXORDER D E) (LEXORDER E D)) (EQUAL (LIST* E D X) (LIST* D E X))). But simplification reduces this to T, using primitive type reasoning, the :forward-chaining rule LEXORDER-ANTI-SYMMETRIC and the :type-prescription rule LEXORDER. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (LEXORDER E (CAR X)) (NOT (LEXORDER D E))) (EQUAL (INSERT E (INSERT D X)) (CONS E (INSERT D X)))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/1.1' (IMPLIES (AND (CONSP (CONS X1 X2)) (LEXORDER E X1) (NOT (LEXORDER D E))) (EQUAL (INSERT E (INSERT D (CONS X1 X2))) (CONS E (INSERT D (CONS X1 X2))))). This simplifies, using the :definitions <<= and INSERT, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following two conjectures. Subgoal *1/1.1.2 (IMPLIES (AND (LEXORDER E X1) (NOT (LEXORDER D E)) (LEXORDER D X1)) (EQUAL (INSERT E (LIST* D X1 X2)) (LIST* E D X1 X2))). But simplification reduces this to T, using the :definitions <<= and INSERT, primitive type reasoning, the :forward-chaining rule LEXORDER- TOTAL, the :rewrite rules CAR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/1.1.1 (IMPLIES (AND (LEXORDER E X1) (NOT (LEXORDER D E)) (NOT (LEXORDER D X1))) (EQUAL (INSERT E (CONS X1 (INSERT D X2))) (LIST* E X1 (INSERT D X2)))). But simplification reduces this to T, using the :definitions <<= and INSERT, primitive type reasoning, the :rewrite rules CAR-CONS, LEXORDER- REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-60A ...) Rules: ((:DEFINITION <<=) (:DEFINITION INSERT) (:DEFINITION NOT) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING LEXORDER-ANTI-SYMMETRIC) (:FORWARD-CHAINING LEXORDER-TOTAL) (:INDUCTION INSERT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: None Time: 0.13 seconds (prove: 0.04, print: 0.09, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-60A ACL2 >>(THEOREM PROBLEM-60B (EQUAL (ISORT (APP X (LIST E))) (INSERT E (ISORT X))) :HINTS (("Goal" :INDUCT (ISORT X) :IN-THEORY (ENABLE PROBLEM-60A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (ISORT X). This suggestion was produced using the :induction rule ISORT. If we let (:P E X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P E X)) (IMPLIES (AND (CONSP X) (:P E (CDR X))) (:P E X))). This induction is justified by the same argument used to admit ISORT, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (ISORT (APP X (LIST E))) (INSERT E (ISORT X)))). But simplification reduces this to T, using the :definitions APP, INSERT and ISORT, the :executable-counterparts of CONSP and ISORT, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (ISORT (APP (CDR X) (LIST E))) (INSERT E (ISORT (CDR X))))) (EQUAL (ISORT (APP X (LIST E))) (INSERT E (ISORT X)))). But simplification reduces this to T, using the :definitions APP and ISORT, primitive type reasoning and the :rewrite rules CAR-CONS, CDR- CONS and PROBLEM-60A. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-60B ...) Rules: ((:DEFINITION APP) (:DEFINITION INSERT) (:DEFINITION ISORT) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART ISORT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION ISORT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-60A)) Warnings: None Time: 0.05 seconds (prove: 0.02, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-60B ACL2 >>(THEOREM PROBLEM-60C (EQUAL (ISORT (REV X)) (ISORT X)) :HINTS (("Goal" :INDUCT (ISORT X) :IN-THEORY (ENABLE PROBLEM-60B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (ISORT X). This suggestion was produced using the :induction rule ISORT. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit ISORT, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (ISORT (REV X)) (ISORT X))). But simplification reduces this to T, using the :definitions ISORT and REV and the :executable-counterparts of EQUAL and ISORT. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (ISORT (REV (CDR X))) (ISORT (CDR X)))) (EQUAL (ISORT (REV X)) (ISORT X))). But simplification reduces this to T, using the :definitions ISORT and REV, primitive type reasoning and the :rewrite rule PROBLEM-60B. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-60C ...) Rules: ((:DEFINITION ISORT) (:DEFINITION REV) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART ISORT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION ISORT) (:REWRITE PROBLEM-60B)) Warnings: None Time: 0.05 seconds (prove: 0.01, print: 0.03, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-60C ACL2 >>(THEOREM PROBLEM-60D (EQUAL (ISORT (INSERT E X)) (INSERT E (ISORT X))) :HINTS (("Goal" :INDUCT (INSERT E X) :IN-THEORY (ENABLE PROBLEM-60A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (INSERT E X). This suggestion was produced using the :induction rule INSERT. If we let (:P E X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P E X)) (IMPLIES (AND (CONSP X) (NOT (<<= E (CAR X))) (:P E (CDR X))) (:P E X)) (IMPLIES (AND (CONSP X) (<<= E (CAR X))) (:P E X))). This induction is justified by the same argument used to admit INSERT, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (EQUAL (ISORT (INSERT E X)) (INSERT E (ISORT X)))). But simplification reduces this to T, using the :definitions INSERT and ISORT, the :executable-counterparts of CONSP and ISORT, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (<<= E (CAR X))) (EQUAL (ISORT (INSERT E (CDR X))) (INSERT E (ISORT (CDR X))))) (EQUAL (ISORT (INSERT E X)) (INSERT E (ISORT X)))). By the simple :definition <<= we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (EQUAL (ISORT (INSERT E (CDR X))) (INSERT E (ISORT (CDR X))))) (EQUAL (ISORT (INSERT E X)) (INSERT E (ISORT X)))). But simplification reduces this to T, using the :definitions <<=, INSERT and ISORT, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and PROBLEM-60A. Subgoal *1/1 (IMPLIES (AND (CONSP X) (<<= E (CAR X))) (EQUAL (ISORT (INSERT E X)) (INSERT E (ISORT X)))). By the simple :definition <<= we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (LEXORDER E (CAR X))) (EQUAL (ISORT (INSERT E X)) (INSERT E (ISORT X)))). But simplification reduces this to T, using the :definitions <<=, INSERT and ISORT, primitive type reasoning, the :rewrite rules CAR-CONS, CDR- CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-60D ...) Rules: ((:DEFINITION <<=) (:DEFINITION INSERT) (:DEFINITION ISORT) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART ISORT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION INSERT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:REWRITE PROBLEM-60A) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: None Time: 0.09 seconds (prove: 0.04, print: 0.04, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-60D ACL2 >>(THEOREM PROBLEM-60E (EQUAL (ISORT (ISORT X)) (ISORT X)) :HINTS (("Goal" :INDUCT (ISORT X) :IN-THEORY (ENABLE PROBLEM-60D)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (ISORT X). This suggestion was produced using the :induction rule ISORT. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit ISORT, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (ISORT (ISORT X)) (ISORT X))). But simplification reduces this to T, using the :definition ISORT and the :executable-counterparts of EQUAL and ISORT. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (ISORT (ISORT (CDR X))) (ISORT (CDR X)))) (EQUAL (ISORT (ISORT X)) (ISORT X))). But simplification reduces this to T, using the :definition ISORT, primitive type reasoning and the :rewrite rule PROBLEM-60D. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-60E ...) Rules: ((:DEFINITION ISORT) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART ISORT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION ISORT) (:REWRITE PROBLEM-60D)) Warnings: None Time: 0.05 seconds (prove: 0.01, print: 0.03, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-60E ACL2 >>(THEOREM PROBLEM-60 (EQUAL (ISORT (REV (ISORT L))) (ISORT L)) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-60C PROBLEM-60E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] But we reduce the conjecture to T, by the simple :rewrite rules PROBLEM- 60C and PROBLEM-60E. Q.E.D. Summary Form: ( DEFTHM PROBLEM-60 ...) Rules: ((:REWRITE PROBLEM-60C) (:REWRITE PROBLEM-60E)) Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-60 ACL2 >>(DEFUN REV1 (X A) (IF (CONSP X) (REV1 (CDR X) (CONS (CAR X) A)) A)) The admission of REV1 is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of REV1 is described by the theorem (OR (CONSP (REV1 X A)) (EQUAL (REV1 X A) A)). We used primitive type reasoning. Summary Form: ( DEFUN REV1 ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) REV1 ACL2 >>(THEOREM PROBLEM-61A (EQUAL (REV1 X A) (APP (REV X) A)) :HINTS (("Goal" :INDUCT (REV1 X A) :IN-THEORY (ENABLE PROBLEM-40)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (REV1 X A). This suggestion was produced using the :induction rule REV1. If we let (:P A X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P A X)) (IMPLIES (AND (CONSP X) (:P (CONS (CAR X) A) (CDR X))) (:P A X))). This induction is justified by the same argument used to admit REV1, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable A is being instantiated. When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (REV1 X A) (APP (REV X) A))). But simplification reduces this to T, using the :definitions APP, REV and REV1, the :executable-counterpart of CONSP and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (REV1 (CDR X) (CONS (CAR X) A)) (APP (REV (CDR X)) (CONS (CAR X) A)))) (EQUAL (REV1 X A) (APP (REV X) A))). But simplification reduces this to T, using the :definitions APP, REV and REV1, the :executable-counterpart of CONSP, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and PROBLEM-40. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-61A ...) Rules: ((:DEFINITION APP) (:DEFINITION REV) (:DEFINITION REV1) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION REV1) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-40)) Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.03, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-61A ACL2 >>(THEOREM PROBLEM-61 (EQUAL (REV1 X NIL) (REV X)) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-41 PROBLEM-44B PROBLEM-61A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :rewrite rule PROBLEM-61A we reduce the conjecture to Goal' (EQUAL (APP (REV X) NIL) (REV X)). But simplification reduces this to T, using primitive type reasoning and the :rewrite rules PROBLEM-41 and PROBLEM-44B. Q.E.D. Summary Form: ( DEFTHM PROBLEM-61 ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE PROBLEM-41) (:REWRITE PROBLEM-44B) (:REWRITE PROBLEM-61A)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-61 ACL2 >>(THEOREM PROBLEM-62-DIRECT (EQUAL (MAPNIL1 A NIL) (MAPNIL A)) :HINTS (("Goal" :INDUCT (MAPNIL A) :IN-THEORY (ENABLE PROBLEM-51A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MAPNIL A). This suggestion was produced using the :induction rule MAPNIL. If we let (:P A) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A)) (IMPLIES (AND (CONSP A) (:P (CDR A))) (:P A))). This induction is justified by the same argument used to admit MAPNIL, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (EQUAL (MAPNIL1 A NIL) (MAPNIL A))). But simplification reduces this to T, using the :definitions MAPNIL and MAPNIL1 and the :executable-counterpart of EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP A) (EQUAL (MAPNIL1 (CDR A) NIL) (MAPNIL (CDR A)))) (EQUAL (MAPNIL1 A NIL) (MAPNIL A))). This simplifies, using the :definition MAPNIL, to Subgoal *1/1' (IMPLIES (AND (CONSP A) (EQUAL (MAPNIL1 (CDR A) NIL) (MAPNIL (CDR A)))) (EQUAL (MAPNIL1 A NIL) (CONS NIL (MAPNIL (CDR A))))). The destructor terms (CAR A) and (CDR A) can be eliminated by using CAR-CDR-ELIM to replace A by (CONS A1 A2), (CAR A) by A1 and (CDR A) by A2. This produces the following goal. Subgoal *1/1'' (IMPLIES (AND (CONSP (CONS A1 A2)) (EQUAL (MAPNIL1 A2 NIL) (MAPNIL A2))) (EQUAL (MAPNIL1 (CONS A1 A2) NIL) (CONS NIL (MAPNIL A2)))). But simplification reduces this to T, using the :definition MAPNIL1, the :executable-counterpart of CONS, primitive type reasoning and the :rewrite rules CDR-CONS and PROBLEM-51A. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-62-DIRECT ...) Rules: ((:DEFINITION MAPNIL) (:DEFINITION MAPNIL1) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART CONS) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MAPNIL) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-51A)) Warnings: None Time: 0.08 seconds (prove: 0.00, print: 0.07, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-62-DIRECT ACL2 >>(THEOREM PROBLEM-62A (IMPLIES (NILS A) (EQUAL (APP A (CONS NIL B)) (CONS NIL (APP A B)))) :HINTS (("Goal" :INDUCT (APP A B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP A B). This suggestion was produced using the :induction rule APP. If we let (:P A B) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B)) (IMPLIES (AND (CONSP A) (:P (CDR A) B)) (:P A B))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (IMPLIES (NILS A) (EQUAL (APP A (CONS NIL B)) (CONS NIL (APP A B))))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (CONSP A)) (NILS A)) (EQUAL (APP A (CONS NIL B)) (CONS NIL (APP A B)))). But simplification reduces this to T, using the :definitions APP and NILS, the :executable-counterpart of CONSP and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP A) (IMPLIES (NILS (CDR A)) (EQUAL (APP (CDR A) (CONS NIL B)) (CONS NIL (APP (CDR A) B))))) (IMPLIES (NILS A) (EQUAL (APP A (CONS NIL B)) (CONS NIL (APP A B))))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP A) (IMPLIES (NILS (CDR A)) (EQUAL (APP (CDR A) (CONS NIL B)) (CONS NIL (APP (CDR A) B)))) (NILS A)) (EQUAL (APP A (CONS NIL B)) (CONS NIL (APP A B)))). But simplification reduces this to T, using the :definitions APP and NILS and primitive type reasoning. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-62A ...) Rules: ((:DEFINITION APP) (:DEFINITION NILS) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP)) Warnings: None Time: 0.07 seconds (prove: 0.01, print: 0.06, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-62A ACL2 >>(THEOREM PROBLEM-62B (NILS (MAPNIL A)) :HINTS (("Goal" :INDUCT (MAPNIL A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MAPNIL A). This suggestion was produced using the :induction rule MAPNIL. If we let (:P A) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A)) (IMPLIES (AND (CONSP A) (:P (CDR A))) (:P A))). This induction is justified by the same argument used to admit MAPNIL, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (NILS (MAPNIL A))). But simplification reduces this to T, using the :definition MAPNIL and the :executable-counterpart of NILS. Subgoal *1/1 (IMPLIES (AND (CONSP A) (NILS (MAPNIL (CDR A)))) (NILS (MAPNIL A))). But simplification reduces this to T, using the :definitions MAPNIL and NILS, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rules MAPNIL and NILS. That completes the proof of *1. Q.E.D. The storage of PROBLEM-62B depends upon the :type-prescription rule NILS. Summary Form: ( DEFTHM PROBLEM-62B ...) Rules: ((:DEFINITION MAPNIL) (:DEFINITION NILS) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NILS) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MAPNIL) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION MAPNIL) (:TYPE-PRESCRIPTION NILS)) Warnings: None Time: 0.04 seconds (prove: 0.01, print: 0.03, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-62B ACL2 >>(THEOREM PROBLEM-62C (EQUAL (MAPNIL1 A B) (APP (MAPNIL A) B)) :HINTS (("Goal" :INDUCT (MAPNIL1 A B) :IN-THEORY (ENABLE PROBLEM-62A PROBLEM-62B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MAPNIL1 A B). This suggestion was produced using the :induction rule MAPNIL1. If we let (:P A B) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B)) (IMPLIES (AND (CONSP A) (:P (CDR A) (CONS NIL B))) (:P A B))). This induction is justified by the same argument used to admit MAPNIL1, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable B is being instantiated. When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (EQUAL (MAPNIL1 A B) (APP (MAPNIL A) B))). But simplification reduces this to T, using the :definitions APP, MAPNIL and MAPNIL1, the :executable-counterpart of CONSP and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP A) (EQUAL (MAPNIL1 (CDR A) (CONS NIL B)) (APP (MAPNIL (CDR A)) (CONS NIL B)))) (EQUAL (MAPNIL1 A B) (APP (MAPNIL A) B))). But simplification reduces this to T, using the :definitions APP, MAPNIL and MAPNIL1, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-62A and PROBLEM-62B and the :type-prescription rule MAPNIL. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-62C ...) Rules: ((:DEFINITION APP) (:DEFINITION MAPNIL) (:DEFINITION MAPNIL1) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MAPNIL1) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-62A) (:REWRITE PROBLEM-62B) (:TYPE-PRESCRIPTION MAPNIL)) Warnings: None Time: 0.06 seconds (prove: 0.01, print: 0.03, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-62C ACL2 >>(THEOREM PROBLEM-62D (PROPER (MAPNIL A)) :HINTS (("Goal" :INDUCT (MAPNIL A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MAPNIL A). This suggestion was produced using the :induction rule MAPNIL. If we let (:P A) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A)) (IMPLIES (AND (CONSP A) (:P (CDR A))) (:P A))). This induction is justified by the same argument used to admit MAPNIL, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (PROPER (MAPNIL A))). But simplification reduces this to T, using the :definition MAPNIL and the :executable-counterpart of PROPER. Subgoal *1/1 (IMPLIES (AND (CONSP A) (PROPER (MAPNIL (CDR A)))) (PROPER (MAPNIL A))). But simplification reduces this to T, using the :definitions MAPNIL and PROPER, primitive type reasoning, the :rewrite rule CDR-CONS and the :type-prescription rules MAPNIL and PROPER. That completes the proof of *1. Q.E.D. The storage of PROBLEM-62D depends upon the :type-prescription rule PROPER. Summary Form: ( DEFTHM PROBLEM-62D ...) Rules: ((:DEFINITION MAPNIL) (:DEFINITION PROPER) (:EXECUTABLE-COUNTERPART PROPER) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MAPNIL) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION MAPNIL) (:TYPE-PRESCRIPTION PROPER)) Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.04, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-62D ACL2 >>(THEOREM PROBLEM-62 (EQUAL (MAPNIL1 A NIL) (MAPNIL A)) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-41 PROBLEM-62C PROBLEM-62D)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :rewrite rule PROBLEM-62C we reduce the conjecture to Goal' (EQUAL (APP (MAPNIL A) NIL) (MAPNIL A)). But simplification reduces this to T, using primitive type reasoning and the :rewrite rules PROBLEM-41 and PROBLEM-62D. Q.E.D. Summary Form: ( DEFTHM PROBLEM-62 ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE PROBLEM-41) (:REWRITE PROBLEM-62C) (:REWRITE PROBLEM-62D)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.01, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-62 ACL2 >>(DEFUN MCFLATTEN (X A) (IF (CONSP X) (MCFLATTEN (CAR X) (MCFLATTEN (CDR X) A)) (CONS X A))) The admission of MCFLATTEN is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of MCFLATTEN is described by the theorem (CONSP (MCFLATTEN X A)). We used primitive type reasoning. Summary Form: ( DEFUN MCFLATTEN ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) MCFLATTEN ACL2 >>(THEOREM PROBLEM-64A (EQUAL (MCFLATTEN X A) (APP (FLATTEN X) A)) :HINTS (("Goal" :INDUCT (MCFLATTEN X A) :IN-THEORY (ENABLE PROBLEM-40)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MCFLATTEN X A). This suggestion was produced using the :induction rule MCFLATTEN. If we let (:P A X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P A X)) (IMPLIES (AND (CONSP X) (:P (MCFLATTEN (CDR X) A) (CAR X)) (:P A (CDR X))) (:P A X))). This induction is justified by the same argument used to admit MCFLATTEN, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable A is being instantiated. When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (MCFLATTEN X A) (APP (FLATTEN X) A))). But simplification reduces this to T, using the :definitions APP, FLATTEN and MCFLATTEN, the :executable-counterpart of CONSP, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (MCFLATTEN (CAR X) (MCFLATTEN (CDR X) A)) (APP (FLATTEN (CAR X)) (MCFLATTEN (CDR X) A))) (EQUAL (MCFLATTEN (CDR X) A) (APP (FLATTEN (CDR X)) A))) (EQUAL (MCFLATTEN X A) (APP (FLATTEN X) A))). But simplification reduces this to T, using the :definitions FLATTEN and MCFLATTEN, primitive type reasoning and the :rewrite rule PROBLEM- 40. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-64A ...) Rules: ((:DEFINITION APP) (:DEFINITION FLATTEN) (:DEFINITION MCFLATTEN) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MCFLATTEN) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-40)) Warnings: None Time: 0.05 seconds (prove: 0.01, print: 0.01, other: 0.03) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-64A ACL2 >>(THEOREM PROBLEM-64B (PROPER (FLATTEN X)) :HINTS (("Goal" :INDUCT (FLATTEN X) :IN-THEORY (ENABLE PROBLEM-44C)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (FLATTEN X). This suggestion was produced using the :induction rule FLATTEN. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CAR X)) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit FLATTEN, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (PROPER (FLATTEN X))). But simplification reduces this to T, using the :definitions FLATTEN and PROPER, the :executable-counterpart of PROPER, primitive type reasoning and the :rewrite rule CDR-CONS. Subgoal *1/1 (IMPLIES (AND (CONSP X) (PROPER (FLATTEN (CAR X))) (PROPER (FLATTEN (CDR X)))) (PROPER (FLATTEN X))). But simplification reduces this to T, using the :definition FLATTEN, the :rewrite rule PROBLEM-44C and the :type-prescription rule PROPER. That completes the proof of *1. Q.E.D. The storage of PROBLEM-64B depends upon the :type-prescription rule PROPER. Summary Form: ( DEFTHM PROBLEM-64B ...) Rules: ((:DEFINITION FLATTEN) (:DEFINITION PROPER) (:EXECUTABLE-COUNTERPART PROPER) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION FLATTEN) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-44C) (:TYPE-PRESCRIPTION PROPER)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-64B ACL2 >>(THEOREM PROBLEM-64 (EQUAL (MCFLATTEN X NIL) (FLATTEN X)) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-41 PROBLEM-64A PROBLEM-64B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :rewrite rule PROBLEM-64A we reduce the conjecture to Goal' (EQUAL (APP (FLATTEN X) NIL) (FLATTEN X)). But simplification reduces this to T, using primitive type reasoning and the :rewrite rules PROBLEM-41 and PROBLEM-64B. Q.E.D. Summary Form: ( DEFTHM PROBLEM-64 ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE PROBLEM-41) (:REWRITE PROBLEM-64A) (:REWRITE PROBLEM-64B)) Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-64 ACL2 >>(DEFUN NAT (X) (IF (CONSP X) (AND (EQUAL (CAR X) NIL) (NAT (CDR X))) (EQUAL X NIL))) The admission of NAT is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of NAT is described by the theorem (OR (EQUAL (NAT X) T) (EQUAL (NAT X) NIL)). We used primitive type reasoning. Summary Form: ( DEFUN NAT ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.01, other: 0.02) NAT ACL2 >>(DEFUN FIX-NAT (X) (IF (CONSP X) (CONS NIL (FIX-NAT (CDR X))) NIL)) The admission of FIX-NAT is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of FIX-NAT is described by the theorem (TRUE-LISTP (FIX-NAT X)). We used primitive type reasoning. Summary Form: ( DEFUN FIX-NAT ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.01, other: 0.02) FIX-NAT ACL2 >>(THEOREM PROBLEM-66A (NAT (FIX-NAT X)) :HINTS (("Goal" :INDUCT (FIX-NAT X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (FIX-NAT X). This suggestion was produced using the :induction rule FIX-NAT. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit FIX- NAT, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (NAT (FIX-NAT X))). But simplification reduces this to T, using the :definition FIX-NAT and the :executable-counterpart of NAT. Subgoal *1/1 (IMPLIES (AND (CONSP X) (NAT (FIX-NAT (CDR X)))) (NAT (FIX-NAT X))). But simplification reduces this to T, using the :definitions FIX-NAT and NAT, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rules FIX-NAT and NAT. That completes the proof of *1. Q.E.D. The storage of PROBLEM-66A depends upon the :type-prescription rule NAT. Summary Form: ( DEFTHM PROBLEM-66A ...) Rules: ((:DEFINITION FIX-NAT) (:DEFINITION NAT) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NAT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION FIX-NAT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION FIX-NAT) (:TYPE-PRESCRIPTION NAT)) Warnings: None Time: 0.12 seconds (prove: 0.01, print: 0.10, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-66A ACL2 >>(THEOREM PROBLEM-66B (IMPLIES (NAT X) (EQUAL (FIX-NAT X) X)) :HINTS (("Goal" :INDUCT (NAT X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (NAT X). This suggestion was produced using the :induction rule NAT. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (CAR X)) (:P X)) (IMPLIES (AND (CONSP X) (NOT (CAR X)) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit NAT, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (NAT X) (EQUAL (FIX-NAT X) X))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (NAT X)) (EQUAL (FIX-NAT X) X)). But simplification reduces this to T, using the :definition NAT, the :executable-counterparts of CONSP, EQUAL and FIX-NAT and primitive type reasoning. Subgoal *1/2 (IMPLIES (AND (CONSP X) (CAR X)) (IMPLIES (NAT X) (EQUAL (FIX-NAT X) X))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (CAR X) (NAT X)) (EQUAL (FIX-NAT X) X)). But simplification reduces this to T, using the :definition NAT and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP X) (NOT (CAR X)) (IMPLIES (NAT (CDR X)) (EQUAL (FIX-NAT (CDR X)) (CDR X)))) (IMPLIES (NAT X) (EQUAL (FIX-NAT X) X))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (NOT (CAR X)) (IMPLIES (NAT (CDR X)) (EQUAL (FIX-NAT (CDR X)) (CDR X))) (NAT X)) (EQUAL (FIX-NAT X) X)). But simplification reduces this to T, using the :definitions FIX-NAT and NAT, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FIX-NAT. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-66B ...) Rules: ((:DEFINITION FIX-NAT) (:DEFINITION NAT) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART FIX-NAT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION NAT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION FIX-NAT)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.02, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-66B ACL2 >>(DEFUN PLUS (X Y) (IF (CONSP X) (CONS NIL (PLUS (CDR X) Y)) (FIX-NAT Y))) The admission of PLUS is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of PLUS is described by the theorem (TRUE-LISTP (PLUS X Y)). We used primitive type reasoning and the :type-prescription rule FIX-NAT. Summary Form: ( DEFUN PLUS ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL) (:TYPE-PRESCRIPTION FIX-NAT)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PLUS ACL2 >>(THEOREM PROBLEM-66C (NAT (PLUS X Y)) :HINTS (("Goal" :INDUCT (PLUS X Y) :IN-THEORY (ENABLE PROBLEM-66A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PLUS X Y). This suggestion was produced using the :induction rule PLUS. If we let (:P X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X Y)) (IMPLIES (AND (CONSP X) (:P (CDR X) Y)) (:P X Y))). This induction is justified by the same argument used to admit PLUS, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (NAT (PLUS X Y))). But simplification reduces this to T, using the :definition PLUS and the :rewrite rule PROBLEM-66A. Subgoal *1/1 (IMPLIES (AND (CONSP X) (NAT (PLUS (CDR X) Y))) (NAT (PLUS X Y))). But simplification reduces this to T, using the :definitions NAT and PLUS, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rules NAT and PLUS. That completes the proof of *1. Q.E.D. The storage of PROBLEM-66C depends upon the :type-prescription rule NAT. Summary Form: ( DEFTHM PROBLEM-66C ...) Rules: ((:DEFINITION NAT) (:DEFINITION PLUS) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PLUS) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-66A) (:TYPE-PRESCRIPTION NAT) (:TYPE-PRESCRIPTION PLUS)) Warnings: None Time: 0.04 seconds (prove: 0.01, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-66C ACL2 >>(THEOREM PROBLEM-66D (EQUAL (PLUS (FIX-NAT I) J) (PLUS I J)) :HINTS (("Goal" :INDUCT (PLUS I J)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PLUS I J). This suggestion was produced using the :induction rule PLUS. If we let (:P I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J)) (IMPLIES (AND (CONSP I) (:P (CDR I) J)) (:P I J))). This induction is justified by the same argument used to admit PLUS, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (PLUS (FIX-NAT I) J) (PLUS I J))). But simplification reduces this to T, using the :definitions FIX-NAT and PLUS, the :executable-counterpart of CONSP and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (PLUS (FIX-NAT (CDR I)) J) (PLUS (CDR I) J))) (EQUAL (PLUS (FIX-NAT I) J) (PLUS I J))). But simplification reduces this to T, using the :definitions FIX-NAT and PLUS, primitive type reasoning, the :rewrite rule CDR-CONS and the :type-prescription rule FIX-NAT. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-66D ...) Rules: ((:DEFINITION FIX-NAT) (:DEFINITION PLUS) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PLUS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION FIX-NAT)) Warnings: None Time: 0.05 seconds (prove: 0.01, print: 0.04, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-66D ACL2 >>(THEOREM PROBLEM-66E (EQUAL (PLUS I (FIX-NAT J)) (PLUS I J)) :HINTS (("Goal" :INDUCT (PLUS I J) :IN-THEORY (ENABLE PROBLEM-66A PROBLEM-66B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PLUS I J). This suggestion was produced using the :induction rule PLUS. If we let (:P I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J)) (IMPLIES (AND (CONSP I) (:P (CDR I) J)) (:P I J))). This induction is justified by the same argument used to admit PLUS, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (PLUS I (FIX-NAT J)) (PLUS I J))). But simplification reduces this to T, using the :definition PLUS, primitive type reasoning and the :rewrite rules PROBLEM-66A and PROBLEM-66B. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (PLUS (CDR I) (FIX-NAT J)) (PLUS (CDR I) J))) (EQUAL (PLUS I (FIX-NAT J)) (PLUS I J))). But simplification reduces this to T, using the :definition PLUS and primitive type reasoning. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-66E ...) Rules: ((:DEFINITION PLUS) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PLUS) (:REWRITE PROBLEM-66A) (:REWRITE PROBLEM-66B)) Warnings: None Time: 0.06 seconds (prove: 0.01, print: 0.04, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-66E ACL2 >>(DEFUN TIMES (X Y) (IF (CONSP X) (PLUS Y (TIMES (CDR X) Y)) NIL)) The admission of TIMES is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of TIMES is described by the theorem (TRUE-LISTP (TIMES X Y)). We used the :type-prescription rule PLUS. Summary Form: ( DEFUN TIMES ...) Rules: ((:TYPE-PRESCRIPTION PLUS)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) TIMES ACL2 >>(THEOREM PROBLEM-67A (NAT (TIMES X Y)) :HINTS (("Goal" :INDUCT (TIMES X Y) :IN-THEORY (ENABLE PROBLEM-66C)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (TIMES X Y). This suggestion was produced using the :induction rule TIMES. If we let (:P X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X Y)) (IMPLIES (AND (CONSP X) (:P (CDR X) Y)) (:P X Y))). This induction is justified by the same argument used to admit TIMES, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (NAT (TIMES X Y))). But simplification reduces this to T, using the :definition TIMES and the :executable-counterpart of NAT. Subgoal *1/1 (IMPLIES (AND (CONSP X) (NAT (TIMES (CDR X) Y))) (NAT (TIMES X Y))). But simplification reduces this to T, using the :definition TIMES and the :rewrite rule PROBLEM-66C. That completes the proof of *1. Q.E.D. The storage of PROBLEM-67A depends upon the :type-prescription rule NAT. Summary Form: ( DEFTHM PROBLEM-67A ...) Rules: ((:DEFINITION TIMES) (:EXECUTABLE-COUNTERPART NAT) (:INDUCTION TIMES) (:REWRITE PROBLEM-66C) (:TYPE-PRESCRIPTION NAT)) Warnings: None Time: 0.07 seconds (prove: 0.03, print: 0.03, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-67A ACL2 >>(THEOREM PROBLEM-67B (EQUAL (TIMES (FIX-NAT I) J) (TIMES I J)) :HINTS (("Goal" :INDUCT (TIMES I J)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (TIMES I J). This suggestion was produced using the :induction rule TIMES. If we let (:P I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J)) (IMPLIES (AND (CONSP I) (:P (CDR I) J)) (:P I J))). This induction is justified by the same argument used to admit TIMES, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (TIMES (FIX-NAT I) J) (TIMES I J))). But simplification reduces this to T, using the :definitions FIX-NAT and TIMES and the :executable-counterparts of CONSP and EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (TIMES (FIX-NAT (CDR I)) J) (TIMES (CDR I) J))) (EQUAL (TIMES (FIX-NAT I) J) (TIMES I J))). But simplification reduces this to T, using the :definitions FIX-NAT and TIMES, primitive type reasoning, the :rewrite rule CDR-CONS and the :type-prescription rule FIX-NAT. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-67B ...) Rules: ((:DEFINITION FIX-NAT) (:DEFINITION TIMES) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION TIMES) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION FIX-NAT)) Warnings: None Time: 0.05 seconds (prove: 0.00, print: 0.04, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-67B ACL2 >>(THEOREM PROBLEM-67C (EQUAL (TIMES I (FIX-NAT J)) (TIMES I J)) :HINTS (("Goal" :INDUCT (TIMES I J) :IN-THEORY (ENABLE PROBLEM-66D)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (TIMES I J). This suggestion was produced using the :induction rule TIMES. If we let (:P I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J)) (IMPLIES (AND (CONSP I) (:P (CDR I) J)) (:P I J))). This induction is justified by the same argument used to admit TIMES, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (TIMES I (FIX-NAT J)) (TIMES I J))). But simplification reduces this to T, using the :definition TIMES and the :executable-counterpart of EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (TIMES (CDR I) (FIX-NAT J)) (TIMES (CDR I) J))) (EQUAL (TIMES I (FIX-NAT J)) (TIMES I J))). But simplification reduces this to T, using the :definition TIMES, primitive type reasoning and the :rewrite rule PROBLEM-66D. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-67C ...) Rules: ((:DEFINITION TIMES) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION TIMES) (:REWRITE PROBLEM-66D)) Warnings: None Time: 0.04 seconds (prove: 0.01, print: 0.03, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-67C ACL2 >>(DEFUN POWER (X Y) (IF (CONSP Y) (TIMES X (POWER X (CDR Y))) '(NIL))) The admission of POWER is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT Y). We observe that the type of POWER is described by the theorem (TRUE-LISTP (POWER X Y)). We used the :type-prescription rule TIMES. Summary Form: ( DEFUN POWER ...) Rules: ((:TYPE-PRESCRIPTION TIMES)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) POWER ACL2 >>(THEOREM PROBLEM-68A (NAT (POWER X Y)) :HINTS (("Goal" :INDUCT (POWER X Y) :IN-THEORY (ENABLE PROBLEM-67A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (POWER X Y). This suggestion was produced using the :induction rule POWER. If we let (:P X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP Y)) (:P X Y)) (IMPLIES (AND (CONSP Y) (:P X (CDR Y))) (:P X Y))). This induction is justified by the same argument used to admit POWER, namely, the measure (ACL2-COUNT Y) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP Y)) (NAT (POWER X Y))). But simplification reduces this to T, using the :definition POWER and the :executable-counterpart of NAT. Subgoal *1/1 (IMPLIES (AND (CONSP Y) (NAT (POWER X (CDR Y)))) (NAT (POWER X Y))). But simplification reduces this to T, using the :definition POWER and the :rewrite rule PROBLEM-67A. That completes the proof of *1. Q.E.D. The storage of PROBLEM-68A depends upon the :type-prescription rule NAT. Summary Form: ( DEFTHM PROBLEM-68A ...) Rules: ((:DEFINITION POWER) (:EXECUTABLE-COUNTERPART NAT) (:INDUCTION POWER) (:REWRITE PROBLEM-67A) (:TYPE-PRESCRIPTION NAT)) Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.02, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-68A ACL2 >>(THEOREM PROBLEM-68B (EQUAL (POWER (FIX-NAT I) J) (POWER I J)) :HINTS (("Goal" :INDUCT (POWER I J) :IN-THEORY (ENABLE PROBLEM-67B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (POWER I J). This suggestion was produced using the :induction rule POWER. If we let (:P I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP J)) (:P I J)) (IMPLIES (AND (CONSP J) (:P I (CDR J))) (:P I J))). This induction is justified by the same argument used to admit POWER, namely, the measure (ACL2-COUNT J) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP J)) (EQUAL (POWER (FIX-NAT I) J) (POWER I J))). But simplification reduces this to T, using the :definition POWER and the :executable-counterpart of EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP J) (EQUAL (POWER (FIX-NAT I) (CDR J)) (POWER I (CDR J)))) (EQUAL (POWER (FIX-NAT I) J) (POWER I J))). But simplification reduces this to T, using the :definition POWER, primitive type reasoning and the :rewrite rule PROBLEM-67B. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-68B ...) Rules: ((:DEFINITION POWER) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION POWER) (:REWRITE PROBLEM-67B)) Warnings: None Time: 0.06 seconds (prove: 0.03, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-68B ACL2 >>(THEOREM PROBLEM-68C (EQUAL (POWER I (FIX-NAT J)) (POWER I J)) :HINTS (("Goal" :INDUCT (POWER I J)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (POWER I J). This suggestion was produced using the :induction rule POWER. If we let (:P I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP J)) (:P I J)) (IMPLIES (AND (CONSP J) (:P I (CDR J))) (:P I J))). This induction is justified by the same argument used to admit POWER, namely, the measure (ACL2-COUNT J) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP J)) (EQUAL (POWER I (FIX-NAT J)) (POWER I J))). But simplification reduces this to T, using the :definitions FIX-NAT and POWER and the :executable-counterparts of CONSP and EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP J) (EQUAL (POWER I (FIX-NAT (CDR J))) (POWER I (CDR J)))) (EQUAL (POWER I (FIX-NAT J)) (POWER I J))). But simplification reduces this to T, using the :definitions FIX-NAT and POWER, primitive type reasoning, the :rewrite rule CDR-CONS and the :type-prescription rule FIX-NAT. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-68C ...) Rules: ((:DEFINITION FIX-NAT) (:DEFINITION POWER) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION POWER) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION FIX-NAT)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.03, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-68C ACL2 >>(DEFUN LESSEQP (X Y) (IF (CONSP X) (IF (CONSP Y) (LESSEQP (CDR X) (CDR Y)) NIL) T)) The admission of LESSEQP is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of LESSEQP is described by the theorem (OR (EQUAL (LESSEQP X Y) T) (EQUAL (LESSEQP X Y) NIL)). Summary Form: ( DEFUN LESSEQP ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) LESSEQP ACL2 >>(THEOREM PROBLEM-69A (EQUAL (LESSEQP (FIX-NAT I) J) (LESSEQP I J)) :HINTS (("Goal" :INDUCT (LIST (FIX-NAT I) (LESSEQP I J))))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. Two induction schemes are suggested by the induction hint. Subsumption reduces that number to one. We will induct according to a scheme suggested by (LESSEQP I J). This suggestion was produced using the :induction rules FIX-NAT and LESSEQP. If we let (:P I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J)) (IMPLIES (AND (CONSP I) (NOT (CONSP J))) (:P I J)) (IMPLIES (AND (CONSP I) (CONSP J) (:P (CDR I) (CDR J))) (:P I J))). This induction is justified by the same argument used to admit LESSEQP, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable J is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP I)) (EQUAL (LESSEQP (FIX-NAT I) J) (LESSEQP I J))). But simplification reduces this to T, using the :definitions FIX-NAT and LESSEQP and the :executable-counterparts of CONSP and EQUAL. Subgoal *1/2 (IMPLIES (AND (CONSP I) (NOT (CONSP J))) (EQUAL (LESSEQP (FIX-NAT I) J) (LESSEQP I J))). But simplification reduces this to T, using the :definitions FIX-NAT and LESSEQP, the :executable-counterpart of EQUAL, primitive type reasoning and the :type-prescription rule FIX-NAT. Subgoal *1/1 (IMPLIES (AND (CONSP I) (CONSP J) (EQUAL (LESSEQP (FIX-NAT (CDR I)) (CDR J)) (LESSEQP (CDR I) (CDR J)))) (EQUAL (LESSEQP (FIX-NAT I) J) (LESSEQP I J))). But simplification reduces this to T, using the :definitions FIX-NAT and LESSEQP, primitive type reasoning, the :rewrite rule CDR-CONS and the :type-prescription rule FIX-NAT. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-69A ...) Rules: ((:DEFINITION FIX-NAT) (:DEFINITION LESSEQP) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION FIX-NAT) (:INDUCTION LESSEQP) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION FIX-NAT)) Warnings: None Time: 0.09 seconds (prove: 0.00, print: 0.09, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-69A ACL2 >>(THEOREM PROBLEM-69B (EQUAL (LESSEQP I (FIX-NAT J)) (LESSEQP I J)) :HINTS (("Goal" :INDUCT (LESSEQP I J)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (LESSEQP I J). This suggestion was produced using the :induction rule LESSEQP. If we let (:P I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J)) (IMPLIES (AND (CONSP I) (NOT (CONSP J))) (:P I J)) (IMPLIES (AND (CONSP I) (CONSP J) (:P (CDR I) (CDR J))) (:P I J))). This induction is justified by the same argument used to admit LESSEQP, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable J is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP I)) (EQUAL (LESSEQP I (FIX-NAT J)) (LESSEQP I J))). But simplification reduces this to T, using the :definition LESSEQP and the :executable-counterpart of EQUAL. Subgoal *1/2 (IMPLIES (AND (CONSP I) (NOT (CONSP J))) (EQUAL (LESSEQP I (FIX-NAT J)) (LESSEQP I J))). But simplification reduces this to T, using the :definitions FIX-NAT and LESSEQP and the :executable-counterparts of CONSP and EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP I) (CONSP J) (EQUAL (LESSEQP (CDR I) (FIX-NAT (CDR J))) (LESSEQP (CDR I) (CDR J)))) (EQUAL (LESSEQP I (FIX-NAT J)) (LESSEQP I J))). But simplification reduces this to T, using the :definitions FIX-NAT and LESSEQP, primitive type reasoning, the :rewrite rule CDR-CONS and the :type-prescription rule FIX-NAT. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-69B ...) Rules: ((:DEFINITION FIX-NAT) (:DEFINITION LESSEQP) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION LESSEQP) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION FIX-NAT)) Warnings: None Time: 0.04 seconds (prove: 0.01, print: 0.03, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-69B ACL2 >>(DEFUN EVENNAT (X) (IF (CONSP X) (IF (CONSP (CDR X)) (EVENNAT (CDR (CDR X))) NIL) T)) For the admission of EVENNAT we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). The non-trivial part of the measure conjecture is Goal (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (O< (ACL2-COUNT (CDDR X)) (ACL2-COUNT X))). This simplifies, using the :definitions O-FINP and O< and the :type- prescription rule ACL2-COUNT, to Goal' (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (< (ACL2-COUNT (CDDR X)) (ACL2-COUNT X))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of two rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. These steps produce the following goal. Goal'' (IMPLIES (AND (CONSP (CONS X3 X4)) (CONSP (LIST* X1 X3 X4))) (< (ACL2-COUNT X4) (ACL2-COUNT (LIST* X1 X3 X4)))). This simplifies, using the :definition ACL2-COUNT, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Goal''' (< (ACL2-COUNT X4) (+ 1 (ACL2-COUNT X1) 1 (ACL2-COUNT X3) (ACL2-COUNT X4))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule ACL2-COUNT. Q.E.D. That completes the proof of the measure theorem for EVENNAT. Thus, we admit this function under the principle of definition. We observe that the type of EVENNAT is described by the theorem (OR (EQUAL (EVENNAT X) T) (EQUAL (EVENNAT X) NIL)). Summary Form: ( DEFUN EVENNAT ...) Rules: ((:DEFINITION ACL2-COUNT) (:DEFINITION NOT) (:DEFINITION O-FINP) (:DEFINITION O<) (:ELIM CAR-CDR-ELIM) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION ACL2-COUNT)) Warnings: None Time: 0.03 seconds (prove: 0.02, print: 0.00, other: 0.01) EVENNAT ACL2 >>(THEOREM PROBLEM-70A (EQUAL (EVENNAT (FIX-NAT I)) (EVENNAT I)) :HINTS (("Goal" :INDUCT (EVENNAT I)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (EVENNAT I). This suggestion was produced using the :induction rule EVENNAT. If we let (:P I) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I)) (IMPLIES (AND (CONSP I) (NOT (CONSP (CDR I)))) (:P I)) (IMPLIES (AND (CONSP I) (CONSP (CDR I)) (:P (CDDR I))) (:P I))). This induction is justified by the same argument used to admit EVENNAT, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP I)) (EQUAL (EVENNAT (FIX-NAT I)) (EVENNAT I))). But simplification reduces this to T, using the :definitions EVENNAT and FIX-NAT and the :executable-counterparts of EQUAL and EVENNAT. Subgoal *1/2 (IMPLIES (AND (CONSP I) (NOT (CONSP (CDR I)))) (EQUAL (EVENNAT (FIX-NAT I)) (EVENNAT I))). But simplification reduces this to T, using the :definitions EVENNAT and FIX-NAT and the :executable-counterparts of CONS, EQUAL and EVENNAT. Subgoal *1/1 (IMPLIES (AND (CONSP I) (CONSP (CDR I)) (EQUAL (EVENNAT (FIX-NAT (CDDR I))) (EVENNAT (CDDR I)))) (EQUAL (EVENNAT (FIX-NAT I)) (EVENNAT I))). But simplification reduces this to T, using the :definitions EVENNAT and FIX-NAT, primitive type reasoning, the :rewrite rule CDR-CONS and the :type-prescription rule FIX-NAT. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-70A ...) Rules: ((:DEFINITION EVENNAT) (:DEFINITION FIX-NAT) (:EXECUTABLE-COUNTERPART CONS) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART EVENNAT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION EVENNAT) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION FIX-NAT)) Warnings: None Time: 0.05 seconds (prove: 0.00, print: 0.05, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.05 seconds (prove: 0.00, print: 0.00, other: 0.05) PROBLEM-70A ACL2 >>(THEOREM PROBLEM-71A (IMPLIES (NOT (CONSP Z)) (EQUAL (PLUS I Z) (FIX-NAT I))) :HINTS (("Goal" :INDUCT (PLUS I Z)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PLUS I Z). This suggestion was produced using the :induction rule PLUS. If we let (:P I Z) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I Z)) (IMPLIES (AND (CONSP I) (:P (CDR I) Z)) (:P I Z))). This induction is justified by the same argument used to admit PLUS, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (IMPLIES (NOT (CONSP Z)) (EQUAL (PLUS I Z) (FIX-NAT I)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (CONSP I)) (NOT (CONSP Z))) (EQUAL (PLUS I Z) (FIX-NAT I))). But simplification reduces this to T, using the :definitions FIX-NAT and PLUS and the :executable-counterpart of EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP I) (IMPLIES (NOT (CONSP Z)) (EQUAL (PLUS (CDR I) Z) (FIX-NAT (CDR I))))) (IMPLIES (NOT (CONSP Z)) (EQUAL (PLUS I Z) (FIX-NAT I)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP I) (IMPLIES (NOT (CONSP Z)) (EQUAL (PLUS (CDR I) Z) (FIX-NAT (CDR I)))) (NOT (CONSP Z))) (EQUAL (PLUS I Z) (FIX-NAT I))). But simplification reduces this to T, using the :definitions FIX-NAT and PLUS, the :executable-counterpart of NOT and primitive type reasoning. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-71A ...) Rules: ((:DEFINITION FIX-NAT) (:DEFINITION NOT) (:DEFINITION PLUS) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PLUS)) Warnings: None Time: 0.04 seconds (prove: 0.01, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-71A ACL2 >>(THEOREM PROBLEM-71 (IMPLIES (NAT I) (EQUAL (PLUS I NIL) I)) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-66B PROBLEM-71A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] But simplification reduces this to T, using primitive type reasoning, the :rewrite rules PROBLEM-66B and PROBLEM-71A and the :type-prescription rule NAT. Q.E.D. Summary Form: ( DEFTHM PROBLEM-71 ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE PROBLEM-66B) (:REWRITE PROBLEM-71A) (:TYPE-PRESCRIPTION NAT)) Warnings: None Time: 0.03 seconds (prove: 0.02, print: 0.00, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-71 ACL2 >>(THEOREM PROBLEM-72 (EQUAL (PLUS (PLUS I J) K) (PLUS I (PLUS J K))) :HINTS (("Goal" :INDUCT (PLUS I J) :IN-THEORY (ENABLE PROBLEM-66B PROBLEM-66C PROBLEM-66D)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PLUS I J). This suggestion was produced using the :induction rule PLUS. If we let (:P I J K) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J K)) (IMPLIES (AND (CONSP I) (:P (CDR I) J K)) (:P I J K))). This induction is justified by the same argument used to admit PLUS, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (PLUS (PLUS I J) K) (PLUS I (PLUS J K)))). But simplification reduces this to T, using the :definition PLUS, primitive type reasoning and the :rewrite rules PROBLEM-66B, PROBLEM-66C and PROBLEM-66D. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (PLUS (PLUS (CDR I) J) K) (PLUS (CDR I) (PLUS J K)))) (EQUAL (PLUS (PLUS I J) K) (PLUS I (PLUS J K)))). But simplification reduces this to T, using the :definition PLUS, primitive type reasoning, the :rewrite rule CDR-CONS and the :type-prescription rule PLUS. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-72 ...) Rules: ((:DEFINITION PLUS) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PLUS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-66B) (:REWRITE PROBLEM-66C) (:REWRITE PROBLEM-66D) (:TYPE-PRESCRIPTION PLUS)) Warnings: None Time: 0.06 seconds (prove: 0.03, print: 0.03, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-72 ACL2 >>(THEOREM PROBLEM-73A (EQUAL (PLUS I (CONS X J)) (CONS NIL (PLUS I J))) :HINTS (("Goal" :INDUCT (PLUS I J)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PLUS I J). This suggestion was produced using the :induction rule PLUS. If we let (:P I J X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J X)) (IMPLIES (AND (CONSP I) (:P (CDR I) J X)) (:P I J X))). This induction is justified by the same argument used to admit PLUS, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (PLUS I (CONS X J)) (CONS NIL (PLUS I J)))). But simplification reduces this to T, using the :definitions FIX-NAT and PLUS, primitive type reasoning and the :rewrite rule CDR-CONS. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (PLUS (CDR I) (CONS X J)) (CONS NIL (PLUS (CDR I) J)))) (EQUAL (PLUS I (CONS X J)) (CONS NIL (PLUS I J)))). But simplification reduces this to T, using the :definition PLUS and primitive type reasoning. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-73A ...) Rules: ((:DEFINITION FIX-NAT) (:DEFINITION PLUS) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PLUS) (:REWRITE CDR-CONS)) Warnings: None Time: 0.03 seconds (prove: 0.01, print: 0.02, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-73A ACL2 >>(THEOREM PROBLEM-73 (EQUAL (PLUS I J) (PLUS J I)) :HINTS (("Goal" :INDUCT (PLUS I J) :IN-THEORY (ENABLE PROBLEM-71A PROBLEM-73A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PLUS I J). This suggestion was produced using the :induction rule PLUS. If we let (:P I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J)) (IMPLIES (AND (CONSP I) (:P (CDR I) J)) (:P I J))). This induction is justified by the same argument used to admit PLUS, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (PLUS I J) (PLUS J I))). But simplification reduces this to T, using the :definition PLUS, primitive type reasoning and the :rewrite rule PROBLEM-71A. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (PLUS (CDR I) J) (PLUS J (CDR I)))) (EQUAL (PLUS I J) (PLUS J I))). This simplifies, using the :definition PLUS, to Subgoal *1/1' (IMPLIES (AND (CONSP I) (EQUAL (PLUS (CDR I) J) (PLUS J (CDR I)))) (EQUAL (CONS NIL (PLUS J (CDR I))) (PLUS J I))). The destructor terms (CAR I) and (CDR I) can be eliminated by using CAR-CDR-ELIM to replace I by (CONS I1 I2), (CAR I) by I1 and (CDR I) by I2. This produces the following goal. Subgoal *1/1'' (IMPLIES (AND (CONSP (CONS I1 I2)) (EQUAL (PLUS I2 J) (PLUS J I2))) (EQUAL (CONS NIL (PLUS J I2)) (PLUS J (CONS I1 I2)))). But we reduce the conjecture to T, by the simple :rewrite rule PROBLEM- 73A. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-73 ...) Rules: ((:DEFINITION PLUS) (:ELIM CAR-CDR-ELIM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PLUS) (:REWRITE PROBLEM-71A) (:REWRITE PROBLEM-73A)) Warnings: None Time: 0.04 seconds (prove: 0.02, print: 0.02, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-73 ACL2 >>(THEOREM PROBLEM-74A (EQUAL (PLUS I (PLUS J K)) (PLUS J (PLUS I K))) :HINTS (("Goal" :INDUCT (PLUS J K) :IN-THEORY (ENABLE PROBLEM-66B PROBLEM-66C PROBLEM-66E PROBLEM-73A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PLUS J K). This suggestion was produced using the :induction rule PLUS. If we let (:P I J K) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP J)) (:P I J K)) (IMPLIES (AND (CONSP J) (:P I (CDR J) K)) (:P I J K))). This induction is justified by the same argument used to admit PLUS, namely, the measure (ACL2-COUNT J) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP J)) (EQUAL (PLUS I (PLUS J K)) (PLUS J (PLUS I K)))). But simplification reduces this to T, using the :definition PLUS, primitive type reasoning and the :rewrite rules PROBLEM-66B, PROBLEM-66C and PROBLEM-66E. Subgoal *1/1 (IMPLIES (AND (CONSP J) (EQUAL (PLUS I (PLUS (CDR J) K)) (PLUS (CDR J) (PLUS I K)))) (EQUAL (PLUS I (PLUS J K)) (PLUS J (PLUS I K)))). But simplification reduces this to T, using the :definition PLUS, primitive type reasoning and the :rewrite rule PROBLEM-73A. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-74A ...) Rules: ((:DEFINITION PLUS) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PLUS) (:REWRITE PROBLEM-66B) (:REWRITE PROBLEM-66C) (:REWRITE PROBLEM-66E) (:REWRITE PROBLEM-73A)) Warnings: None Time: 0.04 seconds (prove: 0.03, print: 0.00, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-74A ACL2 >>(THEOREM PROBLEM-74B (EQUAL (TIMES (PLUS I J) K) (PLUS (TIMES I K) (TIMES J K))) :HINTS (("Goal" :INDUCT (TIMES I K) :IN-THEORY (ENABLE PROBLEM-66B PROBLEM-67A PROBLEM-67B PROBLEM-73 PROBLEM-74A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (TIMES I K). This suggestion was produced using the :induction rule TIMES. If we let (:P I J K) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J K)) (IMPLIES (AND (CONSP I) (:P (CDR I) J K)) (:P I J K))). This induction is justified by the same argument used to admit TIMES, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (TIMES (PLUS I J) K) (PLUS (TIMES I K) (TIMES J K)))). But simplification reduces this to T, using the :definitions PLUS and TIMES, the :executable-counterpart of CONSP, primitive type reasoning and the :rewrite rules PROBLEM-66B, PROBLEM-67A and PROBLEM-67B. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (TIMES (PLUS (CDR I) J) K) (PLUS (TIMES (CDR I) K) (TIMES J K)))) (EQUAL (TIMES (PLUS I J) K) (PLUS (TIMES I K) (TIMES J K)))). But simplification reduces this to T, using the :definitions PLUS and TIMES, primitive type reasoning, the :rewrite rules CDR-CONS, PROBLEM- 73 and PROBLEM-74A and the :type-prescription rule PLUS. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-74B ...) Rules: ((:DEFINITION PLUS) (:DEFINITION TIMES) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION TIMES) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-66B) (:REWRITE PROBLEM-67A) (:REWRITE PROBLEM-67B) (:REWRITE PROBLEM-73) (:REWRITE PROBLEM-74A) (:TYPE-PRESCRIPTION PLUS)) Warnings: None Time: 0.05 seconds (prove: 0.01, print: 0.03, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-74B ACL2 >>(THEOREM PROBLEM-74 (EQUAL (TIMES (TIMES I J) K) (TIMES I (TIMES J K))) :HINTS (("Goal" :INDUCT (TIMES I J) :IN-THEORY (ENABLE PROBLEM-74B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (TIMES I J). This suggestion was produced using the :induction rule TIMES. If we let (:P I J K) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J K)) (IMPLIES (AND (CONSP I) (:P (CDR I) J K)) (:P I J K))). This induction is justified by the same argument used to admit TIMES, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (TIMES (TIMES I J) K) (TIMES I (TIMES J K)))). But simplification reduces this to T, using the :definition TIMES and the :executable-counterparts of CONSP and EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (TIMES (TIMES (CDR I) J) K) (TIMES (CDR I) (TIMES J K)))) (EQUAL (TIMES (TIMES I J) K) (TIMES I (TIMES J K)))). But simplification reduces this to T, using the :definition TIMES, primitive type reasoning and the :rewrite rule PROBLEM-74B. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-74 ...) Rules: ((:DEFINITION TIMES) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION TIMES) (:REWRITE PROBLEM-74B)) Warnings: None Time: 0.06 seconds (prove: 0.02, print: 0.02, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-74 ACL2 >>(THEOREM PROBLEM-75A (IMPLIES (NOT (CONSP Z)) (EQUAL (TIMES I Z) NIL)) :HINTS (("Goal" :INDUCT (TIMES I Z) :IN-THEORY (ENABLE PROBLEM-71A PROBLEM-73)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (TIMES I Z). This suggestion was produced using the :induction rule TIMES. If we let (:P I Z) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I Z)) (IMPLIES (AND (CONSP I) (:P (CDR I) Z)) (:P I Z))). This induction is justified by the same argument used to admit TIMES, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (IMPLIES (NOT (CONSP Z)) (EQUAL (TIMES I Z) NIL))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (CONSP I)) (NOT (CONSP Z))) (EQUAL (TIMES I Z) NIL)). But simplification reduces this to T, using the :definition TIMES and the :executable-counterpart of EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP I) (IMPLIES (NOT (CONSP Z)) (EQUAL (TIMES (CDR I) Z) NIL))) (IMPLIES (NOT (CONSP Z)) (EQUAL (TIMES I Z) NIL))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP I) (IMPLIES (NOT (CONSP Z)) (EQUAL (TIMES (CDR I) Z) NIL)) (NOT (CONSP Z))) (EQUAL (TIMES I Z) NIL)). But simplification reduces this to T, using the :definition TIMES, the :executable-counterparts of EQUAL, FIX-NAT and NOT, primitive type reasoning and the :rewrite rules PROBLEM-71A and PROBLEM-73. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-75A ...) Rules: ((:DEFINITION NOT) (:DEFINITION TIMES) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART FIX-NAT) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION TIMES) (:REWRITE PROBLEM-71A) (:REWRITE PROBLEM-73)) Warnings: None Time: 0.07 seconds (prove: 0.01, print: 0.06, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-75A ACL2 >>(THEOREM PROBLEM-75B (EQUAL (TIMES I (CONS X J)) (PLUS I (TIMES I J))) :HINTS (("Goal" :INDUCT (TIMES I J) :IN-THEORY (ENABLE PROBLEM-71A PROBLEM-73 PROBLEM-74A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (TIMES I J). This suggestion was produced using the :induction rule TIMES. If we let (:P I J X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J X)) (IMPLIES (AND (CONSP I) (:P (CDR I) J X)) (:P I J X))). This induction is justified by the same argument used to admit TIMES, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (TIMES I (CONS X J)) (PLUS I (TIMES I J)))). But simplification reduces this to T, using the :definition TIMES, the :executable-counterparts of EQUAL and FIX-NAT and the :rewrite rules PROBLEM-71A and PROBLEM-73. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (TIMES (CDR I) (CONS X J)) (PLUS (CDR I) (TIMES (CDR I) J)))) (EQUAL (TIMES I (CONS X J)) (PLUS I (TIMES I J)))). This simplifies, using the :definitions PLUS and TIMES, primitive type reasoning and the :rewrite rule CDR-CONS, to Subgoal *1/1' (IMPLIES (AND (CONSP I) (EQUAL (TIMES (CDR I) (CONS X J)) (PLUS (CDR I) (TIMES (CDR I) J)))) (EQUAL (CONS NIL (PLUS J (TIMES (CDR I) (CONS X J)))) (PLUS I (PLUS J (TIMES (CDR I) J))))). But simplification reduces this to T, using the :definition PLUS, primitive type reasoning and the :rewrite rule PROBLEM-74A. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-75B ...) Rules: ((:DEFINITION PLUS) (:DEFINITION TIMES) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART FIX-NAT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION TIMES) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-71A) (:REWRITE PROBLEM-73) (:REWRITE PROBLEM-74A)) Warnings: None Time: 0.15 seconds (prove: 0.01, print: 0.13, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-75B ACL2 >>(THEOREM PROBLEM-75 (EQUAL (TIMES I J) (TIMES J I)) :HINTS (("Goal" :INDUCT (TIMES I J) :IN-THEORY (ENABLE PROBLEM-75A PROBLEM-75B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (TIMES I J). This suggestion was produced using the :induction rule TIMES. If we let (:P I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J)) (IMPLIES (AND (CONSP I) (:P (CDR I) J)) (:P I J))). This induction is justified by the same argument used to admit TIMES, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (TIMES I J) (TIMES J I))). But simplification reduces this to T, using the :definition TIMES, the :executable-counterpart of EQUAL and the :rewrite rule PROBLEM- 75A. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (TIMES (CDR I) J) (TIMES J (CDR I)))) (EQUAL (TIMES I J) (TIMES J I))). This simplifies, using the :definition TIMES, to Subgoal *1/1' (IMPLIES (AND (CONSP I) (EQUAL (TIMES (CDR I) J) (TIMES J (CDR I)))) (EQUAL (PLUS J (TIMES J (CDR I))) (TIMES J I))). The destructor terms (CAR I) and (CDR I) can be eliminated by using CAR-CDR-ELIM to replace I by (CONS I1 I2), (CAR I) by I1 and (CDR I) by I2. This produces the following goal. Subgoal *1/1'' (IMPLIES (AND (CONSP (CONS I1 I2)) (EQUAL (TIMES I2 J) (TIMES J I2))) (EQUAL (PLUS J (TIMES J I2)) (TIMES J (CONS I1 I2)))). But we reduce the conjecture to T, by the simple :rewrite rule PROBLEM- 75B. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-75 ...) Rules: ((:DEFINITION TIMES) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART EQUAL) (:INDUCTION TIMES) (:REWRITE PROBLEM-75A) (:REWRITE PROBLEM-75B)) Warnings: None Time: 0.08 seconds (prove: 0.03, print: 0.04, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-75 ACL2 >>(THEOREM PROBLEM-76A (EQUAL (TIMES I (PLUS J K)) (PLUS (TIMES I J) (TIMES I K))) :HINTS (("Goal" :INDUCT (TIMES I K) :IN-THEORY (ENABLE PROBLEM-72 PROBLEM-73 PROBLEM-74A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (TIMES I K). This suggestion was produced using the :induction rule TIMES. If we let (:P I J K) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J K)) (IMPLIES (AND (CONSP I) (:P (CDR I) J K)) (:P I J K))). This induction is justified by the same argument used to admit TIMES, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (TIMES I (PLUS J K)) (PLUS (TIMES I J) (TIMES I K)))). But simplification reduces this to T, using the :definition TIMES and the :executable-counterparts of EQUAL and PLUS. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (TIMES (CDR I) (PLUS J K)) (PLUS (TIMES (CDR I) J) (TIMES (CDR I) K)))) (EQUAL (TIMES I (PLUS J K)) (PLUS (TIMES I J) (TIMES I K)))). But simplification reduces this to T, using the :definition TIMES, primitive type reasoning and the :rewrite rules PROBLEM-72, PROBLEM- 73 and PROBLEM-74A. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-76A ...) Rules: ((:DEFINITION TIMES) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART PLUS) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION TIMES) (:REWRITE PROBLEM-72) (:REWRITE PROBLEM-73) (:REWRITE PROBLEM-74A)) Warnings: None Time: 0.07 seconds (prove: 0.00, print: 0.06, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-76A ACL2 >>(THEOREM PROBLEM-76B (EQUAL (TIMES I (TIMES J K)) (TIMES J (TIMES I K))) :HINTS (("Goal" :INDUCT (TIMES J K) :IN-THEORY (ENABLE PROBLEM-75 PROBLEM-76A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (TIMES J K). This suggestion was produced using the :induction rule TIMES. If we let (:P I J K) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP J)) (:P I J K)) (IMPLIES (AND (CONSP J) (:P I (CDR J) K)) (:P I J K))). This induction is justified by the same argument used to admit TIMES, namely, the measure (ACL2-COUNT J) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP J)) (EQUAL (TIMES I (TIMES J K)) (TIMES J (TIMES I K)))). But simplification reduces this to T, using the :definition TIMES, the :executable-counterparts of CONSP and EQUAL and the :rewrite rule PROBLEM-75. Subgoal *1/1 (IMPLIES (AND (CONSP J) (EQUAL (TIMES I (TIMES (CDR J) K)) (TIMES (CDR J) (TIMES I K)))) (EQUAL (TIMES I (TIMES J K)) (TIMES J (TIMES I K)))). But simplification reduces this to T, using the :definition TIMES, primitive type reasoning and the :rewrite rule PROBLEM-76A. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-76B ...) Rules: ((:DEFINITION TIMES) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION TIMES) (:REWRITE PROBLEM-75) (:REWRITE PROBLEM-76A)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.01, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-76B ACL2 >>(THEOREM PROBLEM-76 (EQUAL (POWER B (PLUS I J)) (TIMES (POWER B I) (POWER B J))) :HINTS (("Goal" :INDUCT (POWER B I) :IN-THEORY (ENABLE PROBLEM-66B PROBLEM-68A PROBLEM-68C PROBLEM-73 PROBLEM-75 PROBLEM-76B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (POWER B I). This suggestion was produced using the :induction rule POWER. If we let (:P B I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P B I J)) (IMPLIES (AND (CONSP I) (:P B (CDR I) J)) (:P B I J))). This induction is justified by the same argument used to admit POWER, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (POWER B (PLUS I J)) (TIMES (POWER B I) (POWER B J)))). But simplification reduces this to T, using the :definitions PLUS, POWER and TIMES, the :executable-counterparts of CDR and CONSP, primitive type reasoning and the :rewrite rules PROBLEM-66B, PROBLEM-68A, PROBLEM- 68C and PROBLEM-73. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (POWER B (PLUS (CDR I) J)) (TIMES (POWER B (CDR I)) (POWER B J)))) (EQUAL (POWER B (PLUS I J)) (TIMES (POWER B I) (POWER B J)))). But simplification reduces this to T, using the :definitions PLUS and POWER, primitive type reasoning, the :rewrite rules CDR-CONS, PROBLEM- 73, PROBLEM-75 and PROBLEM-76B and the :type-prescription rule PLUS. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-76 ...) Rules: ((:DEFINITION PLUS) (:DEFINITION POWER) (:DEFINITION TIMES) (:EXECUTABLE-COUNTERPART CDR) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION POWER) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-66B) (:REWRITE PROBLEM-68A) (:REWRITE PROBLEM-68C) (:REWRITE PROBLEM-73) (:REWRITE PROBLEM-75) (:REWRITE PROBLEM-76B) (:TYPE-PRESCRIPTION PLUS)) Warnings: None Time: 0.07 seconds (prove: 0.01, print: 0.06, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-76 ACL2 >>(THEOREM PROBLEM-77A (EQUAL (POWER (TIMES A B) I) (TIMES (POWER A I) (POWER B I))) :HINTS (("Goal" :INDUCT (POWER B I) :IN-THEORY (ENABLE PROBLEM-74 PROBLEM-75 PROBLEM-76B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (POWER B I). This suggestion was produced using the :induction rule POWER. If we let (:P A B I) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P A B I)) (IMPLIES (AND (CONSP I) (:P A B (CDR I))) (:P A B I))). This induction is justified by the same argument used to admit POWER, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (POWER (TIMES A B) I) (TIMES (POWER A I) (POWER B I)))). But simplification reduces this to T, using the :definition POWER and the :executable-counterparts of EQUAL and TIMES. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (POWER (TIMES A B) (CDR I)) (TIMES (POWER A (CDR I)) (POWER B (CDR I))))) (EQUAL (POWER (TIMES A B) I) (TIMES (POWER A I) (POWER B I)))). But simplification reduces this to T, using the :definition POWER, primitive type reasoning and the :rewrite rules PROBLEM-74, PROBLEM- 75 and PROBLEM-76B. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-77A ...) Rules: ((:DEFINITION POWER) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART TIMES) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION POWER) (:REWRITE PROBLEM-74) (:REWRITE PROBLEM-75) (:REWRITE PROBLEM-76B)) Warnings: None Time: 0.04 seconds (prove: 0.01, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-77A ACL2 >>(THEOREM PROBLEM-77B (EQUAL (POWER '(NIL) I) '(NIL)) :HINTS (("Goal" :INDUCT (POWER '(NIL) I)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (POWER '(NIL) I). This suggestion was produced using the :induction rule POWER. If we let (:P I) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I)) (IMPLIES (AND (CONSP I) (:P (CDR I))) (:P I))). This induction is justified by the same argument used to admit POWER, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (POWER '(NIL) I) '(NIL))). But simplification reduces this to T, using the :definition POWER and the :executable-counterpart of EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (POWER '(NIL) (CDR I)) '(NIL))) (EQUAL (POWER '(NIL) I) '(NIL))). But simplification reduces this to T, using the :definition POWER and the :executable-counterparts of EQUAL and TIMES. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-77B ...) Rules: ((:DEFINITION POWER) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART TIMES) (:INDUCTION POWER)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.02, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-77B ACL2 >>(THEOREM PROBLEM-77 (EQUAL (POWER (POWER B I) J) (POWER B (TIMES I J))) :HINTS (("Goal" :INDUCT (TIMES I J) :IN-THEORY (ENABLE PROBLEM-76 PROBLEM-77A PROBLEM-77B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (TIMES I J). This suggestion was produced using the :induction rule TIMES. If we let (:P B I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P B I J)) (IMPLIES (AND (CONSP I) (:P B (CDR I) J)) (:P B I J))). This induction is justified by the same argument used to admit TIMES, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (POWER (POWER B I) J) (POWER B (TIMES I J)))). But simplification reduces this to T, using the :definitions POWER and TIMES, the :executable-counterparts of CONSP and EQUAL and the :rewrite rule PROBLEM-77B. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (POWER (POWER B (CDR I)) J) (POWER B (TIMES (CDR I) J)))) (EQUAL (POWER (POWER B I) J) (POWER B (TIMES I J)))). But simplification reduces this to T, using the :definitions POWER and TIMES, primitive type reasoning and the :rewrite rules PROBLEM- 76 and PROBLEM-77A. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-77 ...) Rules: ((:DEFINITION POWER) (:DEFINITION TIMES) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION TIMES) (:REWRITE PROBLEM-76) (:REWRITE PROBLEM-77A) (:REWRITE PROBLEM-77B)) Warnings: None Time: 0.06 seconds (prove: 0.03, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-77 ACL2 >>(THEOREM PROBLEM-78 (LESSEQP I I) :HINTS (("Goal" :INDUCT (LESSEQP I I)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (LESSEQP I I). This suggestion was produced using the :induction rule LESSEQP. If we let (:P I) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I)) (IMPLIES (AND (CONSP I) (CONSP I) (:P (CDR I))) (:P I))). This induction is justified by the same argument used to admit LESSEQP, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (LESSEQP I I)). But simplification reduces this to T, using the :definition LESSEQP. Subgoal *1/1 (IMPLIES (AND (CONSP I) (CONSP I) (LESSEQP (CDR I) (CDR I))) (LESSEQP I I)). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP I) (LESSEQP (CDR I) (CDR I))) (LESSEQP I I)). But simplification reduces this to T, using the :definition LESSEQP and the :type-prescription rule LESSEQP. That completes the proof of *1. Q.E.D. The storage of PROBLEM-78 depends upon the :type-prescription rule LESSEQP. Summary Form: ( DEFTHM PROBLEM-78 ...) Rules: ((:DEFINITION LESSEQP) (:DEFINITION NOT) (:INDUCTION LESSEQP) (:TYPE-PRESCRIPTION LESSEQP)) Warnings: None Time: 0.03 seconds (prove: 0.01, print: 0.02, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-78 ACL2 >>(THEOREM PROBLEM-79 (IMPLIES (AND (LESSEQP I J) (LESSEQP J K)) (LESSEQP I K)) :HINTS (("Goal" :INDUCT (LIST (LESSEQP I J) (LESSEQP I K))))) ACL2 Warning [Free] in ( DEFTHM PROBLEM-79 ...): The :REWRITE rule generated from PROBLEM-79 contains the free variable J. This variable will be chosen by searching for an instance of (LESSEQP I J) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :REWRITE rule. See :DOC free-variables. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. Two induction schemes are suggested by the induction hint. These merge into one derived induction scheme. We will induct according to a scheme suggested by (LESSEQP I K), but modified to accommodate (LESSEQP I J). These suggestions were produced using the :induction rule LESSEQP. If we let (:P I J K) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J K)) (IMPLIES (AND (CONSP I) (NOT (CONSP K))) (:P I J K)) (IMPLIES (AND (CONSP I) (CONSP K) (:P (CDR I) (CDR J) (CDR K))) (:P I J K))). This induction is justified by the same argument used to admit LESSEQP, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variables J and K are being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP I)) (IMPLIES (AND (LESSEQP I J) (LESSEQP J K)) (LESSEQP I K))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP I)) (LESSEQP I J) (LESSEQP J K)) (LESSEQP I K)). But simplification reduces this to T, using the :definition LESSEQP. Subgoal *1/2 (IMPLIES (AND (CONSP I) (NOT (CONSP K))) (IMPLIES (AND (LESSEQP I J) (LESSEQP J K)) (LESSEQP I K))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP I) (NOT (CONSP K)) (LESSEQP I J) (LESSEQP J K)) (LESSEQP I K)). But simplification reduces this to T, using the :definition LESSEQP. Subgoal *1/1 (IMPLIES (AND (CONSP I) (CONSP K) (IMPLIES (AND (LESSEQP (CDR I) (CDR J)) (LESSEQP (CDR J) (CDR K))) (LESSEQP (CDR I) (CDR K)))) (IMPLIES (AND (LESSEQP I J) (LESSEQP J K)) (LESSEQP I K))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP I) (CONSP K) (IMPLIES (AND (LESSEQP (CDR I) (CDR J)) (LESSEQP (CDR J) (CDR K))) (LESSEQP (CDR I) (CDR K))) (LESSEQP I J) (LESSEQP J K)) (LESSEQP I K)). But simplification reduces this to T, using the :definition LESSEQP and the :type-prescription rule LESSEQP. That completes the proof of *1. Q.E.D. The storage of PROBLEM-79 depends upon the :type-prescription rule LESSEQP. Summary Form: ( DEFTHM PROBLEM-79 ...) Rules: ((:DEFINITION LESSEQP) (:DEFINITION NOT) (:INDUCTION LESSEQP) (:TYPE-PRESCRIPTION LESSEQP)) Warnings: Free Time: 0.11 seconds (prove: 0.04, print: 0.04, other: 0.03) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-79 ACL2 >>(THEOREM PROBLEM-80 (EQUAL (LESSEQP (PLUS I J) (PLUS I K)) (LESSEQP J K)) :HINTS (("Goal" :INDUCT (PLUS I K) :IN-THEORY (ENABLE PROBLEM-69A PROBLEM-69B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PLUS I K). This suggestion was produced using the :induction rule PLUS. If we let (:P I J K) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J K)) (IMPLIES (AND (CONSP I) (:P (CDR I) J K)) (:P I J K))). This induction is justified by the same argument used to admit PLUS, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP I)) (EQUAL (LESSEQP (PLUS I J) (PLUS I K)) (LESSEQP J K))). But simplification reduces this to T, using the :definition PLUS, primitive type reasoning and the :rewrite rules PROBLEM-69A and PROBLEM-69B. Subgoal *1/1 (IMPLIES (AND (CONSP I) (EQUAL (LESSEQP (PLUS (CDR I) J) (PLUS (CDR I) K)) (LESSEQP J K))) (EQUAL (LESSEQP (PLUS I J) (PLUS I K)) (LESSEQP J K))). But simplification reduces this to T, using the :definitions LESSEQP and PLUS, primitive type reasoning, the :rewrite rule CDR-CONS and the :type-prescription rule PLUS. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-80 ...) Rules: ((:DEFINITION LESSEQP) (:DEFINITION PLUS) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PLUS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-69A) (:REWRITE PROBLEM-69B) (:TYPE-PRESCRIPTION PLUS)) Warnings: None Time: 0.06 seconds (prove: 0.00, print: 0.04, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-80 ACL2 >>(THEOREM PROBLEM-81 (IMPLIES (AND (EVENNAT I) (EVENNAT J)) (EVENNAT (PLUS I J))) :HINTS (("Goal" :INDUCT (EVENNAT I) :IN-THEORY (ENABLE PROBLEM-70A PROBLEM-73 PROBLEM-73A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (EVENNAT I). This suggestion was produced using the :induction rule EVENNAT. If we let (:P I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP I)) (:P I J)) (IMPLIES (AND (CONSP I) (NOT (CONSP (CDR I)))) (:P I J)) (IMPLIES (AND (CONSP I) (CONSP (CDR I)) (:P (CDDR I) J)) (:P I J))). This induction is justified by the same argument used to admit EVENNAT, namely, the measure (ACL2-COUNT I) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP I)) (IMPLIES (AND (EVENNAT I) (EVENNAT J)) (EVENNAT (PLUS I J)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP I)) (EVENNAT I) (EVENNAT J)) (EVENNAT (PLUS I J))). But simplification reduces this to T, using the :definitions EVENNAT and PLUS, the :rewrite rule PROBLEM-70A and the :type-prescription rule EVENNAT. Subgoal *1/2 (IMPLIES (AND (CONSP I) (NOT (CONSP (CDR I)))) (IMPLIES (AND (EVENNAT I) (EVENNAT J)) (EVENNAT (PLUS I J)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP I) (NOT (CONSP (CDR I))) (EVENNAT I) (EVENNAT J)) (EVENNAT (PLUS I J))). But simplification reduces this to T, using the :definition EVENNAT. Subgoal *1/1 (IMPLIES (AND (CONSP I) (CONSP (CDR I)) (IMPLIES (AND (EVENNAT (CDDR I)) (EVENNAT J)) (EVENNAT (PLUS (CDDR I) J)))) (IMPLIES (AND (EVENNAT I) (EVENNAT J)) (EVENNAT (PLUS I J)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP I) (CONSP (CDR I)) (IMPLIES (AND (EVENNAT (CDDR I)) (EVENNAT J)) (EVENNAT (PLUS (CDDR I) J))) (EVENNAT I) (EVENNAT J)) (EVENNAT (PLUS I J))). This simplifies, using the :definitions EVENNAT and PLUS, the :rewrite rule PROBLEM-73 and the :type-prescription rule EVENNAT, to Subgoal *1/1'' (IMPLIES (AND (CONSP I) (CONSP (CDR I)) (EVENNAT (PLUS J (CDDR I))) (EVENNAT (CDDR I)) (EVENNAT J)) (EVENNAT (CONS NIL (PLUS J (CDR I))))). The destructor terms (CAR I) and (CDR I) can be eliminated. Furthermore, those terms are at the root of a chain of two rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace I by (CONS I1 I2), (CAR I) by I1 and (CDR I) by I2. (2) Use CAR-CDR-ELIM, again, to replace I2 by (CONS I3 I4), (CAR I2) by I3 and (CDR I2) by I4. These steps produce the following goal. Subgoal *1/1''' (IMPLIES (AND (CONSP (CONS I3 I4)) (CONSP (LIST* I1 I3 I4)) (EVENNAT (PLUS J I4)) (EVENNAT I4) (EVENNAT J)) (EVENNAT (CONS NIL (PLUS J (CONS I3 I4))))). By the simple :rewrite rule PROBLEM-73A we reduce the conjecture to Subgoal *1/1'4' (IMPLIES (AND (CONSP (CONS I3 I4)) (CONSP (LIST* I1 I3 I4)) (EVENNAT (PLUS J I4)) (EVENNAT I4) (EVENNAT J)) (EVENNAT (LIST* NIL NIL (PLUS J I4)))). But simplification reduces this to T, using the :definition EVENNAT, primitive type reasoning, the :rewrite rules CDR-CONS and PROBLEM-73 and the :type-prescription rules EVENNAT and PLUS. That completes the proof of *1. Q.E.D. The storage of PROBLEM-81 depends upon the :type-prescription rule EVENNAT. Summary Form: ( DEFTHM PROBLEM-81 ...) Rules: ((:DEFINITION EVENNAT) (:DEFINITION NOT) (:DEFINITION PLUS) (:ELIM CAR-CDR-ELIM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION EVENNAT) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-70A) (:REWRITE PROBLEM-73) (:REWRITE PROBLEM-73A) (:TYPE-PRESCRIPTION EVENNAT) (:TYPE-PRESCRIPTION PLUS)) Warnings: None Time: 0.12 seconds (prove: 0.03, print: 0.07, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-81 ACL2 >>(DEFUN CC (X) (IF (CONSP X) (+ 1 (+ (CC (CAR X)) (CC (CDR X)))) 0)) The admission of CC is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of CC is described by the theorem (AND (INTEGERP (CC X)) (<= 0 (CC X))). We used primitive type reasoning. Summary Form: ( DEFUN CC ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) CC ACL2 >>(THEOREM PROBLEM-85 (AND (IMPLIES (CONSP X) (< (CC (CAR X)) (CC X))) (IMPLIES (CONSP X) (< (CC (CDR X)) (CC X)))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] By case analysis we reduce the conjecture to the following two conjectures. Subgoal 2 (IMPLIES (CONSP X) (< (CC (CAR X)) (CC X))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal 2' (IMPLIES (CONSP (CONS X1 X2)) (< (CC X1) (CC (CONS X1 X2)))). This simplifies, using the :definition CC, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal 2'' (< (CC X1) (+ 1 (CC X1) (CC X2))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal 1 (IMPLIES (CONSP X) (< (CC (CDR X)) (CC X))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal 1' (IMPLIES (CONSP (CONS X1 X2)) (< (CC X2) (CC (CONS X1 X2)))). This simplifies, using the :definition CC, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal 1'' (< (CC X2) (+ 1 (CC X1) (CC X2))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Q.E.D. Summary Form: ( DEFTHM PROBLEM-85 ...) Rules: ((:DEFINITION CC) (:ELIM CAR-CDR-ELIM) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.11 seconds (prove: 0.00, print: 0.11, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-85 ACL2 >>(THEOREM PROBLEM-87A (IMPLIES (MEM E X) (< (CC (RM E X)) (CC X))) :HINTS (("Goal" :INDUCT (CC X))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (CC X). This suggestion was produced using the :induction rule CC. If we let (:P E X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P E X)) (IMPLIES (AND (CONSP X) (:P E (CAR X)) (:P E (CDR X))) (:P E X))). This induction is justified by the same argument used to admit CC, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (IMPLIES (MEM E X) (< (CC (RM E X)) (CC X)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (CONSP X)) (MEM E X)) (< (CC (RM E X)) (CC X))). But simplification reduces this to T, using the :definition MEM. Subgoal *1/1 (IMPLIES (AND (CONSP X) (IMPLIES (MEM E (CAR X)) (< (CC (RM E (CAR X))) (CC (CAR X)))) (IMPLIES (MEM E (CDR X)) (< (CC (RM E (CDR X))) (CC (CDR X))))) (IMPLIES (MEM E X) (< (CC (RM E X)) (CC X)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (IMPLIES (MEM E (CAR X)) (< (CC (RM E (CAR X))) (CC (CAR X)))) (IMPLIES (MEM E (CDR X)) (< (CC (RM E (CDR X))) (CC (CDR X)))) (MEM E X)) (< (CC (RM E X)) (CC X))). This simplifies, using the :definitions CC, MEM and RM and primitive type reasoning, to the following eight conjectures. Subgoal *1/1.8 (IMPLIES (AND (CONSP X) (NOT (MEM E (CAR X))) (NOT (MEM E (CDR X))) (EQUAL E (CAR X))) (< (CC (CDR X)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/1.7 (IMPLIES (AND (CONSP X) (NOT (MEM E (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (EQUAL E (CAR X))) (< (CC (CDR X)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/1.6 (IMPLIES (AND (CONSP X) (NOT (MEM E (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E (CDR X)) (EQUAL E (CAR X))) (< (CC (CDR X)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/1.5 (IMPLIES (AND (CONSP X) (NOT (MEM E (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E (CDR X)) (NOT (EQUAL E (CAR X)))) (< (CC (CONS (CAR X) (RM E (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X))))). This simplifies, using the :definition CC, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal *1/1.5' (IMPLIES (AND (CONSP X) (NOT (MEM E (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E (CDR X)) (NOT (EQUAL E (CAR X)))) (< (+ 1 (CC (CAR X)) (CC (RM E (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/1.4 (IMPLIES (AND (CONSP X) (< (CC (RM E (CAR X))) (CC (CAR X))) (NOT (MEM E (CDR X))) (EQUAL E (CAR X))) (< (CC (CDR X)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/1.3 (IMPLIES (AND (CONSP X) (< (CC (RM E (CAR X))) (CC (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (EQUAL E (CAR X))) (< (CC (CDR X)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (< (CC (RM E (CAR X))) (CC (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E (CDR X)) (EQUAL E (CAR X))) (< (CC (CDR X)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (< (CC (RM E (CAR X))) (CC (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E (CDR X)) (NOT (EQUAL E (CAR X)))) (< (CC (CONS (CAR X) (RM E (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X))))). This simplifies, using the :definition CC, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal *1/1.1' (IMPLIES (AND (CONSP X) (< (CC (RM E (CAR X))) (CC (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E (CDR X)) (NOT (EQUAL E (CAR X)))) (< (+ 1 (CC (CAR X)) (CC (RM E (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-87A ...) Rules: ((:DEFINITION CC) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION RM) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION CC) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.14 seconds (prove: 0.04, print: 0.10, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-87A ACL2 >>(DEFUN F23 (E X) (DECLARE (XARGS :MEASURE (CC X))) (IF (MEM E X) (F23 E (RM E X)) 23)) For the admission of F23 we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (CC X). The non-trivial part of the measure conjecture is Goal (AND (O-P (CC X)) (IMPLIES (MEM E X) (O< (CC (RM E X)) (CC X)))). By case analysis we reduce the conjecture to the following two conjectures. Subgoal 2 (O-P (CC X)). But simplification reduces this to T, using the :definitions NATP, O-FINP and O-P, primitive type reasoning and the :type-prescription rule CC. Subgoal 1 (IMPLIES (MEM E X) (O< (CC (RM E X)) (CC X))). This simplifies, using the :definitions O-FINP and O< and the :type- prescription rule CC, to Subgoal 1' (IMPLIES (MEM E X) (< (CC (RM E X)) (CC X))). Name the formula above *1. Perhaps we can prove *1 by induction. Three induction schemes are suggested by this conjecture. Subsumption reduces that number to two. These merge into one derived induction scheme. We will induct according to a scheme suggested by (CC X), but modified to accommodate (RM E X). These suggestions were produced using the :induction rules CC, MEM and RM. If we let (:P E X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P E X)) (IMPLIES (AND (CONSP X) (:P E (CAR X)) (:P E (CDR X))) (:P E X))). This induction is justified by the same argument used to admit CC, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following five nontautological subgoals. Subgoal *1/5 (IMPLIES (AND (NOT (CONSP X)) (MEM E X)) (< (CC (RM E X)) (CC X))). But simplification reduces this to T, using the :definition MEM. Subgoal *1/4 (IMPLIES (AND (CONSP X) (< (CC (RM E (CAR X))) (CC (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E X)) (< (CC (RM E X)) (CC X))). This simplifies, using the :definitions CC, MEM and RM and primitive type reasoning, to the following three conjectures. Subgoal *1/4.3 (IMPLIES (AND (CONSP X) (< (CC (RM E (CAR X))) (CC (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (EQUAL E (CAR X))) (< (CC (CDR X)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/4.2 (IMPLIES (AND (CONSP X) (< (CC (RM E (CAR X))) (CC (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E (CDR X)) (EQUAL E (CAR X))) (< (CC (CDR X)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/4.1 (IMPLIES (AND (CONSP X) (< (CC (RM E (CAR X))) (CC (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E (CDR X)) (NOT (EQUAL E (CAR X)))) (< (CC (CONS (CAR X) (RM E (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X))))). This simplifies, using the :definition CC, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal *1/4.1' (IMPLIES (AND (CONSP X) (< (CC (RM E (CAR X))) (CC (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E (CDR X)) (NOT (EQUAL E (CAR X)))) (< (+ 1 (CC (CAR X)) (CC (RM E (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/3 (IMPLIES (AND (CONSP X) (NOT (MEM E (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E X)) (< (CC (RM E X)) (CC X))). This simplifies, using the :definitions CC, MEM and RM and primitive type reasoning, to the following three conjectures. Subgoal *1/3.3 (IMPLIES (AND (CONSP X) (NOT (MEM E (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (EQUAL E (CAR X))) (< (CC (CDR X)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/3.2 (IMPLIES (AND (CONSP X) (NOT (MEM E (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E (CDR X)) (EQUAL E (CAR X))) (< (CC (CDR X)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/3.1 (IMPLIES (AND (CONSP X) (NOT (MEM E (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E (CDR X)) (NOT (EQUAL E (CAR X)))) (< (CC (CONS (CAR X) (RM E (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X))))). This simplifies, using the :definition CC, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal *1/3.1' (IMPLIES (AND (CONSP X) (NOT (MEM E (CAR X))) (< (CC (RM E (CDR X))) (CC (CDR X))) (MEM E (CDR X)) (NOT (EQUAL E (CAR X)))) (< (+ 1 (CC (CAR X)) (CC (RM E (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/2 (IMPLIES (AND (CONSP X) (< (CC (RM E (CAR X))) (CC (CAR X))) (NOT (MEM E (CDR X))) (MEM E X)) (< (CC (RM E X)) (CC X))). This simplifies, using the :definitions CC, MEM and RM and primitive type reasoning, to Subgoal *1/2' (IMPLIES (AND (CONSP X) (< (CC (RM E (CAR X))) (CC (CAR X))) (NOT (MEM E (CDR X))) (EQUAL E (CAR X))) (< (CC (CDR X)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/1 (IMPLIES (AND (CONSP X) (NOT (MEM E (CAR X))) (NOT (MEM E (CDR X))) (MEM E X)) (< (CC (RM E X)) (CC X))). This simplifies, using the :definitions CC, MEM and RM and primitive type reasoning, to Subgoal *1/1' (IMPLIES (AND (CONSP X) (NOT (MEM E (CAR X))) (NOT (MEM E (CDR X))) (EQUAL E (CAR X))) (< (CC (CDR X)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. That completes the proof of *1. Q.E.D. That completes the proof of the measure theorem for F23. Thus, we admit this function under the principle of definition. We observe that the type of F23 is described by the theorem (AND (INTEGERP (F23 E X)) (< 0 (F23 E X))). Summary Form: ( DEFUN F23 ...) Rules: ((:DEFINITION CC) (:DEFINITION MEM) (:DEFINITION NATP) (:DEFINITION NOT) (:DEFINITION O-FINP) (:DEFINITION O-P) (:DEFINITION O<) (:DEFINITION RM) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION CC) (:INDUCTION MEM) (:INDUCTION RM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.19 seconds (prove: 0.04, print: 0.14, other: 0.01) F23 ACL2 >>(INCLUDE-BOOK "ordinals/ordinals" :DIR :SYSTEM) Summary Form: ( INCLUDE-BOOK "ordinals/ordinals" ...) Rules: NIL Warnings: None Time: 3.58 seconds (prove: 0.00, print: 0.00, other: 3.58) "/v/filer3/v0q004/acl2/v2-9/acl2-sources/books/ordinals/ordinals.lisp" ACL2 >>(DEFUN CHECK-ROW (ROW) (LET ((A (CAR ROW)) (B (CADR ROW))) (IF (AND (O-P A) (O-P B)) (IF (O< A B) 'A>(DEFUN CHECK-ALL-ROWS (TAB I) (IF (ENDP TAB) NIL (CONS (LIST I (CAR (CAR TAB)) (CADR (CAR TAB)) (CHECK-ROW (CAR TAB))) (CHECK-ALL-ROWS (CDR TAB) (+ 1 I))))) The admission of CHECK-ALL-ROWS is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT TAB). We observe that the type of CHECK-ALL-ROWS is described by the theorem (TRUE-LISTP (CHECK-ALL-ROWS TAB I)). We used primitive type reasoning. Summary Form: ( DEFUN CHECK-ALL-ROWS ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.00, other: 0.04) CHECK-ALL-ROWS ACL2 >>(THEOREM PROBLEM-90 (EQUAL (CHECK-ALL-ROWS (LIST (LIST 23 100) (LIST 1000000 (OMEGA)) (LIST (O^ (OMEGA) 2) (O* (OMEGA) 2)) (LIST (O+ (O* (O^ (OMEGA) 3) 5) (O* (O^ (OMEGA) 1) 25) 7) (O+ (O* (O^ (OMEGA) 3) 5) (O* (O^ (OMEGA) 2) 1) 3)) (LIST (O+ (O* (O^ (OMEGA) (O^ (OMEGA) 2)) 5) 3) (O+ (O* (O^ (OMEGA) (OMEGA)) 5) (O* (O^ (OMEGA) 1) 25) 7))) 1) '((1 23 100 A>(DEFUN M2 (I J) (CONS (CONS 1 (+ 1 I)) J)) Since M2 is non-recursive, its admission is trivial. We observe that the type of M2 is described by the theorem (CONSP (M2 I J)). We used primitive type reasoning. Summary Form: ( DEFUN M2 ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) M2 ACL2 >>(IN-THEORY (ENABLE O< O+ O* OMEGA (OMEGA) O-FIRST-COEFF O-FIRST-EXPT O-RST O-FINP O-P)) Summary Form: (IN-THEORY (ENABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) 2479 ACL2 >>(THEOREM PROBLEM-91 (IMPLIES (AND (NATP I1) (NATP J1) (NATP I2) (NATP J2)) (AND (O-P (M2 I1 J1)) (IFF (O< (M2 I1 J1) (M2 I2 J2)) (IF (EQUAL I1 I2) (< J1 J2) (< I1 I2))))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definition M2 we reduce the conjecture to Goal' (IMPLIES (AND (NATP I1) (NATP J1) (NATP I2) (NATP J2)) (AND (O-P (CONS (CONS 1 (+ 1 I1)) J1)) (COND ((O< (CONS (CONS 1 (+ 1 I1)) J1) (CONS (CONS 1 (+ 1 I2)) J2)) (IF (EQUAL I1 I2) (< J1 J2) (< I1 I2))) ((IF (EQUAL I1 I2) (< J1 J2) (< I1 I2)) NIL) (T T)))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR, O-FINP-CR and POSP-CR, the :definitions FIX, O-FIRST- COEFF, O-FIRST-EXPT, O-P, O-RST and O<, the :executable-counterparts of EQUAL, O-P and O<, primitive type reasoning, the :forward-chaining rules NATP-FC-1 and NATP-FC-2, the :meta rules CANCEL_PLUS-EQUAL-CORRECT and CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR-CONS, CDR- CONS, O-FIRST-EXPT-DEF-O-FINP and O-P-DEF-O-FINP-1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-91 ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:DEFINITION FIX) (:DEFINITION IFF) (:DEFINITION M2) (:DEFINITION O-FIRST-COEFF) (:DEFINITION O-FIRST-EXPT) (:DEFINITION O-P) (:DEFINITION O-RST) (:DEFINITION O<) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART O-P) (:EXECUTABLE-COUNTERPART O<) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:META CANCEL_PLUS-EQUAL-CORRECT) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE O-FIRST-EXPT-DEF-O-FINP) (:REWRITE O-P-DEF-O-FINP-1)) Warnings: None Time: 0.02 seconds (prove: 0.02, print: 0.00, other: 0.00) PROBLEM-91 ACL2 >>(THEOREM PROBLEM-95 (AND (O-P (CC X)) (IMPLIES (NOT (ATOM X)) (O< (CC (FIRST X)) (CC X))) (IMPLIES (NOT (ATOM X)) (O< (CC (REST X)) (CC X)))) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-85))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definition ATOM we reduce the conjecture to the following three conjectures. Subgoal 3 (O-P (CC X)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, the :rewrite rule O-P-DEF-O-FINP-1 and the :type-prescription rule CC. Subgoal 2 (IMPLIES (CONSP X) (O< (CC (CAR X)) (CC X))). But simplification reduces this to T, using the :compound-recognizer rule O-FINP-CR, linear arithmetic, the :linear rule PROBLEM-85, the :rewrite rule O-FINP-< and the :type-prescription rule CC. Subgoal 1 (IMPLIES (CONSP X) (O< (CC (CDR X)) (CC X))). But simplification reduces this to T, using the :compound-recognizer rule O-FINP-CR, linear arithmetic, the :linear rule PROBLEM-85, the :rewrite rule O-FINP-< and the :type-prescription rule CC. Q.E.D. Summary Form: ( DEFTHM PROBLEM-95 ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION ATOM) (:DEFINITION NOT) (:FAKE-RUNE-FOR-LINEAR NIL) (:LINEAR PROBLEM-85) (:REWRITE O-FINP-<) (:REWRITE O-P-DEF-O-FINP-1) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.09 seconds (prove: 0.07, print: 0.01, other: 0.01) PROBLEM-95 ACL2 >>(DEFUN ACK (X Y) (DECLARE (XARGS :MEASURE (M2 (NFIX Y) (NFIX X)))) (IF (ZP X) 1 (IF (ZP Y) (IF (EQUAL X 1) 2 (+ X 2)) (ACK (ACK (- X 1) Y) (- Y 1))))) For the admission of ACK we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (M2 (NFIX Y) (NFIX X)). The non-trivial part of the measure conjecture is Goal (AND (O-P (M2 (NFIX Y) (NFIX X))) (IMPLIES (AND (NOT (ZP X)) (NOT (ZP Y))) (O< (M2 (NFIX Y) (NFIX (+ -1 X))) (M2 (NFIX Y) (NFIX X)))) (IMPLIES (AND (NOT (ZP X)) (NOT (ZP Y))) (O< (M2 (NFIX (+ -1 Y)) (NFIX (ACK (+ -1 X) Y))) (M2 (NFIX Y) (NFIX X))))). By the simple :definition M2 we reduce the conjecture to the following three conjectures. Subgoal 3 (O-P (CONS (CONS 1 (+ 1 (NFIX Y))) (NFIX X))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR, O-FINP-CR and POSP-CR, the :definitions NFIX, O-FIRST- COEFF, O-FIRST-EXPT, O-P and O-RST, the :executable-counterparts of EQUAL, O-P and O<, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS, O-FIRST-EXPT-DEF-O-FINP and O-P-DEF-O-FINP-1. Subgoal 2 (IMPLIES (AND (NOT (ZP X)) (NOT (ZP Y))) (O< (CONS (CONS 1 (+ 1 (NFIX Y))) (NFIX (+ -1 X))) (CONS (CONS 1 (+ 1 (NFIX Y))) (NFIX X)))). But simplification reduces this to T, using the :compound-recognizer rules O-FINP-CR and ZP-COMPOUND-RECOGNIZER, the :definitions NFIX, O-FIRST-COEFF, O-FIRST-EXPT, O-RST and O<, the :executable-counterpart of EQUAL, linear arithmetic, primitive type reasoning and the :rewrite rules <-+-NEGATIVE-0-1, CAR-CONS, CDR-CONS and O-FINP-<. Subgoal 1 (IMPLIES (AND (NOT (ZP X)) (NOT (ZP Y))) (O< (CONS (CONS 1 (+ 1 (NFIX (+ -1 Y)))) (NFIX (ACK (+ -1 X) Y))) (CONS (CONS 1 (+ 1 (NFIX Y))) (NFIX X)))). But simplification reduces this to T, using the :compound-recognizer rules O-FINP-CR and ZP-COMPOUND-RECOGNIZER, the :definitions FIX, NFIX, O-FIRST-COEFF, O-FIRST-EXPT and SYNP, the :executable-counterparts of BINARY-+ and EQUAL, linear arithmetic, primitive type reasoning and the :rewrite rules <-+-NEGATIVE-0-1, CAR-CONS, CDR-CONS, FOLD-CONSTS- IN-+, O-FIRST-COEFF-< and UNICITY-OF-0. Q.E.D. That completes the proof of the measure theorem for ACK. Thus, we admit this function under the principle of definition. We observe that the type of ACK is described by the theorem (AND (INTEGERP (ACK X Y)) (< 0 (ACK X Y))). We used the :compound- recognizer rule ZP-COMPOUND-RECOGNIZER and primitive type reasoning. Summary Form: ( DEFUN ACK ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION FIX) (:DEFINITION M2) (:DEFINITION NFIX) (:DEFINITION O-FIRST-COEFF) (:DEFINITION O-FIRST-EXPT) (:DEFINITION O-P) (:DEFINITION O-RST) (:DEFINITION O<) (:DEFINITION SYNP) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART O-P) (:EXECUTABLE-COUNTERPART O<) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE <-+-NEGATIVE-0-1) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE O-FINP-<) (:REWRITE O-FIRST-COEFF-<) (:REWRITE O-FIRST-EXPT-DEF-O-FINP) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE UNICITY-OF-0)) Warnings: None Time: 0.10 seconds (prove: 0.01, print: 0.05, other: 0.04) ACK ACL2 >>(DEFUN F1 (I J) (DECLARE (XARGS :MEASURE (IF (AND (NATP I) (NATP J) (< I J)) (- J I) 0))) (IF (AND (NATP I) (NATP J) (< I J)) (F1 (+ 1 I) J) 1)) For the admission of F1 we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (IF (AND (NATP I) (NATP J) (< I J)) (+ J (- I)) 0). The non-trivial part of the measure conjecture is Goal (AND (O-P (IF (AND (NATP I) (NATP J) (< I J)) (+ J (- I)) 0)) (IMPLIES (AND (NATP I) (NATP J) (< I J)) (O< (IF (AND (NATP (+ 1 I)) (NATP J) (< (+ 1 I) J)) (+ J (- (+ 1 I))) 0) (IF (AND (NATP I) (NATP J) (< I J)) (+ J (- I)) 0)))). By the :executable-counterpart of UNARY-- and the simple :rewrite rule DISTRIBUTIVITY-OF-MINUS-OVER-+ we reduce the conjecture to the following two conjectures. Subgoal 2 (O-P (IF (AND (NATP I) (NATP J) (< I J)) (+ J (- I)) 0)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, the :rewrite rules COMMUTATIVITY-OF-+ and O-P-DEF-O-FINP-1 and the :type-prescription rule |x < y => 0 < -x+y|. Subgoal 1 (IMPLIES (AND (NATP I) (NATP J) (< I J)) (O< (IF (AND (NATP (+ 1 I)) (NATP J) (< (+ 1 I) J)) (+ J -1 (- I)) 0) (IF (AND (NATP I) (NATP J) (< I J)) (+ J (- I)) 0))). This simplifies, using the :compound-recognizer rules NATP-CR and O- FINP-CR, the :definition O<, primitive type reasoning, the :forward- chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules COMMUTATIVITY- 2-OF-+ and COMMUTATIVITY-OF-+ and the :type-prescription rule |x < y => 0 < -x+y|, to the following two conjectures. Subgoal 1.2 (IMPLIES (AND (NATP I) (NATP J) (< I J) (< (+ 1 I) J)) (< (+ -1 (- I) J) (+ (- I) J))). But simplification reduces this to T, using linear arithmetic. Subgoal 1.1 (IMPLIES (AND (NATP I) (NATP J) (< I J) (<= J (+ 1 I))) (< 0 (+ (- I) J))). But we reduce the conjecture to T, by the simple :rewrite rule <-0- +-NEGATIVE-1. Q.E.D. That completes the proof of the measure theorem for F1. Thus, we admit this function under the principle of definition. We observe that the type of F1 is described by the theorem (AND (INTEGERP (F1 I J)) (< 0 (F1 I J))). Summary Form: ( DEFUN F1 ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION NOT) (:DEFINITION O<) (:EXECUTABLE-COUNTERPART UNARY--) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:REWRITE <-0-+-NEGATIVE-1) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE DISTRIBUTIVITY-OF-MINUS-OVER-+) (:REWRITE O-P-DEF-O-FINP-1) (:TYPE-PRESCRIPTION |x < y => 0 < -x+y|)) Warnings: None Time: 0.08 seconds (prove: 0.01, print: 0.06, other: 0.01) F1 ACL2 >>(DEFUN F2 (X) (DECLARE (XARGS :MEASURE (IF (EQUAL X NIL) 0 (+ 1 (CC X))))) (IF (EQUAL X NIL) 2 (AND (F2 (CAR X)) (F2 (CDR X))))) For the admission of F2 we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (IF (EQUAL X NIL) 0 (+ 1 (CC X))). The non-trivial part of the measure conjecture is Goal (AND (O-P (IF (EQUAL X NIL) 0 (+ 1 (CC X)))) (IMPLIES X (O< (IF (EQUAL (CAR X) NIL) 0 (+ 1 (CC (CAR X)))) (IF (EQUAL X NIL) 0 (+ 1 (CC X))))) (IMPLIES (AND X (F2 (CAR X))) (O< (IF (EQUAL (CDR X) NIL) 0 (+ 1 (CC (CDR X)))) (IF (EQUAL X NIL) 0 (+ 1 (CC X)))))). By case analysis we reduce the conjecture to the following three conjectures. Subgoal 3 (O-P (IF (EQUAL X NIL) 0 (+ 1 (CC X)))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, primitive type reasoning, the :rewrite rule O-P-DEF-O-FINP-1 and the :type-prescription rule CC. Subgoal 2 (IMPLIES X (O< (IF (EQUAL (CAR X) NIL) 0 (+ 1 (CC (CAR X)))) (IF (EQUAL X NIL) 0 (+ 1 (CC X))))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definition O<, primitive type reasoning and the :type-prescription rule CC, to the following two conjectures. Subgoal 2.2 (IMPLIES (AND X (CAR X)) (< (+ 1 (CC (CAR X))) (+ 1 (CC X)))). This simplifies, using the :meta rule CANCEL_PLUS-LESSP-CORRECT, to Subgoal 2.2' (IMPLIES (CAR X) (< (CC (CAR X)) (CC X))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following two goals. Subgoal 2.2.2 (IMPLIES (AND (NOT (CONSP X)) (CAR X)) (< (CC (CAR X)) (CC X))). But we reduce the conjecture to T, by case analysis. Subgoal 2.2.1 (IMPLIES (AND (CONSP (CONS X1 X2)) X1) (< (CC X1) (CC (CONS X1 X2)))). This simplifies, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS and CDR-CONS, to Subgoal 2.2.1' (IMPLIES X1 (< 0 (+ 1 (CC X2)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 2.1 (IMPLIES (AND X (NOT (CAR X))) (< 0 (+ 1 (CC X)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1 (IMPLIES (AND X (F2 (CAR X))) (O< (IF (EQUAL (CDR X) NIL) 0 (+ 1 (CC (CDR X)))) (IF (EQUAL X NIL) 0 (+ 1 (CC X))))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions CC and O<, primitive type reasoning and the :type-prescription rule CC, to the following three conjectures. Subgoal 1.3 (IMPLIES (AND X (F2 (CAR X)) (CDR X) (CONSP X)) (< (+ 1 (CC (CDR X))) (+ 1 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal 1.2 (IMPLIES (AND X (F2 (CAR X)) (NOT (CDR X)) (CONSP X)) (< 0 (+ 1 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.1 (IMPLIES (AND X (F2 (CAR X)) (CDR X) (NOT (CONSP X))) (< (+ 1 (CC (CDR X))) 1)). But simplification reduces this to T, using primitive type reasoning. Q.E.D. That completes the proof of the measure theorem for F2. Thus, we admit this function under the principle of definition. We observe that the type of F2 is described by the theorem (AND (INTEGERP (F2 X)) (< 0 (F2 X))). Summary Form: ( DEFUN F2 ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION CC) (:DEFINITION NOT) (:DEFINITION O<) (:ELIM CAR-CDR-ELIM) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE O-P-DEF-O-FINP-1) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.26 seconds (prove: 0.15, print: 0.09, other: 0.02) F2 ACL2 >>(DEFUN F3 (X Y) (DECLARE (XARGS :MEASURE (+ (CC X) (CC Y)))) (IF (AND (ENDP X) (ENDP Y)) 3 (F3 (CDR X) (CDR Y)))) For the admission of F3 we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (+ (CC X) (CC Y)). The non-trivial part of the measure conjecture is Goal (AND (O-P (+ (CC X) (CC Y))) (IMPLIES (NOT (AND (ENDP X) (ENDP Y))) (O< (+ (CC (CDR X)) (CC (CDR Y))) (+ (CC X) (CC Y))))). By case analysis we reduce the conjecture to the following two conjectures. Subgoal 2 (O-P (+ (CC X) (CC Y))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, primitive type reasoning, the :rewrite rule O-P-DEF-O-FINP-1 and the :type-prescription rule CC. Subgoal 1 (IMPLIES (NOT (AND (ENDP X) (ENDP Y))) (O< (+ (CC (CDR X)) (CC (CDR Y))) (+ (CC X) (CC Y)))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions ENDP and O<, primitive type reasoning and the :type-prescription rule CC, to the following two conjectures. Subgoal 1.2 (IMPLIES (CONSP X) (< (+ (CC (CDR X)) (CC (CDR Y))) (+ (CC X) (CC Y)))). The destructor terms (CAR Y) and (CDR Y) can be eliminated by using CAR-CDR-ELIM to replace Y by (CONS Y1 Y2), (CAR Y) by Y1 and (CDR Y) by Y2. This produces the following two goals. Subgoal 1.2.2 (IMPLIES (AND (NOT (CONSP Y)) (CONSP X)) (< (+ (CC (CDR X)) (CC (CDR Y))) (+ (CC X) (CC Y)))). This simplifies, using the :definitions CC and FIX, the :executable- counterpart of CC, the :rewrite rules COMMUTATIVITY-OF-+, DEFAULT-CDR and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 1.2.2' (IMPLIES (AND (NOT (CONSP Y)) (CONSP X)) (< (CC (CDR X)) (CC X))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal 1.2.2'' (IMPLIES (AND (CONSP (CONS X1 X2)) (NOT (CONSP Y))) (< (CC X2) (CC (CONS X1 X2)))). This simplifies, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS and CDR-CONS, to Subgoal 1.2.2''' (IMPLIES (NOT (CONSP Y)) (< 0 (+ 1 (CC X1)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.2.1 (IMPLIES (AND (CONSP (CONS Y1 Y2)) (CONSP X)) (< (+ (CC (CDR X)) (CC Y2)) (+ (CC X) (CC (CONS Y1 Y2))))). This simplifies, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-2-OF-+ and COMMUTATIVITY-OF-+, to Subgoal 1.2.1' (IMPLIES (CONSP X) (< (CC (CDR X)) (+ 1 (CC X) (CC Y1)))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal 1.2.1'' (IMPLIES (CONSP (CONS X1 X2)) (< (CC X2) (+ 1 (CC (CONS X1 X2)) (CC Y1)))). This simplifies, using the :definitions CC and SYNP, the :executable- counterpart of BINARY-+, primitive type reasoning, the :meta rule CANCEL_- PLUS-LESSP-CORRECT and the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY- 2-OF-+, COMMUTATIVITY-OF-+ and FOLD-CONSTS-IN-+, to Subgoal 1.2.1''' (< 0 (+ 2 (CC X1) (CC Y1))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.1 (IMPLIES (CONSP Y) (< (+ (CC (CDR X)) (CC (CDR Y))) (+ (CC X) (CC Y)))). The destructor terms (CAR Y) and (CDR Y) can be eliminated by using CAR-CDR-ELIM to replace Y by (CONS Y1 Y2), (CAR Y) by Y1 and (CDR Y) by Y2. This produces the following goal. Subgoal 1.1' (IMPLIES (CONSP (CONS Y1 Y2)) (< (+ (CC (CDR X)) (CC Y2)) (+ (CC X) (CC (CONS Y1 Y2))))). This simplifies, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-2-OF-+ and COMMUTATIVITY-OF-+, to Subgoal 1.1'' (< (CC (CDR X)) (+ 1 (CC X) (CC Y1))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following two goals. Subgoal 1.1.2 (IMPLIES (NOT (CONSP X)) (< (CC (CDR X)) (+ 1 (CC X) (CC Y1)))). This simplifies, using the :definitions CC and FIX, the :executable- counterpart of CC, the :rewrite rules DEFAULT-CDR and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 1.1.2' (IMPLIES (NOT (CONSP X)) (< 0 (+ 1 (CC Y1)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.1.1 (IMPLIES (CONSP (CONS X1 X2)) (< (CC X2) (+ 1 (CC (CONS X1 X2)) (CC Y1)))). This simplifies, using the :definitions CC and SYNP, the :executable- counterpart of BINARY-+, primitive type reasoning, the :meta rule CANCEL_- PLUS-LESSP-CORRECT and the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY- 2-OF-+, COMMUTATIVITY-OF-+ and FOLD-CONSTS-IN-+, to Subgoal 1.1.1' (< 0 (+ 2 (CC X1) (CC Y1))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Q.E.D. That completes the proof of the measure theorem for F3. Thus, we admit this function under the principle of definition. We observe that the type of F3 is described by the theorem (AND (INTEGERP (F3 X Y)) (< 0 (F3 X Y))). We used primitive type reasoning. Summary Form: ( DEFUN F3 ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION CC) (:DEFINITION ENDP) (:DEFINITION FIX) (:DEFINITION O<) (:DEFINITION SYNP) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART CC) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE DEFAULT-CDR) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.29 seconds (prove: 0.04, print: 0.24, other: 0.01) F3 ACL2 >>(ENCAPSULATE ((P (X) T) (DN (X) T) (UP (X) T) (M (X) T)) (LOCAL (DEFUN P (X) (NOT (ZP X)))) (LOCAL (DEFUN DN (X) (- X 1))) (LOCAL (DEFUN UP (X) X)) (LOCAL (DEFUN M (X) (ACL2-COUNT X))) (THEOREM PROBLEM-101A (AND (O-P (M X)) (IMPLIES (P X) (O< (M (DN X)) (M X)))))) To verify that the five encapsulated events correctly extend the current theory we will evaluate them. The theory thus constructed is only ephemeral. Encapsulated Events: ACL2 >>(LOCAL (DEFUN P (X) (NOT (ZP X)))) Since P is non-recursive, its admission is trivial. We observe that the type of P is described by the theorem (OR (EQUAL (P X) T) (EQUAL (P X) NIL)). Summary Form: ( DEFUN P ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.01, other: 0.00) P ACL2 >>(LOCAL (DEFUN DN (X) (- X 1))) Since DN is non-recursive, its admission is trivial. We observe that the type of DN is described by the theorem (ACL2-NUMBERP (DN X)). We used primitive type reasoning. Summary Form: ( DEFUN DN ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) DN ACL2 >>(LOCAL (DEFUN UP (X) X)) Since UP is non-recursive, its admission is trivial. We observe that the type of UP is described by the theorem (EQUAL (UP X) X). Summary Form: ( DEFUN UP ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) UP ACL2 >>(LOCAL (DEFUN M (X) (ACL2-COUNT X))) Since M is non-recursive, its admission is trivial. We observe that the type of M is described by the theorem (AND (INTEGERP (M X)) (<= 0 (M X))). We used the :type-prescription rule ACL2-COUNT. Summary Form: ( DEFUN M ...) Rules: ((:TYPE-PRESCRIPTION ACL2-COUNT)) Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) M ACL2 >>(THEOREM PROBLEM-101A (AND (O-P (M X)) (IMPLIES (P X) (O< (M (DN X)) (M X))))) ACL2 Warning [Non-rec] in ( DEFTHM PROBLEM-101A ...): The :REWRITE rule generated from PROBLEM-101A will be triggered only by terms containing the non-recursive function symbol M. Unless this function is disabled, PROBLEM-101A is unlikely ever to be used. ACL2 Warning [Non-rec] in ( DEFTHM PROBLEM-101A ...): The :REWRITE rule generated from PROBLEM-101A will be triggered only by terms containing the non-recursive function symbols DN and M. Unless these functions are disabled, PROBLEM-101A is unlikely ever to be used. [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definitions DN, M and P we reduce the conjecture to the following two conjectures. Subgoal 2 (O-P (ACL2-COUNT X)). But we reduce the conjecture to T, by case analysis. Subgoal 1 (IMPLIES (NOT (ZP X)) (O< (ACL2-COUNT (+ -1 X)) (ACL2-COUNT X))). But we reduce the conjecture to T, by case analysis. Q.E.D. The storage of PROBLEM-101A depends upon the :type-prescription rules O-P and O<. Summary Form: ( DEFTHM PROBLEM-101A ...) Rules: ((:DEFINITION DN) (:DEFINITION M) (:DEFINITION P) (:TYPE-PRESCRIPTION O-P) (:TYPE-PRESCRIPTION O<)) Warnings: Non-rec Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-101A End of Encapsulated Events. Having verified that the encapsulated events validate the signatures of the ENCAPSULATE event, we discard the ephemeral theory and extend the original theory as directed by the signatures and the non-LOCAL events. The following constraint is associated with every one of the functions P, DN, UP and M: (AND (O-P (M X)) (IMPLIES (P X) (O< (M (DN X)) (M X)))) Summary Form: ( ENCAPSULATE ((P ...) ...) ...) Rules: NIL Warnings: Non-rec Time: 0.09 seconds (prove: 0.00, print: 0.02, other: 0.07) T ACL2 >>(THEOREM PROBLEM-101B (IMPLIES (P X) (NOT (EQUAL (M X) 0))) :HINTS (("Goal" :USE ((:INSTANCE PROBLEM-101A (X X)) (:INSTANCE PROBLEM-101A (X (DN X))))))) [Note: A hint was supplied for our processing of the goal above. Thanks!] We now augment the goal above by adding the hypotheses indicated by the :USE hint. These hypotheses can be derived from PROBLEM-101A via instantiation. The augmented goal is shown below. Goal' (IMPLIES (AND (AND (O-P (M X)) (IMPLIES (P X) (O< (M (DN X)) (M X)))) (AND (O-P (M (DN X))) (IMPLIES (P (DN X)) (O< (M (DN (DN X))) (M (DN X)))))) (IMPLIES (P X) (NOT (EQUAL (M X) 0)))). By case analysis we reduce the conjecture to Goal'' (IMPLIES (AND (O-P (M X)) (IMPLIES (P X) (O< (M (DN X)) (M X))) (O-P (M (DN X))) (IMPLIES (P (DN X)) (O< (M (DN (DN X))) (M (DN X)))) (P X)) (NOT (EQUAL (M X) 0))). But simplification reduces this to T, using the :executable-counterparts of NOT and O-P, the :rewrite rule |~(a<0)| and the :type-prescription rule O-P. Q.E.D. Summary Form: ( DEFTHM PROBLEM-101B ...) Rules: ((:DEFINITION NOT) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART O-P) (:REWRITE |~(a<0)|) (:TYPE-PRESCRIPTION O-P)) Warnings: None Time: 0.04 seconds (prove: 0.03, print: 0.01, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-101B ACL2 >>(THEOREM PROBLEM-101C (OR (CONSP (M X)) (AND (INTEGERP (M X)) (<= 0 (M X)))) :RULE-CLASSES :TYPE-PRESCRIPTION :HINTS (("Goal" :USE ((:INSTANCE PROBLEM-101A (X X)) (:INSTANCE PROBLEM-101A (X (DN X))))))) ACL2 Observation in ( DEFTHM PROBLEM-101C ...): Our heuristics choose (M X) as the :TYPED-TERM. [Note: A hint was supplied for our processing of the goal above. Thanks!] We now augment the goal above by adding the hypotheses indicated by the :USE hint. These hypotheses can be derived from PROBLEM-101A via instantiation. The augmented goal is shown below. Goal' (IMPLIES (AND (AND (O-P (M X)) (IMPLIES (P X) (O< (M (DN X)) (M X)))) (AND (O-P (M (DN X))) (IMPLIES (P (DN X)) (O< (M (DN (DN X))) (M (DN X)))))) (OR (CONSP (M X)) (AND (INTEGERP (M X)) (<= 0 (M X))))). By case analysis we reduce the conjecture to Goal'' (IMPLIES (AND (O-P (M X)) (IMPLIES (P X) (O< (M (DN X)) (M X))) (O-P (M (DN X))) (IMPLIES (P (DN X)) (O< (M (DN (DN X))) (M (DN X))))) (OR (CONSP (M X)) (AND (INTEGERP (M X)) (<= 0 (M X))))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, primitive type reasoning and the :rewrite rule O-P-DEF- O-FINP-1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-101C ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE O-P-DEF-O-FINP-1)) Warnings: None Time: 0.02 seconds (prove: 0.01, print: 0.01, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-101C ACL2 >>(THEOREM PROBLEM-101D (IMPLIES (P X) (NOT (EQUAL (M (DN X)) (M X)))) :HINTS (("Goal" :USE ((:INSTANCE PROBLEM-101A (X X)) (:INSTANCE PROBLEM-101A (X (DN X))))))) [Note: A hint was supplied for our processing of the goal above. Thanks!] We now augment the goal above by adding the hypotheses indicated by the :USE hint. These hypotheses can be derived from PROBLEM-101A via instantiation. The augmented goal is shown below. Goal' (IMPLIES (AND (AND (O-P (M X)) (IMPLIES (P X) (O< (M (DN X)) (M X)))) (AND (O-P (M (DN X))) (IMPLIES (P (DN X)) (O< (M (DN (DN X))) (M (DN X)))))) (IMPLIES (P X) (NOT (EQUAL (M (DN X)) (M X))))). By case analysis we reduce the conjecture to Goal'' (IMPLIES (AND (O-P (M X)) (IMPLIES (P X) (O< (M (DN X)) (M X))) (O-P (M (DN X))) (IMPLIES (P (DN X)) (O< (M (DN (DN X))) (M (DN X)))) (P X)) (NOT (EQUAL (M (DN X)) (M X)))). But simplification reduces this to T, using primitive type reasoning, the :forward-chaining rules |a <= b => (a < b <=> ~(a = b))|, |a <= b / b <= c => a <= c| and |a = b => (a <= b)| and the :type- prescription rules O-P and O<. Q.E.D. Summary Form: ( DEFTHM PROBLEM-101D ...) Rules: ((:DEFINITION NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING |a <= b => (a < b <=> ~(a = b))|) (:FORWARD-CHAINING |a <= b / b <= c => a <= c|) (:FORWARD-CHAINING |a = b => (a <= b)|) (:TYPE-PRESCRIPTION O-P) (:TYPE-PRESCRIPTION O<)) Warnings: None Time: 0.10 seconds (prove: 0.09, print: 0.01, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-101D ACL2 >>(DEFUN F4 (X Y Q) (DECLARE (XARGS :MEASURE (IF Q (IF (EQUAL (M X) 0) 1 (MAKE-ORD (M X) 1 1)) (IF (EQUAL (M Y) 0) 2 (MAKE-ORD (M Y) 1 2))) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-101A PROBLEM-101B))))) (IF (P X) (IF Q (F4 Y (DN X) (NOT Q)) (F4 Y (UP X) (NOT Q))) 4)) For the admission of F4 we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (COND (Q (IF (EQUAL (M X) 0) 1 (MAKE-ORD (M X) 1 1))) ((EQUAL (M Y) 0) 2) (T (MAKE-ORD (M Y) 1 2))). The non-trivial part of the measure conjecture is Goal (AND (O-P (COND (Q (IF (EQUAL (M X) 0) 1 (MAKE-ORD (M X) 1 1))) ((EQUAL (M Y) 0) 2) (T (MAKE-ORD (M Y) 1 2)))) (IMPLIES (AND (P X) (NOT Q)) (O< (COND ((NOT Q) (IF (EQUAL (M Y) 0) 1 (MAKE-ORD (M Y) 1 1))) ((EQUAL (M (UP X)) 0) 2) (T (MAKE-ORD (M (UP X)) 1 2))) (COND (Q (IF (EQUAL (M X) 0) 1 (MAKE-ORD (M X) 1 1))) ((EQUAL (M Y) 0) 2) (T (MAKE-ORD (M Y) 1 2))))) (IMPLIES (AND (P X) Q) (O< (COND ((NOT Q) (IF (EQUAL (M Y) 0) 1 (MAKE-ORD (M Y) 1 1))) ((EQUAL (M (DN X)) 0) 2) (T (MAKE-ORD (M (DN X)) 1 2))) (COND (Q (IF (EQUAL (M X) 0) 1 (MAKE-ORD (M X) 1 1))) ((EQUAL (M Y) 0) 2) (T (MAKE-ORD (M Y) 1 2)))))). [Note: A hint was supplied for our processing of the goal above. Thanks!] By case analysis we reduce the conjecture to the following three conjectures. Subgoal 3 (O-P (COND (Q (IF (EQUAL (M X) 0) 1 (MAKE-ORD (M X) 1 1))) ((EQUAL (M Y) 0) 2) (T (MAKE-ORD (M Y) 1 2)))). This simplifies, using trivial observations, to the following four conjectures. Subgoal 3.4 (IMPLIES (AND Q (EQUAL (M X) 0)) (O-P 1)). But we reduce the conjecture to T, by the :executable-counterpart of O-P. Subgoal 3.3 (IMPLIES (AND Q (NOT (EQUAL (M X) 0))) (O-P (MAKE-ORD (M X) 1 1))). But simplification reduces this to T, using the :executable-counterparts of NOT, O-FIRST-EXPT, O-P and POSP, primitive type reasoning and the :rewrite rules |0 < a = ~(a = 0)|, MAKE-ORD-O-P and PROBLEM-101A. Subgoal 3.2 (IMPLIES (AND (NOT Q) (EQUAL (M Y) 0)) (O-P 2)). But we reduce the conjecture to T, by the :executable-counterpart of O-P. Subgoal 3.1 (IMPLIES (AND (NOT Q) (NOT (EQUAL (M Y) 0))) (O-P (MAKE-ORD (M Y) 1 2))). But simplification reduces this to T, using the :executable-counterparts of NOT, O-FIRST-EXPT, O-P and POSP, primitive type reasoning and the :rewrite rules |0 < a = ~(a = 0)|, MAKE-ORD-O-P and PROBLEM-101A. Subgoal 2 (IMPLIES (AND (P X) (NOT Q)) (O< (COND ((NOT Q) (IF (EQUAL (M Y) 0) 1 (MAKE-ORD (M Y) 1 1))) ((EQUAL (M (UP X)) 0) 2) (T (MAKE-ORD (M (UP X)) 1 2))) (COND (Q (IF (EQUAL (M X) 0) 1 (MAKE-ORD (M X) 1 1))) ((EQUAL (M Y) 0) 2) (T (MAKE-ORD (M Y) 1 2))))). This simplifies, using the :executable-counterpart of NOT, to the following two conjectures. Subgoal 2.2 (IMPLIES (AND (P X) (EQUAL (M Y) 0)) (O< 1 2)). But we reduce the conjecture to T, by the :executable-counterpart of O<. Subgoal 2.1 (IMPLIES (AND (P X) (NOT (EQUAL (M Y) 0))) (O< (MAKE-ORD (M Y) 1 1) (MAKE-ORD (M Y) 1 2))). But simplification reduces this to T, using the :executable-counterpart of O< and the :rewrite rule O-RST-<. Subgoal 1 (IMPLIES (AND (P X) Q) (O< (COND ((NOT Q) (IF (EQUAL (M Y) 0) 1 (MAKE-ORD (M Y) 1 1))) ((EQUAL (M (DN X)) 0) 2) (T (MAKE-ORD (M (DN X)) 1 2))) (COND (Q (IF (EQUAL (M X) 0) 1 (MAKE-ORD (M X) 1 1))) ((EQUAL (M Y) 0) 2) (T (MAKE-ORD (M Y) 1 2))))). This simplifies, using the :congruence rule IFF-IMPLIES-EQUAL-NOT, the :executable-counterpart of NOT and the :rewrite rule PROBLEM-101B, to the following two conjectures. Subgoal 1.2 (IMPLIES (AND (P X) (EQUAL (M (DN X)) 0)) (O< 2 (MAKE-ORD (M X) 1 1))). But simplification reduces this to T, using the :compound-recognizer rule O-FINP-CR, primitive type reasoning, the :rewrite rule AC-< and the :type-prescription rule MAKE-ORD. Subgoal 1.1 (IMPLIES (AND (P X) (NOT (EQUAL (M (DN X)) 0))) (O< (MAKE-ORD (M (DN X)) 1 2) (MAKE-ORD (M X) 1 1))). But simplification reduces this to T, using the :executable-counterparts of NOT, O-FIRST-EXPT, O-P and POSP, primitive type reasoning and the :rewrite rules |0 < a = ~(a = 0)|, MAKE-ORD-O-FIRST-EXPT, MAKE-ORD- O-P, O-FIRST-EXPT-< and PROBLEM-101A. Q.E.D. That completes the proof of the measure theorem for F4. Thus, we admit this function under the principle of definition. We observe that the type of F4 is described by the theorem (AND (INTEGERP (F4 X Y Q)) (< 0 (F4 X Y Q))). Summary Form: ( DEFUN F4 ...) Rules: ((:COMPOUND-RECOGNIZER O-FINP-CR) (:CONGRUENCE IFF-IMPLIES-EQUAL-NOT) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART O-FIRST-EXPT) (:EXECUTABLE-COUNTERPART O-P) (:EXECUTABLE-COUNTERPART O<) (:EXECUTABLE-COUNTERPART POSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE |0 < a = ~(a = 0)|) (:REWRITE AC-<) (:REWRITE MAKE-ORD-O-FIRST-EXPT) (:REWRITE MAKE-ORD-O-P) (:REWRITE O-FIRST-EXPT-<) (:REWRITE O-RST-<) (:REWRITE PROBLEM-101A) (:REWRITE PROBLEM-101B) (:TYPE-PRESCRIPTION MAKE-ORD)) Warnings: None Time: 0.51 seconds (prove: 0.42, print: 0.06, other: 0.03) F4 ACL2 >>(THEOREM PROBLEM-102 (EQUAL (F1 I J) 1) :HINTS (("Goal" :INDUCT (F1 I J)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (F1 I J). This suggestion was produced using the :induction rule F1. If we let (:P I J) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (AND (NATP I) (NATP J) (< I J))) (:P I J)) (IMPLIES (AND (AND (NATP I) (NATP J) (< I J)) (:P (+ 1 I) J)) (:P I J))). This induction is justified by the same argument used to admit F1, namely, the measure (IF (IF (NATP I) (IF (NATP J) (< I J) 'NIL) 'NIL) (BINARY-+ J (UNARY-- I)) '0) is decreasing according to the relation O< (which is known to be well- founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (AND (NATP I) (NATP J) (< I J))) (EQUAL (F1 I J) 1)). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definition F1 and the :executable-counterpart of EQUAL. Subgoal *1/1 (IMPLIES (AND (AND (NATP I) (NATP J) (< I J)) (EQUAL (F1 (+ 1 I) J) 1)) (EQUAL (F1 I J) 1)). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NATP I) (NATP J) (< I J) (EQUAL (F1 (+ 1 I) J) 1)) (EQUAL (F1 I J) 1)). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definition F1, the :executable-counterpart of EQUAL and the :forward-chaining rules NATP-FC-1 and NATP-FC-2. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-102 ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION F1) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART EQUAL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:INDUCTION F1)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.02, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-102 ACL2 >>(THEOREM PROBLEM-103 (EQUAL (F2 X) 2) :HINTS (("Goal" :INDUCT (F2 X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (F2 X). This suggestion was produced using the :induction rule F2. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND X (NOT (F2 (CAR X))) (:P (CAR X))) (:P X)) (IMPLIES (AND X (F2 (CAR X)) (:P (CAR X)) (:P (CDR X))) (:P X)) (IMPLIES (NOT X) (:P X))). This induction is justified by the same argument used to admit F2, namely, the measure (IF (EQUAL X 'NIL) '0 (BINARY-+ '1 (CC X))) is decreasing according to the relation O< (which is known to be well- founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautologica\ l subgoals. Subgoal *1/3 (IMPLIES (AND X (NOT (F2 (CAR X))) (EQUAL (F2 (CAR X)) 2)) (EQUAL (F2 X) 2)). But we reduce the conjecture to T, by the :type-prescription rule F2. Subgoal *1/2 (IMPLIES (AND X (F2 (CAR X)) (EQUAL (F2 (CAR X)) 2) (EQUAL (F2 (CDR X)) 2)) (EQUAL (F2 X) 2)). But simplification reduces this to T, using the :definition F2, the :executable-counterparts of EQUAL and NOT and primitive type reasoning. Subgoal *1/1 (IMPLIES (NOT X) (EQUAL (F2 X) 2)). But simplification reduces this to T, using the :executable-counterparts of EQUAL and F2. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-103 ...) Rules: ((:DEFINITION F2) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART F2) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION F2) (:TYPE-PRESCRIPTION F2)) Warnings: None Time: 0.09 seconds (prove: 0.02, print: 0.07, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-103 ACL2 >>(THEOREM PROBLEM-104 (EQUAL (F3 X Y) 3) :HINTS (("Goal" :INDUCT (F3 X Y)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (F3 X Y). This suggestion was produced using the :induction rule F3. If we let (:P X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (AND (ENDP X) (ENDP Y))) (:P (CDR X) (CDR Y))) (:P X Y)) (IMPLIES (AND (ENDP X) (ENDP Y)) (:P X Y))). This induction is justified by the same argument used to admit F3, namely, the measure (BINARY-+ (CC X) (CC Y)) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (AND (NOT (AND (ENDP X) (ENDP Y))) (EQUAL (F3 (CDR X) (CDR Y)) 3)) (EQUAL (F3 X Y) 3)). This simplifies, using the :definitions ENDP and F3 and the :executable- counterpart of EQUAL, to Subgoal *1/2' (IMPLIES (AND (CONSP Y) (EQUAL (F3 (CDR X) (CDR Y)) 3) (NOT (CONSP X))) (EQUAL (F3 NIL (CDR Y)) 3)). But simplification reduces this to T, using the :rewrite rule DEFAULT- CDR. Subgoal *1/1 (IMPLIES (AND (ENDP X) (ENDP Y)) (EQUAL (F3 X Y) 3)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP X)) (NOT (CONSP Y))) (EQUAL (F3 X Y) 3)). But simplification reduces this to T, using the :definition F3 and the :executable-counterpart of EQUAL. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-104 ...) Rules: ((:DEFINITION ENDP) (:DEFINITION F3) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART EQUAL) (:INDUCTION F3) (:REWRITE DEFAULT-CDR)) Warnings: None Time: 0.05 seconds (prove: 0.00, print: 0.05, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-104 ACL2 >>(THEOREM PROBLEM-105 (EQUAL (F4 X Y Q) 4) :HINTS (("Goal" :INDUCT (F4 X Y Q)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (F4 X Y Q). This suggestion was produced using the :induction rule F4. If we let (:P Q X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (P X)) (:P Q X Y)) (IMPLIES (AND (P X) (NOT Q) (:P (NOT Q) Y (UP X))) (:P Q X Y)) (IMPLIES (AND (P X) Q (:P (NOT Q) Y (DN X))) (:P Q X Y))). This induction is justified by the same argument used to admit F4, namely, the measure (IF Q (IF (EQUAL (M X) '0) '1 (MAKE-ORD (M X) '1 '1)) (IF (EQUAL (M Y) '0) '2 (MAKE-ORD (M Y) '1 '2))) is decreasing according to the relation O< (which is known to be well- founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautologica\ l subgoals. Subgoal *1/3 (IMPLIES (NOT (P X)) (EQUAL (F4 X Y Q) 4)). But simplification reduces this to T, using the :definition F4 and the :executable-counterpart of EQUAL. Subgoal *1/2 (IMPLIES (AND (P X) (NOT Q) (EQUAL (F4 Y (UP X) (NOT Q)) 4)) (EQUAL (F4 X Y Q) 4)). But simplification reduces this to T, using the :definition F4 and the :executable-counterparts of EQUAL and NOT. Subgoal *1/1 (IMPLIES (AND (P X) Q (EQUAL (F4 Y (DN X) (NOT Q)) 4)) (EQUAL (F4 X Y Q) 4)). But simplification reduces this to T, using the :congruence rule IFF- IMPLIES-EQUAL-NOT, the :definition F4 and the :executable-counterparts of EQUAL and NOT. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-105 ...) Rules: ((:CONGRUENCE IFF-IMPLIES-EQUAL-NOT) (:DEFINITION F4) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT) (:INDUCTION F4)) Warnings: None Time: 0.05 seconds (prove: 0.01, print: 0.04, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-105 ACL2 >>(DEFUN FLATTEN! (X) (DECLARE (XARGS :MEASURE (M2 (CC X) (CC (CAR X))))) (IF (ATOM X) (CONS X NIL) (IF (ATOM (CAR X)) (CONS (CAR X) (FLATTEN! (CDR X))) (FLATTEN! (CONS (CAAR X) (CONS (CDAR X) (CDR X))))))) For the admission of FLATTEN! we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (M2 (CC X) (CC (CAR X))). The non-trivial part of the measure conjecture is Goal (AND (O-P (M2 (CC X) (CC (CAR X)))) (IMPLIES (AND (NOT (ATOM X)) (NOT (ATOM (CAR X)))) (O< (M2 (CC (LIST* (CAAR X) (CDAR X) (CDR X))) (CC (CAR (LIST* (CAAR X) (CDAR X) (CDR X))))) (M2 (CC X) (CC (CAR X))))) (IMPLIES (AND (NOT (ATOM X)) (ATOM (CAR X))) (O< (M2 (CC (CDR X)) (CC (CADR X))) (M2 (CC X) (CC (CAR X)))))). By the simple :definitions ATOM and M2 and the simple :rewrite rule CAR-CONS we reduce the conjecture to the following three conjectures. Subgoal 3 (O-P (CONS (CONS 1 (+ 1 (CC X))) (CC (CAR X)))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR, O-FINP-CR and POSP-CR, the :definitions O-FIRST-COEFF, O-FIRST-EXPT, O-P and O-RST, the :executable-counterparts of EQUAL, O-P and O<, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, O-FIRST-EXPT-DEF-O-FINP and O-P-DEF-O-FINP-1 and the :type- prescription rule CC. Subgoal 2 (IMPLIES (AND (CONSP X) (CONSP (CAR X))) (O< (CONS (CONS 1 (+ 1 (CC (LIST* (CAAR X) (CDAR X) (CDR X))))) (CC (CAAR X))) (CONS (CONS 1 (+ 1 (CC X))) (CC (CAR X))))). But simplification reduces this to T, using the :compound-recognizer rule O-FINP-CR, the :definitions CC, O-FIRST-COEFF, O-FIRST-EXPT, O- RST, O< and SYNP, the :executable-counterparts of BINARY-+ and EQUAL, linear arithmetic, primitive type reasoning, the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-2-OF-+, COMMUTATIVITY-OF-+, FOLD-CONSTS- IN-+ and O-FINP-< and the :type-prescription rule CC. Subgoal 1 (IMPLIES (AND (CONSP X) (NOT (CONSP (CAR X)))) (O< (CONS (CONS 1 (+ 1 (CC (CDR X)))) (CC (CADR X))) (CONS (CONS 1 (+ 1 (CC X))) (CC (CAR X))))). But simplification reduces this to T, using the :compound-recognizer rule O-FINP-CR, the :definitions CC, FIX, O-FIRST-COEFF, O-FIRST-EXPT and SYNP, the :executable-counterparts of BINARY-+ and EQUAL, linear arithmetic, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, FOLD-CONSTS-IN-+, O-FIRST-COEFF-< and UNICITY-OF-0 and the :type-prescription rule CC. Q.E.D. That completes the proof of the measure theorem for FLATTEN!. Thus, we admit this function under the principle of definition. We observe that the type of FLATTEN! is described by the theorem (AND (CONSP (FLATTEN! X)) (TRUE-LISTP (FLATTEN! X))). We used primitive type reasoning. Summary Form: ( DEFUN FLATTEN! ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:DEFINITION ATOM) (:DEFINITION CC) (:DEFINITION FIX) (:DEFINITION M2) (:DEFINITION NOT) (:DEFINITION O-FIRST-COEFF) (:DEFINITION O-FIRST-EXPT) (:DEFINITION O-P) (:DEFINITION O-RST) (:DEFINITION O<) (:DEFINITION SYNP) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART O-P) (:EXECUTABLE-COUNTERPART O<) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE O-FINP-<) (:REWRITE O-FIRST-COEFF-<) (:REWRITE O-FIRST-EXPT-DEF-O-FINP) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.38 seconds (prove: 0.33, print: 0.03, other: 0.02) FLATTEN! ACL2 >>(THEOREM PROBLEM-107 (EQUAL (FLATTEN! X) (FLATTEN X)) :HINTS (("Goal" :INDUCT (FLATTEN! X) :IN-THEORY (ENABLE PROBLEM-40)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (FLATTEN! X). This suggestion was produced using the :induction rule FLATTEN!. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ATOM X)) (NOT (ATOM (CAR X))) (:P (LIST* (CAAR X) (CDAR X) (CDR X)))) (:P X)) (IMPLIES (AND (NOT (ATOM X)) (ATOM (CAR X)) (:P (CDR X))) (:P X)) (IMPLIES (ATOM X) (:P X))). This induction is justified by the same argument used to admit FLATTEN!, namely, the measure (M2 (CC X) (CC (CAR X))) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ATOM X)) (NOT (ATOM (CAR X))) (EQUAL (FLATTEN! (LIST* (CAAR X) (CDAR X) (CDR X))) (FLATTEN (LIST* (CAAR X) (CDAR X) (CDR X))))) (EQUAL (FLATTEN! X) (FLATTEN X))). By the simple :definition ATOM we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP X) (CONSP (CAR X)) (EQUAL (FLATTEN! (LIST* (CAAR X) (CDAR X) (CDR X))) (FLATTEN (LIST* (CAAR X) (CDAR X) (CDR X))))) (EQUAL (FLATTEN! X) (FLATTEN X))). But simplification reduces this to T, using the :definitions FLATTEN and FLATTEN!, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and PROBLEM-40. Subgoal *1/2 (IMPLIES (AND (NOT (ATOM X)) (ATOM (CAR X)) (EQUAL (FLATTEN! (CDR X)) (FLATTEN (CDR X)))) (EQUAL (FLATTEN! X) (FLATTEN X))). By the simple :definition ATOM we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (CONSP (CAR X))) (EQUAL (FLATTEN! (CDR X)) (FLATTEN (CDR X)))) (EQUAL (FLATTEN! X) (FLATTEN X))). But simplification reduces this to T, using the :definitions APP, FLATTEN and FLATTEN!, the :executable-counterpart of CONSP, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/1 (IMPLIES (ATOM X) (EQUAL (FLATTEN! X) (FLATTEN X))). By the simple :definition ATOM we reduce the conjecture to Subgoal *1/1' (IMPLIES (NOT (CONSP X)) (EQUAL (FLATTEN! X) (FLATTEN X))). But simplification reduces this to T, using the :definitions FLATTEN and FLATTEN! and primitive type reasoning. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-107 ...) Rules: ((:DEFINITION APP) (:DEFINITION ATOM) (:DEFINITION FLATTEN) (:DEFINITION FLATTEN!) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION FLATTEN!) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-40)) Warnings: None Time: 0.28 seconds (prove: 0.22, print: 0.04, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-107 ACL2 >>(DEFUN GOPHER (X) (DECLARE (XARGS :MEASURE (CC (CAR X)))) (IF (OR (ATOM X) (ATOM (CAR X))) X (GOPHER (CONS (CAR (CAR X)) (CONS (CDR (CAR X)) (CDR X)))))) For the admission of GOPHER we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (CC (CAR X)). The non-trivial part of the measure conjecture is Goal (AND (O-P (CC (CAR X))) (IMPLIES (NOT (OR (ATOM X) (ATOM (CAR X)))) (O< (CC (CAR (LIST* (CAAR X) (CDAR X) (CDR X)))) (CC (CAR X))))). By the simple :rewrite rule CAR-CONS we reduce the conjecture to the following two conjectures. Subgoal 2 (O-P (CC (CAR X))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, the :rewrite rule O-P-DEF-O-FINP-1 and the :type-prescription rule CC. Subgoal 1 (IMPLIES (NOT (OR (ATOM X) (ATOM (CAR X)))) (O< (CC (CAAR X)) (CC (CAR X)))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions ATOM and O< and the :type-prescription rule CC, to Subgoal 1' (IMPLIES (AND (CONSP X) (CONSP (CAR X))) (< (CC (CAAR X)) (CC (CAR X)))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of two rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. (2) Use CAR-CDR-ELIM, again, to replace X1 by (CONS X3 X4), (CAR X1) by X3 and (CDR X1) by X4. These steps produce the following goal. Subgoal 1'' (IMPLIES (AND (CONSP (CONS X3 X4)) (CONSP (CONS (CONS X3 X4) X2))) (< (CC X3) (CC (CONS X3 X4)))). This simplifies, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS and CDR-CONS, to Subgoal 1''' (< 0 (+ 1 (CC X4))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Q.E.D. That completes the proof of the measure theorem for GOPHER. Thus, we admit this function under the principle of definition. We could deduce no constraints on the type of GOPHER. Summary Form: ( DEFUN GOPHER ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION ATOM) (:DEFINITION CC) (:DEFINITION O<) (:ELIM CAR-CDR-ELIM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE O-P-DEF-O-FINP-1) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.21 seconds (prove: 0.16, print: 0.04, other: 0.01) GOPHER ACL2 >>(THEOREM PROBLEM-108A (<= (CC (GOPHER X)) (CC X)) :HINTS (("Goal" :INDUCT (GOPHER X))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (GOPHER X). This suggestion was produced using the :induction rule GOPHER. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (OR (ATOM X) (ATOM (CAR X)))) (:P (LIST* (CAAR X) (CDAR X) (CDR X)))) (:P X)) (IMPLIES (OR (ATOM X) (ATOM (CAR X))) (:P X))). This induction is justified by the same argument used to admit GOPHER, namely, the measure (CC (CAR X)) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (AND (NOT (OR (ATOM X) (ATOM (CAR X)))) (<= (CC (GOPHER (LIST* (CAAR X) (CDAR X) (CDR X)))) (CC (LIST* (CAAR X) (CDAR X) (CDR X))))) (<= (CC (GOPHER X)) (CC X))). But simplification reduces this to T, using the :definitions ATOM, CC, GOPHER and SYNP, the :executable-counterpart of BINARY-+, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY- 2-OF-+, COMMUTATIVITY-OF-+ and FOLD-CONSTS-IN-+. Subgoal *1/1 (IMPLIES (OR (ATOM X) (ATOM (CAR X))) (<= (CC (GOPHER X)) (CC X))). This simplifies, using the :definitions ATOM, CC and GOPHER and the :executable-counterpart of <, to Subgoal *1/1' (IMPLIES (NOT (CONSP (CAR X))) (<= (CC X) (CC X))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-108A ...) Rules: ((:DEFINITION ATOM) (:DEFINITION CC) (:DEFINITION GOPHER) (:DEFINITION SYNP) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART BINARY-+) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION GOPHER) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE FOLD-CONSTS-IN-+) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.36 seconds (prove: 0.19, print: 0.16, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-108A ACL2 >>(THEOREM PROBLEM-108B (EQUAL (CONSP (GOPHER X)) (CONSP X)) :HINTS (("Goal" :INDUCT (GOPHER X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (GOPHER X). This suggestion was produced using the :induction rule GOPHER. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (OR (ATOM X) (ATOM (CAR X)))) (:P (LIST* (CAAR X) (CDAR X) (CDR X)))) (:P X)) (IMPLIES (OR (ATOM X) (ATOM (CAR X))) (:P X))). This induction is justified by the same argument used to admit GOPHER, namely, the measure (CC (CAR X)) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (AND (NOT (OR (ATOM X) (ATOM (CAR X)))) (EQUAL (CONSP (GOPHER (LIST* (CAAR X) (CDAR X) (CDR X)))) (CONSP (LIST* (CAAR X) (CDAR X) (CDR X))))) (EQUAL (CONSP (GOPHER X)) (CONSP X))). But simplification reduces this to T, using the :definitions ATOM and GOPHER, the :executable-counterpart of EQUAL and primitive type reasoning. Subgoal *1/1 (IMPLIES (OR (ATOM X) (ATOM (CAR X))) (EQUAL (CONSP (GOPHER X)) (CONSP X))). But simplification reduces this to T, using the :definitions ATOM and GOPHER, the :executable-counterpart of EQUAL and primitive type reasoning. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-108B ...) Rules: ((:DEFINITION ATOM) (:DEFINITION GOPHER) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION GOPHER)) Warnings: None Time: 0.18 seconds (prove: 0.13, print: 0.04, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-108B ACL2 >>(THEOREM PROBLEM-108C (IMPLIES (CONSP X) (< (CC (CDR X)) (CC X))) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-85))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] But simplification reduces this to T, using linear arithmetic, the :linear rule PROBLEM-85 and the :type-prescription rule CC. Q.E.D. Summary Form: ( DEFTHM PROBLEM-108C ...) Rules: ((:FAKE-RUNE-FOR-LINEAR NIL) (:LINEAR PROBLEM-85) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.03 seconds (prove: 0.01, print: 0.01, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-108C ACL2 >>(THEOREM PROBLEM-108D (IMPLIES (CONSP X) (< (CC (CDR (GOPHER X))) (CC X))) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-108A PROBLEM-108B PROBLEM-108C)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] But simplification reduces this to T, using linear arithmetic, the :linear rules PROBLEM-108A and PROBLEM-108C, the :rewrite rule PROBLEM- 108B and the :type-prescription rule CC. Q.E.D. Summary Form: ( DEFTHM PROBLEM-108D ...) Rules: ((:FAKE-RUNE-FOR-LINEAR NIL) (:LINEAR PROBLEM-108A) (:LINEAR PROBLEM-108C) (:REWRITE PROBLEM-108B) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.07 seconds (prove: 0.04, print: 0.00, other: 0.03) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-108D ACL2 >>(DEFUN SAMEFRINGE (X Y) (DECLARE (XARGS :MEASURE (CC X) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-108D))))) (IF (OR (ATOM X) (ATOM Y)) (EQUAL X Y) (AND (EQUAL (CAR (GOPHER X)) (CAR (GOPHER Y))) (SAMEFRINGE (CDR (GOPHER X)) (CDR (GOPHER Y)))))) For the admission of SAMEFRINGE we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (CC X). The non-trivial part of the measure conjecture is Goal (AND (O-P (CC X)) (IMPLIES (AND (NOT (OR (ATOM X) (ATOM Y))) (EQUAL (CAR (GOPHER X)) (CAR (GOPHER Y)))) (O< (CC (CDR (GOPHER X))) (CC X)))). [Note: A hint was supplied for our processing of the goal above. Thanks!] By case analysis we reduce the conjecture to the following two conjectures. Subgoal 2 (O-P (CC X)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, the :rewrite rule O-P-DEF-O-FINP-1 and the :type-prescription rule CC. Subgoal 1 (IMPLIES (AND (NOT (OR (ATOM X) (ATOM Y))) (EQUAL (CAR (GOPHER X)) (CAR (GOPHER Y)))) (O< (CC (CDR (GOPHER X))) (CC X))). But simplification reduces this to T, using the :compound-recognizer rule O-FINP-CR, the :definition ATOM, the :rewrite rules O-FINP-< and PROBLEM-108D and the :type-prescription rule CC. Q.E.D. That completes the proof of the measure theorem for SAMEFRINGE. Thus, we admit this function under the principle of definition. We observe that the type of SAMEFRINGE is described by the theorem (OR (EQUAL (SAMEFRINGE X Y) T) (EQUAL (SAMEFRINGE X Y) NIL)). We used primitive type reasoning. Summary Form: ( DEFUN SAMEFRINGE ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION ATOM) (:DEFINITION NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE O-FINP-<) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE PROBLEM-108D) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.15 seconds (prove: 0.09, print: 0.02, other: 0.04) SAMEFRINGE ACL2 >>(THEOREM PROBLEM-109A (EQUAL (CAR (GOPHER X)) (IF (CONSP X) (CAR (FLATTEN X)) NIL)) :HINTS (("Goal" :INDUCT (GOPHER X) :IN-THEORY (ENABLE PROBLEM-40)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (GOPHER X). This suggestion was produced using the :induction rule GOPHER. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (OR (ATOM X) (ATOM (CAR X)))) (:P (LIST* (CAAR X) (CDAR X) (CDR X)))) (:P X)) (IMPLIES (OR (ATOM X) (ATOM (CAR X))) (:P X))). This induction is justified by the same argument used to admit GOPHER, namely, the measure (CC (CAR X)) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (AND (NOT (OR (ATOM X) (ATOM (CAR X)))) (EQUAL (CAR (GOPHER (LIST* (CAAR X) (CDAR X) (CDR X)))) (AND (CONSP (LIST* (CAAR X) (CDAR X) (CDR X))) (CAR (FLATTEN (LIST* (CAAR X) (CDAR X) (CDR X))))))) (EQUAL (CAR (GOPHER X)) (AND (CONSP X) (CAR (FLATTEN X))))). But simplification reduces this to T, using the :definitions ATOM, FLATTEN and GOPHER, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and PROBLEM-40. Subgoal *1/1 (IMPLIES (OR (ATOM X) (ATOM (CAR X))) (EQUAL (CAR (GOPHER X)) (AND (CONSP X) (CAR (FLATTEN X))))). This simplifies, using the :definitions ATOM and GOPHER, the :executable- counterpart of EQUAL and the :rewrite rule DEFAULT-CAR, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (NOT (CONSP (CAR X))) (CONSP X)) (EQUAL (CAR X) (CAR (FLATTEN X)))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/1.2' (IMPLIES (AND (CONSP (CONS X1 X2)) (NOT (CONSP X1))) (EQUAL X1 (CAR (FLATTEN (CONS X1 X2))))). But simplification reduces this to T, using the :definitions APP and FLATTEN, the :executable-counterpart of CONSP, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/1.1 (IMPLIES (AND (NOT (CONSP (CAR X))) (NOT (CONSP X))) (EQUAL (CAR X) NIL)). But simplification reduces this to T, using trivial observations. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-109A ...) Rules: ((:DEFINITION APP) (:DEFINITION ATOM) (:DEFINITION FLATTEN) (:DEFINITION GOPHER) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION GOPHER) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE DEFAULT-CAR) (:REWRITE PROBLEM-40)) Warnings: None Time: 0.31 seconds (prove: 0.27, print: 0.03, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-109A ACL2 >>(THEOREM PROBLEM-109B (EQUAL (FLATTEN (CDR (GOPHER X))) (IF (CONSP X) (CDR (FLATTEN X)) (CONS NIL NIL))) :HINTS (("Goal" :INDUCT (GOPHER X) :IN-THEORY (ENABLE PROBLEM-40)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (GOPHER X). This suggestion was produced using the :induction rule GOPHER. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (OR (ATOM X) (ATOM (CAR X)))) (:P (LIST* (CAAR X) (CDAR X) (CDR X)))) (:P X)) (IMPLIES (OR (ATOM X) (ATOM (CAR X))) (:P X))). This induction is justified by the same argument used to admit GOPHER, namely, the measure (CC (CAR X)) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (AND (NOT (OR (ATOM X) (ATOM (CAR X)))) (EQUAL (FLATTEN (CDR (GOPHER (LIST* (CAAR X) (CDAR X) (CDR X))))) (IF (CONSP (LIST* (CAAR X) (CDAR X) (CDR X))) (CDR (FLATTEN (LIST* (CAAR X) (CDAR X) (CDR X)))) '(NIL)))) (EQUAL (FLATTEN (CDR (GOPHER X))) (IF (CONSP X) (CDR (FLATTEN X)) '(NIL)))). But simplification reduces this to T, using the :definitions ATOM, FLATTEN and GOPHER, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and PROBLEM-40. Subgoal *1/1 (IMPLIES (OR (ATOM X) (ATOM (CAR X))) (EQUAL (FLATTEN (CDR (GOPHER X))) (IF (CONSP X) (CDR (FLATTEN X)) '(NIL)))). This simplifies, using the :definitions ATOM and GOPHER, the :executable- counterparts of EQUAL and FLATTEN and the :rewrite rule DEFAULT-CDR, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (NOT (CONSP (CAR X))) (CONSP X)) (EQUAL (FLATTEN (CDR X)) (CDR (FLATTEN X)))). But simplification reduces this to T, using the :definitions APP and FLATTEN, the :executable-counterpart of CONSP, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/1.1 (IMPLIES (AND (NOT (CONSP (CAR X))) (NOT (CONSP X))) (EQUAL (FLATTEN (CDR X)) '(NIL))). But simplification reduces this to T, using the :executable-counterparts of CONSP, EQUAL and FLATTEN and the :rewrite rules DEFAULT-CAR and DEFAULT-CDR. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-109B ...) Rules: ((:DEFINITION APP) (:DEFINITION ATOM) (:DEFINITION FLATTEN) (:DEFINITION GOPHER) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART FLATTEN) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION GOPHER) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE DEFAULT-CAR) (:REWRITE DEFAULT-CDR) (:REWRITE PROBLEM-40)) Warnings: None Time: 0.46 seconds (prove: 0.23, print: 0.22, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-109B ACL2 >>(THEOREM PROBLEM-109C (EQUAL (EQUAL (CONS E NIL) (APP X Y)) (IF (CONSP X) (AND (EQUAL (CAR X) E) (ATOM (CDR X)) (EQUAL Y NIL)) (EQUAL Y (CONS E NIL)))) :HINTS (("Goal" :INDUCT (APP X Y)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP X Y). This suggestion was produced using the :induction rule APP. If we let (:P E X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P E X Y)) (IMPLIES (AND (CONSP X) (:P E (CDR X) Y)) (:P E X Y))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (EQUAL (LIST E) (APP X Y)) (IF (CONSP X) (AND (EQUAL (CAR X) E) (ATOM (CDR X)) (EQUAL Y NIL)) (EQUAL Y (LIST E))))). This simplifies, using the :definition APP and primitive type reasoning, to Subgoal *1/2' (IMPLIES (AND (NOT (CONSP X)) (EQUAL (LIST E) Y)) (EQUAL (EQUAL Y (LIST E)) T)). But simplification reduces this to T, using the :executable-counterpart of EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (EQUAL (LIST E) (APP (CDR X) Y)) (IF (CONSP (CDR X)) (AND (EQUAL (CADR X) E) (ATOM (CDDR X)) (EQUAL Y NIL)) (EQUAL Y (LIST E))))) (EQUAL (EQUAL (LIST E) (APP X Y)) (IF (CONSP X) (AND (EQUAL (CAR X) E) (ATOM (CDR X)) (EQUAL Y NIL)) (EQUAL Y (LIST E))))). This simplifies, using the :definitions APP and ATOM, the :executable- counterpart of EQUAL, primitive type reasoning, the :rewrite rules CDR-CONS and CONS-EQUAL and the :type-prescription rule APP, to the following four conjectures. Subgoal *1/1.4 (IMPLIES (AND (CONSP X) (NOT (EQUAL (LIST E) (APP (CDR X) Y))) (CONSP (CDR X)) (CONSP (CDDR X)) (EQUAL E (CAR X))) (APP (CDR X) Y)). This simplifies, using the :definition APP, primitive type reasoning and the :rewrite rule CONS-EQUAL, to the following two conjectures. Subgoal *1/1.4.2 (IMPLIES (AND (CONSP X) (NOT (EQUAL (CAR X) (CADR X))) (CONSP (CDR X)) (CONSP (CDDR X))) (CONS (CADR X) (APP (CDDR X) Y))). But simplification reduces this to T, using primitive type reasoning. Subgoal *1/1.4.1 (IMPLIES (AND (CONSP X) (APP (CDDR X) Y) (CONSP (CDR X)) (CONSP (CDDR X))) (CONS (CADR X) (APP (CDDR X) Y))). But simplification reduces this to T, using primitive type reasoning. Subgoal *1/1.3 (IMPLIES (AND (CONSP X) (NOT (EQUAL (LIST E) (APP (CDR X) Y))) (NOT (CONSP (CDR X))) (NOT (EQUAL Y (LIST E))) (EQUAL E (CAR X)) (NOT (APP (CDR X) Y))) (NOT Y)). But simplification reduces this to T, using the :type-prescription rule APP. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (NOT (EQUAL (LIST E) (APP (CDR X) NIL))) (NOT (CONSP (CDR X))) (LIST E) (EQUAL E (CAR X)) (APP (CDR X) NIL)) Y). But simplification reduces this to T, using the :definition APP and primitive type reasoning. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (NOT (EQUAL (LIST E) (APP (CDR X) Y))) (CONSP (CDR X)) (NOT (EQUAL (CADR X) E)) (EQUAL E (CAR X))) (APP (CDR X) Y)). This simplifies, using primitive type reasoning, to Subgoal *1/1.1' (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (NOT (EQUAL (CADR X) (CAR X)))) (APP (CDR X) Y)). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of two rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. These steps produce the following goal. Subgoal *1/1.1'' (IMPLIES (AND (CONSP (CONS X3 X4)) (CONSP (LIST* X1 X3 X4)) (NOT (EQUAL X3 X1))) (APP (CONS X3 X4) Y)). This simplifies, using the :definition APP, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal *1/1.1''' (IMPLIES (NOT (EQUAL X3 X1)) (CONS X3 (APP X4 Y))). But simplification reduces this to T, using primitive type reasoning. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-109C ...) Rules: ((:DEFINITION APP) (:DEFINITION ATOM) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE CONS-EQUAL) (:TYPE-PRESCRIPTION APP)) Warnings: None Time: 0.17 seconds (prove: 0.05, print: 0.12, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-109C ACL2 >>(THEOREM PROBLEM-109D (EQUAL (EQUAL (FLATTEN X) (CONS A NIL)) (AND (ATOM X) (EQUAL X A))) :HINTS (("Goal" :INDUCT (FLATTEN X) :IN-THEORY (ENABLE PROBLEM-40 PROBLEM-109C)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (FLATTEN X). This suggestion was produced using the :induction rule FLATTEN. If we let (:P A X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P A X)) (IMPLIES (AND (CONSP X) (:P A (CAR X)) (:P A (CDR X))) (:P A X))). This induction is justified by the same argument used to admit FLATTEN, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (EQUAL (FLATTEN X) (LIST A)) (AND (ATOM X) (EQUAL X A)))). But simplification reduces this to T, using the :definition FLATTEN, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rule CONS-EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (EQUAL (FLATTEN (CAR X)) (LIST A)) (AND (ATOM (CAR X)) (EQUAL (CAR X) A))) (EQUAL (EQUAL (FLATTEN (CDR X)) (LIST A)) (AND (ATOM (CDR X)) (EQUAL (CDR X) A)))) (EQUAL (EQUAL (FLATTEN X) (LIST A)) (AND (ATOM X) (EQUAL X A)))). But simplification reduces this to T, using the :definitions ATOM and FLATTEN, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules PROBLEM-109C and PROBLEM-40 and the :type-prescription rules APP and FLATTEN. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-109D ...) Rules: ((:DEFINITION ATOM) (:DEFINITION FLATTEN) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION FLATTEN) (:REWRITE CONS-EQUAL) (:REWRITE PROBLEM-109C) (:REWRITE PROBLEM-40) (:TYPE-PRESCRIPTION APP) (:TYPE-PRESCRIPTION FLATTEN)) Warnings: None Time: 0.10 seconds (prove: 0.06, print: 0.02, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-109D ACL2 >>(THEOREM PROBLEM-109 (EQUAL (SAMEFRINGE X Y) (EQUAL (FLATTEN X) (FLATTEN Y))) :HINTS (("Goal" :INDUCT (SAMEFRINGE X Y) :IN-THEORY (ENABLE PROBLEM-109A PROBLEM-109B PROBLEM-109D)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (SAMEFRINGE X Y). This suggestion was produced using the :induction rule SAMEFRINGE. If we let (:P X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (OR (ATOM X) (ATOM Y))) (NOT (EQUAL (CAR (GOPHER X)) (CAR (GOPHER Y))))) (:P X Y)) (IMPLIES (AND (NOT (OR (ATOM X) (ATOM Y))) (EQUAL (CAR (GOPHER X)) (CAR (GOPHER Y))) (:P (CDR (GOPHER X)) (CDR (GOPHER Y)))) (:P X Y)) (IMPLIES (OR (ATOM X) (ATOM Y)) (:P X Y))). This induction is justified by the same argument used to admit SAMEFRINGE, namely, the measure (CC X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable Y is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (OR (ATOM X) (ATOM Y))) (NOT (EQUAL (CAR (GOPHER X)) (CAR (GOPHER Y))))) (EQUAL (SAMEFRINGE X Y) (EQUAL (FLATTEN X) (FLATTEN Y)))). But simplification reduces this to T, using the :definitions ATOM and SAMEFRINGE, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rule PROBLEM-109A and the :type-prescription rule FLATTEN. Subgoal *1/2 (IMPLIES (AND (NOT (OR (ATOM X) (ATOM Y))) (EQUAL (CAR (GOPHER X)) (CAR (GOPHER Y))) (EQUAL (SAMEFRINGE (CDR (GOPHER X)) (CDR (GOPHER Y))) (EQUAL (FLATTEN (CDR (GOPHER X))) (FLATTEN (CDR (GOPHER Y)))))) (EQUAL (SAMEFRINGE X Y) (EQUAL (FLATTEN X) (FLATTEN Y)))). But simplification reduces this to T, using the :definitions ATOM and SAMEFRINGE, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules PROBLEM-109A and PROBLEM-109B and the :type-prescription rule FLATTEN. Subgoal *1/1 (IMPLIES (OR (ATOM X) (ATOM Y)) (EQUAL (SAMEFRINGE X Y) (EQUAL (FLATTEN X) (FLATTEN Y)))). This simplifies, using the :definitions ATOM, FLATTEN and SAMEFRINGE, primitive type reasoning and the :rewrite rule PROBLEM-109D, to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP X)) (EQUAL X Y)) (NOT (CONSP Y))). But simplification reduces this to T, using trivial observations. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-109 ...) Rules: ((:DEFINITION ATOM) (:DEFINITION FLATTEN) (:DEFINITION SAMEFRINGE) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION SAMEFRINGE) (:REWRITE PROBLEM-109A) (:REWRITE PROBLEM-109B) (:REWRITE PROBLEM-109D) (:TYPE-PRESCRIPTION FLATTEN)) Warnings: None Time: 0.41 seconds (prove: 0.35, print: 0.05, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-109 ACL2 >>(DEFUN REL (FN X Y) (IF (EQUAL FN '<<=) (<<= X Y) (IF (EQUAL FN '>>=) (<<= Y X) (IF (EQUAL FN '<<) (AND (<<= X Y) (NOT (EQUAL X Y))) (AND (<<= Y X) (NOT (EQUAL X Y))))))) Since REL is non-recursive, its admission is trivial. We observe that the type of REL is described by the theorem (OR (EQUAL (REL FN X Y) T) (EQUAL (REL FN X Y) NIL)). We used the :type-prescription rule <<=. Summary Form: ( DEFUN REL ...) Rules: ((:TYPE-PRESCRIPTION <<=)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.01, other: 0.02) REL ACL2 >>(DEFUN FILTER (FN X E) (COND ((ENDP X) NIL) ((REL FN (CAR X) E) (CONS (CAR X) (FILTER FN (CDR X) E))) (T (FILTER FN (CDR X) E)))) The admission of FILTER is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of FILTER is described by the theorem (TRUE-LISTP (FILTER FN X E)). We used primitive type reasoning. Summary Form: ( DEFUN FILTER ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) FILTER ACL2 >>(THEOREM PROBLEM-111A (<= (CC (FILTER FN X E)) (CC X)) :HINTS (("Goal" :INDUCT (CC X))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (CC X). This suggestion was produced using the :induction rule CC. If we let (:P E FN X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P E FN X)) (IMPLIES (AND (CONSP X) (:P E FN (CAR X)) (:P E FN (CDR X))) (:P E FN X))). This induction is justified by the same argument used to admit CC, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (<= (CC (FILTER FN X E)) (CC X))). But simplification reduces this to T, using the :definitions CC and FILTER and the :executable-counterparts of < and CC. Subgoal *1/1 (IMPLIES (AND (CONSP X) (<= (CC (FILTER FN (CAR X) E)) (CC (CAR X))) (<= (CC (FILTER FN (CDR X) E)) (CC (CDR X)))) (<= (CC (FILTER FN X E)) (CC X))). This simplifies, using the :definitions <<=, CC, FILTER and REL and the :executable-counterpart of EQUAL, to the following ten conjectures. Subgoal *1/1.10 (IMPLIES (AND (CONSP X) (<= (CC (FILTER '<<= (CAR X) E)) (CC (CAR X))) (<= (CC (FILTER '<<= (CDR X) E)) (CC (CDR X))) (EQUAL FN '<<=) (LEXORDER (CAR X) E)) (<= (CC (CONS (CAR X) (FILTER '<<= (CDR X) E))) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER. Subgoal *1/1.9 (IMPLIES (AND (CONSP X) (<= (CC (FILTER '<<= (CAR X) E)) (CC (CAR X))) (<= (CC (FILTER '<<= (CDR X) E)) (CC (CDR X))) (EQUAL FN '<<=) (NOT (LEXORDER (CAR X) E))) (<= (CC (FILTER '<<= (CDR X) E)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *1/1.8 (IMPLIES (AND (CONSP X) (<= (CC (FILTER FN (CAR X) E)) (CC (CAR X))) (<= (CC (FILTER FN (CDR X) E)) (CC (CDR X))) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (LEXORDER E (CAR X)) (EQUAL (CAR X) E)) (<= (CC (FILTER FN (CDR X) E)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *1/1.7 (IMPLIES (AND (CONSP X) (<= (CC (FILTER '>>= (CAR X) E)) (CC (CAR X))) (<= (CC (FILTER '>>= (CDR X) E)) (CC (CDR X))) (EQUAL FN '>>=) (NOT (LEXORDER E (CAR X)))) (<= (CC (FILTER '>>= (CDR X) E)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *1/1.6 (IMPLIES (AND (CONSP X) (<= (CC (FILTER '>>= (CAR X) E)) (CC (CAR X))) (<= (CC (FILTER '>>= (CDR X) E)) (CC (CDR X))) (EQUAL FN '>>=) (LEXORDER E (CAR X))) (<= (CC (CONS (CAR X) (FILTER '>>= (CDR X) E))) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER. Subgoal *1/1.5 (IMPLIES (AND (CONSP X) (<= (CC (FILTER '<< (CAR X) E)) (CC (CAR X))) (<= (CC (FILTER '<< (CDR X) E)) (CC (CDR X))) (EQUAL FN '<<) (EQUAL (CAR X) E)) (<= (CC (FILTER '<< (CDR X) E)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *1/1.4 (IMPLIES (AND (CONSP X) (<= (CC (FILTER FN (CAR X) E)) (CC (CAR X))) (<= (CC (FILTER FN (CDR X) E)) (CC (CDR X))) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E (CAR X)))) (<= (CC (FILTER FN (CDR X) E)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *1/1.3 (IMPLIES (AND (CONSP X) (<= (CC (FILTER FN (CAR X) E)) (CC (CAR X))) (<= (CC (FILTER FN (CDR X) E)) (CC (CDR X))) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E))) (<= (CC (CONS (CAR X) (FILTER FN (CDR X) E))) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (<= (CC (FILTER '<< (CAR X) E)) (CC (CAR X))) (<= (CC (FILTER '<< (CDR X) E)) (CC (CDR X))) (EQUAL FN '<<) (NOT (LEXORDER (CAR X) E))) (<= (CC (FILTER '<< (CDR X) E)) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (<= (CC (FILTER '<< (CAR X) E)) (CC (CAR X))) (<= (CC (FILTER '<< (CDR X) E)) (CC (CDR X))) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E))) (<= (CC (CONS (CAR X) (FILTER '<< (CDR X) E))) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111A ...) Rules: ((:DEFINITION <<=) (:DEFINITION CC) (:DEFINITION FILTER) (:DEFINITION REL) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART CC) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION CC) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION CC) (:TYPE-PRESCRIPTION FILTER)) Warnings: None Time: 0.73 seconds (prove: 0.55, print: 0.17, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-111A ACL2 >>(DEFUN QSORT (X) (DECLARE (XARGS :MEASURE (CC X))) (IF (ENDP X) NIL (IF (ENDP (CDR X)) X (APP (QSORT (FILTER '<< (CDR X) (CAR X))) (CONS (CAR X) (QSORT (FILTER '>>= (CDR X) (CAR X)))))))) For the admission of QSORT we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (CC X). The non-trivial part of the measure conjecture is Goal (AND (O-P (CC X)) (IMPLIES (AND (NOT (ENDP X)) (NOT (ENDP (CDR X)))) (O< (CC (FILTER '>>= (CDR X) (CAR X))) (CC X))) (IMPLIES (AND (NOT (ENDP X)) (NOT (ENDP (CDR X)))) (O< (CC (FILTER '<< (CDR X) (CAR X))) (CC X)))). By the simple :definition ENDP we reduce the conjecture to the following three conjectures. Subgoal 3 (O-P (CC X)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, the :rewrite rule O-P-DEF-O-FINP-1 and the :type-prescription rule CC. Subgoal 2 (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (O< (CC (FILTER '>>= (CDR X) (CAR X))) (CC X))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions CC and O<, primitive type reasoning and the :type-prescription rule CC, to Subgoal 2' (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (< (CC (FILTER '>>= (CDR X) (CAR X))) (+ 1 (CC (CAR X)) (CC (CDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal 2'' (IMPLIES (AND (CONSP (CONS X1 X2)) (CONSP X2)) (< (CC (FILTER '>>= X2 X1)) (+ 1 (CC X1) (CC X2)))). This simplifies, using primitive type reasoning, to Subgoal 2''' (IMPLIES (CONSP X2) (< (CC (FILTER '>>= X2 X1)) (+ 1 (CC X1) (CC X2)))). Name the formula above *1. Subgoal 1 (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (O< (CC (FILTER '<< (CDR X) (CAR X))) (CC X))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions CC and O<, primitive type reasoning and the :type-prescription rule CC, to Subgoal 1' (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (< (CC (FILTER '<< (CDR X) (CAR X))) (+ 1 (CC (CAR X)) (CC (CDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal 1'' (IMPLIES (AND (CONSP (CONS X1 X2)) (CONSP X2)) (< (CC (FILTER '<< X2 X1)) (+ 1 (CC X1) (CC X2)))). This simplifies, using primitive type reasoning, to Subgoal 1''' (IMPLIES (CONSP X2) (< (CC (FILTER '<< X2 X1)) (+ 1 (CC X1) (CC X2)))). Name the formula above *2. Perhaps we can prove *2 by induction. Three induction schemes are suggested by this conjecture. These merge into two derived induction schemes. However, one of these is flawed and so we are left with one viable candidate. We will induct according to a scheme suggested by (CC X2), but modified to accommodate (FILTER '<< X2 X1). These suggestions were produced using the :induction rules CC and FILTER. If we let (:P X1 X2) denote *2 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X2)) (:P X1 X2)) (IMPLIES (AND (CONSP X2) (:P X1 (CAR X2)) (:P X1 (CDR X2))) (:P X1 X2))). This induction is justified by the same argument used to admit CC, namely, the measure (ACL2-COUNT X2) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following four nontautological subgoals. Subgoal *2/4 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '<< (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2))))) (< (CC (FILTER '<< X2 X1)) (+ 1 (CC X1) (CC X2)))). This simplifies, using the :definitions <<=, CC, FILTER, REL and SYNP, the :executable-counterparts of BINARY-+ and EQUAL and the :rewrite rules COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to the following three conjectures. Subgoal *2/4.3 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '<< (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (NOT (LEXORDER (CAR X2) X1))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *2/4.2 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '<< (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (LEXORDER (CAR X2) X1) (NOT (EQUAL (CAR X2) X1))) (< (CC (CONS (CAR X2) (FILTER '<< (CDR X2) X1))) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER, to Subgoal *2/4.2' (IMPLIES (AND (CONSP X2) (< (CC (FILTER '<< (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (LEXORDER (CAR X2) X1) (NOT (EQUAL (CAR X2) X1))) (< (+ 1 (CC (FILTER '<< (CDR X2) X1))) (+ 2 (CC X1) (CC (CDR X2))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *2/4.1 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '<< (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (EQUAL (CAR X2) X1)) (< (CC (FILTER '<< (CDR X2) X1)) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *2/3 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2))))) (< (CC (FILTER '<< X2 X1)) (+ 1 (CC X1) (CC X2)))). This simplifies, using the :definitions <<=, CC, FILTER, REL and SYNP, the :executable-counterparts of BINARY-+ and EQUAL and the :rewrite rules COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to the following three conjectures. Subgoal *2/3.3 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (NOT (LEXORDER (CAR X2) X1))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *2/3.2 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (LEXORDER (CAR X2) X1) (NOT (EQUAL (CAR X2) X1))) (< (CC (CONS (CAR X2) (FILTER '<< (CDR X2) X1))) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definitions CC and FIX, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS and UNICITY-OF-0 and the :type-prescription rules CC and FILTER, to Subgoal *2/3.2' (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (LEXORDER (CAR X2) X1) (NOT (EQUAL (CAR X2) X1))) (< (+ 1 (CC (FILTER '<< (CDR X2) X1))) (+ 2 (CC X1) (CC (CDR X2))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *2/3.1 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (EQUAL (CAR X2) X1)) (< (CC (FILTER '<< (CDR X2) X1)) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *2/2 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '<< (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (NOT (CONSP (CDR X2)))) (< (CC (FILTER '<< X2 X1)) (+ 1 (CC X1) (CC X2)))). This simplifies, using the :definitions <<=, CC, FILTER, REL and SYNP, the :executable-counterparts of BINARY-+ and EQUAL and the :rewrite rules COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to the following three conjectures. Subgoal *2/2.3 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '<< (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (NOT (CONSP (CDR X2))) (NOT (LEXORDER (CAR X2) X1))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definitions CC, FILTER and FIX, the :executable- counterpart of CC, the :rewrite rules COMMUTATIVITY-OF-+ and UNICITY- OF-0 and the :type-prescription rule CC, to Subgoal *2/2.3' (IMPLIES (AND (CONSP X2) (< (CC (FILTER '<< (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (NOT (CONSP (CDR X2))) (NOT (LEXORDER (CAR X2) X1))) (< 0 (+ 2 (CC X1) (CC (CAR X2))))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal *2/2.2 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '<< (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (NOT (CONSP (CDR X2))) (LEXORDER (CAR X2) X1) (NOT (EQUAL (CAR X2) X1))) (< (CC (CONS (CAR X2) (FILTER '<< (CDR X2) X1))) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definitions CC, FILTER and FIX, the :executable- counterpart of CC, primitive type reasoning, the :meta rule CANCEL_- PLUS-LESSP-CORRECT, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY- OF-+ and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal *2/2.2' (IMPLIES (AND (CONSP X2) (< (CC (FILTER '<< (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (NOT (CONSP (CDR X2))) (LEXORDER (CAR X2) X1) (NOT (EQUAL (CAR X2) X1))) (< 1 (+ 2 (CC X1)))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *2/2.1 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '<< (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (NOT (CONSP (CDR X2))) (EQUAL (CAR X2) X1)) (< (CC (FILTER '<< (CDR X2) X1)) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definitions CC, FILTER and FIX, the :executable- counterpart of CC, the :rewrite rules COMMUTATIVITY-OF-+ and UNICITY- OF-0 and the :type-prescription rule CC, to Subgoal *2/2.1' (IMPLIES (AND (CONSP X2) (< (CC (FILTER '<< (CAR X2) (CAR X2))) (+ 1 (CC (CAR X2)) (CC (CAR X2)))) (NOT (CONSP (CDR X2)))) (< 0 (+ 2 (CC (CAR X2)) (CC (CAR X2))))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal *2/1 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (NOT (CONSP (CDR X2)))) (< (CC (FILTER '<< X2 X1)) (+ 1 (CC X1) (CC X2)))). This simplifies, using the :definitions <<=, CC, FILTER, REL and SYNP, the :executable-counterparts of BINARY-+ and EQUAL and the :rewrite rules COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to the following three conjectures. Subgoal *2/1.3 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (NOT (CONSP (CDR X2))) (NOT (LEXORDER (CAR X2) X1))) (< (CC (FILTER '<< (CDR X2) X1)) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definitions CC, FILTER and FIX, the :executable- counterparts of BINARY-+ and CC, the :rewrite rules COMMUTATIVITY-OF- + and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal *2/1.3' (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (NOT (CONSP (CDR X2))) (NOT (LEXORDER (CAR X2) X1))) (< 0 (+ 2 (CC X1)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal *2/1.2 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (NOT (CONSP (CDR X2))) (LEXORDER (CAR X2) X1) (NOT (EQUAL (CAR X2) X1))) (< (CC (CONS (CAR X2) (FILTER '<< (CDR X2) X1))) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definitions CC, FILTER and FIX, the :executable- counterparts of BINARY-+ and CC, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY-OF-+ and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal *2/1.2' (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (NOT (CONSP (CDR X2))) (LEXORDER (CAR X2) X1) (NOT (EQUAL (CAR X2) X1))) (< 1 (+ 2 (CC X1)))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *2/1.1 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (NOT (CONSP (CDR X2))) (EQUAL (CAR X2) X1)) (< (CC (FILTER '<< (CDR X2) X1)) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). But simplification reduces this to T, using the :definitions CC and FILTER and the :executable-counterparts of <, BINARY-+ and CC. That completes the proof of *2. We therefore turn our attention to *1, which is (IMPLIES (CONSP X2) (< (CC (FILTER '>>= X2 X1)) (+ 1 (CC X1) (CC X2)))). Perhaps we can prove *1 by induction. Three induction schemes are suggested by this conjecture. These merge into two derived induction schemes. However, one of these is flawed and so we are left with one viable candidate. We will induct according to a scheme suggested by (CC X2), but modified to accommodate (FILTER '>>= X2 X1). These suggestions were produced using the :induction rules CC and FILTER. If we let (:P X1 X2) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X2)) (:P X1 X2)) (IMPLIES (AND (CONSP X2) (:P X1 (CAR X2)) (:P X1 (CDR X2))) (:P X1 X2))). This induction is justified by the same argument used to admit CC, namely, the measure (ACL2-COUNT X2) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following four nontautological subgoals. Subgoal *1/4 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '>>= (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (< (CC (FILTER '>>= (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2))))) (< (CC (FILTER '>>= X2 X1)) (+ 1 (CC X1) (CC X2)))). This simplifies, using the :definitions <<=, CC, FILTER, REL and SYNP, the :executable-counterparts of BINARY-+ and EQUAL and the :rewrite rules COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to the following two conjectures. Subgoal *1/4.2 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '>>= (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (< (CC (FILTER '>>= (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (LEXORDER X1 (CAR X2))) (< (CC (CONS (CAR X2) (FILTER '>>= (CDR X2) X1))) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER, to Subgoal *1/4.2' (IMPLIES (AND (CONSP X2) (< (CC (FILTER '>>= (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (< (CC (FILTER '>>= (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (LEXORDER X1 (CAR X2))) (< (+ 1 (CC (FILTER '>>= (CDR X2) X1))) (+ 2 (CC X1) (CC (CDR X2))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *1/4.1 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '>>= (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (< (CC (FILTER '>>= (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (NOT (LEXORDER X1 (CAR X2)))) (< (CC (FILTER '>>= (CDR X2) X1)) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *1/3 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (< (CC (FILTER '>>= (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2))))) (< (CC (FILTER '>>= X2 X1)) (+ 1 (CC X1) (CC X2)))). This simplifies, using the :definitions <<=, CC, FILTER, REL and SYNP, the :executable-counterparts of BINARY-+ and EQUAL and the :rewrite rules COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to the following two conjectures. Subgoal *1/3.2 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (< (CC (FILTER '>>= (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (LEXORDER X1 (CAR X2))) (< (CC (CONS (CAR X2) (FILTER '>>= (CDR X2) X1))) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definitions CC and FIX, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS and UNICITY-OF-0 and the :type-prescription rules CC and FILTER, to Subgoal *1/3.2' (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (< (CC (FILTER '>>= (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (LEXORDER X1 (CAR X2))) (< (+ 1 (CC (FILTER '>>= (CDR X2) X1))) (+ 2 (CC X1) (CC (CDR X2))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *1/3.1 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (< (CC (FILTER '>>= (CDR X2) X1)) (+ 1 (CC X1) (CC (CDR X2)))) (NOT (LEXORDER X1 (CAR X2)))) (< (CC (FILTER '>>= (CDR X2) X1)) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *1/2 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '>>= (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (NOT (CONSP (CDR X2)))) (< (CC (FILTER '>>= X2 X1)) (+ 1 (CC X1) (CC X2)))). This simplifies, using the :definitions <<=, CC, FILTER, REL and SYNP, the :executable-counterparts of BINARY-+ and EQUAL and the :rewrite rules COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to the following two conjectures. Subgoal *1/2.2 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '>>= (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (NOT (CONSP (CDR X2))) (LEXORDER X1 (CAR X2))) (< (CC (CONS (CAR X2) (FILTER '>>= (CDR X2) X1))) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definitions CC, FILTER and FIX, the :executable- counterpart of CC, primitive type reasoning, the :meta rule CANCEL_- PLUS-LESSP-CORRECT, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY- OF-+ and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal *1/2.2' (IMPLIES (AND (CONSP X2) (< (CC (FILTER '>>= (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (NOT (CONSP (CDR X2))) (LEXORDER X1 (CAR X2))) (< 1 (+ 2 (CC X1)))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/2.1 (IMPLIES (AND (CONSP X2) (< (CC (FILTER '>>= (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (NOT (CONSP (CDR X2))) (NOT (LEXORDER X1 (CAR X2)))) (< (CC (FILTER '>>= (CDR X2) X1)) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definitions CC, FILTER and FIX, the :executable- counterpart of CC, the :rewrite rules COMMUTATIVITY-OF-+ and UNICITY- OF-0 and the :type-prescription rule CC, to Subgoal *1/2.1' (IMPLIES (AND (CONSP X2) (< (CC (FILTER '>>= (CAR X2) X1)) (+ 1 (CC X1) (CC (CAR X2)))) (NOT (CONSP (CDR X2))) (NOT (LEXORDER X1 (CAR X2)))) (< 0 (+ 2 (CC X1) (CC (CAR X2))))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal *1/1 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (NOT (CONSP (CDR X2)))) (< (CC (FILTER '>>= X2 X1)) (+ 1 (CC X1) (CC X2)))). This simplifies, using the :definitions <<=, CC, FILTER, REL and SYNP, the :executable-counterparts of BINARY-+ and EQUAL and the :rewrite rules COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (NOT (CONSP (CDR X2))) (LEXORDER X1 (CAR X2))) (< (CC (CONS (CAR X2) (FILTER '>>= (CDR X2) X1))) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definitions CC, FILTER and FIX, the :executable- counterparts of BINARY-+ and CC, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY-OF-+ and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal *1/1.2' (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (NOT (CONSP (CDR X2))) (LEXORDER X1 (CAR X2))) (< 1 (+ 2 (CC X1)))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/1.1 (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (NOT (CONSP (CDR X2))) (NOT (LEXORDER X1 (CAR X2)))) (< (CC (FILTER '>>= (CDR X2) X1)) (+ 2 (CC X1) (CC (CAR X2)) (CC (CDR X2))))). This simplifies, using the :definitions CC, FILTER and FIX, the :executable- counterparts of BINARY-+ and CC, the :rewrite rules COMMUTATIVITY-OF- + and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal *1/1.1' (IMPLIES (AND (CONSP X2) (NOT (CONSP (CAR X2))) (NOT (CONSP (CDR X2))) (NOT (LEXORDER X1 (CAR X2)))) (< 0 (+ 2 (CC X1)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. That completes the proof of *1. Q.E.D. That completes the proof of the measure theorem for QSORT. Thus, we admit this function under the principle of definition. We observe that the type of QSORT is described by the theorem (OR (CONSP (QSORT X)) (EQUAL (QSORT X) NIL)). We used primitive type reasoning and the :type-prescription rule APP. Summary Form: ( DEFUN QSORT ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION <<=) (:DEFINITION CC) (:DEFINITION ENDP) (:DEFINITION FILTER) (:DEFINITION FIX) (:DEFINITION O<) (:DEFINITION REL) (:DEFINITION SYNP) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART CC) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION CC) (:INDUCTION FILTER) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION APP) (:TYPE-PRESCRIPTION CC) (:TYPE-PRESCRIPTION FILTER)) Warnings: None Time: 1.22 seconds (prove: 0.67, print: 0.53, other: 0.02) QSORT ACL2 >>(THEOREM PROBLEM-111B (AND (BOOLEANP (PERM X Y)) (PERM X X) (IMPLIES (PERM X Y) (PERM Y X)) (IMPLIES (AND (PERM X Y) (PERM Y Z)) (PERM X Z))) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-53 PROBLEM-54 PROBLEM-55))) :RULE-CLASSES (:EQUIVALENCE)) ACL2 Warning [Equiv] in ( DEFTHM PROBLEM-111B ...): Any lemma about (PERM X Y), proved before PERM is marked as an equivalence relation, is stored so as to rewrite (PERM X Y) to T. After PERM is known to be an equivalence relation, such a rule would rewrite the left-hand side to the right-hand side, preserving PERM. You have previously proved three possibly problematic rules about PERM, namely PROBLEM- 59, PROBLEM-59A and PROBLEM-55E. After PERM is marked as an equivalence relation you should reconsider each problematic rule. If the rule is merely in support of establishing that PERM is an equivalence relation, it may be appropriate to disable it permanently hereafter. If the rule is now intended to rewrite left to right, you must prove the lemma again after PERM is known to be an equivalence relation. [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :rewrite rule PROBLEM-53 we reduce the conjecture to the following three conjectures. Subgoal 3 (BOOLEANP (PERM X Y)). But we reduce the conjecture to T, by the :compound-recognizer rule BOOLEANP-COMPOUND-RECOGNIZER and the :type-prescription rule PERM. Subgoal 2 (IMPLIES (PERM X Y) (PERM Y X)). But simplification reduces this to T, using the :rewrite rule PROBLEM- 54 and the :type-prescription rule PERM. Subgoal 1 (IMPLIES (AND (PERM X Y) (PERM Y Z)) (PERM X Z)). But simplification reduces this to T, using the :rewrite rule PROBLEM- 55 and the :type-prescription rule PERM. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111B ...) Rules: ((:COMPOUND-RECOGNIZER BOOLEANP-COMPOUND-RECOGNIZER) (:REWRITE PROBLEM-53) (:REWRITE PROBLEM-54) (:REWRITE PROBLEM-55) (:TYPE-PRESCRIPTION PERM)) Warnings: Equiv Time: 0.05 seconds (prove: 0.02, print: 0.01, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.00, other: 0.04) PROBLEM-111B ACL2 >>(THEOREM PROBLEM-111C (IMPLIES (NOT (REL FN D E)) (EQUAL (FILTER FN (RM D Y) E) (FILTER FN Y E))) :HINTS (("Goal" :INDUCT (FILTER FN Y E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (FILTER FN Y E). This suggestion was produced using the :induction rule FILTER. If we let (:P D E FN Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP Y)) (NOT (REL FN (CAR Y) E)) (:P D E FN (CDR Y))) (:P D E FN Y)) (IMPLIES (AND (NOT (ENDP Y)) (REL FN (CAR Y) E) (:P D E FN (CDR Y))) (:P D E FN Y)) (IMPLIES (ENDP Y) (:P D E FN Y))). This induction is justified by the same argument used to admit FILTER, namely, the measure (ACL2-COUNT Y) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP Y)) (NOT (REL FN (CAR Y) E)) (IMPLIES (NOT (REL FN D E)) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E)))) (IMPLIES (NOT (REL FN D E)) (EQUAL (FILTER FN (RM D Y) E) (FILTER FN Y E)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP Y) (NOT (REL FN (CAR Y) E)) (IMPLIES (NOT (REL FN D E)) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E))) (NOT (REL FN D E))) (EQUAL (FILTER FN (RM D Y) E) (FILTER FN Y E))). This simplifies, using the :definitions <<=, FILTER, NOT, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type- prescription rule LEXORDER, to the following 18 conjectures. Subgoal *1/3.18 (IMPLIES (AND (CONSP Y) (LEXORDER (CAR Y) E) (EQUAL (CAR Y) E) (NOT (LEXORDER D E)) (EQUAL (FILTER '<< (RM D (CDR Y)) E) (FILTER '<< (CDR Y) E)) (EQUAL FN '<<) (EQUAL D E)) (EQUAL (FILTER '<< (CDR Y) E) (FILTER '<< Y E))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.17 (IMPLIES (AND (CONSP Y) (LEXORDER (CAR Y) E) (EQUAL (CAR Y) E) (NOT (LEXORDER D E)) (EQUAL (FILTER '<< (RM D (CDR Y)) E) (FILTER '<< (CDR Y) E)) (EQUAL FN '<<) (NOT (EQUAL D E))) (EQUAL (FILTER '<< (CONS E (RM D (CDR Y))) E) (FILTER '<< Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and LEXORDER-REFLEXIVE. Subgoal *1/3.16 (IMPLIES (AND (CONSP Y) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (LEXORDER (CAR Y) E) (EQUAL (CAR Y) E) (NOT (LEXORDER D E)) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E)) (NOT (LEXORDER E D)) (NOT (EQUAL D E))) (EQUAL (FILTER FN (CONS E (RM D (CDR Y))) E) (FILTER FN (CDR Y) E))). But simplification reduces this to T, using primitive type reasoning and the :forward-chaining rule LEXORDER-TOTAL. Subgoal *1/3.15 (IMPLIES (AND (CONSP Y) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (LEXORDER (CAR Y) E) (EQUAL (CAR Y) E) (NOT (EQUAL FN '<<)) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E)) (NOT (LEXORDER E D)) (NOT (EQUAL D E))) (EQUAL (FILTER FN (CONS E (RM D (CDR Y))) E) (FILTER FN (CDR Y) E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and LEXORDER-REFLEXIVE. Subgoal *1/3.14 (IMPLIES (AND (CONSP Y) (EQUAL FN '<<=) (NOT (LEXORDER (CAR Y) E)) (EQUAL (FILTER '<<= (RM D (CDR Y)) E) (FILTER '<<= (CDR Y) E)) (NOT (LEXORDER D E)) (EQUAL D (CAR Y))) (EQUAL (FILTER '<<= (CDR Y) E) (FILTER '<<= Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL and primitive type reasoning. Subgoal *1/3.13 (IMPLIES (AND (CONSP Y) (EQUAL FN '<<=) (NOT (LEXORDER (CAR Y) E)) (EQUAL (FILTER '<<= (RM D (CDR Y)) E) (FILTER '<<= (CDR Y) E)) (NOT (LEXORDER D E)) (NOT (EQUAL D (CAR Y)))) (EQUAL (FILTER '<<= (CONS (CAR Y) (RM D (CDR Y))) E) (FILTER '<<= Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/3.12 (IMPLIES (AND (CONSP Y) (NOT (LEXORDER E (CAR Y))) (EQUAL FN '>>=) (EQUAL (FILTER '>>= (RM D (CDR Y)) E) (FILTER '>>= (CDR Y) E)) (NOT (LEXORDER E D)) (EQUAL D (CAR Y))) (EQUAL (FILTER '>>= (CDR Y) E) (FILTER '>>= Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL and primitive type reasoning. Subgoal *1/3.11 (IMPLIES (AND (CONSP Y) (NOT (LEXORDER E (CAR Y))) (EQUAL FN '>>=) (EQUAL (FILTER '>>= (RM D (CDR Y)) E) (FILTER '>>= (CDR Y) E)) (NOT (LEXORDER E D)) (NOT (EQUAL D (CAR Y)))) (EQUAL (FILTER '>>= (CONS (CAR Y) (RM D (CDR Y))) E) (FILTER '>>= Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/3.10 (IMPLIES (AND (CONSP Y) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E (CAR Y))) (EQUAL D E) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL D (CAR Y))) (LEXORDER D (CAR Y))) (EQUAL (FILTER FN (CONS (CAR Y) (RM D (CDR Y))) D) (CONS (CAR Y) (FILTER FN (CDR Y) D)))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.9 (IMPLIES (AND (CONSP Y) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E (CAR Y))) (EQUAL D E) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL D (CAR Y))) (NOT (LEXORDER D (CAR Y)))) (EQUAL (FILTER FN (CONS (CAR Y) (RM D (CDR Y))) D) (FILTER FN (CDR Y) D))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/3.8 (IMPLIES (AND (CONSP Y) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E (CAR Y))) (NOT (LEXORDER E D)) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E)) (NOT (EQUAL D (CAR Y)))) (EQUAL (FILTER FN (CONS (CAR Y) (RM D (CDR Y))) E) (FILTER FN (CDR Y) E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/3.7 (IMPLIES (AND (CONSP Y) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (EQUAL (CAR Y) E) (NOT (LEXORDER E D)) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E)) (NOT (EQUAL D E))) (EQUAL (FILTER FN (CONS E (RM D (CDR Y))) E) (FILTER FN (CDR Y) E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and LEXORDER-REFLEXIVE. Subgoal *1/3.6 (IMPLIES (AND (CONSP Y) (EQUAL FN '>>=) (NOT (LEXORDER E (CAR Y))) (EQUAL (FILTER '>>= (RM D (CDR Y)) E) (FILTER '>>= (CDR Y) E)) (NOT (LEXORDER E D)) (EQUAL D (CAR Y))) (EQUAL (FILTER '>>= (CDR Y) E) (FILTER '>>= Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL and primitive type reasoning. Subgoal *1/3.5 (IMPLIES (AND (CONSP Y) (EQUAL FN '>>=) (NOT (LEXORDER E (CAR Y))) (EQUAL (FILTER '>>= (RM D (CDR Y)) E) (FILTER '>>= (CDR Y) E)) (NOT (LEXORDER E D)) (NOT (EQUAL D (CAR Y)))) (EQUAL (FILTER '>>= (CONS (CAR Y) (RM D (CDR Y))) E) (FILTER '>>= Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/3.4 (IMPLIES (AND (CONSP Y) (EQUAL FN '<<) (NOT (LEXORDER (CAR Y) E)) (NOT (LEXORDER D E)) (EQUAL (FILTER '<< (RM D (CDR Y)) E) (FILTER '<< (CDR Y) E)) (EQUAL D (CAR Y))) (EQUAL (FILTER '<< (CDR Y) E) (FILTER '<< Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL and primitive type reasoning. Subgoal *1/3.3 (IMPLIES (AND (CONSP Y) (EQUAL FN '<<) (NOT (LEXORDER (CAR Y) E)) (NOT (LEXORDER D E)) (EQUAL (FILTER '<< (RM D (CDR Y)) E) (FILTER '<< (CDR Y) E)) (NOT (EQUAL D (CAR Y)))) (EQUAL (FILTER '<< (CONS (CAR Y) (RM D (CDR Y))) E) (FILTER '<< Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/3.2 (IMPLIES (AND (CONSP Y) (EQUAL FN '<<) (NOT (LEXORDER (CAR Y) E)) (EQUAL D E) (EQUAL (FILTER '<< (RM D (CDR Y)) E) (FILTER '<< (CDR Y) E)) (EQUAL D (CAR Y))) (EQUAL (FILTER '<< (CDR Y) D) (FILTER '<< Y D))). But simplification reduces this to T, using primitive type reasoning and the :forward-chaining rule LEXORDER-TOTAL. Subgoal *1/3.1 (IMPLIES (AND (CONSP Y) (EQUAL FN '<<) (NOT (LEXORDER (CAR Y) E)) (EQUAL D E) (EQUAL (FILTER '<< (RM D (CDR Y)) E) (FILTER '<< (CDR Y) E)) (NOT (EQUAL D (CAR Y)))) (EQUAL (FILTER '<< (CONS (CAR Y) (RM D (CDR Y))) D) (FILTER '<< Y D))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP Y)) (REL FN (CAR Y) E) (IMPLIES (NOT (REL FN D E)) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E)))) (IMPLIES (NOT (REL FN D E)) (EQUAL (FILTER FN (RM D Y) E) (FILTER FN Y E)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP Y) (REL FN (CAR Y) E) (IMPLIES (NOT (REL FN D E)) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E))) (NOT (REL FN D E))) (EQUAL (FILTER FN (RM D Y) E) (FILTER FN Y E))). This simplifies, using the :definitions <<=, FILTER, NOT, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER, to the following thirteen conjectures. Subgoal *1/2.13 (IMPLIES (AND (CONSP Y) (EQUAL FN '<<=) (LEXORDER (CAR Y) E) (EQUAL (FILTER '<<= (RM D (CDR Y)) E) (FILTER '<<= (CDR Y) E)) (NOT (LEXORDER D E)) (EQUAL D (CAR Y))) (EQUAL (FILTER '<<= (CDR Y) E) (FILTER '<<= Y E))). But simplification reduces this to T, using trivial observations. Subgoal *1/2.12 (IMPLIES (AND (CONSP Y) (EQUAL FN '<<=) (LEXORDER (CAR Y) E) (EQUAL (FILTER '<<= (RM D (CDR Y)) E) (FILTER '<<= (CDR Y) E)) (NOT (LEXORDER D E)) (NOT (EQUAL D (CAR Y)))) (EQUAL (FILTER '<<= (CONS (CAR Y) (RM D (CDR Y))) E) (FILTER '<<= Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.11 (IMPLIES (AND (CONSP Y) (EQUAL FN '>>=) (LEXORDER E (CAR Y)) (EQUAL (FILTER '>>= (RM D (CDR Y)) E) (FILTER '>>= (CDR Y) E)) (NOT (LEXORDER E D)) (EQUAL D (CAR Y))) (EQUAL (FILTER '>>= (CDR Y) E) (FILTER '>>= Y E))). But simplification reduces this to T, using trivial observations. Subgoal *1/2.10 (IMPLIES (AND (CONSP Y) (EQUAL FN '>>=) (LEXORDER E (CAR Y)) (EQUAL (FILTER '>>= (RM D (CDR Y)) E) (FILTER '>>= (CDR Y) E)) (NOT (LEXORDER E D)) (NOT (EQUAL D (CAR Y)))) (EQUAL (FILTER '>>= (CONS (CAR Y) (RM D (CDR Y))) E) (FILTER '>>= Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.9 (IMPLIES (AND (CONSP Y) (LEXORDER E (CAR Y)) (NOT (EQUAL (CAR Y) E)) (EQUAL FN '>>=) (EQUAL (FILTER '>>= (RM D (CDR Y)) E) (FILTER '>>= (CDR Y) E)) (NOT (LEXORDER E D)) (EQUAL D (CAR Y))) (EQUAL (FILTER '>>= (CDR Y) E) (FILTER '>>= Y E))). But simplification reduces this to T, using trivial observations. Subgoal *1/2.8 (IMPLIES (AND (CONSP Y) (LEXORDER E (CAR Y)) (NOT (EQUAL (CAR Y) E)) (EQUAL FN '>>=) (EQUAL (FILTER '>>= (RM D (CDR Y)) E) (FILTER '>>= (CDR Y) E)) (NOT (LEXORDER E D)) (NOT (EQUAL D (CAR Y)))) (EQUAL (FILTER '>>= (CONS (CAR Y) (RM D (CDR Y))) E) (FILTER '>>= Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.7 (IMPLIES (AND (CONSP Y) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR Y)) (NOT (EQUAL (CAR Y) E)) (EQUAL D E) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E)) (NOT (EQUAL FN '>>=)) (LEXORDER D (CAR Y))) (EQUAL (CONS (CAR Y) (FILTER FN (RM D (CDR Y)) D)) (CONS (CAR Y) (FILTER FN (CDR Y) D)))). But simplification reduces this to T, using primitive type reasoning. Subgoal *1/2.6 (IMPLIES (AND (CONSP Y) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR Y)) (NOT (EQUAL (CAR Y) E)) (EQUAL D E) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E)) (NOT (EQUAL FN '>>=)) (NOT (LEXORDER D (CAR Y)))) (EQUAL (FILTER FN (RM D (CDR Y)) D) (FILTER FN (CDR Y) D))). But simplification reduces this to T, using trivial observations. Subgoal *1/2.5 (IMPLIES (AND (CONSP Y) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR Y)) (NOT (EQUAL (CAR Y) E)) (NOT (LEXORDER E D)) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E)) (EQUAL D (CAR Y))) (EQUAL (FILTER FN (CDR Y) E) (CONS (CAR Y) (FILTER FN (CDR Y) E)))). But simplification reduces this to T, using trivial observations. Subgoal *1/2.4 (IMPLIES (AND (CONSP Y) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR Y)) (NOT (EQUAL (CAR Y) E)) (NOT (LEXORDER E D)) (EQUAL (FILTER FN (RM D (CDR Y)) E) (FILTER FN (CDR Y) E)) (NOT (EQUAL D (CAR Y)))) (EQUAL (FILTER FN (CONS (CAR Y) (RM D (CDR Y))) E) (CONS (CAR Y) (FILTER FN (CDR Y) E)))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR- CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.3 (IMPLIES (AND (CONSP Y) (EQUAL FN '<<) (LEXORDER (CAR Y) E) (NOT (EQUAL (CAR Y) E)) (NOT (LEXORDER D E)) (EQUAL (FILTER '<< (RM D (CDR Y)) E) (FILTER '<< (CDR Y) E)) (EQUAL D (CAR Y))) (EQUAL (FILTER '<< (CDR Y) E) (FILTER '<< Y E))). But simplification reduces this to T, using trivial observations. Subgoal *1/2.2 (IMPLIES (AND (CONSP Y) (EQUAL FN '<<) (LEXORDER (CAR Y) E) (NOT (EQUAL (CAR Y) E)) (NOT (LEXORDER D E)) (EQUAL (FILTER '<< (RM D (CDR Y)) E) (FILTER '<< (CDR Y) E)) (NOT (EQUAL D (CAR Y)))) (EQUAL (FILTER '<< (CONS (CAR Y) (RM D (CDR Y))) E) (FILTER '<< Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.1 (IMPLIES (AND (CONSP Y) (EQUAL FN '<<) (LEXORDER (CAR Y) E) (NOT (EQUAL (CAR Y) E)) (EQUAL D E) (EQUAL (FILTER '<< (RM D (CDR Y)) E) (FILTER '<< (CDR Y) E))) (EQUAL (CONS (CAR Y) (FILTER '<< (RM D (CDR Y)) D)) (FILTER '<< Y D))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/1 (IMPLIES (ENDP Y) (IMPLIES (NOT (REL FN D E)) (EQUAL (FILTER FN (RM D Y) E) (FILTER FN Y E)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP Y)) (NOT (REL FN D E))) (EQUAL (FILTER FN (RM D Y) E) (FILTER FN Y E))). But simplification reduces this to T, using the :definitions <<=, FILTER, REL and RM, the :executable-counterpart of EQUAL and primitive type reasoning. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111C ...) Rules: ((:DEFINITION <<=) (:DEFINITION ENDP) (:DEFINITION FILTER) (:DEFINITION NOT) (:DEFINITION REL) (:DEFINITION RM) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING LEXORDER-TOTAL) (:INDUCTION FILTER) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: None Time: 0.74 seconds (prove: 0.33, print: 0.41, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-111C ACL2 >>(THEOREM PROBLEM-111D (EQUAL (MEM D (FILTER FN X E)) (AND (MEM D X) (REL FN D E))) :HINTS (("Goal" :INDUCT (LEN X) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (LEN X). This suggestion was produced using the :induction rule LEN. If we let (:P D E FN X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P D E FN X)) (IMPLIES (AND (CONSP X) (:P D E FN (CDR X))) (:P D E FN X))). This induction is justified by the same argument used to admit LEN, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (MEM D (FILTER FN X E)) (AND (MEM D X) (REL FN D E)))). But simplification reduces this to T, using the :definitions FILTER and MEM and the :executable-counterparts of CONSP and EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (MEM D (FILTER FN (CDR X) E)) (AND (MEM D (CDR X)) (REL FN D E)))) (EQUAL (MEM D (FILTER FN X E)) (AND (MEM D X) (REL FN D E)))). This simplifies, using the :definitions <<=, FILTER, MEM and REL, the :executable-counterparts of EQUAL and NOT, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE, LEXORDER-TRANSITIVE, PROBLEM- 48 and PROBLEM-49A and the :type-prescription rules LEXORDER and MEM, to the following 29 conjectures. Subgoal *1/1.29 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER '<<= (CDR X) E)) NIL) (EQUAL FN '<<=) (LEXORDER (CAR X) E) (EQUAL D (CAR X))) (EQUAL (MEM D (CONS (CAR X) (FILTER '<<= (CDR X) E))) (LEXORDER D E))). By case analysis we reduce the conjecture to Subgoal *1/1.29' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '<<= (CDR X) E))) (EQUAL FN '<<=) (LEXORDER (CAR X) E) (EQUAL D (CAR X))) (EQUAL (MEM D (CONS (CAR X) (FILTER '<<= (CDR X) E))) (LEXORDER D E))). But simplification reduces this to T, using the :definition MEM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rules FILTER and LEXORDER. Subgoal *1/1.28 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER '<<= (CDR X) E)) NIL) (EQUAL FN '<<=) (LEXORDER (CAR X) E) (NOT (EQUAL D (CAR X)))) (EQUAL (MEM D (CONS (CAR X) (FILTER '<<= (CDR X) E))) NIL)). By case analysis we reduce the conjecture to Subgoal *1/1.28' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '<<= (CDR X) E))) (EQUAL FN '<<=) (LEXORDER (CAR X) E) (NOT (EQUAL D (CAR X)))) (EQUAL (MEM D (CONS (CAR X) (FILTER '<<= (CDR X) E))) NIL)). But simplification reduces this to T, using the :definition MEM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER. Subgoal *1/1.27 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER '<<= (CDR X) E)) NIL) (EQUAL FN '<<=) (NOT (LEXORDER (CAR X) E)) (EQUAL D (CAR X))) (EQUAL NIL (LEXORDER D E))). By case analysis we reduce the conjecture to Subgoal *1/1.27' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '<<= (CDR X) E))) (EQUAL FN '<<=) (NOT (LEXORDER (CAR X) E)) (EQUAL D (CAR X))) (EQUAL NIL (LEXORDER D E))). But simplification reduces this to T, using primitive type reasoning. Subgoal *1/1.26 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER '<< (CDR X) E)) NIL) (EQUAL FN '<<) (NOT (LEXORDER (CAR X) E)) (EQUAL D (CAR X)) (LEXORDER D E)) (EQUAL D E)). By case analysis we reduce the conjecture to Subgoal *1/1.26' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '<< (CDR X) E))) (EQUAL FN '<<) (NOT (LEXORDER (CAR X) E)) (EQUAL D (CAR X)) (LEXORDER D E)) (EQUAL D E)). But simplification reduces this to T, using trivial observations. Subgoal *1/1.25 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER '<< (CDR X) E)) NIL) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E)) (EQUAL D (CAR X)) (LEXORDER D E) (NOT (EQUAL D E))) (EQUAL (MEM D (CONS (CAR X) (FILTER '<< (CDR X) E))) T)). By case analysis we reduce the conjecture to Subgoal *1/1.25' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '<< (CDR X) E))) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E)) (EQUAL D (CAR X)) (LEXORDER D E) (NOT (EQUAL D E))) (EQUAL (MEM D (CONS (CAR X) (FILTER '<< (CDR X) E))) T)). But simplification reduces this to T, using the :definition MEM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rule CAR-CONS and the :type-prescription rule FILTER. Subgoal *1/1.24 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER '<< (CDR X) E)) NIL) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E)) (EQUAL D E)) (EQUAL (MEM D (CONS (CAR X) (FILTER '<< (CDR X) E))) NIL)). By case analysis we reduce the conjecture to Subgoal *1/1.24' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '<< (CDR X) E))) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E)) (EQUAL D E)) (EQUAL (MEM D (CONS (CAR X) (FILTER '<< (CDR X) E))) NIL)). But simplification reduces this to T, using the :definition MEM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER. Subgoal *1/1.23 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER '<< (CDR X) E)) NIL) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E)) (NOT (LEXORDER D E))) (EQUAL (MEM D (CONS (CAR X) (FILTER '<< (CDR X) E))) NIL)). By case analysis we reduce the conjecture to Subgoal *1/1.23' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '<< (CDR X) E))) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E)) (NOT (LEXORDER D E))) (EQUAL (MEM D (CONS (CAR X) (FILTER '<< (CDR X) E))) NIL)). This simplifies, using the :definition MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER, to Subgoal *1/1.23'' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '<< (CDR X) E))) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E)) (NOT (LEXORDER D E))) (NOT (EQUAL D (CAR X)))). But simplification reduces this to T, using trivial observations. Subgoal *1/1.22 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER '>>= (CDR X) E)) NIL) (EQUAL FN '>>=) (LEXORDER E (CAR X)) (EQUAL D (CAR X))) (EQUAL (MEM D (CONS (CAR X) (FILTER '>>= (CDR X) E))) (LEXORDER E D))). By case analysis we reduce the conjecture to Subgoal *1/1.22' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '>>= (CDR X) E))) (EQUAL FN '>>=) (LEXORDER E (CAR X)) (EQUAL D (CAR X))) (EQUAL (MEM D (CONS (CAR X) (FILTER '>>= (CDR X) E))) (LEXORDER E D))). But simplification reduces this to T, using the :definition MEM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rules FILTER and LEXORDER. Subgoal *1/1.21 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER '>>= (CDR X) E)) NIL) (EQUAL FN '>>=) (NOT (LEXORDER E (CAR X))) (EQUAL D (CAR X))) (EQUAL NIL (LEXORDER E D))). By case analysis we reduce the conjecture to Subgoal *1/1.21' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '>>= (CDR X) E))) (EQUAL FN '>>=) (NOT (LEXORDER E (CAR X))) (EQUAL D (CAR X))) (EQUAL NIL (LEXORDER E D))). But simplification reduces this to T, using primitive type reasoning. Subgoal *1/1.20 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER '>>= (CDR X) E)) NIL) (EQUAL FN '>>=) (LEXORDER E (CAR X)) (NOT (EQUAL D (CAR X)))) (EQUAL (MEM D (CONS (CAR X) (FILTER '>>= (CDR X) E))) NIL)). By case analysis we reduce the conjecture to Subgoal *1/1.20' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '>>= (CDR X) E))) (EQUAL FN '>>=) (LEXORDER E (CAR X)) (NOT (EQUAL D (CAR X)))) (EQUAL (MEM D (CONS (CAR X) (FILTER '>>= (CDR X) E))) NIL)). But simplification reduces this to T, using the :definition MEM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER. Subgoal *1/1.19 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER FN (CDR X) E)) NIL) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E (CAR X))) (EQUAL D (CAR X)) (LEXORDER E D)) (EQUAL D E)). By case analysis we reduce the conjecture to Subgoal *1/1.19' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER FN (CDR X) E))) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E (CAR X))) (EQUAL D (CAR X)) (LEXORDER E D)) (EQUAL D E)). But simplification reduces this to T, using trivial observations. Subgoal *1/1.18 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER FN (CDR X) E)) NIL) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E)) (EQUAL D (CAR X)) (LEXORDER E D) (NOT (EQUAL D E))) (EQUAL (MEM D (CONS (CAR X) (FILTER FN (CDR X) E))) T)). By case analysis we reduce the conjecture to Subgoal *1/1.18' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER FN (CDR X) E))) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E)) (EQUAL D (CAR X)) (LEXORDER E D) (NOT (EQUAL D E))) (EQUAL (MEM D (CONS (CAR X) (FILTER FN (CDR X) E))) T)). But simplification reduces this to T, using the :definition MEM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rule CAR-CONS and the :type-prescription rule FILTER. Subgoal *1/1.17 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER FN (CDR X) E)) NIL) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E)) (NOT (LEXORDER E D))) (EQUAL (MEM D (CONS (CAR X) (FILTER FN (CDR X) E))) NIL)). By case analysis we reduce the conjecture to Subgoal *1/1.17' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER FN (CDR X) E))) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E)) (NOT (LEXORDER E D))) (EQUAL (MEM D (CONS (CAR X) (FILTER FN (CDR X) E))) NIL)). This simplifies, using the :definition MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER, to Subgoal *1/1.17'' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER FN (CDR X) E))) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E)) (NOT (LEXORDER E D))) (NOT (EQUAL D (CAR X)))). But simplification reduces this to T, using trivial observations. Subgoal *1/1.16 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER FN (CDR X) E)) NIL) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E)) (EQUAL D E)) (EQUAL (MEM D (CONS (CAR X) (FILTER FN (CDR X) E))) NIL)). By case analysis we reduce the conjecture to Subgoal *1/1.16' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER FN (CDR X) E))) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E)) (EQUAL D E)) (EQUAL (MEM D (CONS (CAR X) (FILTER FN (CDR X) E))) NIL)). But simplification reduces this to T, using the :definition MEM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER. Subgoal *1/1.15 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER FN (CDR X) E)) NIL) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (EQUAL (CAR X) E) (EQUAL D (CAR X)) (LEXORDER E D)) (EQUAL D E)). By case analysis we reduce the conjecture to Subgoal *1/1.15' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER FN (CDR X) E))) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (EQUAL (CAR X) E) (EQUAL D (CAR X)) (LEXORDER E D)) (EQUAL D E)). But we reduce the conjecture to T, by primitive type reasoning. Subgoal *1/1.14 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER '<< (CDR X) E)) NIL) (EQUAL FN '<<) (EQUAL (CAR X) E) (EQUAL D (CAR X)) (LEXORDER D E)) (EQUAL D E)). By case analysis we reduce the conjecture to Subgoal *1/1.14' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '<< (CDR X) E))) (EQUAL FN '<<) (EQUAL (CAR X) E) (EQUAL D (CAR X)) (LEXORDER D E)) (EQUAL D E)). But we reduce the conjecture to T, by primitive type reasoning. Subgoal *1/1.13 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER FN (CDR X) E)) NIL) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E)) (NOT (EQUAL D (CAR X)))) (EQUAL (MEM D (CONS (CAR X) (FILTER FN (CDR X) E))) NIL)). By case analysis we reduce the conjecture to Subgoal *1/1.13' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER FN (CDR X) E))) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E)) (NOT (EQUAL D (CAR X)))) (EQUAL (MEM D (CONS (CAR X) (FILTER FN (CDR X) E))) NIL)). But simplification reduces this to T, using the :definition MEM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER. Subgoal *1/1.12 (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (EQUAL (MEM D (FILTER '<< (CDR X) E)) NIL) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E)) (NOT (EQUAL D (CAR X)))) (EQUAL (MEM D (CONS (CAR X) (FILTER '<< (CDR X) E))) NIL)). By case analysis we reduce the conjecture to Subgoal *1/1.12' (IMPLIES (AND (CONSP X) (NOT (MEM D (CDR X))) (NOT (MEM D (FILTER '<< (CDR X) E))) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E)) (NOT (EQUAL D (CAR X)))) (EQUAL (MEM D (CONS (CAR X) (FILTER '<< (CDR X) E))) NIL)). But simplification reduces this to T, using the :definition MEM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER. Subgoal *1/1.11 (IMPLIES (AND (CONSP X) (MEM D (CDR X)) (EQUAL FN '<<=) (EQUAL (MEM D (FILTER '<<= (CDR X) E)) (LEXORDER D E))) (EQUAL (MEM D (FILTER '<<= X E)) (LEXORDER D E))). This simplifies, using the :definitions <<=, FILTER and REL and the :executable-counterpart of EQUAL, to Subgoal *1/1.11' (IMPLIES (AND (CONSP X) (MEM D (CDR X)) (EQUAL (MEM D (FILTER '<<= (CDR X) E)) (LEXORDER D E)) (LEXORDER (CAR X) E)) (EQUAL (MEM D (CONS (CAR X) (FILTER '<<= (CDR X) E))) (LEXORDER D E))). This simplifies, using the :definition MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER, to Subgoal *1/1.11'' (IMPLIES (AND (CONSP X) (MEM D (CDR X)) (EQUAL (MEM D (FILTER '<<= (CDR X) E)) (LEXORDER D E)) (LEXORDER (CAR X) E) (EQUAL D (CAR X))) (EQUAL T (LEXORDER D E))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule LEXORDER. Subgoal *1/1.10 (IMPLIES (AND (CONSP X) (MEM D (CDR X)) (EQUAL FN '>>=) (EQUAL (MEM D (FILTER '>>= (CDR X) E)) (LEXORDER E D))) (EQUAL (MEM D (FILTER '>>= X E)) (LEXORDER E D))). This simplifies, using the :definitions <<=, FILTER and REL and the :executable-counterpart of EQUAL, to Subgoal *1/1.10' (IMPLIES (AND (CONSP X) (MEM D (CDR X)) (EQUAL (MEM D (FILTER '>>= (CDR X) E)) (LEXORDER E D)) (LEXORDER E (CAR X))) (EQUAL (MEM D (CONS (CAR X) (FILTER '>>= (CDR X) E))) (LEXORDER E D))). This simplifies, using the :definition MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER, to Subgoal *1/1.10'' (IMPLIES (AND (CONSP X) (MEM D (CDR X)) (EQUAL (MEM D (FILTER '>>= (CDR X) E)) (LEXORDER E D)) (LEXORDER E (CAR X)) (EQUAL D (CAR X))) (EQUAL T (LEXORDER E D))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule LEXORDER. Subgoal *1/1.9 (IMPLIES (AND (CONSP X) (MEM D (CDR X)) (EQUAL FN '<<) (LEXORDER D E) (NOT (EQUAL D E)) (EQUAL (MEM D (FILTER '<< (CDR X) E)) T)) (MEM D (FILTER '<< X E))). This simplifies, using the :definitions <<=, FILTER and REL, the :executable- counterpart of EQUAL, primitive type reasoning and the :type-prescription rule MEM, to Subgoal *1/1.9' (IMPLIES (AND (CONSP X) (MEM D (CDR X)) (LEXORDER D E) (NOT (EQUAL D E)) (MEM D (FILTER '<< (CDR X) E)) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E))) (MEM D (CONS (CAR X) (FILTER '<< (CDR X) E)))). But simplification reduces this to T, using the :definition MEM, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-48 and PROBLEM-49A and the :type-prescription rules FILTER and MEM. Subgoal *1/1.8 (IMPLIES (AND (CONSP X) (MEM D (CDR X)) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (LEXORDER E D) (NOT (EQUAL D E)) (EQUAL (MEM D (FILTER FN (CDR X) E)) T) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E))) (MEM D (CONS (CAR X) (FILTER FN (CDR X) E)))). But simplification reduces this to T, using the :definition MEM, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-48 and PROBLEM-49A and the :type-prescription rules FILTER and MEM. Subgoal *1/1.7 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (EQUAL D E) (EQUAL (MEM D (FILTER FN (CDR X) E)) NIL) (EQUAL (CAR X) D)) (NOT (MEM D (FILTER FN (CDR X) D)))). By case analysis we reduce the conjecture to Subgoal *1/1.7' (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (EQUAL D E) (NOT (MEM D (FILTER FN (CDR X) E))) (EQUAL (CAR X) D)) (NOT (MEM D (FILTER FN (CDR X) D)))). But simplification reduces this to T, using trivial observations. Subgoal *1/1.6 (IMPLIES (AND (CONSP X) (EQUAL D E) (EQUAL (MEM D (FILTER '<< (CDR X) E)) NIL) (EQUAL FN '<<) (LEXORDER (CAR X) D) (NOT (EQUAL (CAR X) D))) (NOT (MEM D (CONS (CAR X) (FILTER '<< (CDR X) D))))). By case analysis we reduce the conjecture to Subgoal *1/1.6' (IMPLIES (AND (CONSP X) (EQUAL D E) (NOT (MEM D (FILTER '<< (CDR X) E))) (EQUAL FN '<<) (LEXORDER (CAR X) D) (NOT (EQUAL (CAR X) D))) (NOT (MEM D (CONS (CAR X) (FILTER '<< (CDR X) D))))). But simplification reduces this to T, using the :definition MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type- prescription rule FILTER. Subgoal *1/1.5 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (EQUAL D E) (EQUAL (MEM D (FILTER FN (CDR X) E)) NIL) (NOT (EQUAL FN '<<)) (LEXORDER D (CAR X)) (NOT (EQUAL (CAR X) D))) (NOT (MEM D (CONS (CAR X) (FILTER FN (CDR X) D))))). By case analysis we reduce the conjecture to Subgoal *1/1.5' (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (EQUAL D E) (NOT (MEM D (FILTER FN (CDR X) E))) (NOT (EQUAL FN '<<)) (LEXORDER D (CAR X)) (NOT (EQUAL (CAR X) D))) (NOT (MEM D (CONS (CAR X) (FILTER FN (CDR X) D))))). But simplification reduces this to T, using the :definition MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type- prescription rule FILTER. Subgoal *1/1.4 (IMPLIES (AND (CONSP X) (EQUAL D E) (EQUAL (MEM D (FILTER '<< (CDR X) E)) NIL) (EQUAL FN '<<) (NOT (LEXORDER (CAR X) D))) (NOT (MEM D (FILTER '<< (CDR X) D)))). By case analysis we reduce the conjecture to Subgoal *1/1.4' (IMPLIES (AND (CONSP X) (EQUAL D E) (NOT (MEM D (FILTER '<< (CDR X) E))) (EQUAL FN '<<) (NOT (LEXORDER (CAR X) D))) (NOT (MEM D (FILTER '<< (CDR X) D)))). But simplification reduces this to T, using trivial observations. Subgoal *1/1.3 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (EQUAL D E) (EQUAL (MEM D (FILTER FN (CDR X) E)) NIL) (NOT (EQUAL FN '<<)) (NOT (LEXORDER D (CAR X)))) (NOT (MEM D (FILTER FN (CDR X) D)))). By case analysis we reduce the conjecture to Subgoal *1/1.3' (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (EQUAL D E) (NOT (MEM D (FILTER FN (CDR X) E))) (NOT (EQUAL FN '<<)) (NOT (LEXORDER D (CAR X)))) (NOT (MEM D (FILTER FN (CDR X) D)))). But simplification reduces this to T, using trivial observations. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (EQUAL FN '<<) (NOT (LEXORDER D E)) (EQUAL (MEM D (FILTER '<< (CDR X) E)) NIL)) (NOT (MEM D (FILTER '<< X E)))). By case analysis we reduce the conjecture to Subgoal *1/1.2' (IMPLIES (AND (CONSP X) (EQUAL FN '<<) (NOT (LEXORDER D E)) (NOT (MEM D (FILTER '<< (CDR X) E)))) (NOT (MEM D (FILTER '<< X E)))). This simplifies, using the :definitions <<=, FILTER and REL and the :executable-counterpart of EQUAL, to Subgoal *1/1.2'' (IMPLIES (AND (CONSP X) (NOT (LEXORDER D E)) (NOT (MEM D (FILTER '<< (CDR X) E))) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E))) (NOT (MEM D (CONS (CAR X) (FILTER '<< (CDR X) E))))). This simplifies, using the :definition MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER, to Subgoal *1/1.2''' (IMPLIES (AND (CONSP X) (NOT (LEXORDER D E)) (NOT (MEM D (FILTER '<< (CDR X) E))) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E))) (NOT (EQUAL D (CAR X)))). But simplification reduces this to T, using trivial observations. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E D)) (EQUAL (MEM D (FILTER FN (CDR X) E)) NIL) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E))) (NOT (MEM D (CONS (CAR X) (FILTER FN (CDR X) E))))). By case analysis we reduce the conjecture to Subgoal *1/1.1' (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E D)) (NOT (MEM D (FILTER FN (CDR X) E))) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E))) (NOT (MEM D (CONS (CAR X) (FILTER FN (CDR X) E))))). This simplifies, using the :definition MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FILTER, to Subgoal *1/1.1'' (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E D)) (NOT (MEM D (FILTER FN (CDR X) E))) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E))) (NOT (EQUAL D (CAR X)))). But simplification reduces this to T, using trivial observations. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111D ...) Rules: ((:DEFINITION <<=) (:DEFINITION FILTER) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION REL) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION LEN) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION FILTER) (:TYPE-PRESCRIPTION LEXORDER) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.97 seconds (prove: 0.39, print: 0.57, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-111D ACL2 >>(THEOREM PROBLEM-111E (IMPLIES (NOT (MEM D X)) (EQUAL (RM D X) X)) :HINTS (("Goal" :INDUCT (RM D X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (RM D X). This suggestion was produced using the :induction rule RM. If we let (:P D X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P D X)) (IMPLIES (AND (CONSP X) (NOT (EQUAL D (CAR X))) (:P D (CDR X))) (:P D X)) (IMPLIES (AND (CONSP X) (EQUAL D (CAR X))) (:P D X))). This induction is justified by the same argument used to admit RM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (NOT (MEM D X)) (EQUAL (RM D X) X))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (NOT (MEM D X))) (EQUAL (RM D X) X)). But simplification reduces this to T, using the :definitions MEM and RM and primitive type reasoning. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (EQUAL D (CAR X))) (IMPLIES (NOT (MEM D (CDR X))) (EQUAL (RM D (CDR X)) (CDR X)))) (IMPLIES (NOT (MEM D X)) (EQUAL (RM D X) X))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (EQUAL D (CAR X))) (IMPLIES (NOT (MEM D (CDR X))) (EQUAL (RM D (CDR X)) (CDR X))) (NOT (MEM D X))) (EQUAL (RM D X) X)). But simplification reduces this to T, using the :definitions MEM, NOT and RM, primitive type reasoning, the :rewrite rule CAR-CDR-ELIM and the :type-prescription rule MEM. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL D (CAR X))) (IMPLIES (NOT (MEM D X)) (EQUAL (RM D X) X))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (EQUAL D (CAR X)) (NOT (MEM D X))) (EQUAL (RM D X) X)). But simplification reduces this to T, using the :definition MEM and primitive type reasoning. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111E ...) Rules: ((:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION RM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION RM) (:REWRITE CAR-CDR-ELIM) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.05 seconds (prove: 0.00, print: 0.05, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-111E ACL2 >>(THEOREM PROBLEM-111F (EQUAL (FILTER FN (RM D X) E) (RM D (FILTER FN X E))) :HINTS (("Goal" :INDUCT (FILTER FN X E) :IN-THEORY (ENABLE PROBLEM-111C PROBLEM-111D PROBLEM-111E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (FILTER FN X E). This suggestion was produced using the :induction rule FILTER. If we let (:P D E FN X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP X)) (NOT (REL FN (CAR X) E)) (:P D E FN (CDR X))) (:P D E FN X)) (IMPLIES (AND (NOT (ENDP X)) (REL FN (CAR X) E) (:P D E FN (CDR X))) (:P D E FN X)) (IMPLIES (ENDP X) (:P D E FN X))). This induction is justified by the same argument used to admit FILTER, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP X)) (NOT (REL FN (CAR X) E)) (EQUAL (FILTER FN (RM D (CDR X)) E) (RM D (FILTER FN (CDR X) E)))) (EQUAL (FILTER FN (RM D X) E) (RM D (FILTER FN X E)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP X) (NOT (REL FN (CAR X) E)) (EQUAL (FILTER FN (RM D (CDR X)) E) (RM D (FILTER FN (CDR X) E)))) (EQUAL (FILTER FN (RM D X) E) (RM D (FILTER FN X E)))). This simplifies, using the :definitions <<=, FILTER, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rule LEXORDER-REFLEXIVE, to the following twelve conjectures. Subgoal *1/3.12 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (LEXORDER (CAR X) E) (EQUAL (CAR X) E) (EQUAL (FILTER FN (RM D (CDR X)) E) (RM D (FILTER FN (CDR X) E))) (EQUAL D E)) (EQUAL (FILTER FN (CDR X) E) (FILTER FN (RM D (CDR X)) E))). But simplification reduces this to T, using the :definitions <<= and REL, primitive type reasoning and the :rewrite rules LEXORDER-REFLEXIVE, PROBLEM-111C, PROBLEM-111D and PROBLEM-111E. Subgoal *1/3.11 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (LEXORDER (CAR X) E) (EQUAL (CAR X) E) (EQUAL (FILTER FN (RM D (CDR X)) E) (RM D (FILTER FN (CDR X) E))) (NOT (EQUAL D E))) (EQUAL (FILTER FN (CONS E (RM D (CDR X))) E) (FILTER FN (RM D (CDR X)) E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and LEXORDER-REFLEXIVE. Subgoal *1/3.10 (IMPLIES (AND (CONSP X) (EQUAL FN '<<=) (NOT (LEXORDER (CAR X) E)) (EQUAL (FILTER '<<= (RM D (CDR X)) E) (RM D (FILTER '<<= (CDR X) E))) (EQUAL D (CAR X))) (EQUAL (FILTER '<<= (CDR X) E) (RM D (FILTER '<<= X E)))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules PROBLEM-111C, PROBLEM-111D and PROBLEM-111E and the :type-prescription rule LEXORDER. Subgoal *1/3.9 (IMPLIES (AND (CONSP X) (EQUAL FN '<<=) (NOT (LEXORDER (CAR X) E)) (EQUAL (FILTER '<<= (RM D (CDR X)) E) (RM D (FILTER '<<= (CDR X) E))) (NOT (EQUAL D (CAR X)))) (EQUAL (FILTER '<<= (CONS (CAR X) (RM D (CDR X))) E) (RM D (FILTER '<<= X E)))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/3.8 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E (CAR X))) (EQUAL (FILTER FN (RM D (CDR X)) E) (RM D (FILTER FN (CDR X) E))) (EQUAL D (CAR X))) (EQUAL (FILTER FN (CDR X) E) (FILTER FN (RM D (CDR X)) E))). But simplification reduces this to T, using the :definitions <<= and REL, primitive type reasoning, the :rewrite rules PROBLEM-111C, PROBLEM- 111D and PROBLEM-111E and the :type-prescription rule LEXORDER. Subgoal *1/3.7 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E (CAR X))) (EQUAL (FILTER FN (RM D (CDR X)) E) (RM D (FILTER FN (CDR X) E))) (NOT (EQUAL D (CAR X)))) (EQUAL (FILTER FN (CONS (CAR X) (RM D (CDR X))) E) (FILTER FN (RM D (CDR X)) E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/3.6 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (EQUAL (CAR X) E) (EQUAL (FILTER FN (RM D (CDR X)) E) (RM D (FILTER FN (CDR X) E))) (EQUAL D E)) (EQUAL (FILTER FN (CDR X) E) (FILTER FN (RM D (CDR X)) E))). But simplification reduces this to T, using the :definitions <<= and REL, primitive type reasoning and the :rewrite rules LEXORDER-REFLEXIVE, PROBLEM-111C, PROBLEM-111D and PROBLEM-111E. Subgoal *1/3.5 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (EQUAL (CAR X) E) (EQUAL (FILTER FN (RM D (CDR X)) E) (RM D (FILTER FN (CDR X) E))) (NOT (EQUAL D E))) (EQUAL (FILTER FN (CONS E (RM D (CDR X))) E) (FILTER FN (RM D (CDR X)) E))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and LEXORDER-REFLEXIVE. Subgoal *1/3.4 (IMPLIES (AND (CONSP X) (EQUAL FN '>>=) (NOT (LEXORDER E (CAR X))) (EQUAL (FILTER '>>= (RM D (CDR X)) E) (RM D (FILTER '>>= (CDR X) E))) (EQUAL D (CAR X))) (EQUAL (FILTER '>>= (CDR X) E) (RM D (FILTER '>>= X E)))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules PROBLEM-111C, PROBLEM-111D and PROBLEM-111E and the :type-prescription rule LEXORDER. Subgoal *1/3.3 (IMPLIES (AND (CONSP X) (EQUAL FN '>>=) (NOT (LEXORDER E (CAR X))) (EQUAL (FILTER '>>= (RM D (CDR X)) E) (RM D (FILTER '>>= (CDR X) E))) (NOT (EQUAL D (CAR X)))) (EQUAL (FILTER '>>= (CONS (CAR X) (RM D (CDR X))) E) (RM D (FILTER '>>= X E)))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/3.2 (IMPLIES (AND (CONSP X) (EQUAL FN '<<) (NOT (LEXORDER (CAR X) E)) (EQUAL (FILTER '<< (RM D (CDR X)) E) (RM D (FILTER '<< (CDR X) E))) (EQUAL D (CAR X))) (EQUAL (FILTER '<< (CDR X) E) (RM D (FILTER '<< X E)))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rules PROBLEM-111C, PROBLEM-111D and PROBLEM-111E. Subgoal *1/3.1 (IMPLIES (AND (CONSP X) (EQUAL FN '<<) (NOT (LEXORDER (CAR X) E)) (EQUAL (FILTER '<< (RM D (CDR X)) E) (RM D (FILTER '<< (CDR X) E))) (NOT (EQUAL D (CAR X)))) (EQUAL (FILTER '<< (CONS (CAR X) (RM D (CDR X))) E) (RM D (FILTER '<< X E)))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP X)) (REL FN (CAR X) E) (EQUAL (FILTER FN (RM D (CDR X)) E) (RM D (FILTER FN (CDR X) E)))) (EQUAL (FILTER FN (RM D X) E) (RM D (FILTER FN X E)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (REL FN (CAR X) E) (EQUAL (FILTER FN (RM D (CDR X)) E) (RM D (FILTER FN (CDR X) E)))) (EQUAL (FILTER FN (RM D X) E) (RM D (FILTER FN X E)))). This simplifies, using the :definitions <<=, FILTER, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rules FILTER and LEXORDER, to the following seven conjectures. Subgoal *1/2.7 (IMPLIES (AND (CONSP X) (EQUAL FN '<<=) (LEXORDER (CAR X) E) (EQUAL (FILTER '<<= (RM D (CDR X)) E) (RM D (FILTER '<<= (CDR X) E))) (EQUAL D (CAR X))) (EQUAL (FILTER '<<= (CDR X) E) (RM D (FILTER '<<= X E)))). But simplification reduces this to T, using the :definitions <<=, FILTER, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rules FILTER and LEXORDER. Subgoal *1/2.6 (IMPLIES (AND (CONSP X) (EQUAL FN '<<=) (LEXORDER (CAR X) E) (EQUAL (FILTER '<<= (RM D (CDR X)) E) (RM D (FILTER '<<= (CDR X) E))) (NOT (EQUAL D (CAR X)))) (EQUAL (FILTER '<<= (CONS (CAR X) (RM D (CDR X))) E) (RM D (FILTER '<<= X E)))). But simplification reduces this to T, using the :definitions <<=, FILTER, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rules FILTER and LEXORDER. Subgoal *1/2.5 (IMPLIES (AND (CONSP X) (EQUAL FN '>>=) (LEXORDER E (CAR X)) (EQUAL (FILTER '>>= (RM D (CDR X)) E) (RM D (FILTER '>>= (CDR X) E))) (EQUAL D (CAR X))) (EQUAL (FILTER '>>= (CDR X) E) (RM D (FILTER '>>= X E)))). But simplification reduces this to T, using the :definitions <<=, FILTER, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rules FILTER and LEXORDER. Subgoal *1/2.4 (IMPLIES (AND (CONSP X) (EQUAL FN '>>=) (LEXORDER E (CAR X)) (EQUAL (FILTER '>>= (RM D (CDR X)) E) (RM D (FILTER '>>= (CDR X) E))) (NOT (EQUAL D (CAR X)))) (EQUAL (FILTER '>>= (CONS (CAR X) (RM D (CDR X))) E) (RM D (FILTER '>>= X E)))). But simplification reduces this to T, using the :definitions <<=, FILTER, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rules FILTER and LEXORDER. Subgoal *1/2.3 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E)) (EQUAL (FILTER FN (RM D (CDR X)) E) (RM D (FILTER FN (CDR X) E))) (NOT (EQUAL D (CAR X)))) (EQUAL (FILTER FN (CONS (CAR X) (RM D (CDR X))) E) (CONS (CAR X) (FILTER FN (RM D (CDR X)) E)))). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR- CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.2 (IMPLIES (AND (CONSP X) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E)) (EQUAL (FILTER '<< (RM D (CDR X)) E) (RM D (FILTER '<< (CDR X) E))) (EQUAL D (CAR X))) (EQUAL (FILTER '<< (CDR X) E) (RM D (FILTER '<< X E)))). But simplification reduces this to T, using the :definitions <<=, FILTER, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rules FILTER and LEXORDER. Subgoal *1/2.1 (IMPLIES (AND (CONSP X) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E)) (EQUAL (FILTER '<< (RM D (CDR X)) E) (RM D (FILTER '<< (CDR X) E))) (NOT (EQUAL D (CAR X)))) (EQUAL (FILTER '<< (CONS (CAR X) (RM D (CDR X))) E) (RM D (FILTER '<< X E)))). But simplification reduces this to T, using the :definitions <<=, FILTER, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rules FILTER and LEXORDER. Subgoal *1/1 (IMPLIES (ENDP X) (EQUAL (FILTER FN (RM D X) E) (RM D (FILTER FN X E)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (NOT (CONSP X)) (EQUAL (FILTER FN (RM D X) E) (RM D (FILTER FN X E)))). But simplification reduces this to T, using the :definitions FILTER and MEM, the :executable-counterparts of CONSP and EQUAL and the :rewrite rule PROBLEM-111E. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111F ...) Rules: ((:DEFINITION <<=) (:DEFINITION ENDP) (:DEFINITION FILTER) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION REL) (:DEFINITION RM) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION FILTER) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:REWRITE PROBLEM-111C) (:REWRITE PROBLEM-111D) (:REWRITE PROBLEM-111E) (:TYPE-PRESCRIPTION FILTER) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: None Time: 0.72 seconds (prove: 0.37, print: 0.33, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-111F ACL2 >>(THEOREM PROBLEM-111G (IMPLIES (PERM X Y) (PERM (FILTER FN X E) (FILTER FN Y E))) :HINTS (("Goal" :INDUCT (PERM X Y) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49A PROBLEM-54A PROBLEM-54 PROBLEM-55B PROBLEM-55 PROBLEM-111B PROBLEM-111D PROBLEM-111E PROBLEM-111F))) :RULE-CLASSES :CONGRUENCE) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PERM X Y). This suggestion was produced using the :induction rule PERM. If we let (:P E FN X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P E FN X Y)) (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (:P E FN X Y)) (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (:P E FN (CDR X) (RM (CAR X) Y))) (:P E FN X Y))). This induction is justified by the same argument used to admit PERM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable Y is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (PERM X Y) (PERM (FILTER FN X E) (FILTER FN Y E)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (PERM X Y)) (PERM (FILTER FN X E) (FILTER FN Y E))). But simplification reduces this to T, using the :definitions FILTER and PERM and the :executable-counterpart of PERM. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (IMPLIES (PERM X Y) (PERM (FILTER FN X E) (FILTER FN Y E)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y)) (PERM X Y)) (PERM (FILTER FN X E) (FILTER FN Y E))). But simplification reduces this to T, using the :definition MEM, primitive type reasoning and the :rewrite rule PROBLEM-55B. Subgoal *1/1 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (PERM (CDR X) (RM (CAR X) Y)) (PERM (FILTER FN (CDR X) E) (FILTER FN (RM (CAR X) Y) E)))) (IMPLIES (PERM X Y) (PERM (FILTER FN X E) (FILTER FN Y E)))). By the simple :rewrite rule PROBLEM-111F we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (PERM (CDR X) (RM (CAR X) Y)) (PERM (FILTER FN (CDR X) E) (RM (CAR X) (FILTER FN Y E)))) (PERM X Y)) (PERM (FILTER FN X E) (FILTER FN Y E))). This simplifies, using the :definitions <<=, FILTER, MEM, PERM and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rule PROBLEM-55B, to the following ten conjectures. Subgoal *1/1.10 (IMPLIES (AND (CONSP X) (PERM (FILTER '<<= (CDR X) E) (RM (CAR X) (FILTER '<<= Y E))) (MEM (CAR X) Y) (PERM (CDR X) (RM (CAR X) Y)) (EQUAL FN '<<=) (LEXORDER (CAR X) E)) (PERM (CONS (CAR X) (FILTER '<<= (CDR X) E)) (FILTER '<<= Y E))). But simplification reduces this to T, using the :definitions <<= and REL, the :equivalence rule PROBLEM-111B, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE, LEXORDER-TRANSITIVE, PROBLEM-111D, PROBLEM-48, PROBLEM-49A, PROBLEM- 54, PROBLEM-54A and PROBLEM-55 and the :type-prescription rules LEXORDER and MEM. Subgoal *1/1.9 (IMPLIES (AND (CONSP X) (PERM (FILTER '<<= (CDR X) E) (RM (CAR X) (FILTER '<<= Y E))) (MEM (CAR X) Y) (PERM (CDR X) (RM (CAR X) Y)) (EQUAL FN '<<=) (NOT (LEXORDER (CAR X) E))) (PERM (FILTER '<<= (CDR X) E) (FILTER '<<= Y E))). But simplification reduces this to T, using the :definitions <<= and REL, the :executable-counterpart of EQUAL, the :rewrite rules PROBLEM- 111D, PROBLEM-111E, PROBLEM-48 and PROBLEM-49A and the :type-prescription rules LEXORDER and MEM. Subgoal *1/1.8 (IMPLIES (AND (CONSP X) (PERM (FILTER FN (CDR X) E) (RM (CAR X) (FILTER FN Y E))) (MEM (CAR X) Y) (PERM (CDR X) (RM (CAR X) Y)) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (LEXORDER E (CAR X)) (EQUAL (CAR X) E)) (PERM (FILTER FN (CDR X) E) (FILTER FN Y E))). But simplification reduces this to T, using the :definitions <<= and REL, primitive type reasoning, the :rewrite rules LEXORDER-TRANSITIVE, PROBLEM-111D, PROBLEM-111E, PROBLEM-48 and PROBLEM-49A and the :type- prescription rules LEXORDER and MEM. Subgoal *1/1.7 (IMPLIES (AND (CONSP X) (PERM (FILTER '>>= (CDR X) E) (RM (CAR X) (FILTER '>>= Y E))) (MEM (CAR X) Y) (PERM (CDR X) (RM (CAR X) Y)) (EQUAL FN '>>=) (NOT (LEXORDER E (CAR X)))) (PERM (FILTER '>>= (CDR X) E) (FILTER '>>= Y E))). But simplification reduces this to T, using the :definitions <<= and REL, the :executable-counterpart of EQUAL, the :rewrite rules PROBLEM- 111D, PROBLEM-111E, PROBLEM-48 and PROBLEM-49A and the :type-prescription rules LEXORDER and MEM. Subgoal *1/1.6 (IMPLIES (AND (CONSP X) (PERM (FILTER '>>= (CDR X) E) (RM (CAR X) (FILTER '>>= Y E))) (MEM (CAR X) Y) (PERM (CDR X) (RM (CAR X) Y)) (EQUAL FN '>>=) (LEXORDER E (CAR X))) (PERM (CONS (CAR X) (FILTER '>>= (CDR X) E)) (FILTER '>>= Y E))). But simplification reduces this to T, using the :definitions <<= and REL, the :equivalence rule PROBLEM-111B, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE, LEXORDER-TRANSITIVE, PROBLEM-111D, PROBLEM-48, PROBLEM-49A, PROBLEM- 54, PROBLEM-54A and PROBLEM-55 and the :type-prescription rules LEXORDER and MEM. Subgoal *1/1.5 (IMPLIES (AND (CONSP X) (PERM (FILTER '<< (CDR X) E) (RM (CAR X) (FILTER '<< Y E))) (MEM (CAR X) Y) (PERM (CDR X) (RM (CAR X) Y)) (EQUAL FN '<<) (EQUAL (CAR X) E)) (PERM (FILTER '<< (CDR X) E) (FILTER '<< Y E))). But simplification reduces this to T, using the :definitions <<= and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE, PROBLEM-111D, PROBLEM-111E, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM. Subgoal *1/1.4 (IMPLIES (AND (CONSP X) (PERM (FILTER FN (CDR X) E) (RM (CAR X) (FILTER FN Y E))) (MEM (CAR X) Y) (PERM (CDR X) (RM (CAR X) Y)) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E (CAR X)))) (PERM (FILTER FN (CDR X) E) (FILTER FN Y E))). But simplification reduces this to T, using the :definitions <<= and REL, the :rewrite rules PROBLEM-111D, PROBLEM-111E, PROBLEM-48 and PROBLEM-49A and the :type-prescription rules LEXORDER and MEM. Subgoal *1/1.3 (IMPLIES (AND (CONSP X) (PERM (FILTER FN (CDR X) E) (RM (CAR X) (FILTER FN Y E))) (MEM (CAR X) Y) (PERM (CDR X) (RM (CAR X) Y)) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E))) (PERM (CONS (CAR X) (FILTER FN (CDR X) E)) (FILTER FN Y E))). But simplification reduces this to T, using the :definitions <<= and REL, the :equivalence rule PROBLEM-111B, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE, LEXORDER-TRANSITIVE, PROBLEM- 111D, PROBLEM-48, PROBLEM-49A, PROBLEM-54, PROBLEM-54A and PROBLEM- 55 and the :type-prescription rules LEXORDER and MEM. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (PERM (FILTER '<< (CDR X) E) (RM (CAR X) (FILTER '<< Y E))) (MEM (CAR X) Y) (PERM (CDR X) (RM (CAR X) Y)) (EQUAL FN '<<) (NOT (LEXORDER (CAR X) E))) (PERM (FILTER '<< (CDR X) E) (FILTER '<< Y E))). But simplification reduces this to T, using the :definitions <<= and REL, the :executable-counterpart of EQUAL, the :rewrite rules PROBLEM- 111D, PROBLEM-111E, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (PERM (FILTER '<< (CDR X) E) (RM (CAR X) (FILTER '<< Y E))) (MEM (CAR X) Y) (PERM (CDR X) (RM (CAR X) Y)) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E))) (PERM (CONS (CAR X) (FILTER '<< (CDR X) E)) (FILTER '<< Y E))). But simplification reduces this to T, using the :definitions <<= and REL, the :equivalence rule PROBLEM-111B, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE, LEXORDER-TRANSITIVE, PROBLEM-111D, PROBLEM-48, PROBLEM-49A, PROBLEM- 54, PROBLEM-54A and PROBLEM-55 and the :type-prescription rules LEXORDER and MEM. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111G ...) Rules: ((:DEFINITION <<=) (:DEFINITION FILTER) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION PERM) (:DEFINITION REL) (:EQUIVALENCE PROBLEM-111B) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART PERM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PERM) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:REWRITE PROBLEM-111D) (:REWRITE PROBLEM-111E) (:REWRITE PROBLEM-111F) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:REWRITE PROBLEM-54) (:REWRITE PROBLEM-54A) (:REWRITE PROBLEM-55) (:REWRITE PROBLEM-55B) (:TYPE-PRESCRIPTION LEXORDER) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.38 seconds (prove: 0.16, print: 0.19, other: 0.03) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.05 seconds (prove: 0.00, print: 0.00, other: 0.05) PROBLEM-111G ACL2 >>(THEOREM PROBLEM-111H (PERM (APP A (CONS E B)) (CONS E (APP A B))) :HINTS (("Goal" :INDUCT (APP A B) :IN-THEORY (ENABLE PROBLEM-46 PROBLEM-54A PROBLEM-54 PROBLEM-55 PROBLEM-111B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP A B). This suggestion was produced using the :induction rule APP. If we let (:P A B E) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B E)) (IMPLIES (AND (CONSP A) (:P (CDR A) B E)) (:P A B E))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (PERM (APP A (CONS E B)) (CONS E (APP A B)))). But simplification reduces this to T, using the :definition APP, primitive type reasoning and the :rewrite rule PROBLEM-54. Subgoal *1/1 (IMPLIES (AND (CONSP A) (PERM (APP (CDR A) (CONS E B)) (CONS E (APP (CDR A) B)))) (PERM (APP A (CONS E B)) (CONS E (APP A B)))). But simplification reduces this to T, using the :definitions APP, MEM and RM, the :equivalence rule PROBLEM-111B, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-46, PROBLEM-54, PROBLEM-54A and PROBLEM-55. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111H ...) Rules: ((:DEFINITION APP) (:DEFINITION MEM) (:DEFINITION RM) (:EQUIVALENCE PROBLEM-111B) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-46) (:REWRITE PROBLEM-54) (:REWRITE PROBLEM-54A) (:REWRITE PROBLEM-55)) Warnings: None Time: 0.04 seconds (prove: 0.01, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-111H ACL2 >>(THEOREM PROBLEM-111I (PERM (APP (FILTER '<< X E) (FILTER '>>= X E)) X) :HINTS (("Goal" :INDUCT (FILTER '>>= X E) :IN-THEORY (ENABLE PROBLEM-54A PROBLEM-54 PROBLEM-55 PROBLEM-111B PROBLEM-111H)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (FILTER '>>= X E). This suggestion was produced using the :induction rule FILTER. If we let (:P E X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP X)) (NOT (REL '>>= (CAR X) E)) (:P E (CDR X))) (:P E X)) (IMPLIES (AND (NOT (ENDP X)) (REL '>>= (CAR X) E) (:P E (CDR X))) (:P E X)) (IMPLIES (ENDP X) (:P E X))). This induction is justified by the same argument used to admit FILTER, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP X)) (NOT (REL '>>= (CAR X) E)) (PERM (APP (FILTER '<< (CDR X) E) (FILTER '>>= (CDR X) E)) (CDR X))) (PERM (APP (FILTER '<< X E) (FILTER '>>= X E)) X)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP X) (NOT (REL '>>= (CAR X) E)) (PERM (APP (FILTER '<< (CDR X) E) (FILTER '>>= (CDR X) E)) (CDR X))) (PERM (APP (FILTER '<< X E) (FILTER '>>= X E)) X)). This simplifies, using the :definitions <<=, FILTER and REL and the :executable-counterpart of EQUAL, to the following three conjectures. Subgoal *1/3.3 (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (PERM (APP (FILTER '<< (CDR X) E) (FILTER '>>= (CDR X) E)) (CDR X)) (NOT (LEXORDER (CAR X) E))) (PERM (APP (FILTER '<< (CDR X) E) (FILTER '>>= (CDR X) E)) X)). But simplification reduces this to T, using primitive type reasoning and the :forward-chaining rule LEXORDER-TOTAL. Subgoal *1/3.2 (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (PERM (APP (FILTER '<< (CDR X) E) (FILTER '>>= (CDR X) E)) (CDR X)) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E))) (PERM (APP (CONS (CAR X) (FILTER '<< (CDR X) E)) (FILTER '>>= (CDR X) E)) X)). But simplification reduces this to T, using the :definitions APP, MEM and RM, the :equivalence rule PROBLEM-111B, primitive type reasoning, the :forward-chaining rule LEXORDER-TOTAL, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE, LEXORDER-TRANSITIVE, PROBLEM-54, PROBLEM- 54A and PROBLEM-55 and the :type-prescription rules FILTER and LEXORDER. Subgoal *1/3.1 (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (PERM (APP (FILTER '<< (CDR X) E) (FILTER '>>= (CDR X) E)) (CDR X)) (EQUAL (CAR X) E)) (PERM (APP (FILTER '<< (CDR X) E) (FILTER '>>= (CDR X) E)) X)). But simplification reduces this to T, using primitive type reasoning and the :forward-chaining rule LEXORDER-TOTAL. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP X)) (REL '>>= (CAR X) E) (PERM (APP (FILTER '<< (CDR X) E) (FILTER '>>= (CDR X) E)) (CDR X))) (PERM (APP (FILTER '<< X E) (FILTER '>>= X E)) X)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (REL '>>= (CAR X) E) (PERM (APP (FILTER '<< (CDR X) E) (FILTER '>>= (CDR X) E)) (CDR X))) (PERM (APP (FILTER '<< X E) (FILTER '>>= X E)) X)). This simplifies, using the :definitions <<=, FILTER, MEM, PERM, REL and RM, the :equivalence rule PROBLEM-111B, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR- CONS, LEXORDER-REFLEXIVE, LEXORDER-TRANSITIVE and PROBLEM-111H and the :type-prescription rule LEXORDER, to Subgoal *1/2'' (IMPLIES (AND (CONSP X) (LEXORDER E (CAR X)) (PERM (APP (FILTER '<< (CDR X) E) (FILTER '>>= (CDR X) E)) (CDR X)) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E))) (PERM (APP (CONS (CAR X) (FILTER '<< (CDR X) E)) (FILTER '>>= (CDR X) E)) (CDR X))). But simplification reduces this to T, using the :forward-chaining rule LEXORDER-ANTI-SYMMETRIC and the :type-prescription rule LEXORDER. Subgoal *1/1 (IMPLIES (ENDP X) (PERM (APP (FILTER '<< X E) (FILTER '>>= X E)) X)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (NOT (CONSP X)) (PERM (APP (FILTER '<< X E) (FILTER '>>= X E)) X)). But simplification reduces this to T, using the :definitions FILTER and PERM, the :executable-counterparts of APP and CONSP and the :rewrite rule PROBLEM-54. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111I ...) Rules: ((:DEFINITION <<=) (:DEFINITION APP) (:DEFINITION ENDP) (:DEFINITION FILTER) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION PERM) (:DEFINITION REL) (:DEFINITION RM) (:EQUIVALENCE PROBLEM-111B) (:EXECUTABLE-COUNTERPART APP) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING LEXORDER-ANTI-SYMMETRIC) (:FORWARD-CHAINING LEXORDER-TOTAL) (:INDUCTION FILTER) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:REWRITE PROBLEM-111H) (:REWRITE PROBLEM-54) (:REWRITE PROBLEM-54A) (:REWRITE PROBLEM-55) (:TYPE-PRESCRIPTION FILTER) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: None Time: 0.15 seconds (prove: 0.04, print: 0.10, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-111I ACL2 >>(THEOREM PROBLEM-111J (IMPLIES (MEM E X) (PERM (APP (RM E X) Y) (RM E (APP X Y)))) :HINTS (("Goal" :INDUCT (APP X Y) :IN-THEORY (ENABLE PROBLEM-53 PROBLEM-54 PROBLEM-54A PROBLEM-55 PROBLEM-111B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP X Y). This suggestion was produced using the :induction rule APP. If we let (:P E X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P E X Y)) (IMPLIES (AND (CONSP X) (:P E (CDR X) Y)) (:P E X Y))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (IMPLIES (MEM E X) (PERM (APP (RM E X) Y) (RM E (APP X Y))))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (CONSP X)) (MEM E X)) (PERM (APP (RM E X) Y) (RM E (APP X Y)))). But simplification reduces this to T, using the :definition MEM. Subgoal *1/1 (IMPLIES (AND (CONSP X) (IMPLIES (MEM E (CDR X)) (PERM (APP (RM E (CDR X)) Y) (RM E (APP (CDR X) Y))))) (IMPLIES (MEM E X) (PERM (APP (RM E X) Y) (RM E (APP X Y))))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (IMPLIES (MEM E (CDR X)) (PERM (APP (RM E (CDR X)) Y) (RM E (APP (CDR X) Y)))) (MEM E X)) (PERM (APP (RM E X) Y) (RM E (APP X Y)))). This simplifies, using the :definitions APP, MEM and RM, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and PROBLEM- 54, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (PERM (APP (RM E (CDR X)) Y) (RM E (APP (CDR X) Y))) (MEM E (CDR X)) (EQUAL E (CAR X))) (PERM (APP (CDR X) Y) (APP (CDR X) Y))). But we reduce the conjecture to T, by the simple :rewrite rule PROBLEM- 53. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (PERM (APP (RM E (CDR X)) Y) (RM E (APP (CDR X) Y))) (MEM E (CDR X)) (NOT (EQUAL E (CAR X)))) (PERM (APP (CONS (CAR X) (RM E (CDR X))) Y) (CONS (CAR X) (RM E (APP (CDR X) Y))))). But simplification reduces this to T, using the :definitions APP, MEM and RM, the :equivalence rule PROBLEM-111B, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-54, PROBLEM-54A and PROBLEM-55. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111J ...) Rules: ((:DEFINITION APP) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION RM) (:EQUIVALENCE PROBLEM-111B) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-53) (:REWRITE PROBLEM-54) (:REWRITE PROBLEM-54A) (:REWRITE PROBLEM-55)) Warnings: None Time: 0.08 seconds (prove: 0.01, print: 0.04, other: 0.03) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-111J ACL2 >>(THEOREM PROBLEM-111K (IMPLIES (PERM A B) (PERM (APP A C) (APP B C))) :HINTS (("Goal" :INDUCT (PERM A B) :IN-THEORY (ENABLE PROBLEM-46 PROBLEM-48 PROBLEM-49A PROBLEM-54A PROBLEM-54 PROBLEM-55B PROBLEM-55 PROBLEM-111B PROBLEM-111J))) :RULE-CLASSES :CONGRUENCE) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PERM A B). This suggestion was produced using the :induction rule PERM. If we let (:P A B C) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B C)) (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B))) (:P A B C)) (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (:P (CDR A) (RM (CAR A) B) C)) (:P A B C))). This induction is justified by the same argument used to admit PERM, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable B is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP A)) (IMPLIES (PERM A B) (PERM (APP A C) (APP B C)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP A)) (PERM A B)) (PERM (APP A C) (APP B C))). But simplification reduces this to T, using the :definitions APP and PERM, primitive type reasoning and the :rewrite rule PROBLEM-54. Subgoal *1/2 (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B))) (IMPLIES (PERM A B) (PERM (APP A C) (APP B C)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B)) (PERM A B)) (PERM (APP A C) (APP B C))). But simplification reduces this to T, using the :definition MEM, primitive type reasoning and the :rewrite rule PROBLEM-55B. Subgoal *1/1 (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (IMPLIES (PERM (CDR A) (RM (CAR A) B)) (PERM (APP (CDR A) C) (APP (RM (CAR A) B) C)))) (IMPLIES (PERM A B) (PERM (APP A C) (APP B C)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (IMPLIES (PERM (CDR A) (RM (CAR A) B)) (PERM (APP (CDR A) C) (APP (RM (CAR A) B) C))) (PERM A B)) (PERM (APP A C) (APP B C))). But simplification reduces this to T, using the :definitions APP, MEM and PERM, the :equivalence rule PROBLEM-111B, primitive type reasoning, the :rewrite rules PROBLEM-111J, PROBLEM-46, PROBLEM-48, PROBLEM-49A, PROBLEM-54, PROBLEM-54A, PROBLEM-55 and PROBLEM-55B and the :type- prescription rule MEM. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111K ...) Rules: ((:DEFINITION APP) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION PERM) (:EQUIVALENCE PROBLEM-111B) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PERM) (:REWRITE PROBLEM-111J) (:REWRITE PROBLEM-46) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:REWRITE PROBLEM-54) (:REWRITE PROBLEM-54A) (:REWRITE PROBLEM-55) (:REWRITE PROBLEM-55B) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.19 seconds (prove: 0.02, print: 0.15, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-111K ACL2 >>(THEOREM PROBLEM-111L (IMPLIES (PERM A B) (PERM (APP C A) (APP C B))) :HINTS (("Goal" :INDUCT (APP C B) :IN-THEORY (ENABLE PROBLEM-54A PROBLEM-54 PROBLEM-55 PROBLEM-111B))) :RULE-CLASSES :CONGRUENCE) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP C B). This suggestion was produced using the :induction rule APP. If we let (:P A B C) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP C)) (:P A B C)) (IMPLIES (AND (CONSP C) (:P A B (CDR C))) (:P A B C))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT C) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP C)) (IMPLIES (PERM A B) (PERM (APP C A) (APP C B)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (CONSP C)) (PERM A B)) (PERM (APP C A) (APP C B))). But simplification reduces this to T, using the :definition APP, the :equivalence rule PROBLEM-111B, primitive type reasoning and the :rewrite rule PROBLEM-55. Subgoal *1/1 (IMPLIES (AND (CONSP C) (IMPLIES (PERM A B) (PERM (APP (CDR C) A) (APP (CDR C) B)))) (IMPLIES (PERM A B) (PERM (APP C A) (APP C B)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP C) (IMPLIES (PERM A B) (PERM (APP (CDR C) A) (APP (CDR C) B))) (PERM A B)) (PERM (APP C A) (APP C B))). But simplification reduces this to T, using the :definitions APP, MEM and RM, the :equivalence rule PROBLEM-111B, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-54, PROBLEM-54A and PROBLEM-55. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111L ...) Rules: ((:DEFINITION APP) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION RM) (:EQUIVALENCE PROBLEM-111B) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-54) (:REWRITE PROBLEM-54A) (:REWRITE PROBLEM-55)) Warnings: None Time: 0.06 seconds (prove: 0.01, print: 0.03, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-111L ACL2 >>(THEOREM PROBLEM-111-A (PERM (QSORT X) X) :HINTS (("Goal" :INDUCT (QSORT X) :IN-THEORY (ENABLE PROBLEM-54 PROBLEM-111B PROBLEM-111H PROBLEM-111I PROBLEM-111K PROBLEM-111L)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (QSORT X). This suggestion was produced using the :induction rule QSORT. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP X)) (NOT (ENDP (CDR X))) (:P (FILTER '<< (CDR X) (CAR X))) (:P (FILTER '>>= (CDR X) (CAR X)))) (:P X)) (IMPLIES (AND (NOT (ENDP X)) (ENDP (CDR X))) (:P X)) (IMPLIES (ENDP X) (:P X))). This induction is justified by the same argument used to admit QSORT, namely, the measure (CC X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP X)) (NOT (ENDP (CDR X))) (PERM (QSORT (FILTER '<< (CDR X) (CAR X))) (FILTER '<< (CDR X) (CAR X))) (PERM (QSORT (FILTER '>>= (CDR X) (CAR X))) (FILTER '>>= (CDR X) (CAR X)))) (PERM (QSORT X) X)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (PERM (QSORT (FILTER '<< (CDR X) (CAR X))) (FILTER '<< (CDR X) (CAR X))) (PERM (QSORT (FILTER '>>= (CDR X) (CAR X))) (FILTER '>>= (CDR X) (CAR X)))) (PERM (QSORT X) X)). But simplification reduces this to T, using the :congruence rules PROBLEM- 111K and PROBLEM-111L, the :definitions MEM, PERM, QSORT and RM, the :equivalence rule PROBLEM-111B, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-111H, PROBLEM-111I and PROBLEM-54. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP X)) (ENDP (CDR X))) (PERM (QSORT X) X)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (CONSP (CDR X)))) (PERM (QSORT X) X)). But simplification reduces this to T, using the :definition QSORT, primitive type reasoning and the :rewrite rule PROBLEM-54. Subgoal *1/1 (IMPLIES (ENDP X) (PERM (QSORT X) X)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (NOT (CONSP X)) (PERM (QSORT X) X)). But simplification reduces this to T, using the :definitions PERM and QSORT, the :executable-counterpart of CONSP and the :rewrite rule PROBLEM- 54. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111-A ...) Rules: ((:CONGRUENCE PROBLEM-111K) (:CONGRUENCE PROBLEM-111L) (:DEFINITION ENDP) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION PERM) (:DEFINITION QSORT) (:DEFINITION RM) (:EQUIVALENCE PROBLEM-111B) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION QSORT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-111H) (:REWRITE PROBLEM-111I) (:REWRITE PROBLEM-54)) Warnings: None Time: 0.09 seconds (prove: 0.02, print: 0.06, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-111-A ACL2 >>(DEFUN ALL-REL (FN X E) (COND ((ENDP X) T) ((REL FN (CAR X) E) (ALL-REL FN (CDR X) E)) (T NIL))) The admission of ALL-REL is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of ALL-REL is described by the theorem (OR (EQUAL (ALL-REL FN X E) T) (EQUAL (ALL-REL FN X E) NIL)). Summary Form: ( DEFUN ALL-REL ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) ALL-REL ACL2 >>(THEOREM PROBLEM-111M (EQUAL (CAR (APP A B)) (IF (CONSP A) (CAR A) (CAR B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] This simplifies, using trivial observations, to the following two conjectures. Subgoal 2 (IMPLIES (CONSP A) (EQUAL (CAR (APP A B)) (CAR A))). The destructor terms (CAR A) and (CDR A) can be eliminated by using CAR-CDR-ELIM to replace A by (CONS A1 A2), (CAR A) by A1 and (CDR A) by A2. This produces the following goal. Subgoal 2' (IMPLIES (CONSP (CONS A1 A2)) (EQUAL (CAR (APP (CONS A1 A2) B)) A1)). But simplification reduces this to T, using the :definition APP, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal 1 (IMPLIES (NOT (CONSP A)) (EQUAL (CAR (APP A B)) (CAR B))). But simplification reduces this to T, using the :definition APP and primitive type reasoning. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111M ...) Rules: ((:DEFINITION APP) (:ELIM CAR-CDR-ELIM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS)) Warnings: None Time: 0.03 seconds (prove: 0.01, print: 0.02, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-111M ACL2 >>(THEOREM PROBLEM-111N (IMPLIES (AND (LEXORDER E (CAR A)) (ORDERED A)) (ALL-REL '>>= A E)) :HINTS (("Goal" :INDUCT (ALL-REL '>>= A E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (ALL-REL '>>= A E). This suggestion was produced using the :induction rule ALL-REL. If we let (:P A E) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP A)) (NOT (REL '>>= (CAR A) E))) (:P A E)) (IMPLIES (AND (NOT (ENDP A)) (REL '>>= (CAR A) E) (:P (CDR A) E)) (:P A E)) (IMPLIES (ENDP A) (:P A E))). This induction is justified by the same argument used to admit ALL- REL, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP A)) (NOT (REL '>>= (CAR A) E))) (IMPLIES (AND (LEXORDER E (CAR A)) (ORDERED A)) (ALL-REL '>>= A E))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP A) (NOT (REL '>>= (CAR A) E)) (LEXORDER E (CAR A)) (ORDERED A)) (ALL-REL '>>= A E)). But simplification reduces this to T, using the :definitions <<= and REL, the :executable-counterpart of EQUAL, the :rewrite rules LEXORDER- REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP A)) (REL '>>= (CAR A) E) (IMPLIES (AND (LEXORDER E (CADR A)) (ORDERED (CDR A))) (ALL-REL '>>= (CDR A) E))) (IMPLIES (AND (LEXORDER E (CAR A)) (ORDERED A)) (ALL-REL '>>= A E))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP A) (REL '>>= (CAR A) E) (IMPLIES (AND (LEXORDER E (CADR A)) (ORDERED (CDR A))) (ALL-REL '>>= (CDR A) E)) (LEXORDER E (CAR A)) (ORDERED A)) (ALL-REL '>>= A E)). This simplifies, using the :definitions <<=, ALL-REL, ORDERED and REL, the :executable-counterpart of EQUAL, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rules ALL-REL and LEXORDER, to the following three conjectures. Subgoal *1/2.3 (IMPLIES (AND (CONSP A) (NOT (LEXORDER E (CADR A))) (LEXORDER E (CAR A)) (NOT (CONSP (CDR A)))) (ALL-REL '>>= (CDR A) E)). But simplification reduces this to T, using the :definition ALL-REL and the :rewrite rule DEFAULT-CAR. Subgoal *1/2.2 (IMPLIES (AND (CONSP A) (NOT (LEXORDER E (CADR A))) (LEXORDER E (CAR A)) (LEXORDER (CAR A) (CADR A)) (ORDERED (CDR A))) (ALL-REL '>>= (CDR A) E)). But simplification reduces this to T, using the :rewrite rule LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.1 (IMPLIES (AND (CONSP A) (NOT (ORDERED (CDR A))) (LEXORDER E (CAR A)) (NOT (CONSP (CDR A)))) (ALL-REL '>>= (CDR A) E)). But simplification reduces this to T, using the :definition ORDERED. Subgoal *1/1 (IMPLIES (ENDP A) (IMPLIES (AND (LEXORDER E (CAR A)) (ORDERED A)) (ALL-REL '>>= A E))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP A)) (LEXORDER E (CAR A)) (ORDERED A)) (ALL-REL '>>= A E)). But simplification reduces this to T, using the :definitions ALL-REL and ORDERED and the :rewrite rule DEFAULT-CAR. That completes the proof of *1. Q.E.D. The storage of PROBLEM-111N depends upon the :type-prescription rule ALL-REL. Summary Form: ( DEFTHM PROBLEM-111N ...) Rules: ((:DEFINITION <<=) (:DEFINITION ALL-REL) (:DEFINITION ENDP) (:DEFINITION NOT) (:DEFINITION ORDERED) (:DEFINITION REL) (:EXECUTABLE-COUNTERPART EQUAL) (:INDUCTION ALL-REL) (:REWRITE DEFAULT-CAR) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:TYPE-PRESCRIPTION ALL-REL) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: None Time: 0.10 seconds (prove: 0.04, print: 0.06, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-111N ACL2 >>(THEOREM PROBLEM-111O (IMPLIES (AND (LEXORDER D (CAR A)) (CONSP A) (ORDERED (APP A (CONS E B)))) (LEXORDER D E)) :HINTS (("Goal" :INDUCT (APP A (CONS E B)) :IN-THEORY (ENABLE PROBLEM-111M)))) ACL2 Warning [Free] in ( DEFTHM PROBLEM-111O ...): The :REWRITE rule generated from PROBLEM-111O contains the free variables B and A. These variables will be chosen by searching for instances of (LEXORDER D (CAR A)) and (ORDERED (APP A (CONS E B))) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :REWRITE rule. See :DOC free-variables. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP A (CONS E B)). This suggestion was produced using the :induction rule APP. If we let (:P A B D E) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B D E)) (IMPLIES (AND (CONSP A) (:P (CDR A) B D E)) (:P A B D E))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces one nontautological subgoal. Subgoal *1/ (IMPLIES (AND (CONSP A) (IMPLIES (AND (LEXORDER D (CADR A)) (CONSP (CDR A)) (ORDERED (APP (CDR A) (CONS E B)))) (LEXORDER D E))) (IMPLIES (AND (LEXORDER D (CAR A)) (CONSP A) (ORDERED (APP A (CONS E B)))) (LEXORDER D E))). By case analysis we reduce the conjecture to Subgoal *1/' (IMPLIES (AND (CONSP A) (IMPLIES (AND (LEXORDER D (CADR A)) (CONSP (CDR A)) (ORDERED (APP (CDR A) (CONS E B)))) (LEXORDER D E)) (LEXORDER D (CAR A)) (ORDERED (APP A (CONS E B)))) (LEXORDER D E)). This simplifies, using the :definitions <<=, APP and ORDERED, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-TRANSITIVE and PROBLEM-111M and the :type-prescription rules APP and LEXORDER, to Subgoal *1/'' (IMPLIES (AND (CONSP A) (NOT (LEXORDER D (CADR A))) (LEXORDER D (CAR A)) (CONSP (CDR A)) (LEXORDER (CAR A) (CADR A)) (ORDERED (APP (CDR A) (CONS E B)))) (LEXORDER D E)). But simplification reduces this to T, using the :rewrite rule LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. That completes the proof of *1. Q.E.D. The storage of PROBLEM-111O depends upon the :type-prescription rule LEXORDER. Summary Form: ( DEFTHM PROBLEM-111O ...) Rules: ((:DEFINITION <<=) (:DEFINITION APP) (:DEFINITION NOT) (:DEFINITION ORDERED) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-TRANSITIVE) (:REWRITE PROBLEM-111M) (:TYPE-PRESCRIPTION APP) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: Free Time: 0.07 seconds (prove: 0.01, print: 0.03, other: 0.03) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-111O ACL2 >>(THEOREM PROBLEM-111P (IFF (ORDERED (APP A (CONS E B))) (AND (ORDERED A) (ORDERED B) (ALL-REL '<<= A E) (ALL-REL '>>= B E))) :HINTS (("Goal" :INDUCT (ALL-REL '<<= A E) :IN-THEORY (ENABLE PROBLEM-111M PROBLEM-111N PROBLEM-111O)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (ALL-REL '<<= A E). This suggestion was produced using the :induction rule ALL-REL. If we let (:P A B E) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP A)) (NOT (REL '<<= (CAR A) E))) (:P A B E)) (IMPLIES (AND (NOT (ENDP A)) (REL '<<= (CAR A) E) (:P (CDR A) B E)) (:P A B E)) (IMPLIES (ENDP A) (:P A B E))). This induction is justified by the same argument used to admit ALL- REL, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP A)) (NOT (REL '<<= (CAR A) E))) (IFF (ORDERED (APP A (CONS E B))) (AND (ORDERED A) (ORDERED B) (ALL-REL '<<= A E) (ALL-REL '>>= B E)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP A) (NOT (REL '<<= (CAR A) E))) (COND ((ORDERED (APP A (CONS E B))) (AND (ORDERED A) (ORDERED B) (ALL-REL '<<= A E) (ALL-REL '>>= B E))) ((AND (ORDERED A) (ORDERED B) (ALL-REL '<<= A E) (ALL-REL '>>= B E)) NIL) (T T))). This simplifies, using the :definitions <<=, ALL-REL and REL and the :executable-counterpart of EQUAL, to Subgoal *1/3'' (IMPLIES (AND (CONSP A) (NOT (LEXORDER (CAR A) E))) (NOT (ORDERED (APP A (CONS E B))))). The destructor terms (CAR A) and (CDR A) can be eliminated by using CAR-CDR-ELIM to replace A by (CONS A1 A2), (CAR A) by A1 and (CDR A) by A2. This produces the following goal. Subgoal *1/3''' (IMPLIES (AND (CONSP (CONS A1 A2)) (NOT (LEXORDER A1 E))) (NOT (ORDERED (APP (CONS A1 A2) (CONS E B))))). This simplifies, using the :definitions <<=, APP and ORDERED, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS and PROBLEM-111M and the :type-prescription rule APP, to Subgoal *1/3'4' (IMPLIES (AND (NOT (LEXORDER A1 E)) (CONSP A2) (LEXORDER A1 (CAR A2))) (NOT (ORDERED (APP A2 (CONS E B))))). But simplification reduces this to T, using the :rewrite rule PROBLEM- 111O and the :type-prescription rules LEXORDER and ORDERED. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP A)) (REL '<<= (CAR A) E) (IFF (ORDERED (APP (CDR A) (CONS E B))) (AND (ORDERED (CDR A)) (ORDERED B) (ALL-REL '<<= (CDR A) E) (ALL-REL '>>= B E)))) (IFF (ORDERED (APP A (CONS E B))) (AND (ORDERED A) (ORDERED B) (ALL-REL '<<= A E) (ALL-REL '>>= B E)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP A) (REL '<<= (CAR A) E) (COND ((ORDERED (APP (CDR A) (CONS E B))) (AND (ORDERED (CDR A)) (ORDERED B) (ALL-REL '<<= (CDR A) E) (ALL-REL '>>= B E))) ((AND (ORDERED (CDR A)) (ORDERED B) (ALL-REL '<<= (CDR A) E) (ALL-REL '>>= B E)) NIL) (T T))) (COND ((ORDERED (APP A (CONS E B))) (AND (ORDERED A) (ORDERED B) (ALL-REL '<<= A E) (ALL-REL '>>= B E))) ((AND (ORDERED A) (ORDERED B) (ALL-REL '<<= A E) (ALL-REL '>>= B E)) NIL) (T T))). This simplifies, using the :definitions <<=, ALL-REL, APP, ORDERED and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE, LEXORDER- TRANSITIVE and PROBLEM-111M and the :type-prescription rules ALL-REL, APP, LEXORDER and ORDERED, to Subgoal *1/2'' (IMPLIES (AND (CONSP A) (LEXORDER (CAR A) E) (NOT (ORDERED (APP (CDR A) (CONS E B)))) (NOT (ORDERED (CDR A))) (NOT (CONSP (CDR A))) (ORDERED B) (ALL-REL '<<= (CDR A) E)) (NOT (ALL-REL '>>= B E))). But simplification reduces this to T, using the :definitions <<=, APP and ORDERED, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rules LEXORDER and ORDERED. Subgoal *1/1 (IMPLIES (ENDP A) (IFF (ORDERED (APP A (CONS E B))) (AND (ORDERED A) (ORDERED B) (ALL-REL '<<= A E) (ALL-REL '>>= B E)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (NOT (CONSP A)) (COND ((ORDERED (APP A (CONS E B))) (AND (ORDERED A) (ORDERED B) (ALL-REL '<<= A E) (ALL-REL '>>= B E))) ((AND (ORDERED A) (ORDERED B) (ALL-REL '<<= A E) (ALL-REL '>>= B E)) NIL) (T T))). This simplifies, using the :definitions <<=, ALL-REL, APP and ORDERED, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following four conjectures. Subgoal *1/1.4 (IMPLIES (AND (NOT (CONSP A)) (CONSP B) (NOT (LEXORDER E (CAR B))) (ORDERED B)) (NOT (ALL-REL '>>= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL and the :executable-counterpart of EQUAL. Subgoal *1/1.3 (IMPLIES (AND (NOT (CONSP A)) (NOT (CONSP B))) (ALL-REL '>>= B E)). But simplification reduces this to T, using the :definition ALL-REL. Subgoal *1/1.2 (IMPLIES (AND (NOT (CONSP A)) (NOT (CONSP B))) (ORDERED B)). But simplification reduces this to T, using the :definition ORDERED. Subgoal *1/1.1 (IMPLIES (AND (NOT (CONSP A)) (LEXORDER E (CAR B)) (ORDERED B)) (ALL-REL '>>= B E)). But simplification reduces this to T, using the :rewrite rule PROBLEM- 111N and the :type-prescription rules LEXORDER and ORDERED. That completes the proof of *1. Q.E.D. The storage of PROBLEM-111P depends upon the :type-prescription rules ALL-REL and ORDERED. Summary Form: ( DEFTHM PROBLEM-111P ...) Rules: ((:DEFINITION <<=) (:DEFINITION ALL-REL) (:DEFINITION APP) (:DEFINITION ENDP) (:DEFINITION IFF) (:DEFINITION NOT) (:DEFINITION ORDERED) (:DEFINITION REL) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION ALL-REL) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:REWRITE PROBLEM-111M) (:REWRITE PROBLEM-111N) (:REWRITE PROBLEM-111O) (:TYPE-PRESCRIPTION ALL-REL) (:TYPE-PRESCRIPTION APP) (:TYPE-PRESCRIPTION LEXORDER) (:TYPE-PRESCRIPTION ORDERED)) Warnings: None Time: 0.17 seconds (prove: 0.07, print: 0.07, other: 0.03) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-111P ACL2 >>(THEOREM PROBLEM-111Q (ALL-REL '<<= (FILTER '<< X E) E) :HINTS (("Goal" :INDUCT (FILTER '<< X E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (FILTER '<< X E). This suggestion was produced using the :induction rule FILTER. If we let (:P E X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP X)) (NOT (REL '<< (CAR X) E)) (:P E (CDR X))) (:P E X)) (IMPLIES (AND (NOT (ENDP X)) (REL '<< (CAR X) E) (:P E (CDR X))) (:P E X)) (IMPLIES (ENDP X) (:P E X))). This induction is justified by the same argument used to admit FILTER, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP X)) (NOT (REL '<< (CAR X) E)) (ALL-REL '<<= (FILTER '<< (CDR X) E) E)) (ALL-REL '<<= (FILTER '<< X E) E)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP X) (NOT (REL '<< (CAR X) E)) (ALL-REL '<<= (FILTER '<< (CDR X) E) E)) (ALL-REL '<<= (FILTER '<< X E) E)). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rule LEXORDER-REFLEXIVE and the :type-prescription rule ALL-REL. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP X)) (REL '<< (CAR X) E) (ALL-REL '<<= (FILTER '<< (CDR X) E) E)) (ALL-REL '<<= (FILTER '<< X E) E)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (REL '<< (CAR X) E) (ALL-REL '<<= (FILTER '<< (CDR X) E) E)) (ALL-REL '<<= (FILTER '<< X E) E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rules ALL-REL, FILTER and LEXORDER. Subgoal *1/1 (IMPLIES (ENDP X) (ALL-REL '<<= (FILTER '<< X E) E)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (NOT (CONSP X)) (ALL-REL '<<= (FILTER '<< X E) E)). But simplification reduces this to T, using the :definitions ALL-REL and FILTER and the :executable-counterpart of CONSP. That completes the proof of *1. Q.E.D. The storage of PROBLEM-111Q depends upon the :type-prescription rule ALL-REL. Summary Form: ( DEFTHM PROBLEM-111Q ...) Rules: ((:DEFINITION <<=) (:DEFINITION ALL-REL) (:DEFINITION ENDP) (:DEFINITION FILTER) (:DEFINITION NOT) (:DEFINITION REL) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION FILTER) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:TYPE-PRESCRIPTION ALL-REL) (:TYPE-PRESCRIPTION FILTER) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: None Time: 0.05 seconds (prove: 0.00, print: 0.04, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-111Q ACL2 >>(THEOREM PROBLEM-111R (ALL-REL '>>= (FILTER '>>= X E) E) :HINTS (("Goal" :INDUCT (FILTER '>>= X E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (FILTER '>>= X E). This suggestion was produced using the :induction rule FILTER. If we let (:P E X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP X)) (NOT (REL '>>= (CAR X) E)) (:P E (CDR X))) (:P E X)) (IMPLIES (AND (NOT (ENDP X)) (REL '>>= (CAR X) E) (:P E (CDR X))) (:P E X)) (IMPLIES (ENDP X) (:P E X))). This induction is justified by the same argument used to admit FILTER, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP X)) (NOT (REL '>>= (CAR X) E)) (ALL-REL '>>= (FILTER '>>= (CDR X) E) E)) (ALL-REL '>>= (FILTER '>>= X E) E)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP X) (NOT (REL '>>= (CAR X) E)) (ALL-REL '>>= (FILTER '>>= (CDR X) E) E)) (ALL-REL '>>= (FILTER '>>= X E) E)). But simplification reduces this to T, using the :definitions <<=, FILTER and REL, the :executable-counterpart of EQUAL and the :type-prescription rule ALL-REL. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP X)) (REL '>>= (CAR X) E) (ALL-REL '>>= (FILTER '>>= (CDR X) E) E)) (ALL-REL '>>= (FILTER '>>= X E) E)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (REL '>>= (CAR X) E) (ALL-REL '>>= (FILTER '>>= (CDR X) E) E)) (ALL-REL '>>= (FILTER '>>= X E) E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL, FILTER and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rules ALL-REL, FILTER and LEXORDER. Subgoal *1/1 (IMPLIES (ENDP X) (ALL-REL '>>= (FILTER '>>= X E) E)). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (NOT (CONSP X)) (ALL-REL '>>= (FILTER '>>= X E) E)). But simplification reduces this to T, using the :definitions ALL-REL and FILTER and the :executable-counterpart of CONSP. That completes the proof of *1. Q.E.D. The storage of PROBLEM-111R depends upon the :type-prescription rule ALL-REL. Summary Form: ( DEFTHM PROBLEM-111R ...) Rules: ((:DEFINITION <<=) (:DEFINITION ALL-REL) (:DEFINITION ENDP) (:DEFINITION FILTER) (:DEFINITION NOT) (:DEFINITION REL) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION FILTER) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:TYPE-PRESCRIPTION ALL-REL) (:TYPE-PRESCRIPTION FILTER) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: None Time: 0.17 seconds (prove: 0.02, print: 0.15, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-111R ACL2 >>(THEOREM PROBLEM-111S (IMPLIES (ALL-REL FN X E) (ALL-REL FN (RM D X) E)) :HINTS (("Goal" :INDUCT (RM D X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (RM D X). This suggestion was produced using the :induction rule RM. If we let (:P D E FN X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P D E FN X)) (IMPLIES (AND (CONSP X) (NOT (EQUAL D (CAR X))) (:P D E FN (CDR X))) (:P D E FN X)) (IMPLIES (AND (CONSP X) (EQUAL D (CAR X))) (:P D E FN X))). This induction is justified by the same argument used to admit RM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (ALL-REL FN X E) (ALL-REL FN (RM D X) E))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (ALL-REL FN X E)) (ALL-REL FN (RM D X) E)). But simplification reduces this to T, using the :definitions ALL-REL and RM. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (EQUAL D (CAR X))) (IMPLIES (ALL-REL FN (CDR X) E) (ALL-REL FN (RM D (CDR X)) E))) (IMPLIES (ALL-REL FN X E) (ALL-REL FN (RM D X) E))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (EQUAL D (CAR X))) (IMPLIES (ALL-REL FN (CDR X) E) (ALL-REL FN (RM D (CDR X)) E)) (ALL-REL FN X E)) (ALL-REL FN (RM D X) E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rules ALL-REL and LEXORDER. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL D (CAR X))) (IMPLIES (ALL-REL FN X E) (ALL-REL FN (RM D X) E))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (EQUAL D (CAR X)) (ALL-REL FN X E)) (ALL-REL FN (RM D X) E)). This simplifies, using the :definition RM and primitive type reasoning, to Subgoal *1/1'' (IMPLIES (AND (CONSP X) (ALL-REL FN X E)) (ALL-REL FN (CDR X) E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL. That completes the proof of *1. Q.E.D. The storage of PROBLEM-111S depends upon the :type-prescription rule ALL-REL. Summary Form: ( DEFTHM PROBLEM-111S ...) Rules: ((:DEFINITION <<=) (:DEFINITION ALL-REL) (:DEFINITION NOT) (:DEFINITION REL) (:DEFINITION RM) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION RM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:TYPE-PRESCRIPTION ALL-REL) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: None Time: 0.07 seconds (prove: 0.02, print: 0.05, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-111S ACL2 >>(THEOREM PROBLEM-111T (IMPLIES (AND (ALL-REL FN (RM D X) E) (REL FN D E)) (ALL-REL FN X E)) :HINTS (("Goal" :INDUCT (ALL-REL FN X E)))) ACL2 Warning [Free] in ( DEFTHM PROBLEM-111T ...): The :REWRITE rule generated from PROBLEM-111T contains the free variable D. This variable will be chosen by searching for an instance of (ALL-REL FN (RM D X) E) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :REWRITE rule. See :DOC free-variables. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (ALL-REL FN X E). This suggestion was produced using the :induction rule ALL-REL. If we let (:P D E FN X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP X)) (NOT (REL FN (CAR X) E))) (:P D E FN X)) (IMPLIES (AND (NOT (ENDP X)) (REL FN (CAR X) E) (:P D E FN (CDR X))) (:P D E FN X)) (IMPLIES (ENDP X) (:P D E FN X))). This induction is justified by the same argument used to admit ALL- REL, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP X)) (NOT (REL FN (CAR X) E))) (IMPLIES (AND (ALL-REL FN (RM D X) E) (REL FN D E)) (ALL-REL FN X E))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP X) (NOT (REL FN (CAR X) E)) (ALL-REL FN (RM D X) E) (REL FN D E)) (ALL-REL FN X E)). This simplifies, using the :definitions <<=, ALL-REL and REL, the :executable- counterpart of EQUAL, primitive type reasoning and the :rewrite rule LEXORDER-REFLEXIVE, to the following eight conjectures. Subgoal *1/3.8 (IMPLIES (AND (CONSP X) (LEXORDER (CAR X) E) (EQUAL (CAR X) E) (ALL-REL '<< (RM D X) E) (EQUAL FN '<<) (LEXORDER D E)) (EQUAL D E)). This simplifies, using the :rewrite rule LEXORDER-REFLEXIVE, to Subgoal *1/3.8' (IMPLIES (AND (CONSP X) (ALL-REL '<< (RM D X) (CAR X)) (LEXORDER D (CAR X))) (EQUAL D (CAR X))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/3.8'' (IMPLIES (AND (CONSP (CONS X1 X2)) (ALL-REL '<< (RM D (CONS X1 X2)) X1) (LEXORDER D X1)) (EQUAL D X1)). But simplification reduces this to T, using the :definitions <<=, ALL- REL, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and LEXORDER-REFLEXIVE. Subgoal *1/3.7 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (LEXORDER (CAR X) E) (EQUAL (CAR X) E) (ALL-REL FN (RM D X) E) (NOT (EQUAL FN '<<)) (LEXORDER E D)) (EQUAL D E)). This simplifies, using the :rewrite rule LEXORDER-REFLEXIVE, to Subgoal *1/3.7' (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (ALL-REL FN (RM D X) (CAR X)) (NOT (EQUAL FN '<<)) (LEXORDER (CAR X) D)) (EQUAL D (CAR X))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/3.7'' (IMPLIES (AND (CONSP (CONS X1 X2)) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (ALL-REL FN (RM D (CONS X1 X2)) X1) (NOT (EQUAL FN '<<)) (LEXORDER X1 D)) (EQUAL D X1)). But simplification reduces this to T, using the :definitions <<=, ALL- REL, REL and RM, primitive type reasoning and the :rewrite rules CAR- CONS, CDR-CONS and LEXORDER-REFLEXIVE. Subgoal *1/3.6 (IMPLIES (AND (CONSP X) (EQUAL FN '<<=) (NOT (LEXORDER (CAR X) E)) (ALL-REL '<<= (RM D X) E)) (NOT (LEXORDER D E))). This simplifies, using trivial observations, to Subgoal *1/3.6' (IMPLIES (AND (CONSP X) (NOT (LEXORDER (CAR X) E)) (ALL-REL '<<= (RM D X) E)) (NOT (LEXORDER D E))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/3.6'' (IMPLIES (AND (CONSP (CONS X1 X2)) (NOT (LEXORDER X1 E)) (ALL-REL '<<= (RM D (CONS X1 X2)) E)) (NOT (LEXORDER D E))). This simplifies, using the :definition RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following two conjectures. Subgoal *1/3.6.2 (IMPLIES (AND (NOT (LEXORDER X1 E)) (EQUAL D X1) (ALL-REL '<<= X2 E)) (NOT (LEXORDER D E))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.6.1 (IMPLIES (AND (NOT (LEXORDER X1 E)) (NOT (EQUAL D X1)) (ALL-REL '<<= (CONS X1 (RM D X2)) E)) (NOT (LEXORDER D E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rule CAR-CONS. Subgoal *1/3.5 (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (ALL-REL '>>= (RM D X) E) (EQUAL FN '>>=)) (NOT (LEXORDER E D))). This simplifies, using trivial observations, to Subgoal *1/3.5' (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (ALL-REL '>>= (RM D X) E)) (NOT (LEXORDER E D))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/3.5'' (IMPLIES (AND (CONSP (CONS X1 X2)) (NOT (LEXORDER E X1)) (ALL-REL '>>= (RM D (CONS X1 X2)) E)) (NOT (LEXORDER E D))). This simplifies, using the :definition RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following two conjectures. Subgoal *1/3.5.2 (IMPLIES (AND (NOT (LEXORDER E X1)) (EQUAL D X1) (ALL-REL '>>= X2 E)) (NOT (LEXORDER E D))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.5.1 (IMPLIES (AND (NOT (LEXORDER E X1)) (NOT (EQUAL D X1)) (ALL-REL '>>= (CONS X1 (RM D X2)) E)) (NOT (LEXORDER E D))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rule CAR-CONS. Subgoal *1/3.4 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E (CAR X))) (ALL-REL FN (RM D X) E) (LEXORDER E D)) (EQUAL D E)). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/3.4' (IMPLIES (AND (CONSP (CONS X1 X2)) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E X1)) (ALL-REL FN (RM D (CONS X1 X2)) E) (LEXORDER E D)) (EQUAL D E)). This simplifies, using the :definition RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following two conjectures. Subgoal *1/3.4.2 (IMPLIES (AND (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E X1)) (EQUAL D X1) (ALL-REL FN X2 E) (LEXORDER E D)) (EQUAL D E)). But simplification reduces this to T, using trivial observations. Subgoal *1/3.4.1 (IMPLIES (AND (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E X1)) (NOT (EQUAL D X1)) (ALL-REL FN (CONS X1 (RM D X2)) E) (LEXORDER E D)) (EQUAL D E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, primitive type reasoning and the :rewrite rule CAR-CONS. Subgoal *1/3.3 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (EQUAL (CAR X) E) (ALL-REL FN (RM D X) E) (LEXORDER E D)) (EQUAL D E)). This simplifies, using trivial observations, to Subgoal *1/3.3' (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (ALL-REL FN (RM D X) (CAR X)) (LEXORDER (CAR X) D)) (EQUAL D (CAR X))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/3.3'' (IMPLIES (AND (CONSP (CONS X1 X2)) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (ALL-REL FN (RM D (CONS X1 X2)) X1) (LEXORDER X1 D)) (EQUAL D X1)). But simplification reduces this to T, using the :definitions <<=, ALL- REL, REL and RM, primitive type reasoning and the :rewrite rules CAR- CONS, CDR-CONS and LEXORDER-REFLEXIVE. Subgoal *1/3.2 (IMPLIES (AND (CONSP X) (EQUAL FN '>>=) (NOT (LEXORDER E (CAR X))) (ALL-REL '>>= (RM D X) E)) (NOT (LEXORDER E D))). This simplifies, using trivial observations, to Subgoal *1/3.2' (IMPLIES (AND (CONSP X) (NOT (LEXORDER E (CAR X))) (ALL-REL '>>= (RM D X) E)) (NOT (LEXORDER E D))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/3.2'' (IMPLIES (AND (CONSP (CONS X1 X2)) (NOT (LEXORDER E X1)) (ALL-REL '>>= (RM D (CONS X1 X2)) E)) (NOT (LEXORDER E D))). This simplifies, using the :definition RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following two conjectures. Subgoal *1/3.2.2 (IMPLIES (AND (NOT (LEXORDER E X1)) (EQUAL D X1) (ALL-REL '>>= X2 E)) (NOT (LEXORDER E D))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.2.1 (IMPLIES (AND (NOT (LEXORDER E X1)) (NOT (EQUAL D X1)) (ALL-REL '>>= (CONS X1 (RM D X2)) E)) (NOT (LEXORDER E D))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rule CAR-CONS. Subgoal *1/3.1 (IMPLIES (AND (CONSP X) (EQUAL FN '<<) (NOT (LEXORDER (CAR X) E)) (ALL-REL '<< (RM D X) E) (LEXORDER D E)) (EQUAL D E)). This simplifies, using trivial observations, to Subgoal *1/3.1' (IMPLIES (AND (CONSP X) (NOT (LEXORDER (CAR X) E)) (ALL-REL '<< (RM D X) E) (LEXORDER D E)) (EQUAL D E)). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal *1/3.1'' (IMPLIES (AND (CONSP (CONS X1 X2)) (NOT (LEXORDER X1 E)) (ALL-REL '<< (RM D (CONS X1 X2)) E) (LEXORDER D E)) (EQUAL D E)). This simplifies, using the :definition RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following two conjectures. Subgoal *1/3.1.2 (IMPLIES (AND (NOT (LEXORDER X1 E)) (EQUAL D X1) (ALL-REL '<< X2 E) (LEXORDER D E)) (EQUAL D E)). But simplification reduces this to T, using trivial observations. Subgoal *1/3.1.1 (IMPLIES (AND (NOT (LEXORDER X1 E)) (NOT (EQUAL D X1)) (ALL-REL '<< (CONS X1 (RM D X2)) E) (LEXORDER D E)) (EQUAL D E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rule CAR-CONS. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP X)) (REL FN (CAR X) E) (IMPLIES (AND (ALL-REL FN (RM D (CDR X)) E) (REL FN D E)) (ALL-REL FN (CDR X) E))) (IMPLIES (AND (ALL-REL FN (RM D X) E) (REL FN D E)) (ALL-REL FN X E))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (REL FN (CAR X) E) (IMPLIES (AND (ALL-REL FN (RM D (CDR X)) E) (REL FN D E)) (ALL-REL FN (CDR X) E)) (ALL-REL FN (RM D X) E) (REL FN D E)) (ALL-REL FN X E)). This simplifies, using the :definitions <<=, ALL-REL, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rules ALL-REL and LEXORDER, to the following five conjectures. Subgoal *1/2.5 (IMPLIES (AND (CONSP X) (EQUAL FN '<<=) (LEXORDER (CAR X) E) (NOT (ALL-REL '<<= (RM D (CDR X)) E)) (NOT (EQUAL D (CAR X))) (ALL-REL '<<= (CONS (CAR X) (RM D (CDR X))) E) (LEXORDER D E)) (ALL-REL '<<= X E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.4 (IMPLIES (AND (CONSP X) (EQUAL FN '>>=) (LEXORDER E (CAR X)) (NOT (ALL-REL '>>= (RM D (CDR X)) E)) (NOT (EQUAL D (CAR X))) (ALL-REL '>>= (CONS (CAR X) (RM D (CDR X))) E) (LEXORDER E D)) (ALL-REL '>>= X E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.3 (IMPLIES (AND (CONSP X) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E)) (NOT (ALL-REL '>>= (RM D (CDR X)) E)) (NOT (EQUAL D (CAR X))) (ALL-REL '>>= (CONS (CAR X) (RM D (CDR X))) E) (EQUAL FN '>>=) (LEXORDER E D)) (ALL-REL '>>= X E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.2 (IMPLIES (AND (CONSP X) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR X)) (NOT (EQUAL (CAR X) E)) (NOT (ALL-REL FN (RM D (CDR X)) E)) (NOT (EQUAL D (CAR X))) (ALL-REL FN (CONS (CAR X) (RM D (CDR X))) E) (LEXORDER E D) (NOT (EQUAL D E))) (ALL-REL FN (CDR X) E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type- prescription rule LEXORDER. Subgoal *1/2.1 (IMPLIES (AND (CONSP X) (EQUAL FN '<<) (LEXORDER (CAR X) E) (NOT (EQUAL (CAR X) E)) (NOT (ALL-REL '<< (RM D (CDR X)) E)) (NOT (EQUAL D (CAR X))) (ALL-REL '<< (CONS (CAR X) (RM D (CDR X))) E) (LEXORDER D E) (NOT (EQUAL D E))) (ALL-REL '<< X E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/1 (IMPLIES (ENDP X) (IMPLIES (AND (ALL-REL FN (RM D X) E) (REL FN D E)) (ALL-REL FN X E))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP X)) (ALL-REL FN (RM D X) E) (REL FN D E)) (ALL-REL FN X E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL, REL and RM and the :executable-counterpart of EQUAL. That completes the proof of *1. Q.E.D. The storage of PROBLEM-111T depends upon the :type-prescription rule ALL-REL. Summary Form: ( DEFTHM PROBLEM-111T ...) Rules: ((:DEFINITION <<=) (:DEFINITION ALL-REL) (:DEFINITION ENDP) (:DEFINITION NOT) (:DEFINITION REL) (:DEFINITION RM) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION ALL-REL) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:TYPE-PRESCRIPTION ALL-REL) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: Free Time: 0.62 seconds (prove: 0.26, print: 0.34, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-111T ACL2 >>(THEOREM PROBLEM-111U (IMPLIES (AND (ALL-REL FN B E) (MEM D B)) (REL FN D E)) :HINTS (("Goal" :INDUCT (MEM D B)))) ACL2 Warning [Non-rec] in ( DEFTHM PROBLEM-111U ...): The :REWRITE rule generated from PROBLEM-111U will be triggered only by terms containing the non-recursive function symbol REL. Unless this function is disabled, PROBLEM-111U is unlikely ever to be used. ACL2 Warning [Free] in ( DEFTHM PROBLEM-111U ...): The :REWRITE rule generated from PROBLEM-111U contains the free variable B. This variable will be chosen by searching for an instance of (ALL-REL FN B E) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :REWRITE rule. See :DOC free-variables. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MEM D B). This suggestion was produced using the :induction rule MEM. If we let (:P B D E FN) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP B)) (:P B D E FN)) (IMPLIES (AND (CONSP B) (NOT (EQUAL D (CAR B))) (:P (CDR B) D E FN)) (:P B D E FN)) (IMPLIES (AND (CONSP B) (EQUAL D (CAR B))) (:P B D E FN))). This induction is justified by the same argument used to admit MEM, namely, the measure (ACL2-COUNT B) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP B)) (IMPLIES (AND (ALL-REL FN B E) (MEM D B)) (REL FN D E))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP B)) (ALL-REL FN B E) (MEM D B)) (REL FN D E)). But simplification reduces this to T, using the :definitions ALL-REL and MEM. Subgoal *1/2 (IMPLIES (AND (CONSP B) (NOT (EQUAL D (CAR B))) (IMPLIES (AND (ALL-REL FN (CDR B) E) (MEM D (CDR B))) (REL FN D E))) (IMPLIES (AND (ALL-REL FN B E) (MEM D B)) (REL FN D E))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP B) (NOT (EQUAL D (CAR B))) (IMPLIES (AND (ALL-REL FN (CDR B) E) (MEM D (CDR B))) (REL FN D E)) (ALL-REL FN B E) (MEM D B)) (REL FN D E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL, MEM and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/1 (IMPLIES (AND (CONSP B) (EQUAL D (CAR B))) (IMPLIES (AND (ALL-REL FN B E) (MEM D B)) (REL FN D E))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP B) (EQUAL D (CAR B)) (ALL-REL FN B E) (MEM D B)) (REL FN D E)). This simplifies, using the :definitions <<=, MEM and REL, the :executable- counterpart of EQUAL and primitive type reasoning, to the following six conjectures. Subgoal *1/1.6 (IMPLIES (AND (CONSP B) (ALL-REL FN B E) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (LEXORDER (CAR B) E)) (NOT (EQUAL (CAR B) E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, primitive type reasoning, the :rewrite rule LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/1.5 (IMPLIES (AND (CONSP B) (ALL-REL '<<= B E) (EQUAL FN '<<=)) (LEXORDER (CAR B) E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL and the :executable-counterpart of EQUAL. Subgoal *1/1.4 (IMPLIES (AND (CONSP B) (ALL-REL FN B E) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<))) (LEXORDER E (CAR B))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL. Subgoal *1/1.3 (IMPLIES (AND (CONSP B) (ALL-REL FN B E) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<))) (NOT (EQUAL (CAR B) E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, primitive type reasoning and the :rewrite rule LEXORDER- REFLEXIVE. Subgoal *1/1.2 (IMPLIES (AND (CONSP B) (ALL-REL '>>= B E) (EQUAL FN '>>=)) (LEXORDER E (CAR B))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL and the :executable-counterpart of EQUAL. Subgoal *1/1.1 (IMPLIES (AND (CONSP B) (ALL-REL '<< B E) (EQUAL FN '<<)) (LEXORDER (CAR B) E)). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL and the :executable-counterpart of EQUAL. That completes the proof of *1. Q.E.D. The storage of PROBLEM-111U depends upon the :type-prescription rule REL. Summary Form: ( DEFTHM PROBLEM-111U ...) Rules: ((:DEFINITION <<=) (:DEFINITION ALL-REL) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION REL) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MEM) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:TYPE-PRESCRIPTION LEXORDER) (:TYPE-PRESCRIPTION REL)) Warnings: Free and Non-rec Time: 0.17 seconds (prove: 0.04, print: 0.11, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-111U ACL2 >>(THEOREM PROBLEM-111V (IMPLIES (AND (REL FN D E) (MEM D B)) (EQUAL (ALL-REL FN (RM D B) E) (ALL-REL FN B E))) :HINTS (("Goal" :INDUCT (ALL-REL FN B E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (ALL-REL FN B E). This suggestion was produced using the :induction rule ALL-REL. If we let (:P B D E FN) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP B)) (NOT (REL FN (CAR B) E))) (:P B D E FN)) (IMPLIES (AND (NOT (ENDP B)) (REL FN (CAR B) E) (:P (CDR B) D E FN)) (:P B D E FN)) (IMPLIES (ENDP B) (:P B D E FN))). This induction is justified by the same argument used to admit ALL- REL, namely, the measure (ACL2-COUNT B) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP B)) (NOT (REL FN (CAR B) E))) (IMPLIES (AND (REL FN D E) (MEM D B)) (EQUAL (ALL-REL FN (RM D B) E) (ALL-REL FN B E)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP B) (NOT (REL FN (CAR B) E)) (REL FN D E) (MEM D B)) (EQUAL (ALL-REL FN (RM D B) E) (ALL-REL FN B E))). This simplifies, using the :definitions <<=, ALL-REL and REL, the :executable- counterpart of EQUAL, primitive type reasoning and the :rewrite rule LEXORDER-REFLEXIVE, to the following eight conjectures. Subgoal *1/3.8 (IMPLIES (AND (CONSP B) (LEXORDER (CAR B) E) (EQUAL (CAR B) E) (EQUAL FN '<<) (LEXORDER D E) (NOT (EQUAL D E)) (MEM D B)) (NOT (ALL-REL '<< (RM D B) E))). This simplifies, using the :rewrite rule LEXORDER-REFLEXIVE, to Subgoal *1/3.8' (IMPLIES (AND (CONSP B) (LEXORDER D (CAR B)) (NOT (EQUAL D (CAR B))) (MEM D B)) (NOT (ALL-REL '<< (RM D B) (CAR B)))). The destructor terms (CAR B) and (CDR B) can be eliminated by using CAR-CDR-ELIM to replace B by (CONS B1 B2), (CAR B) by B1 and (CDR B) by B2. This produces the following goal. Subgoal *1/3.8'' (IMPLIES (AND (CONSP (CONS B1 B2)) (LEXORDER D B1) (NOT (EQUAL D B1)) (MEM D (CONS B1 B2))) (NOT (ALL-REL '<< (RM D (CONS B1 B2)) B1))). But simplification reduces this to T, using the :definitions <<=, ALL- REL, MEM, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and LEXORDER- REFLEXIVE. Subgoal *1/3.7 (IMPLIES (AND (CONSP B) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (LEXORDER (CAR B) E) (EQUAL (CAR B) E) (NOT (EQUAL FN '<<)) (LEXORDER E D) (NOT (EQUAL D E)) (MEM D B)) (NOT (ALL-REL FN (RM D B) E))). This simplifies, using the :rewrite rule LEXORDER-REFLEXIVE, to Subgoal *1/3.7' (IMPLIES (AND (CONSP B) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (LEXORDER (CAR B) D) (NOT (EQUAL D (CAR B))) (MEM D B)) (NOT (ALL-REL FN (RM D B) (CAR B)))). The destructor terms (CAR B) and (CDR B) can be eliminated by using CAR-CDR-ELIM to replace B by (CONS B1 B2), (CAR B) by B1 and (CDR B) by B2. This produces the following goal. Subgoal *1/3.7'' (IMPLIES (AND (CONSP (CONS B1 B2)) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (LEXORDER B1 D) (NOT (EQUAL D B1)) (MEM D (CONS B1 B2))) (NOT (ALL-REL FN (RM D (CONS B1 B2)) B1))). But simplification reduces this to T, using the :definitions <<=, ALL- REL, MEM, REL and RM, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and LEXORDER-REFLEXIVE. Subgoal *1/3.6 (IMPLIES (AND (CONSP B) (EQUAL FN '<<=) (NOT (LEXORDER (CAR B) E)) (LEXORDER D E) (MEM D B)) (NOT (ALL-REL '<<= (RM D B) E))). This simplifies, using trivial observations, to Subgoal *1/3.6' (IMPLIES (AND (CONSP B) (NOT (LEXORDER (CAR B) E)) (LEXORDER D E) (MEM D B)) (NOT (ALL-REL '<<= (RM D B) E))). The destructor terms (CAR B) and (CDR B) can be eliminated by using CAR-CDR-ELIM to replace B by (CONS B1 B2), (CAR B) by B1 and (CDR B) by B2. This produces the following goal. Subgoal *1/3.6'' (IMPLIES (AND (CONSP (CONS B1 B2)) (NOT (LEXORDER B1 E)) (LEXORDER D E) (MEM D (CONS B1 B2))) (NOT (ALL-REL '<<= (RM D (CONS B1 B2)) E))). This simplifies, using the :definitions MEM and RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following three conjectures. Subgoal *1/3.6.3 (IMPLIES (AND (NOT (LEXORDER B1 E)) (LEXORDER D E) (EQUAL D B1)) (NOT (ALL-REL '<<= B2 E))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.6.2 (IMPLIES (AND (NOT (LEXORDER B1 E)) (LEXORDER D E) (MEM D B2) (EQUAL D B1)) (NOT (ALL-REL '<<= B2 E))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.6.1 (IMPLIES (AND (NOT (LEXORDER B1 E)) (LEXORDER D E) (MEM D B2) (NOT (EQUAL D B1))) (NOT (ALL-REL '<<= (CONS B1 (RM D B2)) E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rule CAR-CONS. Subgoal *1/3.5 (IMPLIES (AND (CONSP B) (NOT (LEXORDER E (CAR B))) (EQUAL FN '>>=) (LEXORDER E D) (MEM D B)) (NOT (ALL-REL '>>= (RM D B) E))). This simplifies, using trivial observations, to Subgoal *1/3.5' (IMPLIES (AND (CONSP B) (NOT (LEXORDER E (CAR B))) (LEXORDER E D) (MEM D B)) (NOT (ALL-REL '>>= (RM D B) E))). The destructor terms (CAR B) and (CDR B) can be eliminated by using CAR-CDR-ELIM to replace B by (CONS B1 B2), (CAR B) by B1 and (CDR B) by B2. This produces the following goal. Subgoal *1/3.5'' (IMPLIES (AND (CONSP (CONS B1 B2)) (NOT (LEXORDER E B1)) (LEXORDER E D) (MEM D (CONS B1 B2))) (NOT (ALL-REL '>>= (RM D (CONS B1 B2)) E))). This simplifies, using the :definitions MEM and RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following three conjectures. Subgoal *1/3.5.3 (IMPLIES (AND (NOT (LEXORDER E B1)) (LEXORDER E D) (EQUAL D B1)) (NOT (ALL-REL '>>= B2 E))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.5.2 (IMPLIES (AND (NOT (LEXORDER E B1)) (LEXORDER E D) (MEM D B2) (EQUAL D B1)) (NOT (ALL-REL '>>= B2 E))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.5.1 (IMPLIES (AND (NOT (LEXORDER E B1)) (LEXORDER E D) (MEM D B2) (NOT (EQUAL D B1))) (NOT (ALL-REL '>>= (CONS B1 (RM D B2)) E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rule CAR-CONS. Subgoal *1/3.4 (IMPLIES (AND (CONSP B) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E (CAR B))) (LEXORDER E D) (NOT (EQUAL D E)) (MEM D B)) (NOT (ALL-REL FN (RM D B) E))). The destructor terms (CAR B) and (CDR B) can be eliminated by using CAR-CDR-ELIM to replace B by (CONS B1 B2), (CAR B) by B1 and (CDR B) by B2. This produces the following goal. Subgoal *1/3.4' (IMPLIES (AND (CONSP (CONS B1 B2)) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E B1)) (LEXORDER E D) (NOT (EQUAL D E)) (MEM D (CONS B1 B2))) (NOT (ALL-REL FN (RM D (CONS B1 B2)) E))). This simplifies, using the :definitions MEM and RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following three conjectures. Subgoal *1/3.4.3 (IMPLIES (AND (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E B1)) (LEXORDER E D) (NOT (EQUAL D E)) (EQUAL D B1)) (NOT (ALL-REL FN B2 E))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.4.2 (IMPLIES (AND (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E B1)) (LEXORDER E D) (NOT (EQUAL D E)) (MEM D B2) (EQUAL D B1)) (NOT (ALL-REL FN B2 E))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.4.1 (IMPLIES (AND (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (NOT (LEXORDER E B1)) (LEXORDER E D) (NOT (EQUAL D E)) (MEM D B2) (NOT (EQUAL D B1))) (NOT (ALL-REL FN (CONS B1 (RM D B2)) E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, primitive type reasoning and the :rewrite rule CAR-CONS. Subgoal *1/3.3 (IMPLIES (AND (CONSP B) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (EQUAL (CAR B) E) (LEXORDER E D) (NOT (EQUAL D E)) (MEM D B)) (NOT (ALL-REL FN (RM D B) E))). This simplifies, using trivial observations, to Subgoal *1/3.3' (IMPLIES (AND (CONSP B) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (LEXORDER (CAR B) D) (NOT (EQUAL D (CAR B))) (MEM D B)) (NOT (ALL-REL FN (RM D B) (CAR B)))). The destructor terms (CAR B) and (CDR B) can be eliminated by using CAR-CDR-ELIM to replace B by (CONS B1 B2), (CAR B) by B1 and (CDR B) by B2. This produces the following goal. Subgoal *1/3.3'' (IMPLIES (AND (CONSP (CONS B1 B2)) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '>>=)) (NOT (EQUAL FN '<<)) (LEXORDER B1 D) (NOT (EQUAL D B1)) (MEM D (CONS B1 B2))) (NOT (ALL-REL FN (RM D (CONS B1 B2)) B1))). But simplification reduces this to T, using the :definitions <<=, ALL- REL, MEM, REL and RM, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS and LEXORDER-REFLEXIVE. Subgoal *1/3.2 (IMPLIES (AND (CONSP B) (EQUAL FN '>>=) (NOT (LEXORDER E (CAR B))) (LEXORDER E D) (MEM D B)) (NOT (ALL-REL '>>= (RM D B) E))). This simplifies, using trivial observations, to Subgoal *1/3.2' (IMPLIES (AND (CONSP B) (NOT (LEXORDER E (CAR B))) (LEXORDER E D) (MEM D B)) (NOT (ALL-REL '>>= (RM D B) E))). The destructor terms (CAR B) and (CDR B) can be eliminated by using CAR-CDR-ELIM to replace B by (CONS B1 B2), (CAR B) by B1 and (CDR B) by B2. This produces the following goal. Subgoal *1/3.2'' (IMPLIES (AND (CONSP (CONS B1 B2)) (NOT (LEXORDER E B1)) (LEXORDER E D) (MEM D (CONS B1 B2))) (NOT (ALL-REL '>>= (RM D (CONS B1 B2)) E))). This simplifies, using the :definitions MEM and RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following three conjectures. Subgoal *1/3.2.3 (IMPLIES (AND (NOT (LEXORDER E B1)) (LEXORDER E D) (EQUAL D B1)) (NOT (ALL-REL '>>= B2 E))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.2.2 (IMPLIES (AND (NOT (LEXORDER E B1)) (LEXORDER E D) (MEM D B2) (EQUAL D B1)) (NOT (ALL-REL '>>= B2 E))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.2.1 (IMPLIES (AND (NOT (LEXORDER E B1)) (LEXORDER E D) (MEM D B2) (NOT (EQUAL D B1))) (NOT (ALL-REL '>>= (CONS B1 (RM D B2)) E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rule CAR-CONS. Subgoal *1/3.1 (IMPLIES (AND (CONSP B) (EQUAL FN '<<) (NOT (LEXORDER (CAR B) E)) (LEXORDER D E) (NOT (EQUAL D E)) (MEM D B)) (NOT (ALL-REL '<< (RM D B) E))). This simplifies, using trivial observations, to Subgoal *1/3.1' (IMPLIES (AND (CONSP B) (NOT (LEXORDER (CAR B) E)) (LEXORDER D E) (NOT (EQUAL D E)) (MEM D B)) (NOT (ALL-REL '<< (RM D B) E))). The destructor terms (CAR B) and (CDR B) can be eliminated by using CAR-CDR-ELIM to replace B by (CONS B1 B2), (CAR B) by B1 and (CDR B) by B2. This produces the following goal. Subgoal *1/3.1'' (IMPLIES (AND (CONSP (CONS B1 B2)) (NOT (LEXORDER B1 E)) (LEXORDER D E) (NOT (EQUAL D E)) (MEM D (CONS B1 B2))) (NOT (ALL-REL '<< (RM D (CONS B1 B2)) E))). This simplifies, using the :definitions MEM and RM, primitive type reasoning and the :rewrite rules CAR-CONS and CDR-CONS, to the following three conjectures. Subgoal *1/3.1.3 (IMPLIES (AND (NOT (LEXORDER B1 E)) (LEXORDER D E) (NOT (EQUAL D E)) (EQUAL D B1)) (NOT (ALL-REL '<< B2 E))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.1.2 (IMPLIES (AND (NOT (LEXORDER B1 E)) (LEXORDER D E) (NOT (EQUAL D E)) (MEM D B2) (EQUAL D B1)) (NOT (ALL-REL '<< B2 E))). But simplification reduces this to T, using trivial observations. Subgoal *1/3.1.1 (IMPLIES (AND (NOT (LEXORDER B1 E)) (LEXORDER D E) (NOT (EQUAL D E)) (MEM D B2) (NOT (EQUAL D B1))) (NOT (ALL-REL '<< (CONS B1 (RM D B2)) E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning and the :rewrite rule CAR-CONS. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP B)) (REL FN (CAR B) E) (IMPLIES (AND (REL FN D E) (MEM D (CDR B))) (EQUAL (ALL-REL FN (RM D (CDR B)) E) (ALL-REL FN (CDR B) E)))) (IMPLIES (AND (REL FN D E) (MEM D B)) (EQUAL (ALL-REL FN (RM D B) E) (ALL-REL FN B E)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP B) (REL FN (CAR B) E) (IMPLIES (AND (REL FN D E) (MEM D (CDR B))) (EQUAL (ALL-REL FN (RM D (CDR B)) E) (ALL-REL FN (CDR B) E))) (REL FN D E) (MEM D B)) (EQUAL (ALL-REL FN (RM D B) E) (ALL-REL FN B E))). This simplifies, using the :definitions <<=, ALL-REL, MEM, REL and RM, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER, to the following 17 conjectures. Subgoal *1/2.17 (IMPLIES (AND (CONSP B) (EQUAL FN '<<=) (LEXORDER (CAR B) E) (EQUAL (ALL-REL '<<= (RM D (CDR B)) E) (ALL-REL '<<= (CDR B) E)) (LEXORDER D E) (EQUAL D (CAR B))) (EQUAL (ALL-REL '<<= (CDR B) E) (ALL-REL '<<= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.16 (IMPLIES (AND (CONSP B) (EQUAL FN '<<=) (LEXORDER (CAR B) E) (EQUAL (ALL-REL '<<= (RM D (CDR B)) E) (ALL-REL '<<= (CDR B) E)) (LEXORDER D E) (MEM D (CDR B)) (EQUAL D (CAR B))) (EQUAL (ALL-REL '<<= (CDR B) E) (ALL-REL '<<= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.15 (IMPLIES (AND (CONSP B) (EQUAL FN '<<=) (LEXORDER (CAR B) E) (EQUAL (ALL-REL '<<= (RM D (CDR B)) E) (ALL-REL '<<= (CDR B) E)) (LEXORDER D E) (MEM D (CDR B)) (NOT (EQUAL D (CAR B)))) (EQUAL (ALL-REL '<<= (CONS (CAR B) (RM D (CDR B))) E) (ALL-REL '<<= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.14 (IMPLIES (AND (CONSP B) (EQUAL FN '<<=) (LEXORDER (CAR B) E) (NOT (MEM D (CDR B))) (LEXORDER D E) (EQUAL D (CAR B))) (EQUAL (ALL-REL '<<= (CDR B) E) (ALL-REL '<<= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.13 (IMPLIES (AND (CONSP B) (EQUAL FN '>>=) (LEXORDER E (CAR B)) (EQUAL (ALL-REL '>>= (RM D (CDR B)) E) (ALL-REL '>>= (CDR B) E)) (LEXORDER E D) (EQUAL D (CAR B))) (EQUAL (ALL-REL '>>= (CDR B) E) (ALL-REL '>>= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.12 (IMPLIES (AND (CONSP B) (EQUAL FN '>>=) (LEXORDER E (CAR B)) (EQUAL (ALL-REL '>>= (RM D (CDR B)) E) (ALL-REL '>>= (CDR B) E)) (LEXORDER E D) (MEM D (CDR B)) (EQUAL D (CAR B))) (EQUAL (ALL-REL '>>= (CDR B) E) (ALL-REL '>>= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.11 (IMPLIES (AND (CONSP B) (EQUAL FN '>>=) (LEXORDER E (CAR B)) (EQUAL (ALL-REL '>>= (RM D (CDR B)) E) (ALL-REL '>>= (CDR B) E)) (LEXORDER E D) (MEM D (CDR B)) (NOT (EQUAL D (CAR B)))) (EQUAL (ALL-REL '>>= (CONS (CAR B) (RM D (CDR B))) E) (ALL-REL '>>= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.10 (IMPLIES (AND (CONSP B) (EQUAL FN '>>=) (LEXORDER E (CAR B)) (NOT (MEM D (CDR B))) (LEXORDER E D) (EQUAL D (CAR B))) (EQUAL (ALL-REL '>>= (CDR B) E) (ALL-REL '>>= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.9 (IMPLIES (AND (CONSP B) (LEXORDER E (CAR B)) (NOT (EQUAL (CAR B) E)) (EQUAL (ALL-REL '>>= (RM D (CDR B)) E) (ALL-REL '>>= (CDR B) E)) (EQUAL FN '>>=) (LEXORDER E D) (EQUAL D (CAR B))) (EQUAL (ALL-REL '>>= (CDR B) E) (ALL-REL '>>= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.8 (IMPLIES (AND (CONSP B) (LEXORDER E (CAR B)) (NOT (EQUAL (CAR B) E)) (EQUAL (ALL-REL '>>= (RM D (CDR B)) E) (ALL-REL '>>= (CDR B) E)) (EQUAL FN '>>=) (LEXORDER E D) (MEM D (CDR B)) (EQUAL D (CAR B))) (EQUAL (ALL-REL '>>= (CDR B) E) (ALL-REL '>>= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.7 (IMPLIES (AND (CONSP B) (LEXORDER E (CAR B)) (NOT (EQUAL (CAR B) E)) (EQUAL (ALL-REL '>>= (RM D (CDR B)) E) (ALL-REL '>>= (CDR B) E)) (EQUAL FN '>>=) (LEXORDER E D) (MEM D (CDR B)) (NOT (EQUAL D (CAR B)))) (EQUAL (ALL-REL '>>= (CONS (CAR B) (RM D (CDR B))) E) (ALL-REL '>>= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.6 (IMPLIES (AND (CONSP B) (NOT (EQUAL FN '<<=)) (NOT (EQUAL FN '<<)) (LEXORDER E (CAR B)) (NOT (EQUAL (CAR B) E)) (EQUAL (ALL-REL FN (RM D (CDR B)) E) (ALL-REL FN (CDR B) E)) (LEXORDER E D) (NOT (EQUAL D E)) (MEM D (CDR B)) (NOT (EQUAL D (CAR B)))) (EQUAL (ALL-REL FN (CONS (CAR B) (RM D (CDR B))) E) (ALL-REL FN (CDR B) E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type- prescription rule LEXORDER. Subgoal *1/2.5 (IMPLIES (AND (CONSP B) (LEXORDER E (CAR B)) (NOT (EQUAL (CAR B) E)) (NOT (MEM D (CDR B))) (EQUAL FN '>>=) (LEXORDER E D) (EQUAL D (CAR B))) (EQUAL (ALL-REL '>>= (CDR B) E) (ALL-REL '>>= B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.4 (IMPLIES (AND (CONSP B) (EQUAL FN '<<) (LEXORDER (CAR B) E) (NOT (EQUAL (CAR B) E)) (NOT (MEM D (CDR B))) (LEXORDER D E) (NOT (EQUAL D E)) (EQUAL D (CAR B))) (EQUAL (ALL-REL '<< (CDR B) E) (ALL-REL '<< B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.3 (IMPLIES (AND (CONSP B) (EQUAL FN '<<) (LEXORDER (CAR B) E) (NOT (EQUAL (CAR B) E)) (EQUAL (ALL-REL '<< (RM D (CDR B)) E) (ALL-REL '<< (CDR B) E)) (LEXORDER D E) (NOT (EQUAL D E)) (EQUAL D (CAR B))) (EQUAL (ALL-REL '<< (CDR B) E) (ALL-REL '<< B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.2 (IMPLIES (AND (CONSP B) (EQUAL FN '<<) (LEXORDER (CAR B) E) (NOT (EQUAL (CAR B) E)) (EQUAL (ALL-REL '<< (RM D (CDR B)) E) (ALL-REL '<< (CDR B) E)) (LEXORDER D E) (NOT (EQUAL D E)) (MEM D (CDR B)) (EQUAL D (CAR B))) (EQUAL (ALL-REL '<< (CDR B) E) (ALL-REL '<< B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules LEXORDER-REFLEXIVE and LEXORDER-TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/2.1 (IMPLIES (AND (CONSP B) (EQUAL FN '<<) (LEXORDER (CAR B) E) (NOT (EQUAL (CAR B) E)) (EQUAL (ALL-REL '<< (RM D (CDR B)) E) (ALL-REL '<< (CDR B) E)) (LEXORDER D E) (NOT (EQUAL D E)) (MEM D (CDR B)) (NOT (EQUAL D (CAR B)))) (EQUAL (ALL-REL '<< (CONS (CAR B) (RM D (CDR B))) E) (ALL-REL '<< B E))). But simplification reduces this to T, using the :definitions <<=, ALL- REL and REL, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, LEXORDER-REFLEXIVE and LEXORDER- TRANSITIVE and the :type-prescription rule LEXORDER. Subgoal *1/1 (IMPLIES (ENDP B) (IMPLIES (AND (REL FN D E) (MEM D B)) (EQUAL (ALL-REL FN (RM D B) E) (ALL-REL FN B E)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP B)) (REL FN D E) (MEM D B)) (EQUAL (ALL-REL FN (RM D B) E) (ALL-REL FN B E))). But simplification reduces this to T, using the :definitions <<=, MEM and REL and the :executable-counterpart of EQUAL. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111V ...) Rules: ((:DEFINITION <<=) (:DEFINITION ALL-REL) (:DEFINITION ENDP) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION REL) (:DEFINITION RM) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION ALL-REL) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE LEXORDER-REFLEXIVE) (:REWRITE LEXORDER-TRANSITIVE) (:TYPE-PRESCRIPTION LEXORDER)) Warnings: None Time: 0.87 seconds (prove: 0.38, print: 0.48, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.00, other: 0.04) PROBLEM-111V ACL2 >>(THEOREM PROBLEM-111W (IMPLIES (PERM A B) (EQUAL (ALL-REL FN A E) (ALL-REL FN B E))) :HINTS (("Goal" :INDUCT (PERM A B) :IN-THEORY (E/D (PROBLEM-55B PROBLEM-111U PROBLEM-111V) (REL)))) :RULE-CLASSES :CONGRUENCE) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PERM A B). This suggestion was produced using the :induction rule PERM. If we let (:P A B E FN) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B E FN)) (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B))) (:P A B E FN)) (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (:P (CDR A) (RM (CAR A) B) E FN)) (:P A B E FN))). This induction is justified by the same argument used to admit PERM, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable B is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP A)) (IMPLIES (PERM A B) (EQUAL (ALL-REL FN A E) (ALL-REL FN B E)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP A)) (PERM A B)) (EQUAL (ALL-REL FN A E) (ALL-REL FN B E))). But simplification reduces this to T, using the :definitions ALL-REL and PERM and the :executable-counterpart of EQUAL. Subgoal *1/2 (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B))) (IMPLIES (PERM A B) (EQUAL (ALL-REL FN A E) (ALL-REL FN B E)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B)) (PERM A B)) (EQUAL (ALL-REL FN A E) (ALL-REL FN B E))). But simplification reduces this to T, using the :definition MEM, primitive type reasoning and the :rewrite rule PROBLEM-55B. Subgoal *1/1 (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (IMPLIES (PERM (CDR A) (RM (CAR A) B)) (EQUAL (ALL-REL FN (CDR A) E) (ALL-REL FN (RM (CAR A) B) E)))) (IMPLIES (PERM A B) (EQUAL (ALL-REL FN A E) (ALL-REL FN B E)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (IMPLIES (PERM (CDR A) (RM (CAR A) B)) (EQUAL (ALL-REL FN (CDR A) E) (ALL-REL FN (RM (CAR A) B) E))) (PERM A B)) (EQUAL (ALL-REL FN A E) (ALL-REL FN B E))). This simplifies, using the :definitions ALL-REL, MEM and PERM, primitive type reasoning and the :rewrite rule PROBLEM-55B, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (CONSP A) (EQUAL (ALL-REL FN (CDR A) E) (ALL-REL FN (RM (CAR A) B) E)) (MEM (CAR A) B) (PERM (CDR A) (RM (CAR A) B)) (REL FN (CAR A) E)) (EQUAL (ALL-REL FN (CDR A) E) (ALL-REL FN B E))). But simplification reduces this to T, using the :rewrite rule PROBLEM- 111V and the :type-prescription rules MEM and REL. Subgoal *1/1.1 (IMPLIES (AND (CONSP A) (EQUAL (ALL-REL FN (CDR A) E) (ALL-REL FN (RM (CAR A) B) E)) (MEM (CAR A) B) (PERM (CDR A) (RM (CAR A) B)) (NOT (REL FN (CAR A) E))) (EQUAL NIL (ALL-REL FN B E))). But simplification reduces this to T, using the :rewrite rule PROBLEM- 111U and the :type-prescription rules ALL-REL and MEM. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-111W ...) Rules: ((:DEFINITION ALL-REL) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION PERM) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PERM) (:REWRITE PROBLEM-111U) (:REWRITE PROBLEM-111V) (:REWRITE PROBLEM-55B) (:TYPE-PRESCRIPTION ALL-REL) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION REL)) Warnings: None Time: 0.10 seconds (prove: 0.04, print: 0.04, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-111W ACL2 >>(THEOREM PROBLEM-111-B (ORDERED (QSORT X)) :HINTS (("Goal" :INDUCT (QSORT X) :IN-THEORY (ENABLE PROBLEM-111P PROBLEM-111Q PROBLEM-111R PROBLEM-111W PROBLEM-111-A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (QSORT X). This suggestion was produced using the :induction rule QSORT. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP X)) (NOT (ENDP (CDR X))) (:P (FILTER '<< (CDR X) (CAR X))) (:P (FILTER '>>= (CDR X) (CAR X)))) (:P X)) (IMPLIES (AND (NOT (ENDP X)) (ENDP (CDR X))) (:P X)) (IMPLIES (ENDP X) (:P X))). This induction is justified by the same argument used to admit QSORT, namely, the measure (CC X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP X)) (NOT (ENDP (CDR X))) (ORDERED (QSORT (FILTER '<< (CDR X) (CAR X)))) (ORDERED (QSORT (FILTER '>>= (CDR X) (CAR X))))) (ORDERED (QSORT X))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (ORDERED (QSORT (FILTER '<< (CDR X) (CAR X)))) (ORDERED (QSORT (FILTER '>>= (CDR X) (CAR X))))) (ORDERED (QSORT X))). This simplifies, using the :definition QSORT, the :rewrite rule PROBLEM- 111P and the :type-prescription rule ORDERED, to the following two conjectures. Subgoal *1/3.2 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (ORDERED (QSORT (FILTER '<< (CDR X) (CAR X)))) (ORDERED (QSORT (FILTER '>>= (CDR X) (CAR X))))) (ALL-REL '<<= (QSORT (FILTER '<< (CDR X) (CAR X))) (CAR X))). But we reduce the conjecture to T, by the :congruence rule PROBLEM- 111W and the simple :rewrite rules PROBLEM-111-A and PROBLEM-111Q. Subgoal *1/3.1 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (ORDERED (QSORT (FILTER '<< (CDR X) (CAR X)))) (ORDERED (QSORT (FILTER '>>= (CDR X) (CAR X))))) (ALL-REL '>>= (QSORT (FILTER '>>= (CDR X) (CAR X))) (CAR X))). But we reduce the conjecture to T, by the :congruence rule PROBLEM- 111W and the simple :rewrite rules PROBLEM-111-A and PROBLEM-111R. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP X)) (ENDP (CDR X))) (ORDERED (QSORT X))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (CONSP (CDR X)))) (ORDERED (QSORT X))). But simplification reduces this to T, using the :definitions ORDERED and QSORT. Subgoal *1/1 (IMPLIES (ENDP X) (ORDERED (QSORT X))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (NOT (CONSP X)) (ORDERED (QSORT X))). But simplification reduces this to T, using the :definition QSORT and the :executable-counterpart of ORDERED. That completes the proof of *1. Q.E.D. The storage of PROBLEM-111-B depends upon the :type-prescription rule ORDERED. Summary Form: ( DEFTHM PROBLEM-111-B ...) Rules: ((:CONGRUENCE PROBLEM-111W) (:DEFINITION ENDP) (:DEFINITION NOT) (:DEFINITION ORDERED) (:DEFINITION QSORT) (:EXECUTABLE-COUNTERPART ORDERED) (:INDUCTION QSORT) (:REWRITE PROBLEM-111-A) (:REWRITE PROBLEM-111P) (:REWRITE PROBLEM-111Q) (:REWRITE PROBLEM-111R) (:TYPE-PRESCRIPTION ORDERED)) Warnings: None Time: 0.11 seconds (prove: 0.01, print: 0.08, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.00, other: 0.04) PROBLEM-111-B ACL2 >>(DEFUN NO-DUPS (X) (IF (ENDP X) T (IF (MEM (CAR X) (CDR X)) NIL (NO-DUPS (CDR X))))) The admission of NO-DUPS is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of NO-DUPS is described by the theorem (OR (EQUAL (NO-DUPS X) T) (EQUAL (NO-DUPS X) NIL)). Summary Form: ( DEFUN NO-DUPS ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) NO-DUPS ACL2 >>(DEFUN LIST-OF-NATSP (LST) (COND ((ENDP LST) T) (T (AND (NATP (CAR LST)) (LIST-OF-NATSP (CDR LST)))))) The admission of LIST-OF-NATSP is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT LST). We observe that the type of LIST-OF-NATSP is described by the theorem (OR (EQUAL (LIST-OF-NATSP LST) T) (EQUAL (LIST-OF-NATSP LST) NIL)). Summary Form: ( DEFUN LIST-OF-NATSP ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) LIST-OF-NATSP ACL2 >>(DEFUN MAXIMAL (LST) (COND ((ENDP LST) -1) (T (MAX (CAR LST) (MAXIMAL (CDR LST)))))) The admission of MAXIMAL is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT LST). We could deduce no constraints on the type of MAXIMAL. Summary Form: ( DEFUN MAXIMAL ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) MAXIMAL ACL2 >>(THEOREM PROBLEM-112A (IMPLIES (LIST-OF-NATSP LST) (IFF (MEM (MAXIMAL LST) LST) (CONSP LST))) :HINTS (("Goal" :INDUCT (MEM (MAXIMAL LST) LST)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. Two induction schemes are suggested by the induction hint. These merge into one derived induction scheme. We will induct according to a scheme suggested by (MEM (MAXIMAL LST) LST). This suggestion was produced using the :induction rules MAXIMAL and MEM. If we let (:P LST) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP LST)) (:P LST)) (IMPLIES (AND (CONSP LST) (NOT (EQUAL (MAXIMAL LST) (CAR LST))) (:P (CDR LST))) (:P LST)) (IMPLIES (AND (CONSP LST) (EQUAL (MAXIMAL LST) (CAR LST))) (:P LST))). This induction is justified by the same argument used to admit MEM, namely, the measure (ACL2-COUNT LST) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP LST)) (IMPLIES (LIST-OF-NATSP LST) (IFF (MEM (MAXIMAL LST) LST) (CONSP LST)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP LST)) (LIST-OF-NATSP LST)) (COND ((MEM (MAXIMAL LST) LST) (CONSP LST)) ((CONSP LST) NIL) (T T))). But simplification reduces this to T, using the :definitions LIST-OF- NATSP, MAXIMAL and MEM. Subgoal *1/2 (IMPLIES (AND (CONSP LST) (NOT (EQUAL (MAXIMAL LST) (CAR LST))) (IMPLIES (LIST-OF-NATSP (CDR LST)) (IFF (MEM (MAXIMAL (CDR LST)) (CDR LST)) (CONSP (CDR LST))))) (IMPLIES (LIST-OF-NATSP LST) (IFF (MEM (MAXIMAL LST) LST) (CONSP LST)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP LST) (NOT (EQUAL (MAXIMAL LST) (CAR LST))) (IMPLIES (LIST-OF-NATSP (CDR LST)) (COND ((MEM (MAXIMAL (CDR LST)) (CDR LST)) (CONSP (CDR LST))) ((CONSP (CDR LST)) NIL) (T T))) (LIST-OF-NATSP LST)) (COND ((MEM (MAXIMAL LST) LST) (CONSP LST)) ((CONSP LST) NIL) (T T))). This simplifies, using the :compound-recognizer rule NATP-CR, the :definitions LIST-OF-NATSP, MAX, MAXIMAL and MEM and the :type-prescription rules MEM and NATP, to Subgoal *1/2'' (IMPLIES (AND (CONSP LST) (<= (CAR LST) (MAXIMAL (CDR LST))) (NOT (EQUAL (MAXIMAL (CDR LST)) (CAR LST))) (NOT (MEM (MAXIMAL (CDR LST)) (CDR LST))) (NOT (CONSP (CDR LST)))) (NOT (NATP (CAR LST)))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definition MAXIMAL, primitive type reasoning and the :forward-chaining rules NATP-FC-1 and NATP-FC-2. Subgoal *1/1 (IMPLIES (AND (CONSP LST) (EQUAL (MAXIMAL LST) (CAR LST))) (IMPLIES (LIST-OF-NATSP LST) (IFF (MEM (MAXIMAL LST) LST) (CONSP LST)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP LST) (EQUAL (MAXIMAL LST) (CAR LST)) (LIST-OF-NATSP LST)) (COND ((MEM (MAXIMAL LST) LST) (CONSP LST)) ((CONSP LST) NIL) (T T))). But simplification reduces this to T, using the :definitions MAX, MAXIMAL and MEM and primitive type reasoning. That completes the proof of *1. Q.E.D. The storage of PROBLEM-112A depends upon the :type-prescription rule MEM. Summary Form: ( DEFTHM PROBLEM-112A ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION IFF) (:DEFINITION LIST-OF-NATSP) (:DEFINITION MAX) (:DEFINITION MAXIMAL) (:DEFINITION MEM) (:DEFINITION NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:INDUCTION MAXIMAL) (:INDUCTION MEM) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION NATP)) Warnings: None Time: 0.08 seconds (prove: 0.03, print: 0.05, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-112A ACL2 >>(THEOREM PROBLEM-112B (IMPLIES (LIST-OF-NATSP LST) (LIST-OF-NATSP (DEL E LST))) :HINTS (("Goal" :INDUCT (DEL E LST)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (DEL E LST). This suggestion was produced using the :induction rule DEL. If we let (:P E LST) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP LST)) (:P E LST)) (IMPLIES (AND (CONSP LST) (NOT (EQUAL E (CAR LST))) (:P E (CDR LST))) (:P E LST)) (IMPLIES (AND (CONSP LST) (EQUAL E (CAR LST))) (:P E LST))). This induction is justified by the same argument used to admit DEL, namely, the measure (ACL2-COUNT LST) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP LST)) (IMPLIES (LIST-OF-NATSP LST) (LIST-OF-NATSP (DEL E LST)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP LST)) (LIST-OF-NATSP LST)) (LIST-OF-NATSP (DEL E LST))). But simplification reduces this to T, using the :definitions DEL and LIST-OF-NATSP. Subgoal *1/2 (IMPLIES (AND (CONSP LST) (NOT (EQUAL E (CAR LST))) (IMPLIES (LIST-OF-NATSP (CDR LST)) (LIST-OF-NATSP (DEL E (CDR LST))))) (IMPLIES (LIST-OF-NATSP LST) (LIST-OF-NATSP (DEL E LST)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP LST) (NOT (EQUAL E (CAR LST))) (IMPLIES (LIST-OF-NATSP (CDR LST)) (LIST-OF-NATSP (DEL E (CDR LST)))) (LIST-OF-NATSP LST)) (LIST-OF-NATSP (DEL E LST))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions DEL and LIST-OF-NATSP, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type- prescription rule LIST-OF-NATSP. Subgoal *1/1 (IMPLIES (AND (CONSP LST) (EQUAL E (CAR LST))) (IMPLIES (LIST-OF-NATSP LST) (LIST-OF-NATSP (DEL E LST)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP LST) (EQUAL E (CAR LST)) (LIST-OF-NATSP LST)) (LIST-OF-NATSP (DEL E LST))). This simplifies, using the :definition DEL and primitive type reasoning, to Subgoal *1/1'' (IMPLIES (AND (CONSP LST) (LIST-OF-NATSP LST)) (LIST-OF-NATSP (CDR LST))). But simplification reduces this to T, using the :definition LIST-OF- NATSP. That completes the proof of *1. Q.E.D. The storage of PROBLEM-112B depends upon the :type-prescription rule LIST-OF-NATSP. Summary Form: ( DEFTHM PROBLEM-112B ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION DEL) (:DEFINITION LIST-OF-NATSP) (:DEFINITION NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION DEL) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:TYPE-PRESCRIPTION LIST-OF-NATSP)) Warnings: None Time: 0.06 seconds (prove: 0.00, print: 0.06, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-112B ACL2 >>(THEOREM PROBLEM-112C (IMPLIES (NO-DUPS LST) (NO-DUPS (RM E LST))) :HINTS (("Goal" :INDUCT (RM E LST) :IN-THEORY (ENABLE PROBLEM-55A PROBLEM-111E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (RM E LST). This suggestion was produced using the :induction rule RM. If we let (:P E LST) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP LST)) (:P E LST)) (IMPLIES (AND (CONSP LST) (NOT (EQUAL E (CAR LST))) (:P E (CDR LST))) (:P E LST)) (IMPLIES (AND (CONSP LST) (EQUAL E (CAR LST))) (:P E LST))). This induction is justified by the same argument used to admit RM, namely, the measure (ACL2-COUNT LST) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP LST)) (IMPLIES (NO-DUPS LST) (NO-DUPS (RM E LST)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP LST)) (NO-DUPS LST)) (NO-DUPS (RM E LST))). But simplification reduces this to T, using the :definitions MEM and NO-DUPS and the :rewrite rule PROBLEM-111E. Subgoal *1/2 (IMPLIES (AND (CONSP LST) (NOT (EQUAL E (CAR LST))) (IMPLIES (NO-DUPS (CDR LST)) (NO-DUPS (RM E (CDR LST))))) (IMPLIES (NO-DUPS LST) (NO-DUPS (RM E LST)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP LST) (NOT (EQUAL E (CAR LST))) (IMPLIES (NO-DUPS (CDR LST)) (NO-DUPS (RM E (CDR LST)))) (NO-DUPS LST)) (NO-DUPS (RM E LST))). This simplifies, using the :definitions NO-DUPS and RM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type- prescription rule NO-DUPS, to Subgoal *1/2'' (IMPLIES (AND (CONSP LST) (NOT (EQUAL E (CAR LST))) (NO-DUPS (RM E (CDR LST))) (NOT (MEM (CAR LST) (CDR LST))) (NO-DUPS (CDR LST))) (NOT (MEM (CAR LST) (RM E (CDR LST))))). But simplification reduces this to T, using the :rewrite rule PROBLEM- 55A and the :type-prescription rule MEM. Subgoal *1/1 (IMPLIES (AND (CONSP LST) (EQUAL E (CAR LST))) (IMPLIES (NO-DUPS LST) (NO-DUPS (RM E LST)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP LST) (EQUAL E (CAR LST)) (NO-DUPS LST)) (NO-DUPS (RM E LST))). This simplifies, using the :definition RM and primitive type reasoning, to Subgoal *1/1'' (IMPLIES (AND (CONSP LST) (NO-DUPS LST)) (NO-DUPS (CDR LST))). But simplification reduces this to T, using the :definition NO-DUPS. That completes the proof of *1. Q.E.D. The storage of PROBLEM-112C depends upon the :type-prescription rule NO-DUPS. Summary Form: ( DEFTHM PROBLEM-112C ...) Rules: ((:DEFINITION MEM) (:DEFINITION NO-DUPS) (:DEFINITION NOT) (:DEFINITION RM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION RM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-111E) (:REWRITE PROBLEM-55A) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION NO-DUPS)) Warnings: None Time: 0.13 seconds (prove: 0.07, print: 0.05, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-112C ACL2 >>(THEOREM PROBLEM-112D (IMPLIES (LIST-OF-NATSP LST) (AND (INTEGERP (MAXIMAL LST)) (<= -1 (MAXIMAL LST)))) :HINTS (("Goal" :INDUCT (LIST-OF-NATSP LST))) :RULE-CLASSES :FORWARD-CHAINING) ACL2 Observation in ( DEFTHM PROBLEM-112D ...): The :TRIGGER-TERMS for the :FORWARD-CHAINING rule PROBLEM-112D will consist of the list containing (LIST-OF-NATSP LST). [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (LIST-OF-NATSP LST). This suggestion was produced using the :induction rule LIST-OF-NATSP. If we let (:P LST) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP LST)) (NOT (NATP (CAR LST)))) (:P LST)) (IMPLIES (AND (NOT (ENDP LST)) (NATP (CAR LST)) (:P (CDR LST))) (:P LST)) (IMPLIES (ENDP LST) (:P LST))). This induction is justified by the same argument used to admit LIST- OF-NATSP, namely, the measure (ACL2-COUNT LST) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP LST)) (NOT (NATP (CAR LST)))) (IMPLIES (LIST-OF-NATSP LST) (AND (INTEGERP (MAXIMAL LST)) (<= -1 (MAXIMAL LST))))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP LST) (NOT (NATP (CAR LST))) (LIST-OF-NATSP LST)) (AND (INTEGERP (MAXIMAL LST)) (<= -1 (MAXIMAL LST)))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR and the :definition LIST-OF-NATSP. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP LST)) (NATP (CAR LST)) (IMPLIES (LIST-OF-NATSP (CDR LST)) (AND (INTEGERP (MAXIMAL (CDR LST))) (<= -1 (MAXIMAL (CDR LST)))))) (IMPLIES (LIST-OF-NATSP LST) (AND (INTEGERP (MAXIMAL LST)) (<= -1 (MAXIMAL LST))))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP LST) (NATP (CAR LST)) (IMPLIES (LIST-OF-NATSP (CDR LST)) (AND (INTEGERP (MAXIMAL (CDR LST))) (<= -1 (MAXIMAL (CDR LST))))) (LIST-OF-NATSP LST)) (AND (INTEGERP (MAXIMAL LST)) (<= -1 (MAXIMAL LST)))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions LIST-OF-NATSP, MAX, MAXIMAL and NOT, primitive type reasoning and the :forward-chaining rules NATP-FC-1 and NATP-FC-2. Subgoal *1/1 (IMPLIES (ENDP LST) (IMPLIES (LIST-OF-NATSP LST) (AND (INTEGERP (MAXIMAL LST)) (<= -1 (MAXIMAL LST))))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP LST)) (LIST-OF-NATSP LST)) (AND (INTEGERP (MAXIMAL LST)) (<= -1 (MAXIMAL LST)))). But simplification reduces this to T, using the :definitions LIST-OF- NATSP and MAXIMAL and the :executable-counterparts of <, INTEGERP and NOT. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-112D ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION ENDP) (:DEFINITION LIST-OF-NATSP) (:DEFINITION MAX) (:DEFINITION MAXIMAL) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART INTEGERP) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:INDUCTION LIST-OF-NATSP)) Warnings: None Time: 0.05 seconds (prove: 0.01, print: 0.04, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-112D ACL2 >>(THEOREM PROBLEM-112E (IMPLIES (AND (LIST-OF-NATSP LST) (NO-DUPS LST) (CONSP LST)) (< (MAXIMAL (RM (MAXIMAL LST) LST)) (MAXIMAL LST))) :HINTS (("Goal" :INDUCT (RM (MAXIMAL LST) LST) :IN-THEORY (ENABLE PROBLEM-112A PROBLEM-112D))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. Two induction schemes are suggested by the induction hint. These merge into one derived induction scheme. We will induct according to a scheme suggested by (RM (MAXIMAL LST) LST). This suggestion was produced using the :induction rules MAXIMAL and RM. If we let (:P LST) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP LST)) (:P LST)) (IMPLIES (AND (CONSP LST) (NOT (EQUAL (MAXIMAL LST) (CAR LST))) (:P (CDR LST))) (:P LST)) (IMPLIES (AND (CONSP LST) (EQUAL (MAXIMAL LST) (CAR LST))) (:P LST))). This induction is justified by the same argument used to admit RM, namely, the measure (ACL2-COUNT LST) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (AND (CONSP LST) (NOT (EQUAL (MAXIMAL LST) (CAR LST))) (IMPLIES (AND (LIST-OF-NATSP (CDR LST)) (NO-DUPS (CDR LST)) (CONSP (CDR LST))) (< (MAXIMAL (RM (MAXIMAL (CDR LST)) (CDR LST))) (MAXIMAL (CDR LST))))) (IMPLIES (AND (LIST-OF-NATSP LST) (NO-DUPS LST) (CONSP LST)) (< (MAXIMAL (RM (MAXIMAL LST) LST)) (MAXIMAL LST)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP LST) (NOT (EQUAL (MAXIMAL LST) (CAR LST))) (IMPLIES (AND (LIST-OF-NATSP (CDR LST)) (NO-DUPS (CDR LST)) (CONSP (CDR LST))) (< (MAXIMAL (RM (MAXIMAL (CDR LST)) (CDR LST))) (MAXIMAL (CDR LST)))) (LIST-OF-NATSP LST) (NO-DUPS LST)) (< (MAXIMAL (RM (MAXIMAL LST) LST)) (MAXIMAL LST))). This simplifies, using the :compound-recognizer rule NATP-CR, the :definitions LIST-OF-NATSP, MAX, MAXIMAL, MEM, NO-DUPS and RM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule NATP, to the following three conjectures. Subgoal *1/2.3 (IMPLIES (AND (CONSP LST) (<= (CAR LST) (MAXIMAL (CDR LST))) (NOT (EQUAL (MAXIMAL (CDR LST)) (CAR LST))) (NOT (CONSP (CDR LST))) (NATP (CAR LST)) (< (MAXIMAL (RM (MAXIMAL (CDR LST)) (CDR LST))) (CAR LST))) (< (CAR LST) (MAXIMAL (CDR LST)))). But forced simplification reduces this to T, using linear arithmetic. Subgoal *1/2.2 (IMPLIES (AND (CONSP LST) (<= (CAR LST) (MAXIMAL (CDR LST))) (NOT (EQUAL (MAXIMAL (CDR LST)) (CAR LST))) (NOT (CONSP (CDR LST))) (NATP (CAR LST)) (<= (CAR LST) (MAXIMAL (RM (MAXIMAL (CDR LST)) (CDR LST))))) (< (MAXIMAL (RM (MAXIMAL (CDR LST)) (CDR LST))) (MAXIMAL (CDR LST)))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definition MAXIMAL, primitive type reasoning and the :forward-chaining rules NATP-FC-1 and NATP-FC-2. Subgoal *1/2.1 (IMPLIES (AND (CONSP LST) (<= (CAR LST) (MAXIMAL (CDR LST))) (NOT (EQUAL (MAXIMAL (CDR LST)) (CAR LST))) (< (MAXIMAL (RM (MAXIMAL (CDR LST)) (CDR LST))) (MAXIMAL (CDR LST))) (NATP (CAR LST)) (LIST-OF-NATSP (CDR LST)) (NOT (MEM (CAR LST) (CDR LST))) (NO-DUPS (CDR LST)) (< (MAXIMAL (RM (MAXIMAL (CDR LST)) (CDR LST))) (CAR LST))) (< (CAR LST) (MAXIMAL (CDR LST)))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, linear arithmetic, the :forward-chaining rule PROBLEM- 112D and the :type-prescription rule LIST-OF-NATSP. Subgoal *1/1 (IMPLIES (AND (CONSP LST) (EQUAL (MAXIMAL LST) (CAR LST))) (IMPLIES (AND (LIST-OF-NATSP LST) (NO-DUPS LST) (CONSP LST)) (< (MAXIMAL (RM (MAXIMAL LST) LST)) (MAXIMAL LST)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP LST) (EQUAL (MAXIMAL LST) (CAR LST)) (LIST-OF-NATSP LST) (NO-DUPS LST)) (< (MAXIMAL (RM (MAXIMAL LST) LST)) (MAXIMAL LST))). This simplifies, using the :definitions MAX, MAXIMAL and RM and primitive type reasoning, to Subgoal *1/1'' (IMPLIES (AND (CONSP LST) (EQUAL (MAXIMAL (CDR LST)) (CAR LST)) (LIST-OF-NATSP LST) (NO-DUPS LST)) (< (CAR LST) (CAR LST))). This simplifies, using the :definitions LIST-OF-NATSP and NO-DUPS, to Subgoal *1/1''' (IMPLIES (AND (CONSP LST) (EQUAL (MAXIMAL (CDR LST)) (CAR LST)) (NATP (CAR LST)) (LIST-OF-NATSP (CDR LST)) (NOT (MEM (CAR LST) (CDR LST))) (NO-DUPS (CDR LST))) (< (CAR LST) (CAR LST))). The destructor terms (CAR LST) and (CDR LST) can be eliminated by using CAR-CDR-ELIM to replace LST by (CONS LST1 LST2), (CAR LST) by LST1 and (CDR LST) by LST2 and restrict the type of the new variable LST1 to be that of the term it replaces, as established by the :compound- recognizer rule NATP-CR. This produces the following goal. Subgoal *1/1'4' (IMPLIES (AND (INTEGERP LST1) (<= 0 LST1) (CONSP (CONS LST1 LST2)) (EQUAL (MAXIMAL LST2) LST1) (NATP LST1) (LIST-OF-NATSP LST2) (NOT (MEM LST1 LST2)) (NO-DUPS LST2)) (< LST1 LST1)). By case analysis we reduce the conjecture to Subgoal *1/1'5' (IMPLIES (AND (INTEGERP LST1) (<= 0 LST1) (CONSP (CONS LST1 LST2)) (EQUAL (MAXIMAL LST2) LST1) (NATP LST1) (LIST-OF-NATSP LST2) (NOT (MEM LST1 LST2)) (NO-DUPS LST2)) (< LST1 LST1)). This simplifies, using the :compound-recognizer rule NATP-CR, the :definitions MAXIMAL and NO-DUPS, the :executable-counterpart of <, primitive type reasoning, the :forward-chaining rule PROBLEM-112D, the :rewrite rule PROBLEM-112A and the :type-prescription rule LIST-OF-NATSP, to Subgoal *1/1'6' (IMPLIES (AND (<= 0 (MAXIMAL LST2)) (LIST-OF-NATSP LST2)) (CONSP LST2)). But simplification reduces this to T, using the :definition MAXIMAL and the :executable-counterpart of <. That completes the proof of *1. q.e.d. (given one forced hypothesis) Modulo the following forced goal, that completes the proof of the input Goal. See :DOC forcing-round. [1]Goal, below, will focus on (ACL2-NUMBERP (MAXIMAL (CDR LST))), which was forced in Subgoal *1/2.3, above, by the linearization of (EQUAL (MAXIMAL (CDR LST)) (CAR LST)). We now undertake Forcing Round 1. [1]Goal (IMPLIES (AND (CONSP LST) (<= (CAR LST) (MAXIMAL (CDR LST))) (NOT (EQUAL (MAXIMAL (CDR LST)) (CAR LST))) (NOT (CONSP (CDR LST))) (AND (INTEGERP (CAR LST)) (<= 0 (CAR LST))) (< (MAXIMAL (RM (MAXIMAL (CDR LST)) (CDR LST))) (CAR LST)) (<= (MAXIMAL (CDR LST)) (CAR LST))) (ACL2-NUMBERP (MAXIMAL (CDR LST)))). By case analysis we reduce the conjecture to [1]Goal' (IMPLIES (AND (CONSP LST) (<= (CAR LST) (MAXIMAL (CDR LST))) (NOT (EQUAL (MAXIMAL (CDR LST)) (CAR LST))) (NOT (CONSP (CDR LST))) (INTEGERP (CAR LST)) (<= 0 (CAR LST)) (< (MAXIMAL (RM (MAXIMAL (CDR LST)) (CDR LST))) (CAR LST)) (<= (MAXIMAL (CDR LST)) (CAR LST))) (ACL2-NUMBERP (MAXIMAL (CDR LST)))). This simplifies, using the :executable-counterparts of <, INTEGERP and NOT and linear arithmetic, to [1]Goal'' (IMPLIES (AND (EQUAL 0 (CAR LST)) (CONSP LST) (<= 0 (MAXIMAL (CDR LST))) (NOT (EQUAL (MAXIMAL (CDR LST)) 0)) (NOT (CONSP (CDR LST))) (< (MAXIMAL (RM (MAXIMAL (CDR LST)) (CDR LST))) 0) (<= (MAXIMAL (CDR LST)) 0)) (ACL2-NUMBERP (MAXIMAL (CDR LST)))). This simplifies, using the :executable-counterpart of <, primitive type reasoning and the :rewrite rules DEFAULT-<-1 and DEFAULT-<-2, to [1]Goal''' (IMPLIES (AND (EQUAL 0 (CAR LST)) (CONSP LST) (NOT (CONSP (CDR LST))) (< (MAXIMAL (RM (MAXIMAL (CDR LST)) (CDR LST))) 0)) (ACL2-NUMBERP (MAXIMAL (CDR LST)))). But simplification reduces this to T, using the :definitions MAXIMAL and RM and the :executable-counterparts of < and ACL2-NUMBERP. Q.E.D. Summary Form: ( DEFTHM PROBLEM-112E ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION LIST-OF-NATSP) (:DEFINITION MAX) (:DEFINITION MAXIMAL) (:DEFINITION MEM) (:DEFINITION NO-DUPS) (:DEFINITION NOT) (:DEFINITION RM) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART ACL2-NUMBERP) (:EXECUTABLE-COUNTERPART INTEGERP) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:FORWARD-CHAINING PROBLEM-112D) (:INDUCTION MAXIMAL) (:INDUCTION RM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE DEFAULT-<-1) (:REWRITE DEFAULT-<-2) (:REWRITE PROBLEM-112A) (:TYPE-PRESCRIPTION LIST-OF-NATSP) (:TYPE-PRESCRIPTION NATP)) Warnings: None Time: 0.51 seconds (prove: 0.20, print: 0.28, other: 0.03) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-112E ACL2 >>(THEOREM PROBLEM-112F (EQUAL (LEN (RM E LST)) (IF (MEM E LST) (- (LEN LST) 1) (LEN LST))) :HINTS (("Goal" :INDUCT (RM E LST) :IN-THEORY (ENABLE PROBLEM-111E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (RM E LST). This suggestion was produced using the :induction rule RM. If we let (:P E LST) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP LST)) (:P E LST)) (IMPLIES (AND (CONSP LST) (NOT (EQUAL E (CAR LST))) (:P E (CDR LST))) (:P E LST)) (IMPLIES (AND (CONSP LST) (EQUAL E (CAR LST))) (:P E LST))). This induction is justified by the same argument used to admit RM, namely, the measure (ACL2-COUNT LST) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP LST)) (EQUAL (LEN (RM E LST)) (IF (MEM E LST) (+ -1 (LEN LST)) (LEN LST)))). But simplification reduces this to T, using the :definitions LEN and MEM, the :executable-counterpart of EQUAL and the :rewrite rule PROBLEM- 111E. Subgoal *1/2 (IMPLIES (AND (CONSP LST) (NOT (EQUAL E (CAR LST))) (EQUAL (LEN (RM E (CDR LST))) (IF (MEM E (CDR LST)) (+ -1 (LEN (CDR LST))) (LEN (CDR LST))))) (EQUAL (LEN (RM E LST)) (IF (MEM E LST) (+ -1 (LEN LST)) (LEN LST)))). But simplification reduces this to T, using the :definitions FIX, LEN, MEM, RM and SYNP, the :executable-counterpart of BINARY-+, primitive type reasoning, the :rewrite rules CDR-CONS, FOLD-CONSTS-IN-+, PROBLEM- 111E and UNICITY-OF-0 and the :type-prescription rules LEN and MEM. Subgoal *1/1 (IMPLIES (AND (CONSP LST) (EQUAL E (CAR LST))) (EQUAL (LEN (RM E LST)) (IF (MEM E LST) (+ -1 (LEN LST)) (LEN LST)))). This simplifies, using the :definitions MEM and RM and primitive type reasoning, to Subgoal *1/1' (IMPLIES (CONSP LST) (EQUAL (LEN (CDR LST)) (+ -1 (LEN LST)))). But simplification reduces this to T, using the :definitions FIX, LEN and SYNP, the :executable-counterpart of BINARY-+, primitive type reasoning, the :rewrite rules FOLD-CONSTS-IN-+ and UNICITY-OF-0 and the :type- prescription rule LEN. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-112F ...) Rules: ((:DEFINITION FIX) (:DEFINITION LEN) (:DEFINITION MEM) (:DEFINITION RM) (:DEFINITION SYNP) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION RM) (:REWRITE CDR-CONS) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE PROBLEM-111E) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION LEN) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.08 seconds (prove: 0.01, print: 0.06, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-112F ACL2 >>(DEFUN INDUCTION-HINT (LST N) (DECLARE (XARGS :MEASURE (ACL2-COUNT N))) (COND ((ZP N) (LIST LST N)) ((ENDP LST) (LIST LST N)) (T (INDUCTION-HINT (RM (MAXIMAL LST) LST) (- N 1))))) The admission of INDUCTION-HINT is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT N). We observe that the type of INDUCTION-HINT is described by the theorem (AND (CONSP (INDUCTION-HINT LST N)) (TRUE-LISTP (INDUCTION-HINT LST N))). We used primitive type reasoning. Summary Form: ( DEFUN INDUCTION-HINT ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.01, other: 0.02) INDUCTION-HINT ACL2 >>(THEOREM PROBLEM-112G (IMPLIES (LIST-OF-NATSP X) (LIST-OF-NATSP (RM E X))) :HINTS (("Goal" :INDUCT (RM E X) :IN-THEORY (ENABLE PROBLEM-111E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (RM E X). This suggestion was produced using the :induction rule RM. If we let (:P E X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P E X)) (IMPLIES (AND (CONSP X) (NOT (EQUAL E (CAR X))) (:P E (CDR X))) (:P E X)) (IMPLIES (AND (CONSP X) (EQUAL E (CAR X))) (:P E X))). This induction is justified by the same argument used to admit RM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (LIST-OF-NATSP X) (LIST-OF-NATSP (RM E X)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (LIST-OF-NATSP X)) (LIST-OF-NATSP (RM E X))). But simplification reduces this to T, using the :definitions LIST-OF- NATSP and MEM and the :rewrite rule PROBLEM-111E. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (EQUAL E (CAR X))) (IMPLIES (LIST-OF-NATSP (CDR X)) (LIST-OF-NATSP (RM E (CDR X))))) (IMPLIES (LIST-OF-NATSP X) (LIST-OF-NATSP (RM E X)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (EQUAL E (CAR X))) (IMPLIES (LIST-OF-NATSP (CDR X)) (LIST-OF-NATSP (RM E (CDR X)))) (LIST-OF-NATSP X)) (LIST-OF-NATSP (RM E X))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions LIST-OF-NATSP and RM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type- prescription rule LIST-OF-NATSP. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL E (CAR X))) (IMPLIES (LIST-OF-NATSP X) (LIST-OF-NATSP (RM E X)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (EQUAL E (CAR X)) (LIST-OF-NATSP X)) (LIST-OF-NATSP (RM E X))). This simplifies, using the :definition RM and primitive type reasoning, to Subgoal *1/1'' (IMPLIES (AND (CONSP X) (LIST-OF-NATSP X)) (LIST-OF-NATSP (CDR X))). But simplification reduces this to T, using the :definition LIST-OF- NATSP. That completes the proof of *1. Q.E.D. The storage of PROBLEM-112G depends upon the :type-prescription rule LIST-OF-NATSP. Summary Form: ( DEFTHM PROBLEM-112G ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION LIST-OF-NATSP) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION RM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION RM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-111E) (:TYPE-PRESCRIPTION LIST-OF-NATSP)) Warnings: None Time: 0.07 seconds (prove: 0.02, print: 0.04, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-112G ACL2 >>(THEOREM PROBLEM-112H (IMPLIES (AND (CONSP X) (LIST-OF-NATSP X)) (<= 0 (MAXIMAL X))) :HINTS (("Goal" :INDUCT (LIST-OF-NATSP X))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (LIST-OF-NATSP X). This suggestion was produced using the :induction rule LIST-OF-NATSP. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP X)) (NOT (NATP (CAR X)))) (:P X)) (IMPLIES (AND (NOT (ENDP X)) (NATP (CAR X)) (:P (CDR X))) (:P X)) (IMPLIES (ENDP X) (:P X))). This induction is justified by the same argument used to admit LIST- OF-NATSP, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP X)) (NOT (NATP (CAR X)))) (IMPLIES (AND (CONSP X) (LIST-OF-NATSP X)) (<= 0 (MAXIMAL X)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP X) (NOT (NATP (CAR X))) (LIST-OF-NATSP X)) (<= 0 (MAXIMAL X))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR and the :definition LIST-OF-NATSP. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP X)) (NATP (CAR X)) (IMPLIES (AND (CONSP (CDR X)) (LIST-OF-NATSP (CDR X))) (<= 0 (MAXIMAL (CDR X))))) (IMPLIES (AND (CONSP X) (LIST-OF-NATSP X)) (<= 0 (MAXIMAL X)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NATP (CAR X)) (IMPLIES (AND (CONSP (CDR X)) (LIST-OF-NATSP (CDR X))) (<= 0 (MAXIMAL (CDR X)))) (LIST-OF-NATSP X)) (<= 0 (MAXIMAL X))). This simplifies, using the :compound-recognizer rule NATP-CR, the :definitions LIST-OF-NATSP, MAX, MAXIMAL and NOT, primitive type reasoning and the :forward-chaining rules NATP-FC-1 and NATP-FC-2, to Subgoal *1/2'' (IMPLIES (AND (CONSP X) (NATP (CAR X)) (<= 0 (MAXIMAL (CDR X))) (LIST-OF-NATSP (CDR X)) (< (MAXIMAL (CDR X)) (CAR X))) (<= 0 (CAR X))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR and primitive type reasoning. Subgoal *1/1 (IMPLIES (ENDP X) (IMPLIES (AND (CONSP X) (LIST-OF-NATSP X)) (<= 0 (MAXIMAL X)))). But we reduce the conjecture to T, by case analysis. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-112H ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION ENDP) (:DEFINITION LIST-OF-NATSP) (:DEFINITION MAX) (:DEFINITION MAXIMAL) (:DEFINITION NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:INDUCTION LIST-OF-NATSP)) Warnings: None Time: 0.05 seconds (prove: 0.02, print: 0.03, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-112H ACL2 >>(THEOREM PROBLEM-112I (EQUAL (< 0 (LEN X)) (CONSP X)) :HINTS (("Goal" :INDUCT (LEN X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (LEN X). This suggestion was produced using the :induction rule LEN. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit LEN, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (< 0 (LEN X)) (CONSP X))). But simplification reduces this to T, using the :definition LEN and the :executable-counterparts of < and EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (< 0 (LEN (CDR X))) (CONSP (CDR X)))) (EQUAL (< 0 (LEN X)) (CONSP X))). This simplifies, using the :definition LEN, primitive type reasoning and the :type-prescription rule LEN, to Subgoal *1/1' (IMPLIES (AND (CONSP X) (EQUAL (< 0 (LEN (CDR X))) (CONSP (CDR X)))) (< 0 (+ 1 (LEN (CDR X))))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule LEN. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-112I ...) Rules: ((:DEFINITION LEN) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION LEN) (:TYPE-PRESCRIPTION LEN)) Warnings: None Time: 0.05 seconds (prove: 0.02, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-112I ACL2 >>(THEOREM PROBLEM-112J (IMPLIES (AND (NATP N) (LIST-OF-NATSP LST) (NO-DUPS LST) (< (MAXIMAL LST) N)) (<= (LEN LST) N)) :HINTS (("Goal" :INDUCT (INDUCTION-HINT LST N) :IN-THEORY (ENABLE PROBLEM-112A PROBLEM-112C PROBLEM-112D PROBLEM-112E PROBLEM-112F PROBLEM-112G PROBLEM-112H PROBLEM-112I)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (INDUCTION-HINT LST N). This suggestion was produced using the :induction rule INDUCTION-HINT. If we let (:P LST N) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ZP N)) (NOT (ENDP LST)) (:P (RM (MAXIMAL LST) LST) (+ -1 N))) (:P LST N)) (IMPLIES (AND (NOT (ZP N)) (ENDP LST)) (:P LST N)) (IMPLIES (ZP N) (:P LST N))). This induction is justified by the same argument used to admit INDUCTION- HINT, namely, the measure (ACL2-COUNT N) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). Note, however, that the unmeasured variable LST is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ZP N)) (NOT (ENDP LST)) (IMPLIES (AND (NATP (+ -1 N)) (LIST-OF-NATSP (RM (MAXIMAL LST) LST)) (NO-DUPS (RM (MAXIMAL LST) LST)) (< (MAXIMAL (RM (MAXIMAL LST) LST)) (+ -1 N))) (<= (LEN (RM (MAXIMAL LST) LST)) (+ -1 N)))) (IMPLIES (AND (NATP N) (LIST-OF-NATSP LST) (NO-DUPS LST) (< (MAXIMAL LST) N)) (<= (LEN LST) N))). By the simple :definition ENDP and the simple :rewrite rule NATP-POSP- -1 we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (ZP N)) (CONSP LST) (IMPLIES (AND (POSP N) (LIST-OF-NATSP (RM (MAXIMAL LST) LST)) (NO-DUPS (RM (MAXIMAL LST) LST)) (< (MAXIMAL (RM (MAXIMAL LST) LST)) (+ -1 N))) (<= (LEN (RM (MAXIMAL LST) LST)) (+ -1 N))) (NATP N) (LIST-OF-NATSP LST) (NO-DUPS LST) (< (MAXIMAL LST) N)) (<= (LEN LST) N)). This simplifies, using the :compound-recognizer rules NATP-CR, POSP- CR and ZP-COMPOUND-RECOGNIZER, the :executable-counterpart of NOT, the :forward-chaining rules POSP-FC-1 and POSP-FC-2, the :meta rule CANCEL_PLUS-LESSP-CORRECT, the :rewrite rules PROBLEM-112A, PROBLEM- 112C, PROBLEM-112F and PROBLEM-112G and the :type-prescription rules LIST-OF-NATSP and NO-DUPS, to Subgoal *1/3'' (IMPLIES (AND (NOT (ZP N)) (CONSP LST) (<= (+ -1 N) (MAXIMAL (RM (MAXIMAL LST) LST))) (LIST-OF-NATSP LST) (NO-DUPS LST) (< (MAXIMAL LST) N)) (<= (LEN LST) N)). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, linear arithmetic, the :forward-chaining rule PROBLEM-112D, the :linear rule PROBLEM-112E and the :type-prescription rules LIST-OF-NATSP and NO-DUPS. Subgoal *1/2 (IMPLIES (AND (NOT (ZP N)) (ENDP LST)) (IMPLIES (AND (NATP N) (LIST-OF-NATSP LST) (NO-DUPS LST) (< (MAXIMAL LST) N)) (<= (LEN LST) N))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (ZP N)) (NOT (CONSP LST)) (NATP N) (LIST-OF-NATSP LST) (NO-DUPS LST) (< (MAXIMAL LST) N)) (<= (LEN LST) N)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and ZP-COMPOUND-RECOGNIZER, the :definitions LEN, LIST- OF-NATSP, MAXIMAL and NO-DUPS and the :forward-chaining rules NATP- FC-1 and NATP-FC-2. Subgoal *1/1 (IMPLIES (ZP N) (IMPLIES (AND (NATP N) (LIST-OF-NATSP LST) (NO-DUPS LST) (< (MAXIMAL LST) N)) (<= (LEN LST) N))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (ZP N) (NATP N) (LIST-OF-NATSP LST) (NO-DUPS LST) (< (MAXIMAL LST) N)) (<= (LEN LST) N)). This simplifies, using the :compound-recognizer rules NATP-CR and ZP- COMPOUND-RECOGNIZER, the :executable-counterparts of <, NATP, NOT and ZP, linear arithmetic, the :forward-chaining rules NATP-FC-1 and PROBLEM- 112D and the :type-prescription rule LIST-OF-NATSP, to Subgoal *1/1'' (IMPLIES (AND (EQUAL (MAXIMAL LST) -1) (LIST-OF-NATSP LST) (NO-DUPS LST)) (<= (LEN LST) 0)). By the simple :rewrite rule PROBLEM-112I we reduce the conjecture to Subgoal *1/1''' (IMPLIES (AND (EQUAL (MAXIMAL LST) -1) (LIST-OF-NATSP LST) (NO-DUPS LST)) (NOT (CONSP LST))). But simplification reduces this to T, using linear arithmetic, the :linear rule PROBLEM-112H and the :type-prescription rule LIST-OF-NATSP. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-112J ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION ENDP) (:DEFINITION LEN) (:DEFINITION LIST-OF-NATSP) (:DEFINITION MAXIMAL) (:DEFINITION NO-DUPS) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART NATP) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART ZP) (:FAKE-RUNE-FOR-LINEAR NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:FORWARD-CHAINING POSP-FC-1) (:FORWARD-CHAINING POSP-FC-2) (:FORWARD-CHAINING PROBLEM-112D) (:INDUCTION INDUCTION-HINT) (:LINEAR PROBLEM-112E) (:LINEAR PROBLEM-112H) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE NATP-POSP--1) (:REWRITE PROBLEM-112A) (:REWRITE PROBLEM-112C) (:REWRITE PROBLEM-112F) (:REWRITE PROBLEM-112G) (:REWRITE PROBLEM-112I) (:TYPE-PRESCRIPTION LIST-OF-NATSP) (:TYPE-PRESCRIPTION NO-DUPS)) Warnings: None Time: 0.13 seconds (prove: 0.04, print: 0.08, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-112J ACL2 >>(THEOREM PROBLEM-112 (IMPLIES (AND (LIST-OF-NATSP LST) (NO-DUPS LST)) (<= (LEN LST) (+ 1 (MAXIMAL LST)))) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-112D PROBLEM-112J)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] But simplification reduces this to T, using linear arithmetic, primitive type reasoning, the :forward-chaining rule PROBLEM-112D, the :rewrite rules NATP-RW and PROBLEM-112J and the :type-prescription rules LIST- OF-NATSP and NO-DUPS. Q.E.D. Summary Form: ( DEFTHM PROBLEM-112 ...) Rules: ((:DEFINITION NOT) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING PROBLEM-112D) (:REWRITE NATP-RW) (:REWRITE PROBLEM-112J) (:TYPE-PRESCRIPTION LIST-OF-NATSP) (:TYPE-PRESCRIPTION NO-DUPS)) Warnings: None Time: 0.04 seconds (prove: 0.01, print: 0.01, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-112 ACL2 >>(DEFUN ADDRESSP (PTR M) (AND (NATP PTR) (< PTR (LEN M)))) Since ADDRESSP is non-recursive, its admission is trivial. We observe that the type of ADDRESSP is described by the theorem (OR (EQUAL (ADDRESSP PTR M) T) (EQUAL (ADDRESSP PTR M) NIL)). Summary Form: ( DEFUN ADDRESSP ...) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) ADDRESSP ACL2 >>(DEFUN INC (X) (IF (INTEGERP X) (+ 1 X) 'INFINITE)) Since INC is non-recursive, its admission is trivial. We observe that the type of INC is described by the theorem (OR (INTEGERP (INC X)) (AND (SYMBOLP (INC X)) (NOT (EQUAL (INC X) T)) (NOT (EQUAL (INC X) NIL)))). We used primitive type reasoning. Summary Form: ( DEFUN INC ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) INC ACL2 >>(DEFUN LEN-DIFF (MEM SEEN) (IF (CONSP MEM) (IF (MEM (CAR MEM) SEEN) (LEN-DIFF (CDR MEM) SEEN) (+ 1 (LEN-DIFF (CDR MEM) SEEN))) 0)) The admission of LEN-DIFF is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT MEM). We observe that the type of LEN-DIFF is described by the theorem (AND (INTEGERP (LEN-DIFF MEM SEEN)) (<= 0 (LEN-DIFF MEM SEEN))). We used primitive type reasoning. Summary Form: ( DEFUN LEN-DIFF ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.01, other: 0.02) LEN-DIFF ACL2 >>(THEOREM PROBLEM-113A (IMPLIES (AND (NATP N) (< N (LEN M))) (MEM (NTH N M) M)) :HINTS (("Goal" :INDUCT (NTH N M) :IN-THEORY (ENABLE PROBLEM-112I)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (NTH N M). This suggestion was produced using the :induction rule NTH. If we let (:P M N) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP M)) (NOT (ZP N)) (:P (CDR M) (+ -1 N))) (:P M N)) (IMPLIES (AND (NOT (ENDP M)) (ZP N)) (:P M N)) (IMPLIES (ENDP M) (:P M N))). This induction is justified by the same argument used to admit NTH, namely, the measure (ACL2-COUNT N) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable M is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP M)) (NOT (ZP N)) (IMPLIES (AND (NATP (+ -1 N)) (< (+ -1 N) (LEN (CDR M)))) (MEM (NTH (+ -1 N) (CDR M)) (CDR M)))) (IMPLIES (AND (NATP N) (< N (LEN M))) (MEM (NTH N M) M))). By the simple :definition ENDP and the simple :rewrite rule NATP-POSP- -1 we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP M) (NOT (ZP N)) (IMPLIES (AND (POSP N) (< (+ -1 N) (LEN (CDR M)))) (MEM (NTH (+ -1 N) (CDR M)) (CDR M))) (NATP N) (< N (LEN M))) (MEM (NTH N M) M)). This simplifies, using the :compound-recognizer rules NATP-CR, POSP- CR and ZP-COMPOUND-RECOGNIZER, the :definitions LEN, MEM and NTH, the :forward-chaining rules POSP-FC-1 and POSP-FC-2 and the :type-prescription rule MEM, to Subgoal *1/3'' (IMPLIES (AND (CONSP M) (NOT (ZP N)) (<= (LEN (CDR M)) (+ -1 N)) (< N (+ 1 (LEN (CDR M)))) (NOT (EQUAL (NTH (+ -1 N) (CDR M)) (CAR M)))) (MEM (NTH (+ -1 N) (CDR M)) (CDR M))). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, linear arithmetic, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP M)) (ZP N)) (IMPLIES (AND (NATP N) (< N (LEN M))) (MEM (NTH N M) M))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP M) (ZP N) (NATP N) (< N (LEN M))) (MEM (NTH N M) M)). This simplifies, using the :compound-recognizer rules NATP-CR and ZP- COMPOUND-RECOGNIZER, the :executable-counterparts of NATP, NOT and ZP, linear arithmetic and the :forward-chaining rule NATP-FC-1, to Subgoal *1/2'' (IMPLIES (AND (CONSP M) (< 0 (LEN M))) (MEM (NTH 0 M) M)). By the simple :rewrite rule PROBLEM-112I we reduce the conjecture to Subgoal *1/2''' (IMPLIES (CONSP M) (MEM (NTH 0 M) M)). But simplification reduces this to T, using the :definitions MEM and NTH, the :executable-counterpart of ZP and primitive type reasoning. Subgoal *1/1 (IMPLIES (ENDP M) (IMPLIES (AND (NATP N) (< N (LEN M))) (MEM (NTH N M) M))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP M)) (NATP N) (< N (LEN M))) (MEM (NTH N M) M)). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definition LEN and the :forward-chaining rules NATP- FC-1 and NATP-FC-2. That completes the proof of *1. Q.E.D. The storage of PROBLEM-113A depends upon the :type-prescription rule MEM. Summary Form: ( DEFTHM PROBLEM-113A ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION ENDP) (:DEFINITION LEN) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION NTH) (:EXECUTABLE-COUNTERPART NATP) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART ZP) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:FORWARD-CHAINING POSP-FC-1) (:FORWARD-CHAINING POSP-FC-2) (:INDUCTION NTH) (:REWRITE NATP-POSP--1) (:REWRITE PROBLEM-112I) (:TYPE-PRESCRIPTION LEN) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.13 seconds (prove: 0.04, print: 0.06, other: 0.03) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-113A ACL2 >>(THEOREM PROBLEM-113B (<= (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN)) :HINTS (("Goal" :INDUCT (LEN-DIFF MEM (CONS PTR SEEN)) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49A))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (LEN-DIFF MEM (CONS PTR SEEN)). This suggestion was produced using the :induction rule LEN-DIFF. If we let (:P MEM PTR SEEN) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP MEM)) (:P MEM PTR SEEN)) (IMPLIES (AND (CONSP MEM) (NOT (MEM (CAR MEM) (CONS PTR SEEN))) (:P (CDR MEM) PTR SEEN)) (:P MEM PTR SEEN)) (IMPLIES (AND (CONSP MEM) (MEM (CAR MEM) (CONS PTR SEEN)) (:P (CDR MEM) PTR SEEN)) (:P MEM PTR SEEN))). This induction is justified by the same argument used to admit LEN- DIFF, namely, the measure (ACL2-COUNT MEM) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP MEM)) (<= (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN))). But simplification reduces this to T, using the :definition LEN-DIFF and the :executable-counterpart of <. Subgoal *1/2 (IMPLIES (AND (CONSP MEM) (NOT (MEM (CAR MEM) (CONS PTR SEEN))) (<= (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (LEN-DIFF (CDR MEM) SEEN))) (<= (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN))). But simplification reduces this to T, using the :definitions LEN-DIFF and MEM, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP- CORRECT and the :rewrite rules CAR-CONS and CDR-CONS. Subgoal *1/1 (IMPLIES (AND (CONSP MEM) (MEM (CAR MEM) (CONS PTR SEEN)) (<= (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (LEN-DIFF (CDR MEM) SEEN))) (<= (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN))). This simplifies, using the :definitions LEN-DIFF and MEM, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM, to Subgoal *1/1' (IMPLIES (AND (CONSP MEM) (EQUAL (CAR MEM) PTR) (<= (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (LEN-DIFF (CDR MEM) SEEN)) (NOT (MEM PTR SEEN))) (<= (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (+ 1 (LEN-DIFF (CDR MEM) SEEN)))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule LEN-DIFF. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-113B ...) Rules: ((:DEFINITION LEN-DIFF) (:DEFINITION MEM) (:EXECUTABLE-COUNTERPART <) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION LEN-DIFF) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION LEN-DIFF) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.13 seconds (prove: 0.02, print: 0.10, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-113B ACL2 >>(THEOREM PROBLEM-113C (IMPLIES (AND (MEM PTR MEM) (NOT (MEM PTR SEEN))) (< (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN))) :HINTS (("Goal" :INDUCT (LEN-DIFF MEM SEEN) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49A PROBLEM-113B))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (LEN-DIFF MEM SEEN). This suggestion was produced using the :induction rule LEN-DIFF. If we let (:P MEM PTR SEEN) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP MEM)) (:P MEM PTR SEEN)) (IMPLIES (AND (CONSP MEM) (NOT (MEM (CAR MEM) SEEN)) (:P (CDR MEM) PTR SEEN)) (:P MEM PTR SEEN)) (IMPLIES (AND (CONSP MEM) (MEM (CAR MEM) SEEN) (:P (CDR MEM) PTR SEEN)) (:P MEM PTR SEEN))). This induction is justified by the same argument used to admit LEN- DIFF, namely, the measure (ACL2-COUNT MEM) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP MEM)) (IMPLIES (AND (MEM PTR MEM) (NOT (MEM PTR SEEN))) (< (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP MEM)) (MEM PTR MEM) (NOT (MEM PTR SEEN))) (< (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN))). This simplifies, using linear arithmetic, the :linear rule PROBLEM- 113B and the :type-prescription rule LEN-DIFF, to Subgoal *1/3'' (IMPLIES (AND (EQUAL (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN)) (NOT (CONSP MEM)) (MEM PTR MEM) (NOT (MEM PTR SEEN))) (< (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN))). But simplification reduces this to T, using the :definitions LEN-DIFF and MEM and the :executable-counterpart of EQUAL. Subgoal *1/2 (IMPLIES (AND (CONSP MEM) (NOT (MEM (CAR MEM) SEEN)) (IMPLIES (AND (MEM PTR (CDR MEM)) (NOT (MEM PTR SEEN))) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (LEN-DIFF (CDR MEM) SEEN)))) (IMPLIES (AND (MEM PTR MEM) (NOT (MEM PTR SEEN))) (< (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP MEM) (NOT (MEM (CAR MEM) SEEN)) (IMPLIES (AND (MEM PTR (CDR MEM)) (NOT (MEM PTR SEEN))) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (LEN-DIFF (CDR MEM) SEEN))) (MEM PTR MEM) (NOT (MEM PTR SEEN))) (< (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN))). This simplifies, using the :definitions LEN-DIFF and MEM, the :executable- counterpart of NOT, primitive type reasoning, the :rewrite rules CAR- CONS and CDR-CONS and the :type-prescription rule MEM, to the following four conjectures. Subgoal *1/2.4 (IMPLIES (AND (CONSP MEM) (NOT (MEM (CAR MEM) SEEN)) (NOT (MEM PTR (CDR MEM))) (EQUAL PTR (CAR MEM)) (NOT (MEM PTR SEEN))) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (+ 1 (LEN-DIFF (CDR MEM) SEEN)))). But simplification reduces this to T, using linear arithmetic and the :linear rule PROBLEM-113B. Subgoal *1/2.3 (IMPLIES (AND (CONSP MEM) (NOT (MEM (CAR MEM) SEEN)) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (LEN-DIFF (CDR MEM) SEEN)) (EQUAL PTR (CAR MEM)) (NOT (MEM PTR SEEN))) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (+ 1 (LEN-DIFF (CDR MEM) SEEN)))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule LEN-DIFF. Subgoal *1/2.2 (IMPLIES (AND (CONSP MEM) (NOT (MEM (CAR MEM) SEEN)) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (LEN-DIFF (CDR MEM) SEEN)) (MEM PTR (CDR MEM)) (NOT (MEM PTR SEEN)) (EQUAL (CAR MEM) PTR)) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (+ 1 (LEN-DIFF (CDR MEM) SEEN)))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule LEN-DIFF. Subgoal *1/2.1 (IMPLIES (AND (CONSP MEM) (NOT (MEM (CAR MEM) SEEN)) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (LEN-DIFF (CDR MEM) SEEN)) (MEM PTR (CDR MEM)) (NOT (MEM PTR SEEN)) (NOT (EQUAL (CAR MEM) PTR))) (< (+ 1 (LEN-DIFF (CDR MEM) (CONS PTR SEEN))) (+ 1 (LEN-DIFF (CDR MEM) SEEN)))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule LEN-DIFF. Subgoal *1/1 (IMPLIES (AND (CONSP MEM) (MEM (CAR MEM) SEEN) (IMPLIES (AND (MEM PTR (CDR MEM)) (NOT (MEM PTR SEEN))) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (LEN-DIFF (CDR MEM) SEEN)))) (IMPLIES (AND (MEM PTR MEM) (NOT (MEM PTR SEEN))) (< (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP MEM) (MEM (CAR MEM) SEEN) (IMPLIES (AND (MEM PTR (CDR MEM)) (NOT (MEM PTR SEEN))) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (LEN-DIFF (CDR MEM) SEEN))) (MEM PTR MEM) (NOT (MEM PTR SEEN))) (< (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN))). This simplifies, using the :definitions LEN-DIFF and MEM, the :executable- counterpart of NOT, primitive type reasoning, the :rewrite rules CAR- CONS, CDR-CONS, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (CONSP MEM) (MEM (CAR MEM) SEEN) (NOT (MEM PTR (CDR MEM))) (EQUAL PTR (CAR MEM)) (NOT (MEM PTR SEEN))) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (+ 1 (LEN-DIFF (CDR MEM) SEEN)))). But simplification reduces this to T, using trivial observations. Subgoal *1/1.1 (IMPLIES (AND (CONSP MEM) (MEM (CAR MEM) SEEN) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (LEN-DIFF (CDR MEM) SEEN)) (EQUAL PTR (CAR MEM)) (NOT (MEM PTR SEEN))) (< (LEN-DIFF (CDR MEM) (CONS PTR SEEN)) (+ 1 (LEN-DIFF (CDR MEM) SEEN)))). But simplification reduces this to T, using trivial observations. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-113C ...) Rules: ((:DEFINITION LEN-DIFF) (:DEFINITION MEM) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION LEN-DIFF) (:LINEAR PROBLEM-113B) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION LEN-DIFF) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.13 seconds (prove: 0.05, print: 0.06, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-113C ACL2 >>(DEFUN DEREF-CNT (PTR MEM SEEN) (DECLARE (XARGS :MEASURE (M2 (IF (MEM PTR MEM) 1 2) (LEN-DIFF MEM SEEN)) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-113A PROBLEM-113C))))) (IF (ADDRESSP PTR MEM) (IF (MEM PTR SEEN) 'INFINITE (INC (DEREF-CNT (NTH PTR MEM) MEM (CONS PTR SEEN)))) 0)) For the admission of DEREF-CNT we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (M2 (IF (MEM PTR MEM) 1 2) (LEN-DIFF MEM SEEN)). The non-trivial part of the measure conjecture is Goal (AND (O-P (M2 (IF (MEM PTR MEM) 1 2) (LEN-DIFF MEM SEEN))) (IMPLIES (AND (ADDRESSP PTR MEM) (NOT (MEM PTR SEEN))) (O< (M2 (IF (MEM (NTH PTR MEM) MEM) 1 2) (LEN-DIFF MEM (CONS PTR SEEN))) (M2 (IF (MEM PTR MEM) 1 2) (LEN-DIFF MEM SEEN))))). [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definitions ADDRESSP and M2 we reduce the conjecture to the following two conjectures. Subgoal 2 (O-P (CONS (CONS 1 (+ 1 (IF (MEM PTR MEM) 1 2))) (LEN-DIFF MEM SEEN))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR, O-FINP-CR and POSP-CR, the :definitions O-FIRST-COEFF, O-FIRST-EXPT, O-P and O-RST, the :executable-counterparts of EQUAL, O-P and O<, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, O-FIRST-EXPT-DEF-O-FINP and O-P-DEF-O-FINP-1 and the :type- prescription rule LEN-DIFF. Subgoal 1 (IMPLIES (AND (NATP PTR) (< PTR (LEN MEM)) (NOT (MEM PTR SEEN))) (O< (CONS (CONS 1 (+ 1 (IF (MEM (NTH PTR MEM) MEM) 1 2))) (LEN-DIFF MEM (CONS PTR SEEN))) (CONS (CONS 1 (+ 1 (IF (MEM PTR MEM) 1 2))) (LEN-DIFF MEM SEEN)))). This simplifies, using the :compound-recognizer rules NATP-CR and O- FINP-CR, the :definitions O-FIRST-COEFF, O-FIRST-EXPT, O-RST, O< and SYNP, the :executable-counterparts of ACL2-NUMBERP, BINARY-+, CAR, CDR, CONS, EQUAL and UNARY--, primitive type reasoning, the :forward- chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules CAR-CONS, CDR-CONS, EQUAL-CONSTANT-+ and PROBLEM-113A and the :type-prescription rule LEN-DIFF, to Subgoal 1' (IMPLIES (AND (NATP PTR) (< PTR (LEN MEM)) (NOT (MEM PTR SEEN)) (MEM PTR MEM)) (< (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN))). But simplification reduces this to T, using linear arithmetic, the :linear rule PROBLEM-113C and the :type-prescription rules LEN-DIFF and MEM. Q.E.D. That completes the proof of the measure theorem for DEREF-CNT. Thus, we admit this function under the principle of definition. We observe that the type of DEREF-CNT is described by the theorem (OR (INTEGERP (DEREF-CNT PTR MEM SEEN)) (AND (SYMBOLP (DEREF-CNT PTR MEM SEEN)) (NOT (EQUAL (DEREF-CNT PTR MEM SEEN) T)) (NOT (EQUAL (DEREF-CNT PTR MEM SEEN) NIL)))). We used the :type-prescription rule INC. Summary Form: ( DEFUN DEREF-CNT ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:DEFINITION ADDRESSP) (:DEFINITION M2) (:DEFINITION NOT) (:DEFINITION O-FIRST-COEFF) (:DEFINITION O-FIRST-EXPT) (:DEFINITION O-P) (:DEFINITION O-RST) (:DEFINITION O<) (:DEFINITION SYNP) (:EXECUTABLE-COUNTERPART ACL2-NUMBERP) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART CAR) (:EXECUTABLE-COUNTERPART CDR) (:EXECUTABLE-COUNTERPART CONS) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART O-P) (:EXECUTABLE-COUNTERPART O<) (:EXECUTABLE-COUNTERPART UNARY--) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:LINEAR PROBLEM-113C) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE EQUAL-CONSTANT-+) (:REWRITE O-FIRST-EXPT-DEF-O-FINP) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE PROBLEM-113A) (:TYPE-PRESCRIPTION INC) (:TYPE-PRESCRIPTION LEN-DIFF) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.07 seconds (prove: 0.02, print: 0.02, other: 0.03) DEREF-CNT ACL2 >>(DEFUN PATH (PTR MEM SEEN) (DECLARE (XARGS :MEASURE (M2 (IF (MEM PTR MEM) 1 2) (LEN-DIFF MEM SEEN)) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-113A PROBLEM-113C))))) (IF (ADDRESSP PTR MEM) (IF (MEM PTR SEEN) 'INFINITE (PATH (NTH PTR MEM) MEM (CONS PTR SEEN))) (CONS PTR SEEN))) For the admission of PATH we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (M2 (IF (MEM PTR MEM) 1 2) (LEN-DIFF MEM SEEN)). The non-trivial part of the measure conjecture is Goal (AND (O-P (M2 (IF (MEM PTR MEM) 1 2) (LEN-DIFF MEM SEEN))) (IMPLIES (AND (ADDRESSP PTR MEM) (NOT (MEM PTR SEEN))) (O< (M2 (IF (MEM (NTH PTR MEM) MEM) 1 2) (LEN-DIFF MEM (CONS PTR SEEN))) (M2 (IF (MEM PTR MEM) 1 2) (LEN-DIFF MEM SEEN))))). [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definitions ADDRESSP and M2 we reduce the conjecture to the following two conjectures. Subgoal 2 (O-P (CONS (CONS 1 (+ 1 (IF (MEM PTR MEM) 1 2))) (LEN-DIFF MEM SEEN))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR, O-FINP-CR and POSP-CR, the :definitions O-FIRST-COEFF, O-FIRST-EXPT, O-P and O-RST, the :executable-counterparts of EQUAL, O-P and O<, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, O-FIRST-EXPT-DEF-O-FINP and O-P-DEF-O-FINP-1 and the :type- prescription rule LEN-DIFF. Subgoal 1 (IMPLIES (AND (NATP PTR) (< PTR (LEN MEM)) (NOT (MEM PTR SEEN))) (O< (CONS (CONS 1 (+ 1 (IF (MEM (NTH PTR MEM) MEM) 1 2))) (LEN-DIFF MEM (CONS PTR SEEN))) (CONS (CONS 1 (+ 1 (IF (MEM PTR MEM) 1 2))) (LEN-DIFF MEM SEEN)))). This simplifies, using the :compound-recognizer rules NATP-CR and O- FINP-CR, the :definitions O-FIRST-COEFF, O-FIRST-EXPT, O-RST, O< and SYNP, the :executable-counterparts of ACL2-NUMBERP, BINARY-+, CAR, CDR, CONS, EQUAL and UNARY--, primitive type reasoning, the :forward- chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules CAR-CONS, CDR-CONS, EQUAL-CONSTANT-+ and PROBLEM-113A and the :type-prescription rule LEN-DIFF, to Subgoal 1' (IMPLIES (AND (NATP PTR) (< PTR (LEN MEM)) (NOT (MEM PTR SEEN)) (MEM PTR MEM)) (< (LEN-DIFF MEM (CONS PTR SEEN)) (LEN-DIFF MEM SEEN))). But simplification reduces this to T, using linear arithmetic, the :linear rule PROBLEM-113C and the :type-prescription rules LEN-DIFF and MEM. Q.E.D. That completes the proof of the measure theorem for PATH. Thus, we admit this function under the principle of definition. We observe that the type of PATH is described by the theorem (OR (CONSP (PATH PTR MEM SEEN)) (AND (SYMBOLP (PATH PTR MEM SEEN)) (NOT (EQUAL (PATH PTR MEM SEEN) T)) (NOT (EQUAL (PATH PTR MEM SEEN) NIL)))). We used primitive type reasoning. Summary Form: ( DEFUN PATH ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:DEFINITION ADDRESSP) (:DEFINITION M2) (:DEFINITION NOT) (:DEFINITION O-FIRST-COEFF) (:DEFINITION O-FIRST-EXPT) (:DEFINITION O-P) (:DEFINITION O-RST) (:DEFINITION O<) (:DEFINITION SYNP) (:EXECUTABLE-COUNTERPART ACL2-NUMBERP) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART CAR) (:EXECUTABLE-COUNTERPART CDR) (:EXECUTABLE-COUNTERPART CONS) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART O-P) (:EXECUTABLE-COUNTERPART O<) (:EXECUTABLE-COUNTERPART UNARY--) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:LINEAR PROBLEM-113C) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE EQUAL-CONSTANT-+) (:REWRITE O-FIRST-EXPT-DEF-O-FINP) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE PROBLEM-113A) (:TYPE-PRESCRIPTION LEN-DIFF) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.13 seconds (prove: 0.03, print: 0.07, other: 0.03) PATH ACL2 >>(THEOREM PROBLEM-114A (EQUAL (DEREF-CNT PTR MEM SEEN) (IF (EQUAL (PATH PTR MEM SEEN) 'INFINITE) 'INFINITE (- (LEN (PATH PTR MEM SEEN)) (+ 1 (LEN SEEN))))) :HINTS (("Goal" :INDUCT (PATH PTR MEM SEEN) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PATH PTR MEM SEEN). This suggestion was produced using the :induction rule PATH. If we let (:P MEM PTR SEEN) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (ADDRESSP PTR MEM)) (:P MEM PTR SEEN)) (IMPLIES (AND (ADDRESSP PTR MEM) (NOT (MEM PTR SEEN)) (:P MEM (NTH PTR MEM) (CONS PTR SEEN))) (:P MEM PTR SEEN)) (IMPLIES (AND (ADDRESSP PTR MEM) (MEM PTR SEEN)) (:P MEM PTR SEEN))). This induction is justified by the same argument used to admit PATH, namely, the measure (M2 (IF (MEM PTR MEM) '1 '2) (LEN-DIFF MEM SEEN)) is decreasing according to the relation O< (which is known to be well- founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautologica\ l subgoals. Subgoal *1/3 (IMPLIES (NOT (ADDRESSP PTR MEM)) (EQUAL (DEREF-CNT PTR MEM SEEN) (IF (EQUAL (PATH PTR MEM SEEN) 'INFINITE) 'INFINITE (+ (LEN (PATH PTR MEM SEEN)) (- (+ 1 (LEN SEEN))))))). By the :executable-counterpart of UNARY-- and the simple :rewrite rule DISTRIBUTIVITY-OF-MINUS-OVER-+ we reduce the conjecture to Subgoal *1/3' (IMPLIES (NOT (ADDRESSP PTR MEM)) (EQUAL (DEREF-CNT PTR MEM SEEN) (IF (EQUAL (PATH PTR MEM SEEN) 'INFINITE) 'INFINITE (+ (LEN (PATH PTR MEM SEEN)) -1 (- (LEN SEEN)))))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSP, DEREF-CNT, LEN and PATH, the :executable-counterparts of BINARY-+ and EQUAL, primitive type reasoning and the :rewrite rules CDR-CONS, COMMUTATIVITY-2-OF-+, COMMUTATIVITY- OF-+ and INVERSE-OF-+. Subgoal *1/2 (IMPLIES (AND (ADDRESSP PTR MEM) (NOT (MEM PTR SEEN)) (EQUAL (DEREF-CNT (NTH PTR MEM) MEM (CONS PTR SEEN)) (IF (EQUAL (PATH (NTH PTR MEM) MEM (CONS PTR SEEN)) 'INFINITE) 'INFINITE (+ (LEN (PATH (NTH PTR MEM) MEM (CONS PTR SEEN))) (- (+ 1 (LEN (CONS PTR SEEN)))))))) (EQUAL (DEREF-CNT PTR MEM SEEN) (IF (EQUAL (PATH PTR MEM SEEN) 'INFINITE) 'INFINITE (+ (LEN (PATH PTR MEM SEEN)) (- (+ 1 (LEN SEEN))))))). By the simple :definition ADDRESSP, the :executable-counterpart of UNARY-- and the simple :rewrite rule DISTRIBUTIVITY-OF-MINUS-OVER-+ we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NATP PTR) (< PTR (LEN MEM)) (NOT (MEM PTR SEEN)) (EQUAL (DEREF-CNT (NTH PTR MEM) MEM (CONS PTR SEEN)) (IF (EQUAL (PATH (NTH PTR MEM) MEM (CONS PTR SEEN)) 'INFINITE) 'INFINITE (+ (LEN (PATH (NTH PTR MEM) MEM (CONS PTR SEEN))) -1 (- (LEN (CONS PTR SEEN))))))) (EQUAL (DEREF-CNT PTR MEM SEEN) (IF (EQUAL (PATH PTR MEM SEEN) 'INFINITE) 'INFINITE (+ (LEN (PATH PTR MEM SEEN)) -1 (- (LEN SEEN)))))). This simplifies, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSP, DEREF-CNT, INC, LEN, PATH and SYNP, the :executable-counterparts of BINARY-+, EQUAL, INC and UNARY--, primitive type reasoning, the :forward-chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules CDR-CONS, COMMUTATIVITY-2-OF-+, COMMUTATIVITY-OF-+, DISTRIBUTIVITY- OF-MINUS-OVER-+ and FOLD-CONSTS-IN-+ and the :type-prescription rules DEREF-CNT and LEN, to Subgoal *1/2'' (IMPLIES (AND (NATP PTR) (< PTR (LEN MEM)) (NOT (MEM PTR SEEN)) (NOT (EQUAL (PATH (NTH PTR MEM) MEM (CONS PTR SEEN)) 'INFINITE)) (EQUAL (DEREF-CNT (NTH PTR MEM) MEM (CONS PTR SEEN)) (+ -2 (- (LEN SEEN)) (LEN (PATH (NTH PTR MEM) MEM (CONS PTR SEEN)))))) (EQUAL (+ 1 (DEREF-CNT (NTH PTR MEM) MEM (CONS PTR SEEN))) (+ -1 (- (LEN SEEN)) (LEN (PATH (NTH PTR MEM) MEM (CONS PTR SEEN)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rules DEREF-CNT and LEN. Subgoal *1/1 (IMPLIES (AND (ADDRESSP PTR MEM) (MEM PTR SEEN)) (EQUAL (DEREF-CNT PTR MEM SEEN) (IF (EQUAL (PATH PTR MEM SEEN) 'INFINITE) 'INFINITE (+ (LEN (PATH PTR MEM SEEN)) (- (+ 1 (LEN SEEN))))))). By the simple :definition ADDRESSP, the :executable-counterpart of UNARY-- and the simple :rewrite rule DISTRIBUTIVITY-OF-MINUS-OVER-+ we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NATP PTR) (< PTR (LEN MEM)) (MEM PTR SEEN)) (EQUAL (DEREF-CNT PTR MEM SEEN) (IF (EQUAL (PATH PTR MEM SEEN) 'INFINITE) 'INFINITE (+ (LEN (PATH PTR MEM SEEN)) -1 (- (LEN SEEN)))))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSP, DEREF-CNT and PATH, the :executable- counterpart of EQUAL, the :forward-chaining rules NATP-FC-1 and NATP- FC-2, the :rewrite rules PROBLEM-48 and PROBLEM-49A and the :type- prescription rule MEM. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-114A ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION ADDRESSP) (:DEFINITION DEREF-CNT) (:DEFINITION INC) (:DEFINITION LEN) (:DEFINITION NOT) (:DEFINITION PATH) (:DEFINITION SYNP) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART INC) (:EXECUTABLE-COUNTERPART UNARY--) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:INDUCTION PATH) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE DISTRIBUTIVITY-OF-MINUS-OVER-+) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE INVERSE-OF-+) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION DEREF-CNT) (:TYPE-PRESCRIPTION LEN) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.12 seconds (prove: 0.05, print: 0.06, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-114A ACL2 >>(DEFUN ADDRESSESP (X MEM) (IF (ENDP X) T (AND (ADDRESSP (CAR X) MEM) (ADDRESSESP (CDR X) MEM)))) The admission of ADDRESSESP is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of ADDRESSESP is described by the theorem (OR (EQUAL (ADDRESSESP X MEM) T) (EQUAL (ADDRESSESP X MEM) NIL)). Summary Form: ( DEFUN ADDRESSESP ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) ADDRESSESP ACL2 >>(THEOREM PROBLEM-114B (IMPLIES (AND (ADDRESSESP X MEM) (NOT (NATP E))) (NOT (MEM E X))) :HINTS (("Goal" :INDUCT (MEM E X)))) ACL2 Warning [Free] in ( DEFTHM PROBLEM-114B ...): The :REWRITE rule generated from PROBLEM-114B contains the free variable MEM. This variable will be chosen by searching for an instance of (ADDRESSESP X MEM) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :REWRITE rule. See :DOC free-variables. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MEM E X). This suggestion was produced using the :induction rule MEM. If we let (:P E MEM X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P E MEM X)) (IMPLIES (AND (CONSP X) (NOT (EQUAL E (CAR X))) (:P E MEM (CDR X))) (:P E MEM X)) (IMPLIES (AND (CONSP X) (EQUAL E (CAR X))) (:P E MEM X))). This induction is justified by the same argument used to admit MEM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (AND (ADDRESSESP X MEM) (NOT (NATP E))) (NOT (MEM E X)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (ADDRESSESP X MEM) (NOT (NATP E))) (NOT (MEM E X))). But simplification reduces this to T, using the :definitions ADDRESSESP and MEM. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (EQUAL E (CAR X))) (IMPLIES (AND (ADDRESSESP (CDR X) MEM) (NOT (NATP E))) (NOT (MEM E (CDR X))))) (IMPLIES (AND (ADDRESSESP X MEM) (NOT (NATP E))) (NOT (MEM E X)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (EQUAL E (CAR X))) (IMPLIES (AND (ADDRESSESP (CDR X) MEM) (NOT (NATP E))) (NOT (MEM E (CDR X)))) (ADDRESSESP X MEM) (NOT (NATP E))) (NOT (MEM E X))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSESP, ADDRESSP, MEM and NOT, the :executable-counterpart of NOT, primitive type reasoning and the :type- prescription rule ADDRESSESP. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL E (CAR X))) (IMPLIES (AND (ADDRESSESP X MEM) (NOT (NATP E))) (NOT (MEM E X)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (EQUAL E (CAR X)) (ADDRESSESP X MEM) (NOT (NATP E))) (NOT (MEM E X))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR and the :definitions ADDRESSESP and ADDRESSP. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-114B ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION ADDRESSESP) (:DEFINITION ADDRESSP) (:DEFINITION MEM) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MEM) (:TYPE-PRESCRIPTION ADDRESSESP)) Warnings: Free Time: 0.05 seconds (prove: 0.01, print: 0.04, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-114B ACL2 >>(THEOREM PROBLEM-114C (IMPLIES (AND (ADDRESSESP X MEM) (>= E (LEN MEM))) (NOT (MEM E X))) :HINTS (("Goal" :INDUCT (MEM E X)))) ACL2 Warning [Free] in ( DEFTHM PROBLEM-114C ...): The :REWRITE rule generated from PROBLEM-114C contains the free variable MEM. This variable will be chosen by searching for an instance of (ADDRESSESP X MEM) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :REWRITE rule. See :DOC free-variables. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (MEM E X). This suggestion was produced using the :induction rule MEM. If we let (:P E MEM X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P E MEM X)) (IMPLIES (AND (CONSP X) (NOT (EQUAL E (CAR X))) (:P E MEM (CDR X))) (:P E MEM X)) (IMPLIES (AND (CONSP X) (EQUAL E (CAR X))) (:P E MEM X))). This induction is justified by the same argument used to admit MEM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (AND (ADDRESSESP X MEM) (<= (LEN MEM) E)) (NOT (MEM E X)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (ADDRESSESP X MEM) (<= (LEN MEM) E)) (NOT (MEM E X))). But simplification reduces this to T, using the :definitions ADDRESSESP and MEM. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (EQUAL E (CAR X))) (IMPLIES (AND (ADDRESSESP (CDR X) MEM) (<= (LEN MEM) E)) (NOT (MEM E (CDR X))))) (IMPLIES (AND (ADDRESSESP X MEM) (<= (LEN MEM) E)) (NOT (MEM E X)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (EQUAL E (CAR X))) (IMPLIES (AND (ADDRESSESP (CDR X) MEM) (<= (LEN MEM) E)) (NOT (MEM E (CDR X)))) (ADDRESSESP X MEM) (<= (LEN MEM) E)) (NOT (MEM E X))). But simplification reduces this to T, using the :definitions ADDRESSESP, ADDRESSP, MEM and NOT, the :executable-counterpart of NOT, primitive type reasoning and the :type-prescription rule ADDRESSESP. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL E (CAR X))) (IMPLIES (AND (ADDRESSESP X MEM) (<= (LEN MEM) E)) (NOT (MEM E X)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (EQUAL E (CAR X)) (ADDRESSESP X MEM) (<= (LEN MEM) E)) (NOT (MEM E X))). But simplification reduces this to T, using the :definitions ADDRESSESP and ADDRESSP. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-114C ...) Rules: ((:DEFINITION ADDRESSESP) (:DEFINITION ADDRESSP) (:DEFINITION MEM) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION MEM) (:TYPE-PRESCRIPTION ADDRESSESP)) Warnings: Free Time: 0.10 seconds (prove: 0.04, print: 0.04, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-114C ACL2 >>(THEOREM PROBLEM-114D (IMPLIES (AND (NO-DUPS SEEN) (ADDRESSESP SEEN MEM)) (NO-DUPS (PATH PTR MEM SEEN))) :HINTS (("Goal" :INDUCT (PATH PTR MEM SEEN) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49A PROBLEM-114B PROBLEM-114C)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PATH PTR MEM SEEN). This suggestion was produced using the :induction rule PATH. If we let (:P MEM PTR SEEN) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (ADDRESSP PTR MEM)) (:P MEM PTR SEEN)) (IMPLIES (AND (ADDRESSP PTR MEM) (NOT (MEM PTR SEEN)) (:P MEM (NTH PTR MEM) (CONS PTR SEEN))) (:P MEM PTR SEEN)) (IMPLIES (AND (ADDRESSP PTR MEM) (MEM PTR SEEN)) (:P MEM PTR SEEN))). This induction is justified by the same argument used to admit PATH, namely, the measure (M2 (IF (MEM PTR MEM) '1 '2) (LEN-DIFF MEM SEEN)) is decreasing according to the relation O< (which is known to be well- founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautologica\ l subgoals. Subgoal *1/3 (IMPLIES (NOT (ADDRESSP PTR MEM)) (IMPLIES (AND (NO-DUPS SEEN) (ADDRESSESP SEEN MEM)) (NO-DUPS (PATH PTR MEM SEEN)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (ADDRESSP PTR MEM)) (NO-DUPS SEEN) (ADDRESSESP SEEN MEM)) (NO-DUPS (PATH PTR MEM SEEN))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSP, NO-DUPS and PATH, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-114B and PROBLEM-114C and the :type-prescription rules ADDRESSESP and NO- DUPS. Subgoal *1/2 (IMPLIES (AND (ADDRESSP PTR MEM) (NOT (MEM PTR SEEN)) (IMPLIES (AND (NO-DUPS (CONS PTR SEEN)) (ADDRESSESP (CONS PTR SEEN) MEM)) (NO-DUPS (PATH (NTH PTR MEM) MEM (CONS PTR SEEN))))) (IMPLIES (AND (NO-DUPS SEEN) (ADDRESSESP SEEN MEM)) (NO-DUPS (PATH PTR MEM SEEN)))). By the simple :definition ADDRESSP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NATP PTR) (< PTR (LEN MEM)) (NOT (MEM PTR SEEN)) (IMPLIES (AND (NO-DUPS (CONS PTR SEEN)) (ADDRESSESP (CONS PTR SEEN) MEM)) (NO-DUPS (PATH (NTH PTR MEM) MEM (CONS PTR SEEN)))) (NO-DUPS SEEN) (ADDRESSESP SEEN MEM)) (NO-DUPS (PATH PTR MEM SEEN))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSESP, ADDRESSP, NO-DUPS and PATH, primitive type reasoning, the :forward-chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules CAR-CONS and CDR-CONS and the :type- prescription rules ADDRESSESP and NO-DUPS. Subgoal *1/1 (IMPLIES (AND (ADDRESSP PTR MEM) (MEM PTR SEEN)) (IMPLIES (AND (NO-DUPS SEEN) (ADDRESSESP SEEN MEM)) (NO-DUPS (PATH PTR MEM SEEN)))). By the simple :definition ADDRESSP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NATP PTR) (< PTR (LEN MEM)) (MEM PTR SEEN) (NO-DUPS SEEN) (ADDRESSESP SEEN MEM)) (NO-DUPS (PATH PTR MEM SEEN))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSP and PATH, the :executable- counterpart of NO-DUPS, the :forward-chaining rules NATP-FC-1 and NATP- FC-2, the :rewrite rules PROBLEM-48 and PROBLEM-49A and the :type- prescription rule MEM. That completes the proof of *1. Q.E.D. The storage of PROBLEM-114D depends upon the :type-prescription rule NO-DUPS. Summary Form: ( DEFTHM PROBLEM-114D ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION ADDRESSESP) (:DEFINITION ADDRESSP) (:DEFINITION NO-DUPS) (:DEFINITION NOT) (:DEFINITION PATH) (:EXECUTABLE-COUNTERPART NO-DUPS) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:INDUCTION PATH) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-114B) (:REWRITE PROBLEM-114C) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION ADDRESSESP) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION NO-DUPS)) Warnings: None Time: 0.09 seconds (prove: 0.03, print: 0.04, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-114D ACL2 >>(THEOREM PROBLEM-114E (IMPLIES (SUB A B) (SUB A (CONS E B))) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-48A PROBLEM-48 PROBLEM-49)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] But simplification reduces this to T, using the :rewrite rules CDR- CONS, PROBLEM-48, PROBLEM-48A and PROBLEM-49 and the :type-prescription rule SUB. Q.E.D. The storage of PROBLEM-114E depends upon the :type-prescription rule SUB. Summary Form: ( DEFTHM PROBLEM-114E ...) Rules: ((:REWRITE CDR-CONS) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-48A) (:REWRITE PROBLEM-49) (:TYPE-PRESCRIPTION SUB)) Warnings: None Time: 0.04 seconds (prove: 0.02, print: 0.00, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-114E ACL2 >>(THEOREM PROBLEM-114F (SUB A (APP A B)) :HINTS (("Goal" :INDUCT (SUB A (APP A B)) :IN-THEORY (ENABLE PROBLEM-48A PROBLEM-114E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. Two induction schemes are suggested by the induction hint. These merge into one derived induction scheme. We will induct according to a scheme suggested by (SUB A (APP A B)), but modified to accommodate (APP A B). These suggestions were produced using the :induction rules APP and SUB. If we let (:P A B) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B)) (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) (APP A B)))) (:P A B)) (IMPLIES (AND (CONSP A) (MEM (CAR A) (APP A B)) (:P (CDR A) B)) (:P A B))). This induction is justified by the same argument used to admit SUB, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP A)) (SUB A (APP A B))). But simplification reduces this to T, using the :definitions APP and SUB and the :rewrite rule PROBLEM-48A. Subgoal *1/2 (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) (APP A B)))) (SUB A (APP A B))). But simplification reduces this to T, using the :definitions APP and MEM, primitive type reasoning and the :rewrite rule CAR-CONS. Subgoal *1/1 (IMPLIES (AND (CONSP A) (MEM (CAR A) (APP A B)) (SUB (CDR A) (APP (CDR A) B))) (SUB A (APP A B))). But simplification reduces this to T, using the :definitions APP, MEM and SUB, primitive type reasoning, the :rewrite rules CAR-CONS and PROBLEM-114E and the :type-prescription rule SUB. That completes the proof of *1. Q.E.D. The storage of PROBLEM-114F depends upon the :type-prescription rule SUB. Summary Form: ( DEFTHM PROBLEM-114F ...) Rules: ((:DEFINITION APP) (:DEFINITION MEM) (:DEFINITION SUB) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP) (:INDUCTION SUB) (:REWRITE CAR-CONS) (:REWRITE PROBLEM-114E) (:REWRITE PROBLEM-48A) (:TYPE-PRESCRIPTION SUB)) Warnings: None Time: 0.04 seconds (prove: 0.01, print: 0.02, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-114F ACL2 >>(THEOREM PROBLEM-114G (SUB B (APP A B)) :HINTS (("Goal" :INDUCT (APP A B) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-114E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP A B). This suggestion was produced using the :induction rule APP. If we let (:P A B) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B)) (IMPLIES (AND (CONSP A) (:P (CDR A) B)) (:P A B))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (SUB B (APP A B))). But simplification reduces this to T, using the :definition APP and the :rewrite rule PROBLEM-48. Subgoal *1/1 (IMPLIES (AND (CONSP A) (SUB B (APP (CDR A) B))) (SUB B (APP A B))). But simplification reduces this to T, using the :definition APP, the :rewrite rule PROBLEM-114E and the :type-prescription rule SUB. That completes the proof of *1. Q.E.D. The storage of PROBLEM-114G depends upon the :type-prescription rule SUB. Summary Form: ( DEFTHM PROBLEM-114G ...) Rules: ((:DEFINITION APP) (:INDUCTION APP) (:REWRITE PROBLEM-114E) (:REWRITE PROBLEM-48) (:TYPE-PRESCRIPTION SUB)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.01, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-114G ACL2 >>(THEOREM PROBLEM-114H (SUB (PATH PTR MEM SEEN) (CONS PTR (APP SEEN MEM))) :HINTS (("Goal" :INDUCT (PATH PTR MEM SEEN) :IN-THEORY (ENABLE PROBLEM-46 PROBLEM-48 PROBLEM-49 PROBLEM-49A PROBLEM-113A PROBLEM-114E PROBLEM-114F)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PATH PTR MEM SEEN). This suggestion was produced using the :induction rule PATH. If we let (:P MEM PTR SEEN) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (ADDRESSP PTR MEM)) (:P MEM PTR SEEN)) (IMPLIES (AND (ADDRESSP PTR MEM) (NOT (MEM PTR SEEN)) (:P MEM (NTH PTR MEM) (CONS PTR SEEN))) (:P MEM PTR SEEN)) (IMPLIES (AND (ADDRESSP PTR MEM) (MEM PTR SEEN)) (:P MEM PTR SEEN))). This induction is justified by the same argument used to admit PATH, namely, the measure (M2 (IF (MEM PTR MEM) '1 '2) (LEN-DIFF MEM SEEN)) is decreasing according to the relation O< (which is known to be well- founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautologica\ l subgoals. Subgoal *1/3 (IMPLIES (NOT (ADDRESSP PTR MEM)) (SUB (PATH PTR MEM SEEN) (CONS PTR (APP SEEN MEM)))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSP, MEM, PATH and SUB, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-114E and PROBLEM-114F. Subgoal *1/2 (IMPLIES (AND (ADDRESSP PTR MEM) (NOT (MEM PTR SEEN)) (SUB (PATH (NTH PTR MEM) MEM (CONS PTR SEEN)) (CONS (NTH PTR MEM) (APP (CONS PTR SEEN) MEM)))) (SUB (PATH PTR MEM SEEN) (CONS PTR (APP SEEN MEM)))). By the simple :definition ADDRESSP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NATP PTR) (< PTR (LEN MEM)) (NOT (MEM PTR SEEN)) (SUB (PATH (NTH PTR MEM) MEM (CONS PTR SEEN)) (CONS (NTH PTR MEM) (APP (CONS PTR SEEN) MEM)))) (SUB (PATH PTR MEM SEEN) (CONS PTR (APP SEEN MEM)))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSP, APP, MEM, PATH and SUB, primitive type reasoning, the :forward-chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-113A, PROBLEM-46, PROBLEM- 48 and PROBLEM-49 and the :type-prescription rule SUB. Subgoal *1/1 (IMPLIES (AND (ADDRESSP PTR MEM) (MEM PTR SEEN)) (SUB (PATH PTR MEM SEEN) (CONS PTR (APP SEEN MEM)))). By the simple :definition ADDRESSP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NATP PTR) (< PTR (LEN MEM)) (MEM PTR SEEN)) (SUB (PATH PTR MEM SEEN) (CONS PTR (APP SEEN MEM)))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSP, PATH and SUB, the :executable- counterpart of CONSP, the :forward-chaining rules NATP-FC-1 and NATP- FC-2, the :rewrite rules PROBLEM-114E, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM. That completes the proof of *1. Q.E.D. The storage of PROBLEM-114H depends upon the :type-prescription rule SUB. Summary Form: ( DEFTHM PROBLEM-114H ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION ADDRESSP) (:DEFINITION APP) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION PATH) (:DEFINITION SUB) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:INDUCTION PATH) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-113A) (:REWRITE PROBLEM-114E) (:REWRITE PROBLEM-114F) (:REWRITE PROBLEM-46) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION SUB)) Warnings: None Time: 0.11 seconds (prove: 0.04, print: 0.04, other: 0.03) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-114H ACL2 >>(THEOREM PROBLEM-114I (IMPLIES (AND (NOT (MEM E A)) (SUB A B)) (SUB A (RM E B))) :HINTS (("Goal" :INDUCT (SUB A B) :IN-THEORY (ENABLE PROBLEM-48A PROBLEM-55A PROBLEM-55D)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (SUB A B). This suggestion was produced using the :induction rule SUB. If we let (:P A B E) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B E)) (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B))) (:P A B E)) (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (:P (CDR A) B E)) (:P A B E))). This induction is justified by the same argument used to admit SUB, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP A)) (IMPLIES (AND (NOT (MEM E A)) (SUB A B)) (SUB A (RM E B)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP A)) (NOT (MEM E A)) (SUB A B)) (SUB A (RM E B))). But simplification reduces this to T, using the :definitions MEM and SUB and the :rewrite rule PROBLEM-48A. Subgoal *1/2 (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B))) (IMPLIES (AND (NOT (MEM E A)) (SUB A B)) (SUB A (RM E B)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP A) (NOT (MEM (CAR A) B)) (NOT (MEM E A)) (SUB A B)) (SUB A (RM E B))). But simplification reduces this to T, using the :definition SUB. Subgoal *1/1 (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (IMPLIES (AND (NOT (MEM E (CDR A))) (SUB (CDR A) B)) (SUB (CDR A) (RM E B)))) (IMPLIES (AND (NOT (MEM E A)) (SUB A B)) (SUB A (RM E B)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP A) (MEM (CAR A) B) (IMPLIES (AND (NOT (MEM E (CDR A))) (SUB (CDR A) B)) (SUB (CDR A) (RM E B))) (NOT (MEM E A)) (SUB A B)) (SUB A (RM E B))). But simplification reduces this to T, using the :definitions MEM, NOT and SUB, primitive type reasoning, the :rewrite rule PROBLEM-55D and the :type-prescription rules MEM and SUB. That completes the proof of *1. Q.E.D. The storage of PROBLEM-114I depends upon the :type-prescription rule SUB. Summary Form: ( DEFTHM PROBLEM-114I ...) Rules: ((:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION SUB) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION SUB) (:REWRITE PROBLEM-48A) (:REWRITE PROBLEM-55D) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION SUB)) Warnings: None Time: 0.10 seconds (prove: 0.02, print: 0.07, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-114I ACL2 >>(THEOREM PROBLEM-114J (IMPLIES (AND (NO-DUPS X) (SUB X Y)) (<= (LEN X) (LEN Y))) :HINTS (("Goal" :INDUCT (PERM X Y) :IN-THEORY (ENABLE PROBLEM-48A PROBLEM-48 PROBLEM-49A PROBLEM-112F PROBLEM-114I))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (PERM X Y). This suggestion was produced using the :induction rule PERM. If we let (:P X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X Y)) (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (:P X Y)) (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (:P (CDR X) (RM (CAR X) Y))) (:P X Y))). This induction is justified by the same argument used to admit PERM, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variable Y is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (AND (NO-DUPS X) (SUB X Y)) (<= (LEN X) (LEN Y)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (NO-DUPS X) (SUB X Y)) (<= (LEN X) (LEN Y))). This simplifies, using the :definitions LEN, NO-DUPS and SUB and the :rewrite rule PROBLEM-48A, to Subgoal *1/3'' (IMPLIES (NOT (CONSP X)) (<= 0 (LEN Y))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y))) (IMPLIES (AND (NO-DUPS X) (SUB X Y)) (<= (LEN X) (LEN Y)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) Y)) (NO-DUPS X) (SUB X Y)) (<= (LEN X) (LEN Y))). But simplification reduces this to T, using the :definition SUB. Subgoal *1/1 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (AND (NO-DUPS (CDR X)) (SUB (CDR X) (RM (CAR X) Y))) (<= (LEN (CDR X)) (LEN (RM (CAR X) Y))))) (IMPLIES (AND (NO-DUPS X) (SUB X Y)) (<= (LEN X) (LEN Y)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (IMPLIES (AND (NO-DUPS (CDR X)) (SUB (CDR X) (RM (CAR X) Y))) (<= (LEN (CDR X)) (LEN (RM (CAR X) Y)))) (NO-DUPS X) (SUB X Y)) (<= (LEN X) (LEN Y))). This simplifies, using the :definitions LEN, NO-DUPS, NOT and SUB, the :rewrite rules PROBLEM-112F, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (<= (LEN (CDR X)) (+ -1 (LEN Y))) (NOT (MEM (CAR X) (CDR X))) (NO-DUPS (CDR X)) (SUB (CDR X) Y)) (<= (+ 1 (LEN (CDR X))) (LEN Y))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (MEM (CAR X) Y) (NOT (SUB (CDR X) (RM (CAR X) Y))) (NOT (MEM (CAR X) (CDR X))) (NO-DUPS (CDR X)) (SUB (CDR X) Y)) (<= (+ 1 (LEN (CDR X))) (LEN Y))). But simplification reduces this to T, using the :rewrite rule PROBLEM- 114I and the :type-prescription rule SUB. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-114J ...) Rules: ((:DEFINITION LEN) (:DEFINITION NO-DUPS) (:DEFINITION NOT) (:DEFINITION SUB) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION PERM) (:REWRITE PROBLEM-112F) (:REWRITE PROBLEM-114I) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-48A) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION LEN) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION SUB)) Warnings: None Time: 0.16 seconds (prove: 0.06, print: 0.09, other: 0.01) PROBLEM-114J ACL2 >>(THEOREM PROBLEM-114K (EQUAL (LEN (APP A B)) (+ (LEN A) (LEN B))) :HINTS (("Goal" :INDUCT (APP A B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (APP A B). This suggestion was produced using the :induction rule APP. If we let (:P A B) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B)) (IMPLIES (AND (CONSP A) (:P (CDR A) B)) (:P A B))). This induction is justified by the same argument used to admit APP, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (EQUAL (LEN (APP A B)) (+ (LEN A) (LEN B)))). But simplification reduces this to T, using the :definitions APP, FIX and LEN, primitive type reasoning, the :rewrite rule UNICITY-OF-0 and the :type-prescription rule LEN. Subgoal *1/1 (IMPLIES (AND (CONSP A) (EQUAL (LEN (APP (CDR A) B)) (+ (LEN (CDR A)) (LEN B)))) (EQUAL (LEN (APP A B)) (+ (LEN A) (LEN B)))). But simplification reduces this to T, using the :definitions APP and LEN, primitive type reasoning and the :rewrite rules CDR-CONS, COMMUTATIVITY- 2-OF-+ and COMMUTATIVITY-OF-+. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-114K ...) Rules: ((:DEFINITION APP) (:DEFINITION FIX) (:DEFINITION LEN) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION APP) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION LEN)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.02, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-114K ACL2 >>(THEOREM PROBLEM-114L (IMPLIES (AND (ADDRESSESP SEEN MEM) (NO-DUPS SEEN)) (<= (LEN (PATH PTR MEM SEEN)) (+ 1 (LEN SEEN) (LEN MEM)))) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-114D PROBLEM-114H PROBLEM-114K) :USE (:INSTANCE PROBLEM-114J (X (PATH PTR MEM SEEN)) (Y (CONS PTR (APP SEEN MEM)))))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] We now augment the goal above by adding the hypothesis indicated by the :USE hint. The hypothesis can be derived from PROBLEM-114J via instantiation. The augmented goal is shown below. Goal' (IMPLIES (IMPLIES (AND (NO-DUPS (PATH PTR MEM SEEN)) (SUB (PATH PTR MEM SEEN) (CONS PTR (APP SEEN MEM)))) (<= (LEN (PATH PTR MEM SEEN)) (LEN (CONS PTR (APP SEEN MEM))))) (IMPLIES (AND (ADDRESSESP SEEN MEM) (NO-DUPS SEEN)) (<= (LEN (PATH PTR MEM SEEN)) (+ 1 (LEN SEEN) (LEN MEM))))). By the simple :rewrite rule PROBLEM-114H we reduce the conjecture to Goal'' (IMPLIES (AND (IMPLIES (NO-DUPS (PATH PTR MEM SEEN)) (<= (LEN (PATH PTR MEM SEEN)) (LEN (CONS PTR (APP SEEN MEM))))) (ADDRESSESP SEEN MEM) (NO-DUPS SEEN)) (<= (LEN (PATH PTR MEM SEEN)) (+ 1 (LEN SEEN) (LEN MEM)))). But simplification reduces this to T, using the :definitions LEN and NOT, primitive type reasoning, the :rewrite rules CDR-CONS, COMMUTATIVITY- OF-+, PROBLEM-114D and PROBLEM-114K and the :type-prescription rules ADDRESSESP, LEN and NO-DUPS. Q.E.D. Summary Form: ( DEFTHM PROBLEM-114L ...) Rules: ((:DEFINITION LEN) (:DEFINITION NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE PROBLEM-114D) (:REWRITE PROBLEM-114H) (:REWRITE PROBLEM-114K) (:TYPE-PRESCRIPTION ADDRESSESP) (:TYPE-PRESCRIPTION LEN) (:TYPE-PRESCRIPTION NO-DUPS)) Warnings: None Time: 0.06 seconds (prove: 0.02, print: 0.03, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-114L ACL2 >>(THEOREM PROBLEM-114 (<= (DEREF-CNT PTR MEM NIL) (+ 1 (LEN MEM))) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-114A PROBLEM-114L)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] This simplifies, using the :executable-counterparts of BINARY-+, LEN and UNARY-- and the :rewrite rules COMMUTATIVITY-OF-+ and PROBLEM-114A, to the following two conjectures. Subgoal 2 (IMPLIES (EQUAL (PATH PTR MEM NIL) 'INFINITE) (<= 'INFINITE (+ 1 (LEN MEM)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule LEN. Subgoal 1 (IMPLIES (NOT (EQUAL (PATH PTR MEM NIL) 'INFINITE)) (<= (+ -1 (LEN (PATH PTR MEM NIL))) (+ 1 (LEN MEM)))). But simplification reduces this to T, using the :definitions ADDRESSESP and FIX, the :executable-counterparts of CONSP, LEN and NO-DUPS, linear arithmetic, primitive type reasoning, the :linear rule PROBLEM-114L, the :rewrite rule UNICITY-OF-0 and the :type-prescription rule LEN. Q.E.D. Summary Form: ( DEFTHM PROBLEM-114 ...) Rules: ((:DEFINITION ADDRESSESP) (:DEFINITION FIX) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART LEN) (:EXECUTABLE-COUNTERPART NO-DUPS) (:EXECUTABLE-COUNTERPART UNARY--) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:LINEAR PROBLEM-114L) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE PROBLEM-114A) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION LEN)) Warnings: None Time: 0.04 seconds (prove: 0.03, print: 0.00, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-114 ACL2 >>(DEFUN FIB (I) (IF (ZP I) 0 (IF (EQUAL I 1) 1 (+ (FIB (- I 1)) (FIB (- I 2)))))) For the admission of FIB we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT I). The non-trivial part of the measure conjecture is Goal (IMPLIES (AND (NOT (ZP I)) (NOT (EQUAL I 1))) (O< (ACL2-COUNT (+ -2 I)) (ACL2-COUNT I))). This simplifies, using the :compound-recognizer rules O-FINP-CR, POSP- CR and ZP-COMPOUND-RECOGNIZER, the :definitions ACL2-COUNT, INTEGER- ABS and O<, the :executable-counterpart of UNARY--, primitive type reasoning, the :forward-chaining rule POSP-<-1 and the :rewrite rules <-+-NEGATIVE-0-1 and DISTRIBUTIVITY-OF-MINUS-OVER-+, to the following two conjectures. Subgoal 2 (IMPLIES (AND (NOT (ZP I)) (NOT (EQUAL I 1)) (< I 2)) (< (+ 2 (- I)) I)). But simplification reduces this to T, using the :compound-recognizer rules POSP-CR and ZP-COMPOUND-RECOGNIZER, linear arithmetic, primitive type reasoning and the :forward-chaining rule POSP-<-1. Subgoal 1 (IMPLIES (AND (NOT (ZP I)) (NOT (EQUAL I 1)) (<= 2 I)) (< (+ -2 I) I)). But simplification reduces this to T, using linear arithmetic. Q.E.D. That completes the proof of the measure theorem for FIB. Thus, we admit this function under the principle of definition. We observe that the type of FIB is described by the theorem (AND (INTEGERP (FIB I)) (<= 0 (FIB I))). We used primitive type reasoning. Summary Form: ( DEFUN FIB ...) Rules: ((:COMPOUND-RECOGNIZER O-FINP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION ACL2-COUNT) (:DEFINITION INTEGER-ABS) (:DEFINITION O<) (:EXECUTABLE-COUNTERPART UNARY--) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING POSP-<-1) (:REWRITE <-+-NEGATIVE-0-1) (:REWRITE DISTRIBUTIVITY-OF-MINUS-OVER-+)) Warnings: None Time: 0.06 seconds (prove: 0.01, print: 0.04, other: 0.01) FIB ACL2 >>(DEFUN FFIB (I J K) (IF (ZP I) J (IF (EQUAL I 1) K (FFIB (- I 1) K (+ J K))))) The admission of FFIB is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT I). We observe that the type of FFIB is described by the theorem (OR (ACL2-NUMBERP (FFIB I J K)) (EQUAL (FFIB I J K) J) (EQUAL (FFIB I J K) K)). We used primitive type reasoning. Summary Form: ( DEFUN FFIB ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) FFIB ACL2 >>(THEOREM PROBLEM-115A (EQUAL (FFIB 2 I J) (+ I J)) :HINTS (("Goal" :EXPAND (FFIB 2 I J)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] But simplification reduces this to T, using the :definition FFIB, the :executable-counterparts of BINARY-+, EQUAL and ZP and primitive type reasoning. Q.E.D. Summary Form: ( DEFTHM PROBLEM-115A ...) Rules: ((:DEFINITION FFIB) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART ZP) (:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.01, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-115A ACL2 >>(THEOREM PROBLEM-115B (IMPLIES (AND (NATP N) (< 0 N) (NATP I) (NATP J)) (EQUAL (FFIB N I J) (+ (* (FIB (- N 1)) I) (* (FIB N) J)))) :HINTS (("Goal" :INDUCT (FFIB N I J) :IN-THEORY (ENABLE PROBLEM-115A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (FFIB N I J). This suggestion was produced using the :induction rule FFIB. If we let (:P I J N) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ZP N)) (NOT (EQUAL N 1)) (:P J (+ I J) (+ -1 N))) (:P I J N)) (IMPLIES (AND (NOT (ZP N)) (EQUAL N 1)) (:P I J N)) (IMPLIES (ZP N) (:P I J N))). This induction is justified by the same argument used to admit FFIB, namely, the measure (ACL2-COUNT N) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variables I and J are being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ZP N)) (NOT (EQUAL N 1)) (IMPLIES (AND (NATP (+ -1 N)) (< 0 (+ -1 N)) (NATP J) (NATP (+ I J))) (EQUAL (FFIB (+ -1 N) J (+ I J)) (+ (* (FIB (+ -1 -1 N)) J) (* (FIB (+ -1 N)) (+ I J)))))) (IMPLIES (AND (NATP N) (< 0 N) (NATP I) (NATP J)) (EQUAL (FFIB N I J) (+ (* (FIB (+ -1 N)) I) (* (FIB N) J))))). By the simple :rewrite rules <-0-+-NEGATIVE-1 and NATP-POSP--1 we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (ZP N)) (NOT (EQUAL N 1)) (IMPLIES (AND (POSP N) (< 1 N) (NATP J) (NATP (+ I J))) (EQUAL (FFIB (+ -1 N) J (+ I J)) (+ (* (FIB (+ -1 -1 N)) J) (* (FIB (+ -1 N)) (+ I J))))) (NATP N) (< 0 N) (NATP I) (NATP J)) (EQUAL (FFIB N I J) (+ (* (FIB (+ -1 N)) I) (* (FIB N) J)))). This simplifies, using the :compound-recognizer rules NATP-CR, POSP- CR and ZP-COMPOUND-RECOGNIZER, the :definitions FFIB, FIB, FIX and SYNP, the :executable-counterparts of BINARY-+ and NOT, primitive type reasoning, the :forward-chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules <-0-+-NEGATIVE-1, COMMUTATIVITY-2-OF-+, COMMUTATIVITY- OF-*, COMMUTATIVITY-OF-+, DISTRIBUTIVITY, FOLD-CONSTS-IN-+, TIMES-ZERO, UNICITY-OF-0 and ZP-OPEN and the :type-prescription rule FIB, to the following two conjectures. Subgoal *1/3.2 (IMPLIES (AND (NOT (EQUAL N 1)) (<= N 1) (NATP N) (< 0 N) (NATP I) (NATP J)) (EQUAL (FFIB (+ -1 N) J (+ I J)) (* J (FIB N)))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and POSP-CR, primitive type reasoning and the :forward- chaining rule POSP-<-1. Subgoal *1/3.1 (IMPLIES (AND (NOT (EQUAL N 1)) (EQUAL (FFIB (+ -1 N) J (+ I J)) (+ (* I (FIB (+ -1 N))) (* J (FIB (+ -1 N))) (* J (FIB (+ -2 N))))) (NATP N) (< 0 N) (NATP I) (NATP J)) (EQUAL (FFIB (+ -1 N) J (+ I J)) (+ (* J (FIB N)) (* I (FIB (+ -1 N)))))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR, POSP-CR and ZP-COMPOUND-RECOGNIZER, the :definition FIB, primitive type reasoning, the :forward-chaining rules NATP-FC- 2 and POSP-<-1 and the :rewrite rules COMMUTATIVITY-OF-+ and DISTRIBUTIVITY. Subgoal *1/2 (IMPLIES (AND (NOT (ZP N)) (EQUAL N 1)) (IMPLIES (AND (NATP N) (< 0 N) (NATP I) (NATP J)) (EQUAL (FFIB N I J) (+ (* (FIB (+ -1 N)) I) (* (FIB N) J))))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (ZP N)) (EQUAL N 1) (NATP N) (< 0 N) (NATP I) (NATP J)) (EQUAL (FFIB N I J) (+ (* (FIB (+ -1 N)) I) (* (FIB N) J)))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions FFIB and FIX, the :executable-counterparts of <, BINARY-+, EQUAL, FIB, NATP, NOT and ZP, primitive type reasoning, the :forward-chaining rules NATP-FC-1 and NATP-FC-2 and the :rewrite rules TIMES-ZERO, UNICITY-OF-0 and UNICITY-OF-1. Subgoal *1/1 (IMPLIES (ZP N) (IMPLIES (AND (NATP N) (< 0 N) (NATP I) (NATP J)) (EQUAL (FFIB N I J) (+ (* (FIB (+ -1 N)) I) (* (FIB N) J))))). But we reduce the conjecture to T, by the :compound-recognizer rules NATP-CR and ZP-COMPOUND-RECOGNIZER and primitive type reasoning. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-115B ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION FFIB) (:DEFINITION FIB) (:DEFINITION FIX) (:DEFINITION NOT) (:DEFINITION SYNP) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART FIB) (:EXECUTABLE-COUNTERPART NATP) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART ZP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:FORWARD-CHAINING POSP-<-1) (:INDUCTION FFIB) (:REWRITE <-0-+-NEGATIVE-1) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-*) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE DISTRIBUTIVITY) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE NATP-POSP--1) (:REWRITE TIMES-ZERO) (:REWRITE UNICITY-OF-0) (:REWRITE UNICITY-OF-1) (:REWRITE ZP-OPEN) (:TYPE-PRESCRIPTION FIB)) Warnings: None Time: 0.13 seconds (prove: 0.06, print: 0.05, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-115B ACL2 >>(THEOREM PROBLEM-115 (EQUAL (FFIB N 0 1) (FIB N)) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-115B) :CASES ((ZP N))))) [Note: A hint was supplied for our processing of the goal above. Thanks!] We now split on the term supplied in the hint to produce two new non- trivial goals. Subgoal 2 (IMPLIES (NOT (ZP N)) (EQUAL (FFIB N 0 1) (FIB N))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and ZP-COMPOUND-RECOGNIZER, the :definition FIX, primitive type reasoning, the :rewrite rules COMMUTATIVITY-OF-*, PROBLEM-115B, TIMES-ZERO, UNICITY-OF-0 and UNICITY-OF-1 and the :type-prescription rule FIB. Subgoal 1 (IMPLIES (ZP N) (EQUAL (FFIB N 0 1) (FIB N))). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, the :definitions FFIB and FIB and the :executable-counterpart of EQUAL. Q.E.D. Summary Form: ( DEFTHM PROBLEM-115 ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION FFIB) (:DEFINITION FIB) (:DEFINITION FIX) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE COMMUTATIVITY-OF-*) (:REWRITE PROBLEM-115B) (:REWRITE TIMES-ZERO) (:REWRITE UNICITY-OF-0) (:REWRITE UNICITY-OF-1) (:TYPE-PRESCRIPTION FIB)) Warnings: None Time: 0.02 seconds (prove: 0.01, print: 0.00, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-115 ACL2 >>(DEFUN ROT (X) (IF (ENDP X) NIL (APP (CDR X) (LIST (CAR X))))) Since ROT is non-recursive, its admission is trivial. We observe that the type of ROT is described by the theorem (OR (CONSP (ROT X)) (EQUAL (ROT X) NIL)). We used primitive type reasoning and the :type-prescription rule APP. Summary Form: ( DEFUN ROT ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL) (:TYPE-PRESCRIPTION APP)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) ROT ACL2 >>(DEFUN ROTN (N X) (IF (ZP N) X (ROTN (- N 1) (ROT X)))) The admission of ROTN is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT N). We observe that the type of ROTN is described by the theorem (OR (OR (CONSP (ROTN N X)) (EQUAL (ROTN N X) NIL)) (EQUAL (ROTN N X) X)). We used the :type-prescription rule ROT. Summary Form: ( DEFUN ROTN ...) Rules: ((:TYPE-PRESCRIPTION ROT)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) ROTN ACL2 >>(THEOREM PROBLEM-116-COUNTEREXAMPLE (NOT (EQUAL (ROTN (LEN '(1 2 3 . 4)) '(1 2 3 . 4)) '(1 2 3 . 4))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] But we reduce the conjecture to T, by the :executable-counterparts of EQUAL, LEN and ROTN. Q.E.D. Summary Form: ( DEFTHM PROBLEM-116-COUNTEREXAMPLE ...) Rules: ((:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART LEN) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART ROTN)) Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) PROBLEM-116-COUNTEREXAMPLE ACL2 >>(DEFUN ROT-HINT (X Y) (IF (CONSP X) (ROT-HINT (CDR X) (APP Y (CONS (CAR X) NIL))) Y)) The admission of ROT-HINT is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of ROT-HINT is described by the theorem (OR (CONSP (ROT-HINT X Y)) (EQUAL (ROT-HINT X Y) Y)). We used primitive type reasoning and the :type-prescription rule APP. Summary Form: ( DEFUN ROT-HINT ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL) (:TYPE-PRESCRIPTION APP)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) ROT-HINT ACL2 >>(THEOREM PROBLEM-116A (IMPLIES (AND (PROPER X) (PROPER Y)) (EQUAL (ROTN (LEN X) (APP X Y)) (APP Y X))) :HINTS (("Goal" :INDUCT (ROT-HINT X Y) :IN-THEORY (ENABLE PROBLEM-40 PROBLEM-41 PROBLEM-44C))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (ROT-HINT X Y). This suggestion was produced using the :induction rule ROT-HINT. If we let (:P X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X Y)) (IMPLIES (AND (CONSP X) (:P (CDR X) (APP Y (LIST (CAR X))))) (:P X Y))). This induction is justified by the same argument used to admit ROT- HINT, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). Note, however, that the unmeasured variable Y is being instantiated. When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (IMPLIES (AND (PROPER X) (PROPER Y)) (EQUAL (ROTN (LEN X) (APP X Y)) (APP Y X)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (CONSP X)) (PROPER X) (PROPER Y)) (EQUAL (ROTN (LEN X) (APP X Y)) (APP Y X))). But simplification reduces this to T, using the :definitions APP, PROPER and ROTN, the :executable-counterparts of CONSP, LEN and ZP, primitive type reasoning, the :rewrite rule PROBLEM-41 and the :type-prescription rule PROPER. Subgoal *1/1 (IMPLIES (AND (CONSP X) (IMPLIES (AND (PROPER (CDR X)) (PROPER (APP Y (LIST (CAR X))))) (EQUAL (ROTN (LEN (CDR X)) (APP (CDR X) (APP Y (LIST (CAR X))))) (APP (APP Y (LIST (CAR X))) (CDR X))))) (IMPLIES (AND (PROPER X) (PROPER Y)) (EQUAL (ROTN (LEN X) (APP X Y)) (APP Y X)))). By the simple :rewrite rules PROBLEM-40 and PROBLEM-44C we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (IMPLIES (AND (PROPER (CDR X)) (PROPER (LIST (CAR X)))) (EQUAL (ROTN (LEN (CDR X)) (APP (CDR X) (APP Y (LIST (CAR X))))) (APP Y (APP (LIST (CAR X)) (CDR X))))) (PROPER X) (PROPER Y)) (EQUAL (ROTN (LEN X) (APP X Y)) (APP Y X))). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, the :definitions APP, FIX, LEN, PROPER, ROT, ROTN and SYNP, the :executable-counterparts of BINARY-+, CONSP and PROPER, primitive type reasoning, the :rewrite rules CAR-CDR-ELIM, CAR-CONS, CDR-CONS, FOLD-CONSTS-IN-+, PROBLEM-40 and UNICITY-OF-0 and the :type-prescription rules LEN and PROPER. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-116A ...) Rules: ((:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION APP) (:DEFINITION FIX) (:DEFINITION LEN) (:DEFINITION NOT) (:DEFINITION PROPER) (:DEFINITION ROT) (:DEFINITION ROTN) (:DEFINITION SYNP) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART LEN) (:EXECUTABLE-COUNTERPART PROPER) (:EXECUTABLE-COUNTERPART ZP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION ROT-HINT) (:REWRITE CAR-CDR-ELIM) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE PROBLEM-40) (:REWRITE PROBLEM-41) (:REWRITE PROBLEM-44C) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION LEN) (:TYPE-PRESCRIPTION PROPER)) Warnings: None Time: 0.09 seconds (prove: 0.03, print: 0.05, other: 0.01) PROBLEM-116A ACL2 >>(THEOREM PROBLEM-116 (IMPLIES (PROPER X) (EQUAL (ROTN (LEN X) X) X)) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-41) :USE (:INSTANCE PROBLEM-116A (X X) (Y NIL))))) [Note: A hint was supplied for our processing of the goal above. Thanks!] We now augment the goal above by adding the hypothesis indicated by the :USE hint. The hypothesis can be derived from PROBLEM-116A via instantiation. The augmented goal is shown below. Goal' (IMPLIES (IMPLIES (AND (PROPER X) (PROPER NIL)) (EQUAL (ROTN (LEN X) (APP X NIL)) (APP NIL X))) (IMPLIES (PROPER X) (EQUAL (ROTN (LEN X) X) X))). By the :executable-counterpart of PROPER we reduce the conjecture to Goal'' (IMPLIES (AND (IMPLIES (PROPER X) (EQUAL (ROTN (LEN X) (APP X NIL)) (APP NIL X))) (PROPER X)) (EQUAL (ROTN (LEN X) X) X)). But simplification reduces this to T, using the :definition APP, the :executable-counterpart of CONSP, the :rewrite rule PROBLEM-41 and the :type-prescription rule PROPER. Q.E.D. Summary Form: ( DEFTHM PROBLEM-116 ...) Rules: ((:DEFINITION APP) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART PROPER) (:REWRITE PROBLEM-41) (:TYPE-PRESCRIPTION PROPER)) Warnings: None Time: 0.05 seconds (prove: 0.01, print: 0.03, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-116 ACL2 >>(DEFUN N (V) (COND ((ENDP V) 0) ((CAR V) (+ 1 (* 2 (N (CDR V))))) (T (* 2 (N (CDR V)))))) The admission of N is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT V). We observe that the type of N is described by the theorem (AND (INTEGERP (N V)) (<= 0 (N V))). We used primitive type reasoning. Summary Form: ( DEFUN N ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) N ACL2 >>(DEFUN BAND (P Q) (IF P (IF Q T NIL) NIL)) Since BAND is non-recursive, its admission is trivial. We observe that the type of BAND is described by the theorem (OR (EQUAL (BAND P Q) T) (EQUAL (BAND P Q) NIL)). Summary Form: ( DEFUN BAND ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) BAND ACL2 >>(DEFUN BNOT (P) (IF P NIL T)) Since BNOT is non-recursive, its admission is trivial. We observe that the type of BNOT is described by the theorem (OR (EQUAL (BNOT P) T) (EQUAL (BNOT P) NIL)). Summary Form: ( DEFUN BNOT ...) Rules: NIL Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) BNOT ACL2 >>(DEFUN BOR (P Q) (IF P T (IF Q T NIL))) Since BOR is non-recursive, its admission is trivial. We observe that the type of BOR is described by the theorem (OR (EQUAL (BOR P Q) T) (EQUAL (BOR P Q) NIL)). Summary Form: ( DEFUN BOR ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.01, other: 0.00) BOR ACL2 >>(DEFUN BXOR (P Q) (IF P (IF Q NIL T) (IF Q T NIL))) Since BXOR is non-recursive, its admission is trivial. We observe that the type of BXOR is described by the theorem (OR (EQUAL (BXOR P Q) T) (EQUAL (BXOR P Q) NIL)). Summary Form: ( DEFUN BXOR ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) BXOR ACL2 >>(DEFUN BMAJ (P Q C) (BOR (BAND P Q) (BOR (BAND P C) (BAND Q C)))) Since BMAJ is non-recursive, its admission is trivial. We observe that the type of BMAJ is described by the theorem (OR (EQUAL (BMAJ P Q C) T) (EQUAL (BMAJ P Q C) NIL)). We used the :type-prescription rule BOR. Summary Form: ( DEFUN BMAJ ...) Rules: ((:TYPE-PRESCRIPTION BOR)) Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) BMAJ ACL2 >>(DEFUN VADD1 (X Y C) (IF (ENDP X) (CONS C NIL) (CONS (BXOR (CAR X) (BXOR (CAR Y) C)) (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))))) The admission of VADD1 is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of VADD1 is described by the theorem (AND (CONSP (VADD1 X Y C)) (TRUE-LISTP (VADD1 X Y C))). We used primitive type reasoning. Summary Form: ( DEFUN VADD1 ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) VADD1 ACL2 >>(THEOREM PROBLEM-117A (EQUAL (EQUAL (LEN X) 0) (NOT (CONSP X))) :HINTS (("Goal" :INDUCT (LEN X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (LEN X). This suggestion was produced using the :induction rule LEN. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit LEN, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (EQUAL (LEN X) 0) (NOT (CONSP X)))). But simplification reduces this to T, using the :definition LEN and the :executable-counterparts of EQUAL and NOT. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (EQUAL (LEN (CDR X)) 0) (NOT (CONSP (CDR X))))) (EQUAL (EQUAL (LEN X) 0) (NOT (CONSP X)))). But simplification reduces this to T, using the :definitions LEN and NOT, the :executable-counterparts of BINARY-+, EQUAL and NOT, primitive type reasoning and the :type-prescription rule LEN. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-117A ...) Rules: ((:DEFINITION LEN) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION LEN) (:TYPE-PRESCRIPTION LEN)) Warnings: None Time: 0.07 seconds (prove: 0.02, print: 0.05, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-117A ACL2 >>(THEOREM PROBLEM-117B (IMPLIES (EQUAL (LEN X) (LEN Y)) (EQUAL (N (VADD1 X Y C)) (+ (N X) (N Y) (IF C 1 0)))) :HINTS (("Goal" :INDUCT (VADD1 X Y C) :IN-THEORY (ENABLE PROBLEM-117A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (VADD1 X Y C). This suggestion was produced using the :induction rule VADD1. If we let (:P C X Y) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP X)) (:P (BMAJ (CAR X) (CAR Y) C) (CDR X) (CDR Y))) (:P C X Y)) (IMPLIES (ENDP X) (:P C X Y))). This induction is justified by the same argument used to admit VADD1, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). Note, however, that the unmeasured variables Y and C are being instantiated. When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP X)) (IMPLIES (EQUAL (LEN (CDR X)) (LEN (CDR Y))) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))) (+ (N (CDR X)) (N (CDR Y)) (IF (BMAJ (CAR X) (CAR Y) C) 1 0))))) (IMPLIES (EQUAL (LEN X) (LEN Y)) (EQUAL (N (VADD1 X Y C)) (+ (N X) (N Y) (IF C 1 0))))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (IMPLIES (EQUAL (LEN (CDR X)) (LEN (CDR Y))) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))) (+ (N (CDR X)) (N (CDR Y)) (IF (BMAJ (CAR X) (CAR Y) C) 1 0)))) (EQUAL (LEN X) (LEN Y))) (EQUAL (N (VADD1 X Y C)) (+ (N X) (N Y) (IF C 1 0)))). This simplifies, using the :definitions BAND, BMAJ, BOR, BXOR, FIX, LEN, N, SYNP and VADD1, the :executable-counterparts of BINARY-* and BINARY-+, primitive type reasoning, the :rewrite rules ASSOCIATIVITY- OF-+, CAR-CONS, CDR-CONS, COMMUTATIVITY-2-OF-+, COMMUTATIVITY-OF-+, DISTRIBUTIVITY, FOLD-CONSTS-IN-+ and UNICITY-OF-0 and the :type-prescription rules LEN, N and VADD1, to the following 18 conjectures. Subgoal *1/2.18 (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (CAR X) (CAR Y) C) (EQUAL (+ 1 (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))))) (+ 1 (+ 1 (* 2 (N (CDR X)))) 1 (* 2 (N (CDR Y)))))). By the simple :rewrite rules ASSOCIATIVITY-OF-+ and LEFT-CANCELLATION- FOR-+ we reduce the conjecture to Subgoal *1/2.18' (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (CAR X) (CAR Y) C) (EQUAL (FIX (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))))) (FIX (+ 1 (* 2 (N (CDR X))) 1 (* 2 (N (CDR Y))))))). But simplification reduces this to T, using the :definition FIX, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/2.17 (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (NOT (CAR X)) (CAR Y) C) (EQUAL (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C)))) (+ 1 (* 2 (N (CDR X))) 1 (* 2 (N (CDR Y)))))). By the simple :rewrite rule LEFT-CANCELLATION-FOR-+ we reduce the conjecture to Subgoal *1/2.17' (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (NOT (CAR X)) (CAR Y) C) (EQUAL (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C)))) (+ 1 (* 2 (N (CDR X))) 1 (* 2 (N (CDR Y)))))). But simplification reduces this to T, using the :definition FIX, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/2.16 (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (CAR X) (NOT (CAR Y)) C) (EQUAL (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C)))) (+ 1 (+ 1 (* 2 (N (CDR X)))) (* 2 (N (CDR Y)))))). By the simple :rewrite rules ASSOCIATIVITY-OF-+ and LEFT-CANCELLATION- FOR-+ we reduce the conjecture to Subgoal *1/2.16' (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (CAR X) (NOT (CAR Y)) C) (EQUAL (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C)))) (+ 1 1 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). But simplification reduces this to T, using the :definition FIX, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/2.15 (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (NOT (CAR X)) (NOT (CAR Y)) C) (EQUAL (+ 1 (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))))) (+ 1 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). By the simple :rewrite rule LEFT-CANCELLATION-FOR-+ we reduce the conjecture to Subgoal *1/2.15' (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (NOT (CAR X)) (NOT (CAR Y)) C) (EQUAL (FIX (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))))) (FIX (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y))))))). But simplification reduces this to T, using the :definition FIX, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/2.14 (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (CAR X) (CAR Y) (NOT C)) (EQUAL (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL)))) (+ 0 (+ 1 (* 2 (N (CDR X)))) 1 (* 2 (N (CDR Y)))))). By the simple :rewrite rules ASSOCIATIVITY-OF-+, LEFT-CANCELLATION- FOR-+ and UNICITY-OF-0 we reduce the conjecture to Subgoal *1/2.14' (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (CAR X) (CAR Y) (NOT C)) (EQUAL (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL)))) (FIX (+ 1 (* 2 (N (CDR X))) 1 (* 2 (N (CDR Y))))))). But simplification reduces this to T, using the :definition FIX, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/2.13 (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (NOT (CAR X)) (CAR Y) (NOT C)) (EQUAL (+ 1 (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))))) (+ 0 (* 2 (N (CDR X))) 1 (* 2 (N (CDR Y)))))). By the simple :rewrite rules LEFT-CANCELLATION-FOR-+ and UNICITY-OF- 0 we reduce the conjecture to Subgoal *1/2.13' (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (NOT (CAR X)) (CAR Y) (NOT C)) (EQUAL (+ 1 (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))))) (FIX (+ (* 2 (N (CDR X))) 1 (* 2 (N (CDR Y))))))). But simplification reduces this to T, using the :definition FIX, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/2.12 (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (CAR X) (NOT (CAR Y)) (NOT C)) (EQUAL (+ 1 (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))))) (+ 0 (+ 1 (* 2 (N (CDR X)))) (* 2 (N (CDR Y)))))). By the simple :rewrite rules ASSOCIATIVITY-OF-+, LEFT-CANCELLATION- FOR-+ and UNICITY-OF-0 we reduce the conjecture to Subgoal *1/2.12' (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (CAR X) (NOT (CAR Y)) (NOT C)) (EQUAL (+ 1 (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))))) (FIX (+ 1 (* 2 (N (CDR X))) (* 2 (N (CDR Y))))))). But simplification reduces this to T, using the :definition FIX, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/2.11 (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (NOT (CAR X)) (NOT (CAR Y)) (NOT C)) (EQUAL (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL)))) (+ 0 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). By the simple :rewrite rules LEFT-CANCELLATION-FOR-+ and UNICITY-OF- 0 we reduce the conjecture to Subgoal *1/2.11' (IMPLIES (AND (CONSP X) (NOT (EQUAL (LEN (CDR X)) (LEN (CDR Y)))) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (NOT (CAR X)) (NOT (CAR Y)) (NOT C)) (EQUAL (* 2 (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL)))) (FIX (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y))))))). But simplification reduces this to T, using the :definition FIX, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/2.10 (IMPLIES (AND (CONSP X) (NOT (CAR X)) (NOT C) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))) (+ (N (CDR X)) (N (CDR Y)) 0)) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (CAR Y)) (EQUAL (N (VADD1 X Y NIL)) (+ (* 2 (N (CDR X))) 1 (* 2 (N (CDR Y)))))). By the simple :rewrite rule LEFT-CANCELLATION-FOR-+ we reduce the conjecture to Subgoal *1/2.10' (IMPLIES (AND (CONSP X) (NOT (CAR X)) (NOT C) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))) (+ (N (CDR X)) (N (CDR Y)) 0)) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (CAR Y)) (EQUAL (N (VADD1 X Y NIL)) (+ (* 2 (N (CDR X))) 1 (* 2 (N (CDR Y)))))). This simplifies, using the :definitions BAND, BMAJ, BXOR, FIX, N and VADD1, the :executable-counterparts of BAND, BOR and BXOR, primitive type reasoning, the :meta rule CANCEL_PLUS-EQUAL-CORRECT, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY-2-OF-+, COMMUTATIVITY-OF-+ and UNICITY-OF-0 and the :type-prescription rules LEN, N and VADD1, to Subgoal *1/2.10'' (IMPLIES (AND (CONSP X) (NOT (CAR X)) (EQUAL (N (VADD1 (CDR X) (CDR Y) NIL)) (+ (N (CDR X)) (N (CDR Y)))) (CONSP Y) (EQUAL (LEN (CDR X)) (LEN (CDR Y))) (CAR Y)) (EQUAL (* 2 (N (VADD1 (CDR X) (CDR Y) NIL))) (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule N. Subgoal *1/2.9 (IMPLIES (AND (CONSP X) (NOT (CAR X)) (NOT C) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))) (+ (N (CDR X)) (N (CDR Y)) 0)) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (NOT (CAR Y))) (EQUAL (N (VADD1 X Y NIL)) (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). By the simple :rewrite rule LEFT-CANCELLATION-FOR-+ we reduce the conjecture to Subgoal *1/2.9' (IMPLIES (AND (CONSP X) (NOT (CAR X)) (NOT C) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))) (+ (N (CDR X)) (N (CDR Y)) 0)) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (NOT (CAR Y))) (EQUAL (N (VADD1 X Y NIL)) (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). This simplifies, using the :definitions FIX, N and VADD1, the :executable- counterparts of BMAJ and BXOR, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY-OF-+ and UNICITY-OF-0 and the :type-prescription rules LEN, N and VADD1, to Subgoal *1/2.9'' (IMPLIES (AND (CONSP X) (NOT (CAR X)) (EQUAL (N (VADD1 (CDR X) (CDR Y) NIL)) (+ (N (CDR X)) (N (CDR Y)))) (CONSP Y) (EQUAL (LEN (CDR X)) (LEN (CDR Y))) (NOT (CAR Y))) (EQUAL (* 2 (N (VADD1 (CDR X) (CDR Y) NIL))) (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule N. Subgoal *1/2.8 (IMPLIES (AND (CONSP X) (CAR X) C (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))) (+ (N (CDR X)) (N (CDR Y)) 1)) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (CAR Y)) (EQUAL (+ 3 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))) (+ 2 (* 2 (N (CDR X))) 1 (* 2 (N (CDR Y)))))). By the simple :rewrite rule LEFT-CANCELLATION-FOR-+ we reduce the conjecture to Subgoal *1/2.8' (IMPLIES (AND (CONSP X) (CAR X) C (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))) (+ (N (CDR X)) (N (CDR Y)) 1)) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (CAR Y)) (EQUAL (+ 3 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))) (+ 2 (* 2 (N (CDR X))) 1 (* 2 (N (CDR Y)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule N. Subgoal *1/2.7 (IMPLIES (AND (CONSP X) (CAR X) (CAR Y) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))) (+ (N (CDR X)) (N (CDR Y)) 1)) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) C) (EQUAL (+ 3 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))) (+ 2 1 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). By the simple :rewrite rule LEFT-CANCELLATION-FOR-+ we reduce the conjecture to Subgoal *1/2.7' (IMPLIES (AND (CONSP X) (CAR X) (CAR Y) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))) (+ (N (CDR X)) (N (CDR Y)) 1)) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) C) (EQUAL (+ 3 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))) (+ 2 1 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule N. Subgoal *1/2.6 (IMPLIES (AND (CONSP X) (CAR X) (CAR Y) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))) (+ (N (CDR X)) (N (CDR Y)) 1)) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (NOT C)) (EQUAL (+ 2 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))) (+ 2 0 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). By the simple :rewrite rules LEFT-CANCELLATION-FOR-+ and UNICITY-OF- 0 we reduce the conjecture to Subgoal *1/2.6' (IMPLIES (AND (CONSP X) (CAR X) (CAR Y) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))) (+ (N (CDR X)) (N (CDR Y)) 1)) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (NOT C)) (EQUAL (FIX (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y))))) (FIX (FIX (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))))). But simplification reduces this to T, using the :definitions BAND, BMAJ and FIX, the :executable-counterpart of BOR, primitive type reasoning, the :rewrite rules COMMUTATIVITY-2-OF-+ and COMMUTATIVITY-OF-+ and the :type-prescription rules LEN and N. Subgoal *1/2.5 (IMPLIES (AND (CONSP X) (NOT (CAR X)) (NOT (CAR Y)) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))) (+ (N (CDR X)) (N (CDR Y)) 0)) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (NOT C)) (EQUAL (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y)))) (+ 0 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). By the simple :rewrite rules LEFT-CANCELLATION-FOR-+ and UNICITY-OF- 0 we reduce the conjecture to Subgoal *1/2.5' (IMPLIES (AND (CONSP X) (NOT (CAR X)) (NOT (CAR Y)) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))) (+ (N (CDR X)) (N (CDR Y)) 0)) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (NOT C)) (EQUAL (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y)))) (FIX (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y))))))). But simplification reduces this to T, using the :definition FIX, the :executable-counterpart of BMAJ, primitive type reasoning, the :rewrite rules COMMUTATIVITY-OF-+ and UNICITY-OF-0 and the :type-prescription rules LEN and N. Subgoal *1/2.4 (IMPLIES (AND (CONSP X) (NOT (CAR Y)) (NOT C) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))) (+ (N (CDR X)) (N (CDR Y)) 0)) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (CAR X)) (EQUAL (N (VADD1 X Y NIL)) (+ (* 2 (N (CDR Y))) 1 (* 2 (N (CDR X)))))). By the simple :rewrite rule LEFT-CANCELLATION-FOR-+ we reduce the conjecture to Subgoal *1/2.4' (IMPLIES (AND (CONSP X) (NOT (CAR Y)) (NOT C) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))) (+ (N (CDR X)) (N (CDR Y)) 0)) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (CAR X)) (EQUAL (N (VADD1 X Y NIL)) (+ (* 2 (N (CDR Y))) 1 (* 2 (N (CDR X)))))). This simplifies, using the :definitions BAND, BMAJ, BXOR, FIX, N and VADD1, the :executable-counterparts of BAND, BOR and BXOR, primitive type reasoning, the :meta rule CANCEL_PLUS-EQUAL-CORRECT, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY-2-OF-+, COMMUTATIVITY-OF-+ and UNICITY-OF-0 and the :type-prescription rules LEN, N and VADD1, to Subgoal *1/2.4'' (IMPLIES (AND (CONSP X) (NOT (CAR Y)) (EQUAL (N (VADD1 (CDR X) (CDR Y) NIL)) (+ (N (CDR X)) (N (CDR Y)))) (CONSP Y) (EQUAL (LEN (CDR X)) (LEN (CDR Y))) (CAR X)) (EQUAL (* 2 (N (VADD1 (CDR X) (CDR Y) NIL))) (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule N. Subgoal *1/2.3 (IMPLIES (AND (CONSP X) (NOT (CAR Y)) (NOT C) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))) (+ (N (CDR X)) (N (CDR Y)) 0)) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (NOT (CAR X))) (EQUAL (N (VADD1 X Y NIL)) (+ (* 2 (N (CDR Y))) (* 2 (N (CDR X)))))). By the simple :rewrite rule LEFT-CANCELLATION-FOR-+ we reduce the conjecture to Subgoal *1/2.3' (IMPLIES (AND (CONSP X) (NOT (CAR Y)) (NOT C) (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) NIL))) (+ (N (CDR X)) (N (CDR Y)) 0)) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (NOT (CAR X))) (EQUAL (N (VADD1 X Y NIL)) (+ (* 2 (N (CDR Y))) (* 2 (N (CDR X)))))). This simplifies, using the :definitions FIX, N and VADD1, the :executable- counterparts of BMAJ and BXOR, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY-OF-+ and UNICITY-OF-0 and the :type-prescription rules LEN, N and VADD1, to Subgoal *1/2.3'' (IMPLIES (AND (CONSP X) (NOT (CAR Y)) (EQUAL (N (VADD1 (CDR X) (CDR Y) NIL)) (+ (N (CDR X)) (N (CDR Y)))) (CONSP Y) (EQUAL (LEN (CDR X)) (LEN (CDR Y))) (NOT (CAR X))) (EQUAL (* 2 (N (VADD1 (CDR X) (CDR Y) NIL))) (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule N. Subgoal *1/2.2 (IMPLIES (AND (CONSP X) (CAR Y) C (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))) (+ (N (CDR X)) (N (CDR Y)) 1)) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (CAR X)) (EQUAL (+ 3 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))) (+ 2 (* 2 (N (CDR Y))) 1 (* 2 (N (CDR X)))))). By the simple :rewrite rule LEFT-CANCELLATION-FOR-+ we reduce the conjecture to Subgoal *1/2.2' (IMPLIES (AND (CONSP X) (CAR Y) C (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))) (+ (N (CDR X)) (N (CDR Y)) 1)) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (CAR X)) (EQUAL (+ 3 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))) (+ 2 (* 2 (N (CDR Y))) 1 (* 2 (N (CDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule N. Subgoal *1/2.1 (IMPLIES (AND (CONSP X) (CAR Y) C (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))) (+ (N (CDR X)) (N (CDR Y)) 1)) (CONSP Y) (EQUAL (+ 1 (LEN (CDR X))) (+ 1 (LEN (CDR Y)))) (NOT (CAR X))) (EQUAL (+ 2 (* 2 (N (CDR X))) (* 2 (N (CDR Y)))) (+ 2 (* 2 (N (CDR Y))) (* 2 (N (CDR X)))))). By the simple :rewrite rule LEFT-CANCELLATION-FOR-+ we reduce the conjecture to Subgoal *1/2.1' (IMPLIES (AND (CONSP X) (CAR Y) C (EQUAL (N (VADD1 (CDR X) (CDR Y) (BMAJ (CAR X) (CAR Y) C))) (+ (N (CDR X)) (N (CDR Y)) 1)) (CONSP Y) (EQUAL (FIX (LEN (CDR X))) (FIX (LEN (CDR Y)))) (NOT (CAR X))) (EQUAL (FIX (+ (* 2 (N (CDR X))) (* 2 (N (CDR Y))))) (FIX (+ (* 2 (N (CDR Y))) (* 2 (N (CDR X))))))). But simplification reduces this to T, using the :definitions BAND, BMAJ and FIX, the :executable-counterpart of BOR, primitive type reasoning, the :rewrite rules COMMUTATIVITY-2-OF-+ and COMMUTATIVITY-OF-+ and the :type-prescription rules LEN and N. Subgoal *1/1 (IMPLIES (ENDP X) (IMPLIES (EQUAL (LEN X) (LEN Y)) (EQUAL (N (VADD1 X Y C)) (+ (N X) (N Y) (IF C 1 0))))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP X)) (EQUAL (LEN X) (LEN Y))) (EQUAL (N (VADD1 X Y C)) (+ (N X) (N Y) (IF C 1 0)))). But simplification reduces this to T, using the :definitions FIX, LEN, N, NOT and VADD1, the :executable-counterparts of BINARY-*, BINARY- + and N, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-117A and UNICITY-OF-0. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-117B ...) Rules: ((:DEFINITION BAND) (:DEFINITION BMAJ) (:DEFINITION BOR) (:DEFINITION BXOR) (:DEFINITION ENDP) (:DEFINITION FIX) (:DEFINITION LEN) (:DEFINITION N) (:DEFINITION NOT) (:DEFINITION SYNP) (:DEFINITION VADD1) (:EXECUTABLE-COUNTERPART BAND) (:EXECUTABLE-COUNTERPART BINARY-*) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART BMAJ) (:EXECUTABLE-COUNTERPART BOR) (:EXECUTABLE-COUNTERPART BXOR) (:EXECUTABLE-COUNTERPART N) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION VADD1) (:META CANCEL_PLUS-EQUAL-CORRECT) (:REWRITE ASSOCIATIVITY-OF-+) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE DISTRIBUTIVITY) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE LEFT-CANCELLATION-FOR-+) (:REWRITE PROBLEM-117A) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION LEN) (:TYPE-PRESCRIPTION N) (:TYPE-PRESCRIPTION VADD1)) Warnings: None Time: 0.74 seconds (prove: 0.29, print: 0.43, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-117B ACL2 >>(DEFUN VADD (X Y) (VADD1 X Y NIL)) Since VADD is non-recursive, its admission is trivial. We observe that the type of VADD is described by the theorem (AND (CONSP (VADD X Y)) (TRUE-LISTP (VADD X Y))). We used the :type- prescription rule VADD1. Summary Form: ( DEFUN VADD ...) Rules: ((:TYPE-PRESCRIPTION VADD1)) Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.01, other: 0.03) VADD ACL2 >>(THEOREM PROBLEM-117 (IMPLIES (EQUAL (LEN X) (LEN Y)) (EQUAL (N (VADD X Y)) (+ (N X) (N Y)))) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-117B)))) ACL2 Warning [Non-rec] in ( DEFTHM PROBLEM-117 ...): The :REWRITE rule generated from PROBLEM-117 will be triggered only by terms containing the non-recursive function symbol VADD. Unless this function is disabled, PROBLEM-117 is unlikely ever to be used. [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definition VADD we reduce the conjecture to Goal' (IMPLIES (EQUAL (LEN X) (LEN Y)) (EQUAL (N (VADD1 X Y NIL)) (+ (N X) (N Y)))). But simplification reduces this to T, using the :definition FIX, primitive type reasoning, the :rewrite rules COMMUTATIVITY-OF-+, PROBLEM-117B and UNICITY-OF-0 and the :type-prescription rule N. Q.E.D. Summary Form: ( DEFTHM PROBLEM-117 ...) Rules: ((:DEFINITION FIX) (:DEFINITION VADD) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE PROBLEM-117B) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION N)) Warnings: Non-rec Time: 0.05 seconds (prove: 0.00, print: 0.02, other: 0.03) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-117 ACL2 >>(MUTUAL-RECURSION (DEFUN FX (X) (IF (CONSP X) (CONS (FX (CAR X)) (GX (CDR X))) X)) (DEFUN GX (X) (IF (CONSP X) (CONS (GX (CAR X)) (FX (CDR X))) X))) The admission of FX and GX are trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X) for FX and (ACL2-COUNT X) for GX. We could deduce no constraints on the type of any of the functions in the clique. However, in normalizing the definitions we used primitive type reasoning. Summary Form: ( MUTUAL-RECURSION ( DEFUN FX ...) ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.01, other: 0.03) (FX GX) ACL2 >>(DEFUN TREE-COPY (X) (IF (CONSP X) (CONS (TREE-COPY (CAR X)) (TREE-COPY (CDR X))) X)) The admission of TREE-COPY is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We could deduce no constraints on the type of TREE-COPY. However, in normalizing the definition we used primitive type reasoning. Summary Form: ( DEFUN TREE-COPY ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) TREE-COPY ACL2 >>(THEOREM PROBLEM-118 (AND (EQUAL (FX X) X) (EQUAL (GX X) X)) :HINTS (("Goal" :INDUCT (TREE-COPY X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (TREE-COPY X). This suggestion was produced using the :induction rule TREE-COPY. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CAR X)) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit TREE- COPY, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (AND (EQUAL (FX X) X) (EQUAL (GX X) X))). But simplification reduces this to T, using the :definitions FX and GX and primitive type reasoning. Subgoal *1/1 (IMPLIES (AND (CONSP X) (AND (EQUAL (FX (CAR X)) (CAR X)) (EQUAL (GX (CAR X)) (CAR X))) (AND (EQUAL (FX (CDR X)) (CDR X)) (EQUAL (GX (CDR X)) (CDR X)))) (AND (EQUAL (FX X) X) (EQUAL (GX X) X))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (EQUAL (FX (CAR X)) (CAR X)) (EQUAL (GX (CAR X)) (CAR X)) (EQUAL (FX (CDR X)) (CDR X)) (EQUAL (GX (CDR X)) (CDR X))) (AND (EQUAL (FX X) X) (EQUAL (GX X) X))). But simplification reduces this to T, using the :definitions FX and GX, primitive type reasoning and the :rewrite rule CAR-CDR-ELIM. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-118 ...) Rules: ((:DEFINITION FX) (:DEFINITION GX) (:DEFINITION NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION TREE-COPY) (:REWRITE CAR-CDR-ELIM)) Warnings: None Time: 0.15 seconds (prove: 0.13, print: 0.01, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.06 seconds (prove: 0.00, print: 0.00, other: 0.06) PROBLEM-118 ACL2 >>(DEFUN FZGZ (FN X) (IF (EQUAL FN 'FZ) (IF (CONSP X) (CONS (FZGZ 'FZ (CAR X)) (FZGZ 'GZ (CDR X))) X) (IF (CONSP X) (CONS (FZGZ 'GZ (CAR X)) (FZGZ 'FZ (CDR X))) X))) The admission of FZGZ is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We could deduce no constraints on the type of FZGZ. However, in normalizing the definition we used primitive type reasoning. Summary Form: ( DEFUN FZGZ ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.01, other: 0.03) FZGZ ACL2 >>(DEFUN FZ (X) (FZGZ 'FZ X)) Since FZ is non-recursive, its admission is trivial. We could deduce no constraints on the type of FZ. Summary Form: ( DEFUN FZ ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) FZ ACL2 >>(DEFUN GZ (X) (FZGZ 'GZ X)) Since GZ is non-recursive, its admission is trivial. We could deduce no constraints on the type of GZ. Summary Form: ( DEFUN GZ ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) GZ ACL2 >>(THEOREM PROBLEM-119-A (EQUAL (FZ X) (IF (CONSP X) (CONS (FZ (CAR X)) (GZ (CDR X))) X)) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definitions FZ and GZ we reduce the conjecture to Goal' (EQUAL (FZGZ 'FZ X) (IF (CONSP X) (CONS (FZGZ 'FZ (CAR X)) (FZGZ 'GZ (CDR X))) X)). But simplification reduces this to T, using the :definition FZGZ, the :executable-counterpart of EQUAL and primitive type reasoning. Q.E.D. Summary Form: ( DEFTHM PROBLEM-119-A ...) Rules: ((:DEFINITION FZ) (:DEFINITION FZGZ) (:DEFINITION GZ) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.11 seconds (prove: 0.10, print: 0.01, other: 0.00) PROBLEM-119-A ACL2 >>(THEOREM PROBLEM-119-B (EQUAL (GZ X) (IF (CONSP X) (CONS (GZ (CAR X)) (FZ (CDR X))) X)) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definitions FZ and GZ we reduce the conjecture to Goal' (EQUAL (FZGZ 'GZ X) (IF (CONSP X) (CONS (FZGZ 'GZ (CAR X)) (FZGZ 'FZ (CDR X))) X)). But simplification reduces this to T, using the :definition FZGZ, the :executable-counterpart of EQUAL and primitive type reasoning. Q.E.D. Summary Form: ( DEFTHM PROBLEM-119-B ...) Rules: ((:DEFINITION FZ) (:DEFINITION FZGZ) (:DEFINITION GZ) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.07 seconds (prove: 0.05, print: 0.02, other: 0.00) PROBLEM-119-B ACL2 >>(DEFUN EXPR-FN (FN X) (IF (EQUAL FN 'EXPR) (IF (ATOM X) (SYMBOLP X) (AND (SYMBOLP (CAR X)) (EXPR-FN 'LIST (CDR X)))) (IF (ATOM X) (EQUAL X NIL) (AND (EXPR-FN 'EXPR (CAR X)) (EXPR-FN 'LIST (CDR X)))))) The admission of EXPR-FN is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of EXPR-FN is described by the theorem (OR (EQUAL (EXPR-FN FN X) T) (EQUAL (EXPR-FN FN X) NIL)). We used primitive type reasoning. Summary Form: ( DEFUN EXPR-FN ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.01, other: 0.02) EXPR-FN ACL2 >>(DEFUN EXPR (X) (EXPR-FN 'EXPR X)) Since EXPR is non-recursive, its admission is trivial. We observe that the type of EXPR is described by the theorem (OR (EQUAL (EXPR X) T) (EQUAL (EXPR X) NIL)). We used the :type-prescription rule EXPR-FN. Summary Form: ( DEFUN EXPR ...) Rules: ((:TYPE-PRESCRIPTION EXPR-FN)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.01, other: 0.00) EXPR ACL2 >>(DEFUN EXPR-LIST (X) (EXPR-FN 'LIST X)) Since EXPR-LIST is non-recursive, its admission is trivial. We observe that the type of EXPR-LIST is described by the theorem (OR (EQUAL (EXPR-LIST X) T) (EQUAL (EXPR-LIST X) NIL)). We used the :type-prescription rule EXPR-FN. Summary Form: ( DEFUN EXPR-LIST ...) Rules: ((:TYPE-PRESCRIPTION EXPR-FN)) Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) EXPR-LIST ACL2 >>(THEOREM PROBLEM-120-A (EQUAL (EXPR X) (IF (ATOM X) (SYMBOLP X) (AND (SYMBOLP (CAR X)) (EXPR-LIST (CDR X))))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definitions EXPR and EXPR-LIST we reduce the conjecture to Goal' (EQUAL (EXPR-FN 'EXPR X) (COND ((ATOM X) (SYMBOLP X)) ((SYMBOLP (CAR X)) (EXPR-FN 'LIST (CDR X))) (T NIL))). But simplification reduces this to T, using the :definitions ATOM and EXPR-FN, the :executable-counterpart of EQUAL and primitive type reasoning. Q.E.D. Summary Form: ( DEFTHM PROBLEM-120-A ...) Rules: ((:DEFINITION ATOM) (:DEFINITION EXPR) (:DEFINITION EXPR-FN) (:DEFINITION EXPR-LIST) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.01, print: 0.01, other: 0.00) PROBLEM-120-A ACL2 >>(THEOREM PROBLEM-120-B (EQUAL (EXPR-LIST X) (IF (ATOM X) (EQUAL X NIL) (AND (EXPR (CAR X)) (EXPR-LIST (CDR X))))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definitions EXPR and EXPR-LIST we reduce the conjecture to Goal' (EQUAL (EXPR-FN 'LIST X) (COND ((ATOM X) (EQUAL X NIL)) ((EXPR-FN 'EXPR (CAR X)) (EXPR-FN 'LIST (CDR X))) (T NIL))). But simplification reduces this to T, using the :definitions ATOM and EXPR-FN, the :executable-counterpart of EQUAL and primitive type reasoning. Q.E.D. Summary Form: ( DEFTHM PROBLEM-120-B ...) Rules: ((:DEFINITION ATOM) (:DEFINITION EXPR) (:DEFINITION EXPR-FN) (:DEFINITION EXPR-LIST) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.07 seconds (prove: 0.07, print: 0.00, other: 0.00) PROBLEM-120-B ACL2 >>(DEFUN SUBSTITUTION (S) (IF (ENDP S) (EQUAL S NIL) (AND (TRUE-LISTP (CAR S)) (EQUAL (LEN (CAR S)) 2) (SYMBOLP (CAR (CAR S))) (EXPR (CAR (CDR (CAR S)))) (SUBSTITUTION (CDR S))))) The admission of SUBSTITUTION is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT S). We observe that the type of SUBSTITUTION is described by the theorem (OR (EQUAL (SUBSTITUTION S) T) (EQUAL (SUBSTITUTION S) NIL)). We used primitive type reasoning. Summary Form: ( DEFUN SUBSTITUTION ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) SUBSTITUTION ACL2 >>(DEFUN LOOKUP (VAR ALIST) (IF (ENDP ALIST) VAR (IF (EQUAL VAR (CAR (CAR ALIST))) (CAR (CDR (CAR ALIST))) (LOOKUP VAR (CDR ALIST))))) The admission of LOOKUP is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT ALIST). We could deduce no constraints on the type of LOOKUP. Summary Form: ( DEFUN LOOKUP ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) LOOKUP ACL2 >>(DEFUN SLASH-FN (FN X S) (IF (EQUAL FN 'EXPR) (IF (ATOM X) (LOOKUP X S) (CONS (CAR X) (SLASH-FN 'LIST (CDR X) S))) (IF (ATOM X) NIL (CONS (SLASH-FN 'EXPR (CAR X) S) (SLASH-FN 'LIST (CDR X) S))))) The admission of SLASH-FN is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We could deduce no constraints on the type of SLASH-FN. Summary Form: ( DEFUN SLASH-FN ...) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) SLASH-FN ACL2 >>(DEFUN SLASH (X S) (SLASH-FN 'EXPR X S)) Since SLASH is non-recursive, its admission is trivial. We could deduce no constraints on the type of SLASH. Summary Form: ( DEFUN SLASH ...) Rules: NIL Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) SLASH ACL2 >>(DEFUN SLASH-LIST (LST S) (SLASH-FN 'LIST LST S)) Since SLASH-LIST is non-recursive, its admission is trivial. We could deduce no constraints on the type of SLASH-LIST. Summary Form: ( DEFUN SLASH-LIST ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) SLASH-LIST ACL2 >>(THEOREM PROBLEM-122-A (EQUAL (SLASH X S) (IF (ATOM X) (LOOKUP X S) (CONS (CAR X) (SLASH-LIST (CDR X) S)))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definitions SLASH and SLASH-LIST we reduce the conjecture to Goal' (EQUAL (SLASH-FN 'EXPR X S) (IF (ATOM X) (LOOKUP X S) (CONS (CAR X) (SLASH-FN 'LIST (CDR X) S)))). But simplification reduces this to T, using the :definitions ATOM and SLASH-FN, the :executable-counterpart of EQUAL and primitive type reasoning. Q.E.D. Summary Form: ( DEFTHM PROBLEM-122-A ...) Rules: ((:DEFINITION ATOM) (:DEFINITION SLASH) (:DEFINITION SLASH-FN) (:DEFINITION SLASH-LIST) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.08 seconds (prove: 0.07, print: 0.01, other: 0.00) PROBLEM-122-A ACL2 >>(THEOREM PROBLEM-122-B (EQUAL (SLASH-LIST LST S) (IF (ATOM LST) NIL (CONS (SLASH (CAR LST) S) (SLASH-LIST (CDR LST) S)))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definitions SLASH and SLASH-LIST we reduce the conjecture to Goal' (EQUAL (SLASH-FN 'LIST LST S) (AND (NOT (ATOM LST)) (CONS (SLASH-FN 'EXPR (CAR LST) S) (SLASH-FN 'LIST (CDR LST) S)))). But simplification reduces this to T, using the :definitions ATOM and SLASH-FN, the :executable-counterpart of EQUAL and primitive type reasoning. Q.E.D. Summary Form: ( DEFTHM PROBLEM-122-B ...) Rules: ((:DEFINITION ATOM) (:DEFINITION SLASH) (:DEFINITION SLASH-FN) (:DEFINITION SLASH-LIST) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.14 seconds (prove: 0.12, print: 0.01, other: 0.01) PROBLEM-122-B ACL2 >>(THEOREM PROBLEM-123A (IMPLIES (AND (SYMBOLP X) (SUBSTITUTION S)) (EXPR-FN 'EXPR (LOOKUP X S))) :HINTS (("Goal" :INDUCT (LOOKUP X S)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (LOOKUP X S). This suggestion was produced using the :induction rule LOOKUP. If we let (:P S X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP S)) (NOT (EQUAL X (CAAR S))) (:P (CDR S) X)) (:P S X)) (IMPLIES (AND (NOT (ENDP S)) (EQUAL X (CAAR S))) (:P S X)) (IMPLIES (ENDP S) (:P S X))). This induction is justified by the same argument used to admit LOOKUP, namely, the measure (ACL2-COUNT S) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP S)) (NOT (EQUAL X (CAAR S))) (IMPLIES (AND (SYMBOLP X) (SUBSTITUTION (CDR S))) (EXPR-FN 'EXPR (LOOKUP X (CDR S))))) (IMPLIES (AND (SYMBOLP X) (SUBSTITUTION S)) (EXPR-FN 'EXPR (LOOKUP X S)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP S) (NOT (EQUAL X (CAAR S))) (IMPLIES (AND (SYMBOLP X) (SUBSTITUTION (CDR S))) (EXPR-FN 'EXPR (LOOKUP X (CDR S)))) (SYMBOLP X) (SUBSTITUTION S)) (EXPR-FN 'EXPR (LOOKUP X S))). But simplification reduces this to T, using the :definitions EXPR, LOOKUP and SUBSTITUTION, primitive type reasoning and the :type-prescription rule EXPR-FN. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP S)) (EQUAL X (CAAR S))) (IMPLIES (AND (SYMBOLP X) (SUBSTITUTION S)) (EXPR-FN 'EXPR (LOOKUP X S)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP S) (EQUAL X (CAAR S)) (SYMBOLP X) (SUBSTITUTION S)) (EXPR-FN 'EXPR (LOOKUP X S))). This simplifies, using the :definition LOOKUP and primitive type reasoning, to Subgoal *1/2'' (IMPLIES (AND (CONSP S) (SYMBOLP (CAAR S)) (SUBSTITUTION S)) (EXPR-FN 'EXPR (CADAR S))). But simplification reduces this to T, using the :definitions EXPR, LEN, SUBSTITUTION and TRUE-LISTP and primitive type reasoning. Subgoal *1/1 (IMPLIES (ENDP S) (IMPLIES (AND (SYMBOLP X) (SUBSTITUTION S)) (EXPR-FN 'EXPR (LOOKUP X S)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP S)) (SYMBOLP X) (SUBSTITUTION S)) (EXPR-FN 'EXPR (LOOKUP X S))). But simplification reduces this to T, using the :definitions EXPR-FN, LOOKUP and SUBSTITUTION, the :executable-counterparts of CONSP and EQUAL and primitive type reasoning. That completes the proof of *1. Q.E.D. The storage of PROBLEM-123A depends upon the :type-prescription rule EXPR-FN. Summary Form: ( DEFTHM PROBLEM-123A ...) Rules: ((:DEFINITION ENDP) (:DEFINITION EXPR) (:DEFINITION EXPR-FN) (:DEFINITION LEN) (:DEFINITION LOOKUP) (:DEFINITION NOT) (:DEFINITION SUBSTITUTION) (:DEFINITION TRUE-LISTP) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION LOOKUP) (:TYPE-PRESCRIPTION EXPR-FN)) Warnings: None Time: 0.83 seconds (prove: 0.77, print: 0.06, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-123A ACL2 >>(THEOREM PROBLEM-123B (IMPLIES (AND (EXPR-FN FN X) (SUBSTITUTION S)) (EXPR-FN FN (SLASH-FN FN X S))) :HINTS (("Goal" :INDUCT (SLASH-FN FN X S) :IN-THEORY (ENABLE PROBLEM-123A)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (SLASH-FN FN X S). This suggestion was produced using the :induction rule SLASH-FN. If we let (:P FN S X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (EQUAL FN 'EXPR)) (NOT (ATOM X)) (:P 'EXPR S (CAR X)) (:P 'LIST S (CDR X))) (:P FN S X)) (IMPLIES (AND (NOT (EQUAL FN 'EXPR)) (ATOM X)) (:P FN S X)) (IMPLIES (AND (EQUAL FN 'EXPR) (NOT (ATOM X)) (:P 'LIST S (CDR X))) (:P FN S X)) (IMPLIES (AND (EQUAL FN 'EXPR) (ATOM X)) (:P FN S X))). This induction is justified by the same argument used to admit SLASH- FN, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). Note, however, that the unmeasured variable FN is being instantiated\ . When applied to the goal at hand the above induction scheme produces the following four nontautological subgoals. Subgoal *1/4 (IMPLIES (AND (NOT (EQUAL FN 'EXPR)) (NOT (ATOM X)) (IMPLIES (AND (EXPR-FN 'EXPR (CAR X)) (SUBSTITUTION S)) (EXPR-FN 'EXPR (SLASH-FN 'EXPR (CAR X) S))) (IMPLIES (AND (EXPR-FN 'LIST (CDR X)) (SUBSTITUTION S)) (EXPR-FN 'LIST (SLASH-FN 'LIST (CDR X) S)))) (IMPLIES (AND (EXPR-FN FN X) (SUBSTITUTION S)) (EXPR-FN FN (SLASH-FN FN X S)))). By the simple :definition ATOM we reduce the conjecture to Subgoal *1/4' (IMPLIES (AND (NOT (EQUAL FN 'EXPR)) (CONSP X) (IMPLIES (AND (EXPR-FN 'EXPR (CAR X)) (SUBSTITUTION S)) (EXPR-FN 'EXPR (SLASH-FN 'EXPR (CAR X) S))) (IMPLIES (AND (EXPR-FN 'LIST (CDR X)) (SUBSTITUTION S)) (EXPR-FN 'LIST (SLASH-FN 'LIST (CDR X) S))) (EXPR-FN FN X) (SUBSTITUTION S)) (EXPR-FN FN (SLASH-FN FN X S))). But simplification reduces this to T, using the :definitions EXPR-FN and SLASH-FN, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rules EXPR-FN and SUBSTITUTION. Subgoal *1/3 (IMPLIES (AND (NOT (EQUAL FN 'EXPR)) (ATOM X)) (IMPLIES (AND (EXPR-FN FN X) (SUBSTITUTION S)) (EXPR-FN FN (SLASH-FN FN X S)))). By the simple :definition ATOM we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (EQUAL FN 'EXPR)) (NOT (CONSP X)) (EXPR-FN FN X) (SUBSTITUTION S)) (EXPR-FN FN (SLASH-FN FN X S))). But simplification reduces this to T, using the :definitions EXPR-FN and SLASH-FN, the :executable-counterparts of CONSP and EQUAL and primitive type reasoning. Subgoal *1/2 (IMPLIES (AND (EQUAL FN 'EXPR) (NOT (ATOM X)) (IMPLIES (AND (EXPR-FN 'LIST (CDR X)) (SUBSTITUTION S)) (EXPR-FN 'LIST (SLASH-FN 'LIST (CDR X) S)))) (IMPLIES (AND (EXPR-FN FN X) (SUBSTITUTION S)) (EXPR-FN FN (SLASH-FN FN X S)))). By the simple :definition ATOM we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (EQUAL FN 'EXPR) (CONSP X) (IMPLIES (AND (EXPR-FN 'LIST (CDR X)) (SUBSTITUTION S)) (EXPR-FN 'LIST (SLASH-FN 'LIST (CDR X) S))) (EXPR-FN FN X) (SUBSTITUTION S)) (EXPR-FN FN (SLASH-FN FN X S))). But simplification reduces this to T, using the :definitions EXPR-FN and SLASH-FN, the :executable-counterpart of EQUAL, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type- prescription rules EXPR-FN and SUBSTITUTION. Subgoal *1/1 (IMPLIES (AND (EQUAL FN 'EXPR) (ATOM X)) (IMPLIES (AND (EXPR-FN FN X) (SUBSTITUTION S)) (EXPR-FN FN (SLASH-FN FN X S)))). By the simple :definition ATOM we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (EQUAL FN 'EXPR) (NOT (CONSP X)) (EXPR-FN FN X) (SUBSTITUTION S)) (EXPR-FN FN (SLASH-FN FN X S))). But simplification reduces this to T, using the :definitions EXPR-FN and SLASH-FN, the :executable-counterpart of EQUAL, the :rewrite rule PROBLEM-123A and the :type-prescription rule SUBSTITUTION. That completes the proof of *1. Q.E.D. The storage of PROBLEM-123B depends upon the :type-prescription rule EXPR-FN. Summary Form: ( DEFTHM PROBLEM-123B ...) Rules: ((:DEFINITION ATOM) (:DEFINITION EXPR-FN) (:DEFINITION NOT) (:DEFINITION SLASH-FN) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION SLASH-FN) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-123A) (:TYPE-PRESCRIPTION EXPR-FN) (:TYPE-PRESCRIPTION SUBSTITUTION)) Warnings: None Time: 0.86 seconds (prove: 0.61, print: 0.23, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-123B ACL2 >>(THEOREM PROBLEM-123 (IMPLIES (AND (EXPR X) (SUBSTITUTION S)) (EXPR (SLASH X S))) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-123B)))) ACL2 Warning [Non-rec] in ( DEFTHM PROBLEM-123 ...): The :REWRITE rule generated from PROBLEM-123 will be triggered only by terms containing the non-recursive function symbols EXPR and SLASH. Unless these functions are disabled, PROBLEM-123 is unlikely ever to be used. ACL2 Warning [Subsume] in ( DEFTHM PROBLEM-123 ...): The previously added rule EXPR subsumes the newly proposed :REWRITE rule PROBLEM-123, in the sense that the old rule rewrites a more general target. Because the new rule will be tried first, it may nonetheless find application. [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definitions EXPR and SLASH we reduce the conjecture to Goal' (IMPLIES (AND (EXPR-FN 'EXPR X) (SUBSTITUTION S)) (EXPR-FN 'EXPR (SLASH-FN 'EXPR X S))). But simplification reduces this to T, using the :rewrite rule PROBLEM- 123B and the :type-prescription rules EXPR-FN and SUBSTITUTION. Q.E.D. The storage of PROBLEM-123 depends upon the :type-prescription rule EXPR. Summary Form: ( DEFTHM PROBLEM-123 ...) Rules: ((:DEFINITION EXPR) (:DEFINITION SLASH) (:REWRITE PROBLEM-123B) (:TYPE-PRESCRIPTION EXPR) (:TYPE-PRESCRIPTION EXPR-FN) (:TYPE-PRESCRIPTION SUBSTITUTION)) Warnings: Subsume and Non-rec Time: 0.11 seconds (prove: 0.09, print: 0.00, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-123 ACL2 >>(DEFUN F5 (X) (DECLARE (XARGS :MEASURE (NFIX X))) (IF (ZP X) 0 (IF (< (NFIX (F5 (- X 1))) (NFIX X)) (+ 1 (F5 (F5 (- X 1)))) 'UNDEF))) For the admission of F5 we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (NFIX X). The non-trivial part of the measure conjecture is Goal (AND (O-P (NFIX X)) (IMPLIES (NOT (ZP X)) (O< (NFIX (+ -1 X)) (NFIX X))) (IMPLIES (AND (NOT (ZP X)) (< (NFIX (F5 (+ -1 X))) (NFIX X))) (O< (NFIX (F5 (+ -1 X))) (NFIX X)))). By case analysis we reduce the conjecture to the following three conjectures. Subgoal 3 (O-P (NFIX X)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, the :definition NFIX and the :rewrite rule O-P-DEF-O-FINP-1. Subgoal 2 (IMPLIES (NOT (ZP X)) (O< (NFIX (+ -1 X)) (NFIX X))). But simplification reduces this to T, using the :compound-recognizer rules O-FINP-CR and ZP-COMPOUND-RECOGNIZER, the :definition NFIX, linear arithmetic, primitive type reasoning and the :rewrite rules <-+-NEGATIVE- 0-1 and O-FINP-<. Subgoal 1 (IMPLIES (AND (NOT (ZP X)) (< (NFIX (F5 (+ -1 X))) (NFIX X))) (O< (NFIX (F5 (+ -1 X))) (NFIX X))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and ZP-COMPOUND-RECOGNIZER, the :definition NFIX, the :executable-counterpart of NOT, primitive type reasoning and the :rewrite rules |0 < a = ~(a = 0)|, O-FINP-< and O-P-DEF-O-FINP-1. Q.E.D. That completes the proof of the measure theorem for F5. Thus, we admit this function under the principle of definition. We observe that the type of F5 is described by the theorem (OR (AND (INTEGERP (F5 X)) (<= 0 (F5 X))) (AND (SYMBOLP (F5 X)) (NOT (EQUAL (F5 X) T)) (NOT (EQUAL (F5 X) NIL)))). We used primitive type reasoning. Summary Form: ( DEFUN F5 ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION NFIX) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE |0 < a = ~(a = 0)|) (:REWRITE <-+-NEGATIVE-0-1) (:REWRITE O-FINP-<) (:REWRITE O-P-DEF-O-FINP-1)) Warnings: None Time: 0.14 seconds (prove: 0.01, print: 0.11, other: 0.02) F5 ACL2 >>(THEOREM PROBLEM-127 (IMPLIES (NATP X) (<= (F5 X) X)) :HINTS (("Goal" :INDUCT (F5 X))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (F5 X). This suggestion was produced using the :induction rule F5. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ZP X)) (<= (NFIX X) (NFIX (F5 (+ -1 X)))) (:P (+ -1 X))) (:P X)) (IMPLIES (AND (NOT (ZP X)) (< (NFIX (F5 (+ -1 X))) (NFIX X)) (:P (+ -1 X)) (:P (F5 (+ -1 X)))) (:P X)) (IMPLIES (ZP X) (:P X))). This induction is justified by the same argument used to admit F5, namely, the measure (NFIX X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ZP X)) (<= (NFIX X) (NFIX (F5 (+ -1 X)))) (IMPLIES (NATP (+ -1 X)) (<= (F5 (+ -1 X)) (+ -1 X)))) (IMPLIES (NATP X) (<= (F5 X) X))). By the simple :rewrite rule NATP-POSP--1 we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (ZP X)) (<= (NFIX X) (NFIX (F5 (+ -1 X)))) (IMPLIES (POSP X) (<= (F5 (+ -1 X)) (+ -1 X))) (NATP X)) (<= (F5 X) X)). This simplifies, using the :compound-recognizer rules NATP-CR, POSP- CR and ZP-COMPOUND-RECOGNIZER, the :definitions F5, NFIX and NOT, primitive type reasoning, the :forward-chaining rules POSP-FC-1 and POSP-FC-2, the :rewrite rule DEFAULT-<-2 and the :type-prescription rule F5, to Subgoal *1/3'' (IMPLIES (AND (NOT (ZP X)) (INTEGERP (F5 (+ -1 X))) (<= X (F5 (+ -1 X))) (<= (F5 (+ -1 X)) (+ -1 X))) (<= 0 X)). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER and primitive type reasoning. Subgoal *1/2 (IMPLIES (AND (NOT (ZP X)) (< (NFIX (F5 (+ -1 X))) (NFIX X)) (IMPLIES (NATP (+ -1 X)) (<= (F5 (+ -1 X)) (+ -1 X))) (IMPLIES (NATP (F5 (+ -1 X))) (<= (F5 (F5 (+ -1 X))) (F5 (+ -1 X))))) (IMPLIES (NATP X) (<= (F5 X) X))). By the simple :rewrite rule NATP-POSP--1 we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NOT (ZP X)) (< (NFIX (F5 (+ -1 X))) (NFIX X)) (IMPLIES (POSP X) (<= (F5 (+ -1 X)) (+ -1 X))) (IMPLIES (NATP (F5 (+ -1 X))) (<= (F5 (F5 (+ -1 X))) (F5 (+ -1 X)))) (NATP X)) (<= (F5 X) X)). This simplifies, using the :compound-recognizer rules NATP-CR, POSP- CR and ZP-COMPOUND-RECOGNIZER, the :definitions F5, NFIX and NOT, primitive type reasoning, the :forward-chaining rules POSP-FC-1 and POSP-FC-2, the :rewrite rules <-+-NEGATIVE-0-1, DEFAULT-<-1 and DEFAULT-<-2 and the :type-prescription rule F5, to the following two conjectures. Subgoal *1/2.2 (IMPLIES (AND (NOT (ZP X)) (INTEGERP (F5 (+ -1 X))) (< (F5 (+ -1 X)) X) (<= (F5 (+ -1 X)) (+ -1 X)) (<= (F5 (F5 (+ -1 X))) (F5 (+ -1 X)))) (<= (+ 1 (F5 (F5 (+ -1 X)))) X)). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, linear arithmetic, primitive type reasoning and the :type-prescription rule F5. Subgoal *1/2.1 (IMPLIES (AND (NOT (ZP X)) (NOT (INTEGERP (F5 (+ -1 X)))) (< 0 X)) (<= (+ 1 (F5 (F5 (+ -1 X)))) X)). This simplifies, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, the :definition F5, the :executable-counterpart of BINARY-+ and the :type-prescription rule F5, to Subgoal *1/2.1' (IMPLIES (AND (NOT (ZP X)) (NOT (INTEGERP (F5 (+ -1 X)))) (< 0 X)) (<= 1 X)). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER and primitive type reasoning. Subgoal *1/1 (IMPLIES (ZP X) (IMPLIES (NATP X) (<= (F5 X) X))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (ZP X) (NATP X)) (<= (F5 X) X)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and ZP-COMPOUND-RECOGNIZER, the :executable-counterparts of <, F5, NATP, NOT and ZP, linear arithmetic and the :forward-chaining rule NATP-FC-1. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-127 ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION F5) (:DEFINITION NFIX) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART F5) (:EXECUTABLE-COUNTERPART NATP) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART ZP) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING POSP-FC-1) (:FORWARD-CHAINING POSP-FC-2) (:INDUCTION F5) (:REWRITE <-+-NEGATIVE-0-1) (:REWRITE DEFAULT-<-1) (:REWRITE DEFAULT-<-2) (:REWRITE NATP-POSP--1) (:TYPE-PRESCRIPTION F5)) Warnings: None Time: 0.14 seconds (prove: 0.05, print: 0.09, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-127 ACL2 >>(THEOREM PROBLEM-128 (EQUAL (F5 X) (IF (ZP X) 0 (+ 1 (F5 (F5 (- X 1)))))) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-127))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] This simplifies, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, the :definitions F5 and NFIX, primitive type reasoning and the :type- prescription rule F5, to the following two conjectures. Subgoal 2 (IMPLIES (AND (NOT (ZP X)) (INTEGERP (F5 (+ -1 X))) (<= X (F5 (+ -1 X)))) (EQUAL 'UNDEF (+ 1 (F5 (F5 (+ -1 X)))))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and ZP-COMPOUND-RECOGNIZER, linear arithmetic, primitive type reasoning and the :linear rule PROBLEM-127. Subgoal 1 (IMPLIES (AND (NOT (ZP X)) (NOT (INTEGERP (F5 (+ -1 X)))) (<= X 0)) (EQUAL 'UNDEF (+ 1 (F5 (F5 (+ -1 X)))))). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER and primitive type reasoning. Q.E.D. Summary Form: ( DEFTHM PROBLEM-128 ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION F5) (:DEFINITION NFIX) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:LINEAR PROBLEM-127) (:TYPE-PRESCRIPTION F5)) Warnings: None Time: 0.05 seconds (prove: 0.02, print: 0.01, other: 0.02) PROBLEM-128 ACL2 >>(DEFUN FLATTEN-M (X) (IF (CONSP X) (IF (CONSP (CAR X)) (CONS (CAR (CAR X)) (CONS (CDR (CAR X)) (FLATTEN-M (CDR X)))) (CONS (CAR X) (FLATTEN-M (CDR X)))) NIL)) The admission of FLATTEN-M is trivial, using the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (ACL2-COUNT X). We observe that the type of FLATTEN-M is described by the theorem (TRUE-LISTP (FLATTEN-M X)). We used primitive type reasoning. Summary Form: ( DEFUN FLATTEN-M ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.01, other: 0.02) FLATTEN-M ACL2 >>(THEOREM PROBLEM-129A (IMPLIES (AND (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CAR (NTH PTR G)) (FLATTEN-M G))) :HINTS (("Goal" :INDUCT (NTH PTR G) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49A PROBLEM-112I PROBLEM-114E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (NTH PTR G). This suggestion was produced using the :induction rule NTH. If we let (:P G PTR) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP G)) (NOT (ZP PTR)) (:P (CDR G) (+ -1 PTR))) (:P G PTR)) (IMPLIES (AND (NOT (ENDP G)) (ZP PTR)) (:P G PTR)) (IMPLIES (ENDP G) (:P G PTR))). This induction is justified by the same argument used to admit NTH, namely, the measure (ACL2-COUNT PTR) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). Note, however, that the unmeasured variable G is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP G)) (NOT (ZP PTR)) (IMPLIES (AND (NATP (+ -1 PTR)) (< (+ -1 PTR) (LEN (CDR G))) (CONSP (NTH (+ -1 PTR) (CDR G)))) (MEM (CAR (NTH (+ -1 PTR) (CDR G))) (FLATTEN-M (CDR G))))) (IMPLIES (AND (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CAR (NTH PTR G)) (FLATTEN-M G)))). By the simple :definition ENDP and the simple :rewrite rule NATP-POSP- -1 we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (IMPLIES (AND (POSP PTR) (< (+ -1 PTR) (LEN (CDR G))) (CONSP (NTH (+ -1 PTR) (CDR G)))) (MEM (CAR (NTH (+ -1 PTR) (CDR G))) (FLATTEN-M (CDR G)))) (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CAR (NTH PTR G)) (FLATTEN-M G))). This simplifies, using the :compound-recognizer rules NATP-CR, POSP- CR and ZP-COMPOUND-RECOGNIZER, the :definitions FLATTEN-M, LEN and NTH and the :forward-chaining rules POSP-FC-1 and POSP-FC-2, to the following four conjectures. Subgoal *1/3.4 (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (<= (LEN (CDR G)) (+ -1 PTR)) (< PTR (+ 1 (LEN (CDR G)))) (CONSP (NTH (+ -1 PTR) (CDR G))) (CONSP (CAR G))) (MEM (CAR (NTH (+ -1 PTR) (CDR G))) (LIST* (CAAR G) (CDAR G) (FLATTEN-M (CDR G))))). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, linear arithmetic, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/3.3 (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (<= (LEN (CDR G)) (+ -1 PTR)) (< PTR (+ 1 (LEN (CDR G)))) (CONSP (NTH (+ -1 PTR) (CDR G))) (NOT (CONSP (CAR G)))) (MEM (CAR (NTH (+ -1 PTR) (CDR G))) (CONS (CAR G) (FLATTEN-M (CDR G))))). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, linear arithmetic, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/3.2 (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (MEM (CAR (NTH (+ -1 PTR) (CDR G))) (FLATTEN-M (CDR G))) (< PTR (+ 1 (LEN (CDR G)))) (CONSP (NTH (+ -1 PTR) (CDR G))) (CONSP (CAR G))) (MEM (CAR (NTH (+ -1 PTR) (CDR G))) (LIST* (CAAR G) (CDAR G) (FLATTEN-M (CDR G))))). But simplification reduces this to T, using the :rewrite rules PROBLEM- 114E, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM. Subgoal *1/3.1 (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (MEM (CAR (NTH (+ -1 PTR) (CDR G))) (FLATTEN-M (CDR G))) (< PTR (+ 1 (LEN (CDR G)))) (CONSP (NTH (+ -1 PTR) (CDR G))) (NOT (CONSP (CAR G)))) (MEM (CAR (NTH (+ -1 PTR) (CDR G))) (CONS (CAR G) (FLATTEN-M (CDR G))))). But simplification reduces this to T, using the :rewrite rules PROBLEM- 114E, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP G)) (ZP PTR)) (IMPLIES (AND (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CAR (NTH PTR G)) (FLATTEN-M G)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP G) (ZP PTR) (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CAR (NTH PTR G)) (FLATTEN-M G))). This simplifies, using the :compound-recognizer rules NATP-CR and ZP- COMPOUND-RECOGNIZER, the :executable-counterparts of NATP, NOT and ZP, linear arithmetic and the :forward-chaining rule NATP-FC-1, to Subgoal *1/2'' (IMPLIES (AND (CONSP G) (< 0 (LEN G)) (CONSP (NTH 0 G))) (MEM (CAR (NTH 0 G)) (FLATTEN-M G))). By the simple :rewrite rule PROBLEM-112I we reduce the conjecture to Subgoal *1/2''' (IMPLIES (AND (CONSP G) (CONSP (NTH 0 G))) (MEM (CAR (NTH 0 G)) (FLATTEN-M G))). This simplifies, using the :definition NTH and the :executable-counterpart of ZP, to Subgoal *1/2'4' (IMPLIES (AND (CONSP G) (CONSP (CAR G))) (MEM (CAAR G) (FLATTEN-M G))). The destructor terms (CAR G) and (CDR G) can be eliminated. Furthermore, those terms are at the root of a chain of two rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace G by (CONS G1 G2), (CAR G) by G1 and (CDR G) by G2. (2) Use CAR-CDR-ELIM, again, to replace G1 by (CONS G3 G4), (CAR G1) by G3 and (CDR G1) by G4. These steps produce the following goal. Subgoal *1/2'5' (IMPLIES (AND (CONSP (CONS G3 G4)) (CONSP (CONS (CONS G3 G4) G2))) (MEM G3 (FLATTEN-M (CONS (CONS G3 G4) G2)))). But simplification reduces this to T, using the :definitions FLATTEN- M and MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FLATTEN-M. Subgoal *1/1 (IMPLIES (ENDP G) (IMPLIES (AND (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CAR (NTH PTR G)) (FLATTEN-M G)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP G)) (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CAR (NTH PTR G)) (FLATTEN-M G))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definition LEN and the :forward-chaining rules NATP- FC-1 and NATP-FC-2. That completes the proof of *1. Q.E.D. The storage of PROBLEM-129A depends upon the :type-prescription rule MEM. Summary Form: ( DEFTHM PROBLEM-129A ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION ENDP) (:DEFINITION FLATTEN-M) (:DEFINITION LEN) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION NTH) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART NATP) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART ZP) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:FORWARD-CHAINING POSP-FC-1) (:FORWARD-CHAINING POSP-FC-2) (:INDUCTION NTH) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE NATP-POSP--1) (:REWRITE PROBLEM-112I) (:REWRITE PROBLEM-114E) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION FLATTEN-M) (:TYPE-PRESCRIPTION LEN) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.71 seconds (prove: 0.61, print: 0.09, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-129A ACL2 >>(THEOREM PROBLEM-129B (IMPLIES (AND (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CDR (NTH PTR G)) (FLATTEN-M G))) :HINTS (("Goal" :INDUCT (NTH PTR G) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49A PROBLEM-112I PROBLEM-114E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (NTH PTR G). This suggestion was produced using the :induction rule NTH. If we let (:P G PTR) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP G)) (NOT (ZP PTR)) (:P (CDR G) (+ -1 PTR))) (:P G PTR)) (IMPLIES (AND (NOT (ENDP G)) (ZP PTR)) (:P G PTR)) (IMPLIES (ENDP G) (:P G PTR))). This induction is justified by the same argument used to admit NTH, namely, the measure (ACL2-COUNT PTR) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). Note, however, that the unmeasured variable G is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP G)) (NOT (ZP PTR)) (IMPLIES (AND (NATP (+ -1 PTR)) (< (+ -1 PTR) (LEN (CDR G))) (CONSP (NTH (+ -1 PTR) (CDR G)))) (MEM (CDR (NTH (+ -1 PTR) (CDR G))) (FLATTEN-M (CDR G))))) (IMPLIES (AND (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CDR (NTH PTR G)) (FLATTEN-M G)))). By the simple :definition ENDP and the simple :rewrite rule NATP-POSP- -1 we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (IMPLIES (AND (POSP PTR) (< (+ -1 PTR) (LEN (CDR G))) (CONSP (NTH (+ -1 PTR) (CDR G)))) (MEM (CDR (NTH (+ -1 PTR) (CDR G))) (FLATTEN-M (CDR G)))) (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CDR (NTH PTR G)) (FLATTEN-M G))). This simplifies, using the :compound-recognizer rules NATP-CR, POSP- CR and ZP-COMPOUND-RECOGNIZER, the :definitions FLATTEN-M, LEN and NTH and the :forward-chaining rules POSP-FC-1 and POSP-FC-2, to the following four conjectures. Subgoal *1/3.4 (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (<= (LEN (CDR G)) (+ -1 PTR)) (< PTR (+ 1 (LEN (CDR G)))) (CONSP (NTH (+ -1 PTR) (CDR G))) (CONSP (CAR G))) (MEM (CDR (NTH (+ -1 PTR) (CDR G))) (LIST* (CAAR G) (CDAR G) (FLATTEN-M (CDR G))))). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, linear arithmetic, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/3.3 (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (<= (LEN (CDR G)) (+ -1 PTR)) (< PTR (+ 1 (LEN (CDR G)))) (CONSP (NTH (+ -1 PTR) (CDR G))) (NOT (CONSP (CAR G)))) (MEM (CDR (NTH (+ -1 PTR) (CDR G))) (CONS (CAR G) (FLATTEN-M (CDR G))))). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, linear arithmetic, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/3.2 (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (MEM (CDR (NTH (+ -1 PTR) (CDR G))) (FLATTEN-M (CDR G))) (< PTR (+ 1 (LEN (CDR G)))) (CONSP (NTH (+ -1 PTR) (CDR G))) (CONSP (CAR G))) (MEM (CDR (NTH (+ -1 PTR) (CDR G))) (LIST* (CAAR G) (CDAR G) (FLATTEN-M (CDR G))))). But simplification reduces this to T, using the :rewrite rules PROBLEM- 114E, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM. Subgoal *1/3.1 (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (MEM (CDR (NTH (+ -1 PTR) (CDR G))) (FLATTEN-M (CDR G))) (< PTR (+ 1 (LEN (CDR G)))) (CONSP (NTH (+ -1 PTR) (CDR G))) (NOT (CONSP (CAR G)))) (MEM (CDR (NTH (+ -1 PTR) (CDR G))) (CONS (CAR G) (FLATTEN-M (CDR G))))). But simplification reduces this to T, using the :rewrite rules PROBLEM- 114E, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP G)) (ZP PTR)) (IMPLIES (AND (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CDR (NTH PTR G)) (FLATTEN-M G)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP G) (ZP PTR) (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CDR (NTH PTR G)) (FLATTEN-M G))). This simplifies, using the :compound-recognizer rules NATP-CR and ZP- COMPOUND-RECOGNIZER, the :executable-counterparts of NATP, NOT and ZP, linear arithmetic and the :forward-chaining rule NATP-FC-1, to Subgoal *1/2'' (IMPLIES (AND (CONSP G) (< 0 (LEN G)) (CONSP (NTH 0 G))) (MEM (CDR (NTH 0 G)) (FLATTEN-M G))). By the simple :rewrite rule PROBLEM-112I we reduce the conjecture to Subgoal *1/2''' (IMPLIES (AND (CONSP G) (CONSP (NTH 0 G))) (MEM (CDR (NTH 0 G)) (FLATTEN-M G))). This simplifies, using the :definition NTH and the :executable-counterpart of ZP, to Subgoal *1/2'4' (IMPLIES (AND (CONSP G) (CONSP (CAR G))) (MEM (CDAR G) (FLATTEN-M G))). The destructor terms (CAR G) and (CDR G) can be eliminated. Furthermore, those terms are at the root of a chain of two rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace G by (CONS G1 G2), (CAR G) by G1 and (CDR G) by G2. (2) Use CAR-CDR-ELIM, again, to replace G1 by (CONS G3 G4), (CAR G1) by G3 and (CDR G1) by G4. These steps produce the following goal. Subgoal *1/2'5' (IMPLIES (AND (CONSP (CONS G3 G4)) (CONSP (CONS (CONS G3 G4) G2))) (MEM G4 (FLATTEN-M (CONS (CONS G3 G4) G2)))). But simplification reduces this to T, using the :definitions FLATTEN- M and MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FLATTEN-M. Subgoal *1/1 (IMPLIES (ENDP G) (IMPLIES (AND (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CDR (NTH PTR G)) (FLATTEN-M G)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP G)) (NATP PTR) (< PTR (LEN G)) (CONSP (NTH PTR G))) (MEM (CDR (NTH PTR G)) (FLATTEN-M G))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definition LEN and the :forward-chaining rules NATP- FC-1 and NATP-FC-2. That completes the proof of *1. Q.E.D. The storage of PROBLEM-129B depends upon the :type-prescription rule MEM. Summary Form: ( DEFTHM PROBLEM-129B ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION ENDP) (:DEFINITION FLATTEN-M) (:DEFINITION LEN) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION NTH) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART NATP) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART ZP) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:FORWARD-CHAINING POSP-FC-1) (:FORWARD-CHAINING POSP-FC-2) (:INDUCTION NTH) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE NATP-POSP--1) (:REWRITE PROBLEM-112I) (:REWRITE PROBLEM-114E) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION FLATTEN-M) (:TYPE-PRESCRIPTION LEN) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.80 seconds (prove: 0.65, print: 0.12, other: 0.03) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-129B ACL2 >>(THEOREM PROBLEM-129C (IMPLIES (AND (NATP PTR) (< PTR (LEN G)) (NOT (CONSP (NTH PTR G)))) (MEM (NTH PTR G) (FLATTEN-M G))) :HINTS (("Goal" :INDUCT (NTH PTR G) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49A PROBLEM-112I PROBLEM-114E)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (NTH PTR G). This suggestion was produced using the :induction rule NTH. If we let (:P G PTR) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (AND (NOT (ENDP G)) (NOT (ZP PTR)) (:P (CDR G) (+ -1 PTR))) (:P G PTR)) (IMPLIES (AND (NOT (ENDP G)) (ZP PTR)) (:P G PTR)) (IMPLIES (ENDP G) (:P G PTR))). This induction is justified by the same argument used to admit NTH, namely, the measure (ACL2-COUNT PTR) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). Note, however, that the unmeasured variable G is being instantiated. When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (AND (NOT (ENDP G)) (NOT (ZP PTR)) (IMPLIES (AND (NATP (+ -1 PTR)) (< (+ -1 PTR) (LEN (CDR G))) (NOT (CONSP (NTH (+ -1 PTR) (CDR G))))) (MEM (NTH (+ -1 PTR) (CDR G)) (FLATTEN-M (CDR G))))) (IMPLIES (AND (NATP PTR) (< PTR (LEN G)) (NOT (CONSP (NTH PTR G)))) (MEM (NTH PTR G) (FLATTEN-M G)))). By the simple :definition ENDP and the simple :rewrite rule NATP-POSP- -1 we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (IMPLIES (AND (POSP PTR) (< (+ -1 PTR) (LEN (CDR G))) (NOT (CONSP (NTH (+ -1 PTR) (CDR G))))) (MEM (NTH (+ -1 PTR) (CDR G)) (FLATTEN-M (CDR G)))) (NATP PTR) (< PTR (LEN G)) (NOT (CONSP (NTH PTR G)))) (MEM (NTH PTR G) (FLATTEN-M G))). This simplifies, using the :compound-recognizer rules NATP-CR, POSP- CR and ZP-COMPOUND-RECOGNIZER, the :definitions FLATTEN-M, LEN, NOT and NTH and the :forward-chaining rules POSP-FC-1 and POSP-FC-2, to the following four conjectures. Subgoal *1/3.4 (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (<= (LEN (CDR G)) (+ -1 PTR)) (< PTR (+ 1 (LEN (CDR G)))) (NOT (CONSP (NTH (+ -1 PTR) (CDR G)))) (CONSP (CAR G))) (MEM (NTH (+ -1 PTR) (CDR G)) (LIST* (CAAR G) (CDAR G) (FLATTEN-M (CDR G))))). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, linear arithmetic, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/3.3 (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (<= (LEN (CDR G)) (+ -1 PTR)) (< PTR (+ 1 (LEN (CDR G)))) (NOT (CONSP (NTH (+ -1 PTR) (CDR G)))) (NOT (CONSP (CAR G)))) (MEM (NTH (+ -1 PTR) (CDR G)) (CONS (CAR G) (FLATTEN-M (CDR G))))). But simplification reduces this to T, using the :compound-recognizer rule ZP-COMPOUND-RECOGNIZER, linear arithmetic, primitive type reasoning and the :type-prescription rule LEN. Subgoal *1/3.2 (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (MEM (NTH (+ -1 PTR) (CDR G)) (FLATTEN-M (CDR G))) (< PTR (+ 1 (LEN (CDR G)))) (NOT (CONSP (NTH (+ -1 PTR) (CDR G)))) (CONSP (CAR G))) (MEM (NTH (+ -1 PTR) (CDR G)) (LIST* (CAAR G) (CDAR G) (FLATTEN-M (CDR G))))). But simplification reduces this to T, using the :rewrite rules PROBLEM- 114E, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM. Subgoal *1/3.1 (IMPLIES (AND (CONSP G) (NOT (ZP PTR)) (MEM (NTH (+ -1 PTR) (CDR G)) (FLATTEN-M (CDR G))) (< PTR (+ 1 (LEN (CDR G)))) (NOT (CONSP (NTH (+ -1 PTR) (CDR G)))) (NOT (CONSP (CAR G)))) (MEM (NTH (+ -1 PTR) (CDR G)) (CONS (CAR G) (FLATTEN-M (CDR G))))). But simplification reduces this to T, using the :rewrite rules PROBLEM- 114E, PROBLEM-48 and PROBLEM-49A and the :type-prescription rule MEM. Subgoal *1/2 (IMPLIES (AND (NOT (ENDP G)) (ZP PTR)) (IMPLIES (AND (NATP PTR) (< PTR (LEN G)) (NOT (CONSP (NTH PTR G)))) (MEM (NTH PTR G) (FLATTEN-M G)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP G) (ZP PTR) (NATP PTR) (< PTR (LEN G)) (NOT (CONSP (NTH PTR G)))) (MEM (NTH PTR G) (FLATTEN-M G))). This simplifies, using the :compound-recognizer rules NATP-CR and ZP- COMPOUND-RECOGNIZER, the :executable-counterparts of NATP, NOT and ZP, linear arithmetic and the :forward-chaining rule NATP-FC-1, to Subgoal *1/2'' (IMPLIES (AND (CONSP G) (< 0 (LEN G)) (NOT (CONSP (NTH 0 G)))) (MEM (NTH 0 G) (FLATTEN-M G))). By the simple :rewrite rule PROBLEM-112I we reduce the conjecture to Subgoal *1/2''' (IMPLIES (AND (CONSP G) (NOT (CONSP (NTH 0 G)))) (MEM (NTH 0 G) (FLATTEN-M G))). This simplifies, using the :definition NTH and the :executable-counterpart of ZP, to Subgoal *1/2'4' (IMPLIES (AND (CONSP G) (NOT (CONSP (CAR G)))) (MEM (CAR G) (FLATTEN-M G))). The destructor terms (CAR G) and (CDR G) can be eliminated by using CAR-CDR-ELIM to replace G by (CONS G1 G2), (CAR G) by G1 and (CDR G) by G2. This produces the following goal. Subgoal *1/2'5' (IMPLIES (AND (CONSP (CONS G1 G2)) (NOT (CONSP G1))) (MEM G1 (FLATTEN-M (CONS G1 G2)))). But simplification reduces this to T, using the :definitions FLATTEN- M and MEM, primitive type reasoning, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule FLATTEN-M. Subgoal *1/1 (IMPLIES (ENDP G) (IMPLIES (AND (NATP PTR) (< PTR (LEN G)) (NOT (CONSP (NTH PTR G)))) (MEM (NTH PTR G) (FLATTEN-M G)))). By the simple :definition ENDP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NOT (CONSP G)) (NATP PTR) (< PTR (LEN G)) (NOT (CONSP (NTH PTR G)))) (MEM (NTH PTR G) (FLATTEN-M G))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definition LEN and the :forward-chaining rules NATP- FC-1 and NATP-FC-2. That completes the proof of *1. Q.E.D. The storage of PROBLEM-129C depends upon the :type-prescription rule MEM. Summary Form: ( DEFTHM PROBLEM-129C ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:COMPOUND-RECOGNIZER ZP-COMPOUND-RECOGNIZER) (:DEFINITION ENDP) (:DEFINITION FLATTEN-M) (:DEFINITION LEN) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION NTH) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART NATP) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART ZP) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:FORWARD-CHAINING POSP-FC-1) (:FORWARD-CHAINING POSP-FC-2) (:INDUCTION NTH) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE NATP-POSP--1) (:REWRITE PROBLEM-112I) (:REWRITE PROBLEM-114E) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION FLATTEN-M) (:TYPE-PRESCRIPTION LEN) (:TYPE-PRESCRIPTION MEM)) Warnings: None Time: 0.75 seconds (prove: 0.64, print: 0.09, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-129C ACL2 >>(THEOREM PROBLEM-129D (IMPLIES (SUB SEEN1 SEEN2) (<= (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1))) :HINTS (("Goal" :INDUCT (LEN-DIFF X SEEN2) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49A))) :RULE-CLASSES :LINEAR) ACL2 Warning [Free] in ( DEFTHM PROBLEM-129D ...): The :LINEAR rule generated from PROBLEM-129D will be triggered by the terms (LEN-DIFF X SEEN2) and (LEN-DIFF X SEEN1). When PROBLEM-129D is triggered by (LEN-DIFF X SEEN2) the variable SEEN1 will be chosen by searching for an instance of (SUB SEEN1 SEEN2) among the hypotheses of the conjecture being rewritten. When PROBLEM-129D is triggered by (LEN-DIFF X SEEN1) the variable SEEN2 will be chosen by searching for an instance of (SUB SEEN1 SEEN2) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :LINEAR rule. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (LEN-DIFF X SEEN2). This suggestion was produced using the :induction rule LEN-DIFF. If we let (:P SEEN1 SEEN2 X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P SEEN1 SEEN2 X)) (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) SEEN2)) (:P SEEN1 SEEN2 (CDR X))) (:P SEEN1 SEEN2 X)) (IMPLIES (AND (CONSP X) (MEM (CAR X) SEEN2) (:P SEEN1 SEEN2 (CDR X))) (:P SEEN1 SEEN2 X))). This induction is justified by the same argument used to admit LEN- DIFF, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (SUB SEEN1 SEEN2) (<= (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (SUB SEEN1 SEEN2)) (<= (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1))). But simplification reduces this to T, using the :definition LEN-DIFF and the :executable-counterpart of <. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) SEEN2)) (IMPLIES (SUB SEEN1 SEEN2) (<= (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)))) (IMPLIES (SUB SEEN1 SEEN2) (<= (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) SEEN2)) (IMPLIES (SUB SEEN1 SEEN2) (<= (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1))) (SUB SEEN1 SEEN2)) (<= (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1))). This simplifies, using the :definitions LEN-DIFF and NOT and the :type- prescription rule SUB, to the following two conjectures. Subgoal *1/2.2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) SEEN2)) (<= (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)) (SUB SEEN1 SEEN2) (MEM (CAR X) SEEN1)) (<= (+ 1 (LEN-DIFF (CDR X) SEEN2)) (LEN-DIFF (CDR X) SEEN1))). This simplifies, using linear arithmetic, primitive type reasoning and the :type-prescription rule LEN-DIFF, to Subgoal *1/2.2' (IMPLIES (AND (EQUAL (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)) (CONSP X) (NOT (MEM (CAR X) SEEN2)) (<= (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)) (SUB SEEN1 SEEN2) (MEM (CAR X) SEEN1)) (<= (+ 1 (LEN-DIFF (CDR X) SEEN2)) (LEN-DIFF (CDR X) SEEN1))). But simplification reduces this to T, using the :rewrite rule PROBLEM- 49A and the :type-prescription rules MEM and SUB. Subgoal *1/2.1 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) SEEN2)) (<= (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)) (SUB SEEN1 SEEN2) (NOT (MEM (CAR X) SEEN1))) (<= (+ 1 (LEN-DIFF (CDR X) SEEN2)) (+ 1 (LEN-DIFF (CDR X) SEEN1)))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule LEN-DIFF. Subgoal *1/1 (IMPLIES (AND (CONSP X) (MEM (CAR X) SEEN2) (IMPLIES (SUB SEEN1 SEEN2) (<= (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)))) (IMPLIES (SUB SEEN1 SEEN2) (<= (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (MEM (CAR X) SEEN2) (IMPLIES (SUB SEEN1 SEEN2) (<= (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1))) (SUB SEEN1 SEEN2)) (<= (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1))). This simplifies, using the :definitions LEN-DIFF and NOT, the :rewrite rules PROBLEM-48 and PROBLEM-49A and the :type-prescription rules MEM and SUB, to Subgoal *1/1'' (IMPLIES (AND (CONSP X) (MEM (CAR X) SEEN2) (<= (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)) (SUB SEEN1 SEEN2) (NOT (MEM (CAR X) SEEN1))) (<= (LEN-DIFF (CDR X) SEEN2) (+ 1 (LEN-DIFF (CDR X) SEEN1)))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule LEN-DIFF. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-129D ...) Rules: ((:DEFINITION LEN-DIFF) (:DEFINITION NOT) (:EXECUTABLE-COUNTERPART <) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION LEN-DIFF) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION LEN-DIFF) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION SUB)) Warnings: Free Time: 0.12 seconds (prove: 0.03, print: 0.08, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-129D ACL2 >>(THEOREM PROBLEM-129E (IMPLIES (AND (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR X)) (< (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1))) :HINTS (("Goal" :INDUCT (LEN-DIFF X SEEN1) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49 PROBLEM-49A PROBLEM-129D))) :RULE-CLASSES :LINEAR) ACL2 Warning [Free] in ( DEFTHM PROBLEM-129E ...): The :LINEAR rule generated from PROBLEM-129E will be triggered by the terms (LEN-DIFF X SEEN2) and (LEN-DIFF X SEEN1). When PROBLEM-129E is triggered by (LEN-DIFF X SEEN2) the variables SEEN1 and PTR will be chosen by searching for an instance of (NOT (MEM PTR SEEN1)) among the hypotheses of the conjecture being rewritten. When PROBLEM-129E is triggered by (LEN-DIFF X SEEN1) the variables SEEN2 and PTR will be chosen by searching for instances of (NOT (MEM PTR SEEN1)) and (MEM PTR SEEN2) among the hypotheses of the conjecture being rewritten. This is generally a severe restriction on the applicability of the :LINEAR rule. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (LEN-DIFF X SEEN1). This suggestion was produced using the :induction rule LEN-DIFF. If we let (:P PTR SEEN1 SEEN2 X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P PTR SEEN1 SEEN2 X)) (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) SEEN1)) (:P PTR SEEN1 SEEN2 (CDR X))) (:P PTR SEEN1 SEEN2 X)) (IMPLIES (AND (CONSP X) (MEM (CAR X) SEEN1) (:P PTR SEEN1 SEEN2 (CDR X))) (:P PTR SEEN1 SEEN2 X))). This induction is justified by the same argument used to admit LEN- DIFF, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (IMPLIES (AND (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR X)) (< (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NOT (CONSP X)) (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR X)) (< (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1))). This simplifies, using linear arithmetic, the :linear rule PROBLEM- 129D and the :type-prescription rules LEN-DIFF and SUB, to Subgoal *1/3'' (IMPLIES (AND (EQUAL (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1)) (NOT (CONSP X)) (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR X)) (< (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1))). But simplification reduces this to T, using the :definitions LEN-DIFF and SUB, the :executable-counterpart of EQUAL, the :rewrite rule PROBLEM- 49A and the :type-prescription rule MEM. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) SEEN1)) (IMPLIES (AND (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR (CDR X))) (< (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)))) (IMPLIES (AND (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR X)) (< (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) SEEN1)) (IMPLIES (AND (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR (CDR X))) (< (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1))) (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR X)) (< (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1))). This simplifies, using the :definitions LEN-DIFF and MEM, the :executable- counterpart of NOT, primitive type reasoning, the :rewrite rules PROBLEM- 48, PROBLEM-49 and PROBLEM-49A and the :type-prescription rules MEM and SUB, to the following four conjectures. Subgoal *1/2.4 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) SEEN1)) (NOT (MEM PTR (CDR X))) (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (EQUAL PTR (CAR X))) (< (LEN-DIFF (CDR X) SEEN2) (+ 1 (LEN-DIFF (CDR X) SEEN1)))). But simplification reduces this to T, using linear arithmetic, the :linear rule PROBLEM-129D and the :type-prescription rule SUB. Subgoal *1/2.3 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) SEEN1)) (< (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)) (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (EQUAL PTR (CAR X))) (< (LEN-DIFF (CDR X) SEEN2) (+ 1 (LEN-DIFF (CDR X) SEEN1)))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule LEN-DIFF. Subgoal *1/2.2 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) SEEN1)) (< (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)) (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR (CDR X)) (MEM (CAR X) SEEN2)) (< (LEN-DIFF (CDR X) SEEN2) (+ 1 (LEN-DIFF (CDR X) SEEN1)))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule LEN-DIFF. Subgoal *1/2.1 (IMPLIES (AND (CONSP X) (NOT (MEM (CAR X) SEEN1)) (< (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)) (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR (CDR X)) (NOT (MEM (CAR X) SEEN2))) (< (+ 1 (LEN-DIFF (CDR X) SEEN2)) (+ 1 (LEN-DIFF (CDR X) SEEN1)))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule LEN-DIFF. Subgoal *1/1 (IMPLIES (AND (CONSP X) (MEM (CAR X) SEEN1) (IMPLIES (AND (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR (CDR X))) (< (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)))) (IMPLIES (AND (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR X)) (< (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (MEM (CAR X) SEEN1) (IMPLIES (AND (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR (CDR X))) (< (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1))) (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (MEM PTR X)) (< (LEN-DIFF X SEEN2) (LEN-DIFF X SEEN1))). This simplifies, using the :definitions LEN-DIFF and MEM, the :executable- counterpart of NOT, primitive type reasoning, the :rewrite rules PROBLEM- 48, PROBLEM-49 and PROBLEM-49A and the :type-prescription rules MEM and SUB, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (MEM (CAR X) SEEN1) (NOT (MEM PTR (CDR X))) (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (EQUAL PTR (CAR X))) (< (LEN-DIFF (CDR X) SEEN2) (+ 1 (LEN-DIFF (CDR X) SEEN1)))). But simplification reduces this to T, using trivial observations. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (MEM (CAR X) SEEN1) (< (LEN-DIFF (CDR X) SEEN2) (LEN-DIFF (CDR X) SEEN1)) (NOT (MEM PTR SEEN1)) (MEM PTR SEEN2) (SUB SEEN1 SEEN2) (EQUAL PTR (CAR X))) (< (LEN-DIFF (CDR X) SEEN2) (+ 1 (LEN-DIFF (CDR X) SEEN1)))). But simplification reduces this to T, using trivial observations. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-129E ...) Rules: ((:DEFINITION LEN-DIFF) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION SUB) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION LEN-DIFF) (:LINEAR PROBLEM-129D) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION LEN-DIFF) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION SUB)) Warnings: Free Time: 0.23 seconds (prove: 0.12, print: 0.09, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-129E ACL2 >>(DEFUN REACHABLES (PTR M SEEN) (DECLARE (XARGS :MEASURE (M2 (IF (MEM PTR (FLATTEN-M M)) 1 2) (LEN-DIFF (FLATTEN-M M) SEEN)) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-114E PROBLEM-129A PROBLEM-129B PROBLEM-129C PROBLEM-129E))))) (IF (ADDRESSP PTR M) (IF (MEM PTR SEEN) SEEN (IF (CONSP (NTH PTR M)) (IF (SUB (CONS PTR SEEN) (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN))) (REACHABLES (CAR (NTH PTR M)) M (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN))) 'UNDEF) (REACHABLES (NTH PTR M) M (CONS PTR SEEN)))) SEEN)) For the admission of REACHABLES we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (M2 (IF (MEM PTR (FLATTEN-M M)) 1 2) (LEN-DIFF (FLATTEN-M M) SEEN)). The non-trivial part of the measure conjecture is Goal (AND (O-P (M2 (IF (MEM PTR (FLATTEN-M M)) 1 2) (LEN-DIFF (FLATTEN-M M) SEEN))) (IMPLIES (AND (ADDRESSP PTR M) (NOT (MEM PTR SEEN)) (NOT (CONSP (NTH PTR M)))) (O< (M2 (IF (MEM (NTH PTR M) (FLATTEN-M M)) 1 2) (LEN-DIFF (FLATTEN-M M) (CONS PTR SEEN))) (M2 (IF (MEM PTR (FLATTEN-M M)) 1 2) (LEN-DIFF (FLATTEN-M M) SEEN)))) (IMPLIES (AND (ADDRESSP PTR M) (NOT (MEM PTR SEEN)) (CONSP (NTH PTR M))) (O< (M2 (IF (MEM (CDR (NTH PTR M)) (FLATTEN-M M)) 1 2) (LEN-DIFF (FLATTEN-M M) (CONS PTR SEEN))) (M2 (IF (MEM PTR (FLATTEN-M M)) 1 2) (LEN-DIFF (FLATTEN-M M) SEEN)))) (IMPLIES (AND (ADDRESSP PTR M) (NOT (MEM PTR SEEN)) (CONSP (NTH PTR M)) (SUB (CONS PTR SEEN) (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN)))) (O< (M2 (IF (MEM (CAR (NTH PTR M)) (FLATTEN-M M)) 1 2) (LEN-DIFF (FLATTEN-M M) (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN)))) (M2 (IF (MEM PTR (FLATTEN-M M)) 1 2) (LEN-DIFF (FLATTEN-M M) SEEN))))). [Note: A hint was supplied for our processing of the goal above. Thanks!] By the simple :definitions ADDRESSP and M2 we reduce the conjecture to the following four conjectures. Subgoal 4 (O-P (CONS (CONS 1 (+ 1 (IF (MEM PTR (FLATTEN-M M)) 1 2))) (LEN-DIFF (FLATTEN-M M) SEEN))). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR, O-FINP-CR and POSP-CR, the :definitions O-FIRST-COEFF, O-FIRST-EXPT, O-P and O-RST, the :executable-counterparts of EQUAL, O-P and O<, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, O-FIRST-EXPT-DEF-O-FINP and O-P-DEF-O-FINP-1 and the :type- prescription rule LEN-DIFF. Subgoal 3 (IMPLIES (AND (NATP PTR) (< PTR (LEN M)) (NOT (MEM PTR SEEN)) (NOT (CONSP (NTH PTR M)))) (O< (CONS (CONS 1 (+ 1 (IF (MEM (NTH PTR M) (FLATTEN-M M)) 1 2))) (LEN-DIFF (FLATTEN-M M) (CONS PTR SEEN))) (CONS (CONS 1 (+ 1 (IF (MEM PTR (FLATTEN-M M)) 1 2))) (LEN-DIFF (FLATTEN-M M) SEEN)))). This simplifies, using the :compound-recognizer rules NATP-CR and O- FINP-CR, the :definitions O-FIRST-COEFF, O-FIRST-EXPT, O-RST, O< and SYNP, the :executable-counterparts of ACL2-NUMBERP, BINARY-+, CAR, CDR, CONS, EQUAL and UNARY--, primitive type reasoning, the :forward- chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules CAR-CONS, CDR-CONS, EQUAL-CONSTANT-+ and PROBLEM-129C and the :type-prescription rule LEN-DIFF, to Subgoal 3' (IMPLIES (AND (NATP PTR) (< PTR (LEN M)) (NOT (MEM PTR SEEN)) (NOT (CONSP (NTH PTR M))) (MEM PTR (FLATTEN-M M))) (< (LEN-DIFF (FLATTEN-M M) (CONS PTR SEEN)) (LEN-DIFF (FLATTEN-M M) SEEN))). But simplification reduces this to T, using the :definition MEM, linear arithmetic, primitive type reasoning, the :linear rule PROBLEM-129E, the :rewrite rules CAR-CONS, PROBLEM-114E and PROBLEM-48 and the :type- prescription rules LEN-DIFF and MEM. Subgoal 2 (IMPLIES (AND (NATP PTR) (< PTR (LEN M)) (NOT (MEM PTR SEEN)) (CONSP (NTH PTR M))) (O< (CONS (CONS 1 (+ 1 (IF (MEM (CDR (NTH PTR M)) (FLATTEN-M M)) 1 2))) (LEN-DIFF (FLATTEN-M M) (CONS PTR SEEN))) (CONS (CONS 1 (+ 1 (IF (MEM PTR (FLATTEN-M M)) 1 2))) (LEN-DIFF (FLATTEN-M M) SEEN)))). This simplifies, using the :compound-recognizer rules NATP-CR and O- FINP-CR, the :definitions O-FIRST-COEFF, O-FIRST-EXPT, O-RST, O< and SYNP, the :executable-counterparts of ACL2-NUMBERP, BINARY-+, CAR, CDR, CONS, EQUAL and UNARY--, primitive type reasoning, the :forward- chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules CAR-CONS, CDR-CONS, EQUAL-CONSTANT-+ and PROBLEM-129B and the :type-prescription rule LEN-DIFF, to Subgoal 2' (IMPLIES (AND (NATP PTR) (< PTR (LEN M)) (NOT (MEM PTR SEEN)) (CONSP (NTH PTR M)) (MEM PTR (FLATTEN-M M))) (< (LEN-DIFF (FLATTEN-M M) (CONS PTR SEEN)) (LEN-DIFF (FLATTEN-M M) SEEN))). But simplification reduces this to T, using the :definition MEM, linear arithmetic, primitive type reasoning, the :linear rule PROBLEM-129E, the :rewrite rules CAR-CONS, PROBLEM-114E and PROBLEM-48 and the :type- prescription rules LEN-DIFF and MEM. Subgoal 1 (IMPLIES (AND (NATP PTR) (< PTR (LEN M)) (NOT (MEM PTR SEEN)) (CONSP (NTH PTR M)) (SUB (CONS PTR SEEN) (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN)))) (O< (CONS (CONS 1 (+ 1 (IF (MEM (CAR (NTH PTR M)) (FLATTEN-M M)) 1 2))) (LEN-DIFF (FLATTEN-M M) (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN)))) (CONS (CONS 1 (+ 1 (IF (MEM PTR (FLATTEN-M M)) 1 2))) (LEN-DIFF (FLATTEN-M M) SEEN)))). This simplifies, using the :compound-recognizer rules NATP-CR and O- FINP-CR, the :definitions O-FIRST-COEFF, O-FIRST-EXPT, O-RST, O<, SUB and SYNP, the :executable-counterparts of ACL2-NUMBERP, BINARY-+, CAR, CDR, CONS, EQUAL and UNARY--, primitive type reasoning, the :forward- chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules CAR-CONS, CDR-CONS, EQUAL-CONSTANT-+ and PROBLEM-129A and the :type-prescription rule LEN-DIFF, to Subgoal 1' (IMPLIES (AND (NATP PTR) (< PTR (LEN M)) (NOT (MEM PTR SEEN)) (CONSP (NTH PTR M)) (MEM PTR (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN))) (SUB SEEN (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN))) (MEM PTR (FLATTEN-M M))) (< (LEN-DIFF (FLATTEN-M M) (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN))) (LEN-DIFF (FLATTEN-M M) SEEN))). But simplification reduces this to T, using linear arithmetic, the :linear rule PROBLEM-129E and the :type-prescription rules LEN-DIFF, MEM and SUB. Q.E.D. That completes the proof of the measure theorem for REACHABLES. Thus, we admit this function under the principle of definition. We observe that the type of REACHABLES is described by the theorem (OR (OR (CONSP (REACHABLES PTR M SEEN)) (AND (SYMBOLP (REACHABLES PTR M SEEN)) (NOT (EQUAL (REACHABLES PTR M SEEN) T)) (NOT (EQUAL (REACHABLES PTR M SEEN) NIL)))) (EQUAL (REACHABLES PTR M SEEN) SEEN)). We used primitive type reasoning. Summary Form: ( DEFUN REACHABLES ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:COMPOUND-RECOGNIZER POSP-CR) (:DEFINITION ADDRESSP) (:DEFINITION M2) (:DEFINITION MEM) (:DEFINITION NOT) (:DEFINITION O-FIRST-COEFF) (:DEFINITION O-FIRST-EXPT) (:DEFINITION O-P) (:DEFINITION O-RST) (:DEFINITION O<) (:DEFINITION SUB) (:DEFINITION SYNP) (:EXECUTABLE-COUNTERPART ACL2-NUMBERP) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART CAR) (:EXECUTABLE-COUNTERPART CDR) (:EXECUTABLE-COUNTERPART CONS) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART O-P) (:EXECUTABLE-COUNTERPART O<) (:EXECUTABLE-COUNTERPART UNARY--) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:LINEAR PROBLEM-129E) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE EQUAL-CONSTANT-+) (:REWRITE O-FIRST-EXPT-DEF-O-FINP) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE PROBLEM-114E) (:REWRITE PROBLEM-129A) (:REWRITE PROBLEM-129B) (:REWRITE PROBLEM-129C) (:REWRITE PROBLEM-48) (:TYPE-PRESCRIPTION LEN-DIFF) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION SUB)) Warnings: None Time: 1.34 seconds (prove: 1.23, print: 0.08, other: 0.03) REACHABLES ACL2 >>(THEOREM PROBLEM-129F (SUB SEEN (REACHABLES PTR M SEEN)) :HINTS (("Goal" :INDUCT (REACHABLES PTR M SEEN) :IN-THEORY (ENABLE PROBLEM-48 PROBLEM-49 PROBLEM-49A))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (REACHABLES PTR M SEEN). This suggestion was produced using the :induction rule REACHABLES. If we let (:P M PTR SEEN) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (ADDRESSP PTR M)) (:P M PTR SEEN)) (IMPLIES (AND (ADDRESSP PTR M) (NOT (MEM PTR SEEN)) (NOT (CONSP (NTH PTR M))) (:P M (NTH PTR M) (CONS PTR SEEN))) (:P M PTR SEEN)) (IMPLIES (AND (ADDRESSP PTR M) (NOT (MEM PTR SEEN)) (CONSP (NTH PTR M)) (NOT (SUB (CONS PTR SEEN) (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN)))) (:P M (CDR (NTH PTR M)) (CONS PTR SEEN))) (:P M PTR SEEN)) (IMPLIES (AND (ADDRESSP PTR M) (NOT (MEM PTR SEEN)) (CONSP (NTH PTR M)) (SUB (CONS PTR SEEN) (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN))) (:P M (CDR (NTH PTR M)) (CONS PTR SEEN)) (:P M (CAR (NTH PTR M)) (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN)))) (:P M PTR SEEN)) (IMPLIES (AND (ADDRESSP PTR M) (MEM PTR SEEN)) (:P M PTR SEEN))). This induction is justified by the same argument used to admit REACHABLES, namely, the measure (M2 (IF (MEM PTR (FLATTEN-M M)) '1 '2) (LEN-DIFF (FLATTEN-M M) SEEN)) is decreasing according to the relation O< (which is known to be well- founded on the domain recognized by O-P). When applied to the goal at hand the above induction scheme produces the following four nontautological subgoals. Subgoal *1/4 (IMPLIES (NOT (ADDRESSP PTR M)) (SUB SEEN (REACHABLES PTR M SEEN))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSP and REACHABLES and the :rewrite rule PROBLEM-48. Subgoal *1/3 (IMPLIES (AND (ADDRESSP PTR M) (NOT (MEM PTR SEEN)) (NOT (CONSP (NTH PTR M))) (SUB (CONS PTR SEEN) (REACHABLES (NTH PTR M) M (CONS PTR SEEN)))) (SUB SEEN (REACHABLES PTR M SEEN))). By the simple :definition ADDRESSP we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (NATP PTR) (< PTR (LEN M)) (NOT (MEM PTR SEEN)) (NOT (CONSP (NTH PTR M))) (SUB (CONS PTR SEEN) (REACHABLES (NTH PTR M) M (CONS PTR SEEN)))) (SUB SEEN (REACHABLES PTR M SEEN))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSP, REACHABLES and SUB, primitive type reasoning, the :forward-chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-48 and PROBLEM-49 and the :type-prescription rule SUB. Subgoal *1/2 (IMPLIES (AND (ADDRESSP PTR M) (NOT (MEM PTR SEEN)) (CONSP (NTH PTR M)) (SUB (CONS PTR SEEN) (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN))) (SUB (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN)) (REACHABLES (CAR (NTH PTR M)) M (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN))))) (SUB SEEN (REACHABLES PTR M SEEN))). By the simple :definition ADDRESSP we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (NATP PTR) (< PTR (LEN M)) (NOT (MEM PTR SEEN)) (CONSP (NTH PTR M)) (SUB (CONS PTR SEEN) (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN))) (SUB (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN)) (REACHABLES (CAR (NTH PTR M)) M (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN))))) (SUB SEEN (REACHABLES PTR M SEEN))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSP, REACHABLES and SUB, primitive type reasoning, the :forward-chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-48, PROBLEM-49 and PROBLEM- 49A and the :type-prescription rules MEM and SUB. Subgoal *1/1 (IMPLIES (AND (ADDRESSP PTR M) (MEM PTR SEEN)) (SUB SEEN (REACHABLES PTR M SEEN))). By the simple :definition ADDRESSP we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (NATP PTR) (< PTR (LEN M)) (MEM PTR SEEN)) (SUB SEEN (REACHABLES PTR M SEEN))). But simplification reduces this to T, using the :compound-recognizer rule NATP-CR, the :definitions ADDRESSP and REACHABLES, the :forward- chaining rules NATP-FC-1 and NATP-FC-2, the :rewrite rules PROBLEM- 48 and PROBLEM-49A and the :type-prescription rule MEM. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-129F ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:DEFINITION ADDRESSP) (:DEFINITION NOT) (:DEFINITION REACHABLES) (:DEFINITION SUB) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:FORWARD-CHAINING NATP-FC-1) (:FORWARD-CHAINING NATP-FC-2) (:INDUCTION REACHABLES) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-48) (:REWRITE PROBLEM-49) (:REWRITE PROBLEM-49A) (:TYPE-PRESCRIPTION MEM) (:TYPE-PRESCRIPTION SUB)) Warnings: None Time: 0.14 seconds (prove: 0.03, print: 0.09, other: 0.02) PROBLEM-129F ACL2 >>(THEOREM PROBLEM-129G (SUB (CONS PTR SEEN) (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN))) :HINTS (("Goal" :USE (:INSTANCE PROBLEM-129F (PTR (CDR (NTH PTR M))) (M M) (SEEN (CONS PTR SEEN)))))) [Note: A hint was supplied for our processing of the goal above. Thanks!] But we now augment the goal above by adding the hypothesis indicated by the :USE hint. This produces a propositional tautology. The hypothesis can be derived from PROBLEM-129F via instantiation. Therefore, this goal has been established. Q.E.D. The storage of PROBLEM-129G depends upon the :type-prescription rule SUB. Summary Form: ( DEFTHM PROBLEM-129G ...) Rules: ((:TYPE-PRESCRIPTION SUB)) Warnings: None Time: 0.02 seconds (prove: 0.01, print: 0.01, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.00, other: 0.04) PROBLEM-129G ACL2 >>(THEOREM PROBLEM-129 (EQUAL (REACHABLES PTR M SEEN) (IF (ADDRESSP PTR M) (IF (MEM PTR SEEN) SEEN (IF (CONSP (NTH PTR M)) (REACHABLES (CAR (NTH PTR M)) M (REACHABLES (CDR (NTH PTR M)) M (CONS PTR SEEN))) (REACHABLES (NTH PTR M) M (CONS PTR SEEN)))) SEEN)) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-129G))) :RULE-CLASSES NIL) [Note: A hint was supplied for our processing of the goal above. Thanks!] But simplification reduces this to T, using the :definitions ADDRESSP and REACHABLES, primitive type reasoning and the :rewrite rule PROBLEM- 129G. Q.E.D. Summary Form: ( DEFTHM PROBLEM-129 ...) Rules: ((:DEFINITION ADDRESSP) (:DEFINITION REACHABLES) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE PROBLEM-129G)) Warnings: None Time: 0.05 seconds (prove: 0.03, print: 0.01, other: 0.01) PROBLEM-129 ACL2 >>(DEFUN RMB (X) (DECLARE (XARGS :MEASURE (CC X))) (IF (CONSP X) (IF (CONSP (CDR X)) (IF (< (CC (CDR (RMB (CDR X)))) (CC X)) (IF (< (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))) (CC X)) (CONS (CAR (RMB (CDR X))) (RMB (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))) 'UNDEF) 'UNDEF) (CONS (CAR X) NIL)) NIL)) For the admission of RMB we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (CC X). The non-trivial part of the measure conjecture is Goal (AND (O-P (CC X)) (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (O< (CC (CDR X)) (CC X))) (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X))) (O< (CC (CDR (RMB (CDR X)))) (CC X))) (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X)) (< (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))) (CC X))) (O< (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))) (CC X)))). By case analysis we reduce the conjecture to the following four conjectures. Subgoal 4 (O-P (CC X)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, the :rewrite rule O-P-DEF-O-FINP-1 and the :type-prescription rule CC. Subgoal 3 (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (O< (CC (CDR X)) (CC X))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definition O< and the :type-prescription rule CC, to Subgoal 3' (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (< (CC (CDR X)) (CC X))). The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following goal. Subgoal 3'' (IMPLIES (AND (CONSP (CONS X1 X2)) (CONSP X2)) (< (CC X2) (CC (CONS X1 X2)))). This simplifies, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS and CDR-CONS, to Subgoal 3''' (IMPLIES (CONSP X2) (< 0 (+ 1 (CC X1)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 2 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X))) (O< (CC (CDR (RMB (CDR X)))) (CC X))). But simplification reduces this to T, using the :compound-recognizer rule O-FINP-CR, the :rewrite rule O-FINP-< and the :type-prescription rule CC. Subgoal 1 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X)) (< (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))) (CC X))) (O< (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))) (CC X))). But simplification reduces this to T, using the :compound-recognizer rule O-FINP-CR, the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT, the :rewrite rules CAR-CONS, CDR-CONS and O-FINP-< and the :type-prescription rule CC. Q.E.D. That completes the proof of the measure theorem for RMB. Thus, we admit this function under the principle of definition. We observe that the type of RMB is described by the theorem (OR (CONSP (RMB X)) (AND (SYMBOLP (RMB X)) (NOT (EQUAL (RMB X) T)) (NOT (EQUAL (RMB X) NIL))) (EQUAL (RMB X) NIL)). We used primitive type reasoning. Summary Form: ( DEFUN RMB ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION CC) (:DEFINITION NOT) (:DEFINITION O<) (:ELIM CAR-CDR-ELIM) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE O-FINP-<) (:REWRITE O-P-DEF-O-FINP-1) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.27 seconds (prove: 0.16, print: 0.07, other: 0.04) RMB ACL2 >>(THEOREM PROBLEM-130A (<= (CC (CDR X)) (CC X)) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] The destructor terms (CAR X) and (CDR X) can be eliminated by using CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2. This produces the following two goals. Subgoal 2 (IMPLIES (NOT (CONSP X)) (<= (CC (CDR X)) (CC X))). But simplification reduces this to T, using the :definition CC, the :executable-counterparts of < and CC and the :rewrite rule DEFAULT- CDR. Subgoal 1 (IMPLIES (CONSP (CONS X1 X2)) (<= (CC X2) (CC (CONS X1 X2)))). This simplifies, using the :definition CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS and CDR-CONS, to Subgoal 1' (<= 0 (+ 1 (CC X1))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Q.E.D. Summary Form: ( DEFTHM PROBLEM-130A ...) Rules: ((:DEFINITION CC) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART CC) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE DEFAULT-CDR) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.02 seconds (prove: 0.01, print: 0.01, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-130A ACL2 >>(THEOREM PROBLEM-130B (<= (CC (RMB X)) (CC X)) :HINTS (("Goal" :INDUCT (RMB X))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (RMB X). This suggestion was produced using the :induction rule RMB. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (NOT (CONSP (CDR X)))) (:P X)) (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (<= (CC X) (CC (CDR (RMB (CDR X))))) (:P (CDR X))) (:P X)) (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X)) (<= (CC X) (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))) (:P (CDR X)) (:P (CDR (RMB (CDR X))))) (:P X)) (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X)) (< (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))) (CC X)) (:P (CDR X)) (:P (CDR (RMB (CDR X)))) (:P (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))) (:P X))). This induction is justified by the same argument used to admit RMB, namely, the measure (CC X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following five nontautological subgoals. Subgoal *1/5 (IMPLIES (NOT (CONSP X)) (<= (CC (RMB X)) (CC X))). But simplification reduces this to T, using the :definitions CC and RMB and the :executable-counterparts of < and CC. Subgoal *1/4 (IMPLIES (AND (CONSP X) (NOT (CONSP (CDR X)))) (<= (CC (RMB X)) (CC X))). This simplifies, using the :definitions CC, FIX and RMB, the :executable- counterpart of CC, primitive type reasoning, the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-OF-+ and UNICITY-OF-0 and the :type- prescription rule CC, to Subgoal *1/4' (IMPLIES (AND (CONSP X) (NOT (CONSP (CDR X)))) (<= (+ 1 (CC (CAR X))) (CC X))). But simplification reduces this to T, using the :definitions CC and FIX, the :meta rule CANCEL_PLUS-LESSP-CORRECT, the :rewrite rules COMMUTATIVIT\ Y-OF-+ and UNICITY-OF-0 and the :type-prescription rule CC. Subgoal *1/3 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (<= (CC X) (CC (CDR (RMB (CDR X))))) (<= (CC (RMB (CDR X))) (CC (CDR X)))) (<= (CC (RMB X)) (CC X))). This simplifies, using the :definition RMB and the :executable-counterpart of CC, to Subgoal *1/3' (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (<= (CC X) (CC (CDR (RMB (CDR X))))) (<= (CC (RMB (CDR X))) (CC (CDR X)))) (<= 0 (CC X))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal *1/2 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X)) (<= (CC X) (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))) (<= (CC (RMB (CDR X))) (CC (CDR X))) (<= (CC (RMB (CDR (RMB (CDR X))))) (CC (CDR (RMB (CDR X)))))) (<= (CC (RMB X)) (CC X))). This simplifies, using the :definitions CC and RMB, the :executable- counterpart of CC, primitive type reasoning, the :meta rule CANCEL_- PLUS-LESSP-CORRECT and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal *1/2' (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X)))) (<= (CC (CDR X)) (CC (RMB (CDR (RMB (CDR X)))))) (<= (CC (RMB (CDR X))) (CC (CDR X))) (<= (CC (RMB (CDR (RMB (CDR X))))) (CC (CDR (RMB (CDR X)))))) (<= 0 (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal *1/1 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X)) (< (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))) (CC X)) (<= (CC (RMB (CDR X))) (CC (CDR X))) (<= (CC (RMB (CDR (RMB (CDR X))))) (CC (CDR (RMB (CDR X))))) (<= (CC (RMB (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))) (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))))) (<= (CC (RMB X)) (CC X))). This simplifies, using the :definitions CC and RMB, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR-CONS and CDR-CONS, to Subgoal *1/1' (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X)))) (< (CC (RMB (CDR (RMB (CDR X))))) (CC (CDR X))) (<= (CC (RMB (CDR X))) (CC (CDR X))) (<= (CC (RMB (CDR (RMB (CDR X))))) (CC (CDR (RMB (CDR X))))) (<= (CC (RMB (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))) (+ 1 (CC (CAR X)) (CC (RMB (CDR (RMB (CDR X)))))))) (<= (+ (CC (CAR (RMB (CDR X)))) (CC (RMB (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))))) (+ (CC (CAR X)) (CC (CDR X))))). This simplifies, using the :definitions CC, FIX, RMB and SYNP, the :executable-counterparts of <, BINARY-+, CC, CONSP and RMB, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY-OF-+, DEFAULT-CAR, DEFAULT- CDR, FOLD-CONSTS-IN-+ and UNICITY-OF-0 and the :type-prescription rules CC and RMB, to the following two conjectures. Subgoal *1/1.2 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X)))) (< (CC (RMB (CDR (RMB (CDR X))))) (CC (CDR X))) (CONSP (RMB (CDR X))) (<= (+ 1 (CC (CAR (RMB (CDR X)))) (CC (CDR (RMB (CDR X))))) (CC (CDR X))) (<= (CC (RMB (CDR (RMB (CDR X))))) (CC (CDR (RMB (CDR X))))) (<= (CC (RMB (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))) (+ 1 (CC (CAR X)) (CC (RMB (CDR (RMB (CDR X)))))))) (<= (+ (CC (CAR (RMB (CDR X)))) (CC (RMB (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))))) (+ (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule CC. Subgoal *1/1.1 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X)))) (< (CC (RMB (CDR (RMB (CDR X))))) (CC (CDR X))) (NOT (CONSP (RMB (CDR X)))) (<= 0 (CC (CDR X)))) (<= 1 (CC (CDR X)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-130B ...) Rules: ((:DEFINITION CC) (:DEFINITION FIX) (:DEFINITION RMB) (:DEFINITION SYNP) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART CC) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART RMB) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION RMB) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE DEFAULT-CAR) (:REWRITE DEFAULT-CDR) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION CC) (:TYPE-PRESCRIPTION RMB)) Warnings: None Time: 1.92 seconds (prove: 1.72, print: 0.19, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-130B ACL2 >>(THEOREM PROBLEM-130C (IMPLIES (CONSP X) (CONSP (RMB X))) :HINTS (("Goal" :INDUCT (RMB X) :IN-THEORY (ENABLE PROBLEM-108C PROBLEM-130A PROBLEM-130B)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (RMB X). This suggestion was produced using the :induction rule RMB. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (NOT (CONSP (CDR X)))) (:P X)) (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (<= (CC X) (CC (CDR (RMB (CDR X))))) (:P (CDR X))) (:P X)) (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X)) (<= (CC X) (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))) (:P (CDR X)) (:P (CDR (RMB (CDR X))))) (:P X)) (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X)) (< (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))) (CC X)) (:P (CDR X)) (:P (CDR (RMB (CDR X)))) (:P (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))) (:P X))). This induction is justified by the same argument used to admit RMB, namely, the measure (CC X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following four nontautological subgoals. Subgoal *1/4 (IMPLIES (AND (CONSP X) (NOT (CONSP (CDR X)))) (IMPLIES (CONSP X) (CONSP (RMB X)))). By case analysis we reduce the conjecture to Subgoal *1/4' (IMPLIES (AND (CONSP X) (NOT (CONSP (CDR X)))) (CONSP (RMB X))). But simplification reduces this to T, using the :definition RMB and primitive type reasoning. Subgoal *1/3 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (<= (CC X) (CC (CDR (RMB (CDR X))))) (IMPLIES (CONSP (CDR X)) (CONSP (RMB (CDR X))))) (IMPLIES (CONSP X) (CONSP (RMB X)))). By case analysis we reduce the conjecture to Subgoal *1/3' (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (<= (CC X) (CC (CDR (RMB (CDR X))))) (IMPLIES (CONSP (CDR X)) (CONSP (RMB (CDR X))))) (CONSP (RMB X))). But simplification reduces this to T, using linear arithmetic, the :linear rules PROBLEM-108C, PROBLEM-130A and PROBLEM-130B and the :type- prescription rules CC and RMB. Subgoal *1/2 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X)) (<= (CC X) (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))) (IMPLIES (CONSP (CDR X)) (CONSP (RMB (CDR X)))) (IMPLIES (CONSP (CDR (RMB (CDR X)))) (CONSP (RMB (CDR (RMB (CDR X))))))) (IMPLIES (CONSP X) (CONSP (RMB X)))). By case analysis we reduce the conjecture to Subgoal *1/2' (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X)) (<= (CC X) (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))) (IMPLIES (CONSP (CDR X)) (CONSP (RMB (CDR X)))) (IMPLIES (CONSP (CDR (RMB (CDR X)))) (CONSP (RMB (CDR (RMB (CDR X))))))) (CONSP (RMB X))). This simplifies, using the :definitions CC and RMB, the :executable- counterpart of CONSP, primitive type reasoning, the :meta rule CANCEL_- PLUS-LESSP-CORRECT, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule CC, to the following two conjectures. Subgoal *1/2.2 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X)))) (<= (CC (CDR X)) (CC (RMB (CDR (RMB (CDR X)))))) (CONSP (RMB (CDR X)))) (CONSP (CDR (RMB (CDR X))))). This simplifies, using the :definitions CC and RMB, the :executable- counterparts of CC and CONSP, primitive type reasoning, the :rewrite rule CDR-CONS and the :type-prescription rule CC, to Subgoal *1/2.2' (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< 0 (+ 1 (CC (CAR X)) (CC (CDR X)))) (<= (CC (CDR X)) 0) (NOT (CONSP (CDDR X)))) (NOT (CONSP (LIST (CADR X))))). This simplifies, using the :executable-counterpart of <, linear arithmetic and the :type-prescription rule CC, to Subgoal *1/2.2'' (IMPLIES (AND (EQUAL (CC (CDR X)) 0) (CONSP X) (CONSP (CDR X)) (< 0 (+ 1 (CC (CAR X)) 0)) (NOT (CONSP (CDDR X)))) (NOT (CONSP (LIST (CADR X))))). But simplification reduces this to T, using the :definitions CC and FIX, primitive type reasoning, the :rewrite rules COMMUTATIVITY-OF- + and UNICITY-OF-0 and the :type-prescription rule CC. Subgoal *1/2.1 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X)))) (<= (CC (CDR X)) (CC (RMB (CDR (RMB (CDR X)))))) (CONSP (RMB (CDR X)))) (NOT (CONSP (RMB (CDR (RMB (CDR X))))))). But simplification reduces this to T, using linear arithmetic, the :linear rules PROBLEM-108C and PROBLEM-130B and the :type-prescription rules CC and RMB. Subgoal *1/1 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X)) (< (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))) (CC X)) (IMPLIES (CONSP (CDR X)) (CONSP (RMB (CDR X)))) (IMPLIES (CONSP (CDR (RMB (CDR X)))) (CONSP (RMB (CDR (RMB (CDR X)))))) (IMPLIES (CONSP (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))) (CONSP (RMB (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))))) (IMPLIES (CONSP X) (CONSP (RMB X)))). By case analysis we reduce the conjecture to Subgoal *1/1' (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (< (CC (CDR (RMB (CDR X)))) (CC X)) (< (CC (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))) (CC X)) (IMPLIES (CONSP (CDR X)) (CONSP (RMB (CDR X)))) (IMPLIES (CONSP (CDR (RMB (CDR X)))) (CONSP (RMB (CDR (RMB (CDR X)))))) (IMPLIES (CONSP (CONS (CAR X) (RMB (CDR (RMB (CDR X)))))) (CONSP (RMB (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))))) (CONSP (RMB X))). But simplification reduces this to T, using the :definitions CC and RMB, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT, the :rewrite rules CAR-CONS and CDR-CONS and the :type-prescription rule CC. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-130C ...) Rules: ((:DEFINITION CC) (:DEFINITION FIX) (:DEFINITION NOT) (:DEFINITION RMB) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART CC) (:EXECUTABLE-COUNTERPART CONSP) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION RMB) (:LINEAR PROBLEM-108C) (:LINEAR PROBLEM-130A) (:LINEAR PROBLEM-130B) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION CC) (:TYPE-PRESCRIPTION RMB)) Warnings: None Time: 1.16 seconds (prove: 1.07, print: 0.08, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.04 seconds (prove: 0.00, print: 0.00, other: 0.04) PROBLEM-130C ACL2 >>(THEOREM PROBLEM-130 (EQUAL (RMB X) (IF (CONSP X) (IF (CONSP (CDR X)) (CONS (CAR (RMB (CDR X))) (RMB (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))) (CONS (CAR X) NIL)) NIL)) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-108C PROBLEM-130B PROBLEM-130C))) :RULE-CLASSES ((:DEFINITION :CONTROLLER-ALIST ((RMB T))))) [Note: A hint was supplied for our processing of the goal above. Thanks!] This simplifies, using the :definitions CC and RMB, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR-CONS and CDR-CONS, to the following two conjectures. Subgoal 2 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (<= (+ 1 (CC (CAR X)) (CC (CDR X))) (CC (CDR (RMB (CDR X)))))) (EQUAL 'UNDEF (CONS (CAR (RMB (CDR X))) (RMB (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))))). This simplifies, using primitive type reasoning, to Subgoal 2' (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (< (CC (CDR (RMB (CDR X)))) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning, the :linear rules PROBLEM-108C and PROBLEM-130B, the :rewrite rule PROBLEM-130C and the :type-prescription rule CC. Subgoal 1 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (<= (CC (CDR X)) (CC (RMB (CDR (RMB (CDR X))))))) (EQUAL 'UNDEF (CONS (CAR (RMB (CDR X))) (RMB (CONS (CAR X) (RMB (CDR (RMB (CDR X))))))))). This simplifies, using primitive type reasoning, to Subgoal 1' (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (< (CC (RMB (CDR (RMB (CDR X))))) (CC (CDR X)))). But simplification reduces this to T, using linear arithmetic, the :linear rules PROBLEM-108C and PROBLEM-130B, the :rewrite rule PROBLEM- 130C and the :type-prescription rule CC. Q.E.D. Summary Form: ( DEFTHM PROBLEM-130 ...) Rules: ((:DEFINITION CC) (:DEFINITION RMB) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:LINEAR PROBLEM-108C) (:LINEAR PROBLEM-130B) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-130C) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 1.38 seconds (prove: 1.34, print: 0.02, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-130 ACL2 >>(THEOREM PROBLEM-131A (EQUAL (PROPER (CDR X)) (OR (ATOM X) (PROPER X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] This simplifies, using the :definitions ATOM and PROPER, to Goal' (IMPLIES (NOT (CONSP X)) (EQUAL (PROPER (CDR X)) T)). But simplification reduces this to T, using the :executable-counterparts of EQUAL and PROPER and the :rewrite rule DEFAULT-CDR. Q.E.D. Summary Form: ( DEFTHM PROBLEM-131A ...) Rules: ((:DEFINITION ATOM) (:DEFINITION PROPER) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART PROPER) (:REWRITE DEFAULT-CDR)) Warnings: None Time: 0.02 seconds (prove: 0.01, print: 0.00, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-131A ACL2 >>(THEOREM PROBLEM-131B (<= (CC (APP A B)) (+ (CC A) (CC B))) :HINTS (("Goal" :INDUCT (CC A))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (CC A). This suggestion was produced using the :induction rule CC. If we let (:P A B) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP A)) (:P A B)) (IMPLIES (AND (CONSP A) (:P (CAR A) B) (:P (CDR A) B)) (:P A B))). This induction is justified by the same argument used to admit CC, namely, the measure (ACL2-COUNT A) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP A)) (<= (CC (APP A B)) (+ (CC A) (CC B)))). This simplifies, using the :definitions APP, CC and FIX, the :rewrite rule UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal *1/2' (IMPLIES (NOT (CONSP A)) (<= (CC B) (CC B))). But simplification reduces this to T, using linear arithmetic and the :type-prescription rule CC. Subgoal *1/1 (IMPLIES (AND (CONSP A) (<= (CC (APP (CAR A) B)) (+ (CC (CAR A)) (CC B))) (<= (CC (APP (CDR A) B)) (+ (CC (CDR A)) (CC B)))) (<= (CC (APP A B)) (+ (CC A) (CC B)))). But simplification reduces this to T, using the :definitions APP and CC, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY-2-OF-+ and COMMUTATIVITY-OF-+. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-131B ...) Rules: ((:DEFINITION APP) (:DEFINITION CC) (:DEFINITION FIX) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION CC) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.07 seconds (prove: 0.04, print: 0.03, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.00, other: 0.03) PROBLEM-131B ACL2 >>(THEOREM PROBLEM-131C (<= (CC (REV X)) (CC X)) :HINTS (("Goal" :INDUCT (CC X) :IN-THEORY (ENABLE PROBLEM-131B))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (CC X). This suggestion was produced using the :induction rule CC. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CAR X)) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit CC, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (<= (CC (REV X)) (CC X))). But simplification reduces this to T, using the :definitions CC and REV and the :executable-counterparts of < and CC. Subgoal *1/1 (IMPLIES (AND (CONSP X) (<= (CC (REV (CAR X))) (CC (CAR X))) (<= (CC (REV (CDR X))) (CC (CDR X)))) (<= (CC (REV X)) (CC X))). This simplifies, using the :definitions CC and REV, to Subgoal *1/1' (IMPLIES (AND (CONSP X) (<= (CC (REV (CAR X))) (CC (CAR X))) (<= (CC (REV (CDR X))) (CC (CDR X)))) (<= (CC (APP (REV (CDR X)) (LIST (CAR X)))) (+ 1 (CC (CAR X)) (CC (CDR X))))). But simplification reduces this to T, using the :definitions CC and FIX, the :executable-counterpart of CC, linear arithmetic, primitive type reasoning, the :linear rule PROBLEM-131B, the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-2-OF-+, COMMUTATIVITY-OF-+ and UNICITY- OF-0 and the :type-prescription rule CC. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-131C ...) Rules: ((:DEFINITION CC) (:DEFINITION FIX) (:DEFINITION REV) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART CC) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION CC) (:LINEAR PROBLEM-131B) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.13 seconds (prove: 0.07, print: 0.04, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-131C ACL2 >>(THEOREM PROBLEM-131D (EQUAL (CONSP (REV X)) (CONSP X)) :HINTS (("Goal" :INDUCT (REV X)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (REV X). This suggestion was produced using the :induction rule REV. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (:P (CDR X))) (:P X))). This induction is justified by the same argument used to admit REV, namely, the measure (ACL2-COUNT X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (CONSP X)) (EQUAL (CONSP (REV X)) (CONSP X))). But simplification reduces this to T, using the :definition REV and the :executable-counterparts of CONSP and EQUAL. Subgoal *1/1 (IMPLIES (AND (CONSP X) (EQUAL (CONSP (REV (CDR X))) (CONSP (CDR X)))) (EQUAL (CONSP (REV X)) (CONSP X))). But simplification reduces this to T, using the :definition REV, the :executable-counterpart of EQUAL, primitive type reasoning and the :type-prescription rule APP. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-131D ...) Rules: ((:DEFINITION REV) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION REV) (:TYPE-PRESCRIPTION APP)) Warnings: None Time: 0.03 seconds (prove: 0.00, print: 0.03, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) PROBLEM-131D ACL2 >>(DEFUN RMB-HINT (X) (DECLARE (XARGS :MEASURE (CC X) :HINTS (("Goal" :IN-THEORY (ENABLE PROBLEM-108C PROBLEM-130A PROBLEM-131C PROBLEM-131D))))) (IF (CONSP X) (IF (CONSP (CDR X)) (LIST (RMB-HINT (CDR X)) (RMB-HINT (CDR (REV (CDR X)))) (RMB-HINT (CONS (CAR X) (REV (CDR (REV (CDR X))))))) X) X)) For the admission of RMB-HINT we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (CC X). The non-trivial part of the measure conjecture is Goal (AND (O-P (CC X)) (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (O< (CC (CDR (REV (CDR X)))) (CC X))) (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (O< (CC (CDR X)) (CC X))) (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (O< (CC (CONS (CAR X) (REV (CDR (REV (CDR X)))))) (CC X)))). [Note: A hint was supplied for our processing of the goal above. Thanks!] By case analysis we reduce the conjecture to the following four conjectures. Subgoal 4 (O-P (CC X)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, the :rewrite rule O-P-DEF-O-FINP-1 and the :type-prescription rule CC. Subgoal 3 (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (O< (CC (CDR (REV (CDR X)))) (CC X))). But simplification reduces this to T, using the :compound-recognizer rule O-FINP-CR, linear arithmetic, the :linear rules PROBLEM-108C, PROBLEM-130A and PROBLEM-131C, the :rewrite rules O-FINP-< and PROBLEM- 131D and the :type-prescription rule CC. Subgoal 2 (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (O< (CC (CDR X)) (CC X))). But simplification reduces this to T, using the :compound-recognizer rule O-FINP-CR, linear arithmetic, the :linear rule PROBLEM-108C, the :rewrite rule O-FINP-< and the :type-prescription rule CC. Subgoal 1 (IMPLIES (AND (CONSP X) (CONSP (CDR X))) (O< (CC (CONS (CAR X) (REV (CDR (REV (CDR X)))))) (CC X))). But simplification reduces this to T, using the :compound-recognizer rule O-FINP-CR, the :definition CC, linear arithmetic, primitive type reasoning, the :linear rules PROBLEM-108C and PROBLEM-131C, the :rewrite rules CAR-CONS, CDR-CONS, O-FINP-< and PROBLEM-131D and the :type- prescription rule CC. Q.E.D. That completes the proof of the measure theorem for RMB-HINT. Thus, we admit this function under the principle of definition. We could deduce no constraints on the type of RMB-HINT. Summary Form: ( DEFUN RMB-HINT ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION CC) (:DEFINITION NOT) (:FAKE-RUNE-FOR-LINEAR NIL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:LINEAR PROBLEM-108C) (:LINEAR PROBLEM-130A) (:LINEAR PROBLEM-131C) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE O-FINP-<) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE PROBLEM-131D) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.26 seconds (prove: 0.18, print: 0.05, other: 0.03) RMB-HINT ACL2 >>(THEOREM PROBLEM-131 (EQUAL (RMB X) (REV X)) :HINTS (("Goal" :INDUCT (RMB-HINT X) :IN-THEORY (ENABLE PROBLEM-44B PROBLEM-44 PROBLEM-130 PROBLEM-131A PROBLEM-131D)))) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (RMB-HINT X). This suggestion was produced using the :induction rule RMB-HINT. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (CONSP X)) (:P X)) (IMPLIES (AND (CONSP X) (NOT (CONSP (CDR X)))) (:P X)) (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (:P (CDR X)) (:P (CDR (REV (CDR X)))) (:P (CONS (CAR X) (REV (CDR (REV (CDR X))))))) (:P X))). This induction is justified by the same argument used to admit RMB- HINT, namely, the measure (CC X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following three nontautological subgoals. Subgoal *1/3 (IMPLIES (NOT (CONSP X)) (EQUAL (RMB X) (REV X))). But simplification reduces this to T, using the :definitions PROBLEM- 130 and REV and the :executable-counterpart of EQUAL. Subgoal *1/2 (IMPLIES (AND (CONSP X) (NOT (CONSP (CDR X)))) (EQUAL (RMB X) (REV X))). But simplification reduces this to T, using the :definitions APP, PROBLEM- 130 and REV, primitive type reasoning and the :rewrite rule PROBLEM- 131D. Subgoal *1/1 (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (EQUAL (RMB (CDR X)) (REV (CDR X))) (EQUAL (RMB (CDR (REV (CDR X)))) (REV (CDR (REV (CDR X))))) (EQUAL (RMB (CONS (CAR X) (REV (CDR (REV (CDR X)))))) (REV (CONS (CAR X) (REV (CDR (REV (CDR X)))))))) (EQUAL (RMB X) (REV X))). This simplifies, using the :definitions ATOM, PROBLEM-130 and REV, primitive type reasoning and the :rewrite rules CAR-CONS, CDR-CONS, PROBLEM-131A, PROBLEM-131D, PROBLEM-44 and PROBLEM-44B, to Subgoal *1/1' (IMPLIES (AND (CONSP X) (CONSP (CDR X)) (EQUAL (RMB (CDR X)) (REV (CDR X))) (EQUAL (RMB (CDR (REV (CDR X)))) (REV (CDR (REV (CDR X))))) (EQUAL (RMB (CONS (CAR X) (REV (CDR (REV (CDR X)))))) (APP (CDR (REV (CDR X))) (LIST (CAR X))))) (EQUAL (CONS (CAR (REV (CDR X))) (APP (CDR (REV (CDR X))) (LIST (CAR X)))) (APP (REV (CDR X)) (LIST (CAR X))))). But simplification reduces this to T, using the :definition APP, primitive type reasoning and the :rewrite rule PROBLEM-131D. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-131 ...) Rules: ((:DEFINITION APP) (:DEFINITION ATOM) (:DEFINITION PROBLEM-130) (:DEFINITION REV) (:EXECUTABLE-COUNTERPART EQUAL) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION RMB-HINT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE PROBLEM-131A) (:REWRITE PROBLEM-131D) (:REWRITE PROBLEM-44) (:REWRITE PROBLEM-44B)) Warnings: None Time: 0.45 seconds (prove: 0.37, print: 0.06, other: 0.02) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-131 ACL2 >>(DEFUN IF-EXPRP (X) (AND (CONSP X) (EQUAL (CAR X) 'IF))) Since IF-EXPRP is non-recursive, its admission is trivial. We observe that the type of IF-EXPRP is described by the theorem (OR (EQUAL (IF-EXPRP X) T) (EQUAL (IF-EXPRP X) NIL)). We used primitive type reasoning. Summary Form: ( DEFUN IF-EXPRP ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL)) Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) IF-EXPRP ACL2 >>(DEFUN A1 (X) (CADR X)) Since A1 is non-recursive, its admission is trivial. We could deduce no constraints on the type of A1. Summary Form: ( DEFUN A1 ...) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.01, other: 0.01) A1 ACL2 >>(DEFUN A2 (X) (CADDR X)) Since A2 is non-recursive, its admission is trivial. We could deduce no constraints on the type of A2. Summary Form: ( DEFUN A2 ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) A2 ACL2 >>(DEFUN A3 (X) (CADDDR X)) Since A3 is non-recursive, its admission is trivial. We could deduce no constraints on the type of A3. Summary Form: ( DEFUN A3 ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) A3 ACL2 >>(DEFUN ASSOC-EQUAL (X ALIST) (DECLARE (XARGS :GUARD (ALISTP ALIST))) (COND ((ENDP ALIST) NIL) ((EQUAL X (CAR (CAR ALIST))) (CAR ALIST)) (T (ASSOC-EQUAL X (CDR ALIST))))) This event is redundant. See :DOC redundant-events. Summary Form: ( DEFUN ASSOC-EQUAL ...) Rules: NIL Warnings: None Time: 0.00 seconds (prove: 0.00, print: 0.00, other: 0.00) :REDUNDANT ACL2 >>(DEFUN ASSIGNMENT (VAR ALIST) (IF (QUOTEP VAR) (A1 VAR) (CDR (ASSOC-EQUAL VAR ALIST)))) Since ASSIGNMENT is non-recursive, its admission is trivial. We could deduce no constraints on the type of ASSIGNMENT. Summary Form: ( DEFUN ASSIGNMENT ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) ASSIGNMENT ACL2 >>(DEFUN PEVAL (X ALIST) (DECLARE (XARGS :MEASURE (CC X))) (COND ((IF-EXPRP X) (IF (PEVAL (A1 X) ALIST) (PEVAL (A2 X) ALIST) (PEVAL (A3 X) ALIST))) (T (ASSIGNMENT X ALIST)))) For the admission of PEVAL we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (CC X). The non-trivial part of the measure conjecture is Goal (AND (O-P (CC X)) (IMPLIES (IF-EXPRP X) (O< (CC (A1 X)) (CC X))) (IMPLIES (AND (IF-EXPRP X) (PEVAL (A1 X) ALIST)) (O< (CC (A2 X)) (CC X))) (IMPLIES (AND (IF-EXPRP X) (NOT (PEVAL (A1 X) ALIST))) (O< (CC (A3 X)) (CC X)))). By the simple :definitions A1, A2, A3 and IF-EXPRP we reduce the conjecture to the following four conjectures. Subgoal 4 (O-P (CC X)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, the :rewrite rule O-P-DEF-O-FINP-1 and the :type-prescription rule CC. Subgoal 3 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF)) (O< (CC (CADR X)) (CC X))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions CC, FIX and O<, the :executable-counterpart of CC, primitive type reasoning, the :rewrite rule UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 3' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF)) (< (CC (CADR X)) (+ 1 (CC (CDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of two rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2 and restrict the type of the new variable X1 to be that of the term it replaces. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. These steps produce the following two goals. Subgoal 3.2 (IMPLIES (AND (NOT (CONSP X2)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (CONS X1 X2)) (EQUAL X1 'IF)) (< (CC (CAR X2)) (+ 1 (CC X2)))). By case analysis we reduce the conjecture to Subgoal 3.2' (IMPLIES (AND (NOT (CONSP X2)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (CONS X1 X2)) (EQUAL X1 'IF)) (< (CC (CAR X2)) (+ 1 (CC X2)))). But simplification reduces this to T, using the :definition CC, the :executable-counterparts of <, BINARY-+, CC, EQUAL, NOT and SYMBOLP, primitive type reasoning and the :rewrite rule DEFAULT-CAR. Subgoal 3.1 (IMPLIES (AND (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF)) (< (CC X3) (+ 1 (CC (CONS X3 X4))))). By case analysis we reduce the conjecture to Subgoal 3.1' (IMPLIES (AND (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF)) (< (CC X3) (+ 1 (CC (CONS X3 X4))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS and FOLD-CONSTS-IN-+, to Subgoal 3.1'' (< 0 (+ 2 (CC X4))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 2 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (PEVAL (CADR X) ALIST)) (O< (CC (CADDR X)) (CC X))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions CC, FIX and O<, the :executable-counterpart of CC, primitive type reasoning, the :rewrite rule UNICITY-OF-0 and the :type-prescription rule CC, to the following two conjectures. Subgoal 2.2 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (PEVAL (CADR X) ALIST) (CONSP (CDR X))) (< (CC (CADDR X)) (+ 1 1 (CC (CADR X)) (CC (CDDR X))))). This simplifies, using the :definition SYNP, the :executable-counterpart of BINARY-+ and the :rewrite rule FOLD-CONSTS-IN-+, to Subgoal 2.2' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (PEVAL (CADR X) ALIST) (CONSP (CDR X))) (< (CC (CADDR X)) (+ 2 (CC (CADR X)) (CC (CDDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of three rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2 and restrict the type of the new variable X1 to be that of the term it replaces. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. (3) Finally, use CAR-CDR-ELIM to replace X4 by (CONS X5 X6), (CAR X4) by X5 and (CDR X4) by X6. These steps produce the following two goals. Subgoal 2.2.2 (IMPLIES (AND (NOT (CONSP X4)) (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF) (PEVAL X3 ALIST)) (< (CC (CAR X4)) (+ 2 (CC X3) (CC X4)))). By case analysis we reduce the conjecture to Subgoal 2.2.2' (IMPLIES (AND (NOT (CONSP X4)) (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF) (PEVAL X3 ALIST)) (< (CC (CAR X4)) (+ 2 (CC X3) (CC X4)))). This simplifies, using the :definitions CC and FIX, the :executable- counterparts of CC, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :rewrite rules COMMUTATIVITY-OF-+, DEFAULT-CAR and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 2.2.2'' (IMPLIES (AND (NOT (CONSP X4)) (PEVAL X3 ALIST)) (< 0 (+ 2 (CC X3)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 2.2.1 (IMPLIES (AND (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF) (PEVAL X3 ALIST)) (< (CC X5) (+ 2 (CC X3) (CC (CONS X5 X6))))). By case analysis we reduce the conjecture to Subgoal 2.2.1' (IMPLIES (AND (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF) (PEVAL X3 ALIST)) (< (CC X5) (+ 2 (CC X3) (CC (CONS X5 X6))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to Subgoal 2.2.1'' (IMPLIES (PEVAL X3 ALIST) (< 0 (+ 3 (CC X3) (CC X6)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 2.1 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (PEVAL (CADR X) ALIST) (NOT (CONSP (CDR X)))) (< (CC (CADDR X)) 1)). But simplification reduces this to T, using the :executable-counterparts of <, CAR and CC and the :rewrite rules DEFAULT-CAR and DEFAULT-CDR. Subgoal 1 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (PEVAL (CADR X) ALIST))) (O< (CC (CADDDR X)) (CC X))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions CC, FIX and O<, the :executable-counterpart of CC, primitive type reasoning, the :rewrite rule UNICITY-OF-0 and the :type-prescription rule CC, to the following two conjectures. Subgoal 1.2 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (PEVAL (CADR X) ALIST)) (CONSP (CDR X))) (< (CC (CADDDR X)) (+ 1 1 (CC (CADR X)) (CC (CDDR X))))). This simplifies, using the :definition SYNP, the :executable-counterpart of BINARY-+ and the :rewrite rule FOLD-CONSTS-IN-+, to Subgoal 1.2' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (PEVAL (CADR X) ALIST)) (CONSP (CDR X))) (< (CC (CADDDR X)) (+ 2 (CC (CADR X)) (CC (CDDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of four rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2 and restrict the type of the new variable X1 to be that of the term it replaces. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. (3) Use CAR-CDR-ELIM to replace X4 by (CONS X5 X6), (CAR X4) by X5 and (CDR X4) by X6. (4) Finally, use CAR-CDR-ELIM to replace X6 by (CONS X7 X8), (CAR X6) by X7 and (CDR X6) by X8. These steps produce the following three goals. Subgoal 1.2.3 (IMPLIES (AND (NOT (CONSP X4)) (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF) (NOT (PEVAL X3 ALIST))) (< (CC (CADR X4)) (+ 2 (CC X3) (CC X4)))). By case analysis we reduce the conjecture to Subgoal 1.2.3' (IMPLIES (AND (NOT (CONSP X4)) (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF) (NOT (PEVAL X3 ALIST))) (< (CC (CADR X4)) (+ 2 (CC X3) (CC X4)))). This simplifies, using the :definitions CC and FIX, the :executable- counterparts of CAR, CC, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :rewrite rules COMMUTATIVITY-OF-+, DEFAULT-CDR and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 1.2.3'' (IMPLIES (AND (NOT (CONSP X4)) (NOT (PEVAL X3 ALIST))) (< 0 (+ 2 (CC X3)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.2.2 (IMPLIES (AND (NOT (CONSP X6)) (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF) (NOT (PEVAL X3 ALIST))) (< (CC (CAR X6)) (+ 2 (CC X3) (CC (CONS X5 X6))))). By case analysis we reduce the conjecture to Subgoal 1.2.2' (IMPLIES (AND (NOT (CONSP X6)) (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF) (NOT (PEVAL X3 ALIST))) (< (CC (CAR X6)) (+ 2 (CC X3) (CC (CONS X5 X6))))). This simplifies, using the :definitions CC, FIX and SYNP, the :executable- counterparts of BINARY-+, CC, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY-2-OF- +, COMMUTATIVITY-OF-+, DEFAULT-CAR, FOLD-CONSTS-IN-+ and UNICITY-OF- 0 and the :type-prescription rule CC, to Subgoal 1.2.2'' (IMPLIES (AND (NOT (CONSP X6)) (NOT (PEVAL X3 ALIST))) (< 0 (+ 3 (CC X3) (CC X5)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.2.1 (IMPLIES (AND (CONSP (CONS X7 X8)) (CONSP (LIST* X5 X7 X8)) (CONSP (LIST* X3 X5 X7 X8)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X5 X7 X8)) (EQUAL X1 'IF) (NOT (PEVAL X3 ALIST))) (< (CC X7) (+ 2 (CC X3) (CC (LIST* X5 X7 X8))))). By case analysis we reduce the conjecture to Subgoal 1.2.1' (IMPLIES (AND (CONSP (CONS X7 X8)) (CONSP (LIST* X5 X7 X8)) (CONSP (LIST* X3 X5 X7 X8)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X5 X7 X8)) (EQUAL X1 'IF) (NOT (PEVAL X3 ALIST))) (< (CC X7) (+ 2 (CC X3) (CC (LIST* X5 X7 X8))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to Subgoal 1.2.1'' (IMPLIES (NOT (PEVAL X3 ALIST)) (< 0 (+ 4 (CC X3) (CC X5) (CC X8)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.1 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (PEVAL (CADR X) ALIST)) (NOT (CONSP (CDR X)))) (< (CC (CADDDR X)) 1)). But simplification reduces this to T, using the :executable-counterparts of <, CAR, CC and CDR and the :rewrite rules DEFAULT-CAR and DEFAULT- CDR. Q.E.D. That completes the proof of the measure theorem for PEVAL. Thus, we admit this function under the principle of definition. We could deduce no constraints on the type of PEVAL. Summary Form: ( DEFUN PEVAL ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION A1) (:DEFINITION A2) (:DEFINITION A3) (:DEFINITION CC) (:DEFINITION FIX) (:DEFINITION IF-EXPRP) (:DEFINITION NOT) (:DEFINITION O<) (:DEFINITION SYNP) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART CAR) (:EXECUTABLE-COUNTERPART CC) (:EXECUTABLE-COUNTERPART CDR) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART SYMBOLP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE DEFAULT-CAR) (:REWRITE DEFAULT-CDR) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.82 seconds (prove: 0.57, print: 0.23, other: 0.02) PEVAL ACL2 >>(DEFUN NORMP (X) (DECLARE (XARGS :MEASURE (CC X))) (IF (IF-EXPRP X) (AND (NOT (IF-EXPRP (A1 X))) (NORMP (A2 X)) (NORMP (A3 X))) T)) For the admission of NORMP we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (CC X). The non-trivial part of the measure conjecture is Goal (AND (O-P (CC X)) (IMPLIES (AND (IF-EXPRP X) (NOT (IF-EXPRP (A1 X)))) (O< (CC (A2 X)) (CC X))) (IMPLIES (AND (IF-EXPRP X) (NOT (IF-EXPRP (A1 X))) (NORMP (A2 X))) (O< (CC (A3 X)) (CC X)))). By the simple :definitions A1, A2, A3 and IF-EXPRP we reduce the conjecture to the following three conjectures. Subgoal 3 (O-P (CC X)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, the :rewrite rule O-P-DEF-O-FINP-1 and the :type-prescription rule CC. Subgoal 2 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (IF-EXPRP (CADR X)))) (O< (CC (CADDR X)) (CC X))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions CC, FIX, IF-EXPRP and O<, the :executable-counterpart of CC, primitive type reasoning, the :rewrite rule UNICITY-OF-0 and the :type-prescription rule CC, to the following four conjectures. Subgoal 2.4 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (CONSP (CDR X))) (< (CC (CADDR X)) (+ 1 1 (CC (CDDR X))))). This simplifies, using the :definition SYNP, the :executable-counterpart of BINARY-+ and the :rewrite rule FOLD-CONSTS-IN-+, to Subgoal 2.4' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (CONSP (CDR X))) (< (CC (CADDR X)) (+ 2 (CC (CDDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of three rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2 and restrict the type of the new variable X1 to be that of the term it replaces. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. (3) Finally, use CAR-CDR-ELIM to replace X4 by (CONS X5 X6), (CAR X4) by X5 and (CDR X4) by X6. These steps produce the following two goals. Subgoal 2.4.2 (IMPLIES (AND (NOT (CONSP X4)) (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF) (NOT (CONSP X3))) (< (CC (CAR X4)) (+ 2 (CC X4)))). By case analysis we reduce the conjecture to Subgoal 2.4.2' (IMPLIES (AND (NOT (CONSP X4)) (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF) (NOT (CONSP X3))) (< (CC (CAR X4)) (+ 2 (CC X4)))). But simplification reduces this to T, using the :definition CC, the :executable-counterparts of <, BINARY-+, CC, EQUAL, NOT and SYMBOLP, primitive type reasoning and the :rewrite rule DEFAULT-CAR. Subgoal 2.4.1 (IMPLIES (AND (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF) (NOT (CONSP X3))) (< (CC X5) (+ 2 (CC (CONS X5 X6))))). By case analysis we reduce the conjecture to Subgoal 2.4.1' (IMPLIES (AND (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF) (NOT (CONSP X3))) (< (CC X5) (+ 2 (CC (CONS X5 X6))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS and FOLD-CONSTS-IN-+, to Subgoal 2.4.1'' (IMPLIES (NOT (CONSP X3)) (< 0 (+ 3 (CC X6)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 2.3 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (CONSP (CDR X)))) (< (CC (CADDR X)) 1)). But simplification reduces this to T, using the :executable-counterparts of <, CAR, CC and CONSP and the :rewrite rules DEFAULT-CAR and DEFAULT- CDR. Subgoal 2.2 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (CONSP (CDR X))) (< (CC (CADDR X)) (+ 1 1 (CC (CADR X)) (CC (CDDR X))))). This simplifies, using the :definition SYNP, the :executable-counterpart of BINARY-+ and the :rewrite rule FOLD-CONSTS-IN-+, to Subgoal 2.2' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (CONSP (CDR X))) (< (CC (CADDR X)) (+ 2 (CC (CADR X)) (CC (CDDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of four rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2 and restrict the type of the new variable X1 to be that of the term it replaces. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. (3) Use CAR-CDR-ELIM to replace X4 by (CONS X5 X6), (CAR X4) by X5 and (CDR X4) by X6. (4) Finally, use CAR-CDR-ELIM to replace X3 by (CONS X4 X7), (CAR X3) by X4 and (CDR X3) by X7. These steps produce the following three goals. Subgoal 2.2.3 (IMPLIES (AND (NOT (CONSP X4)) (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF) (NOT (EQUAL (CAR X3) 'IF))) (< (CC (CAR X4)) (+ 2 (CC X3) (CC X4)))). By case analysis we reduce the conjecture to Subgoal 2.2.3' (IMPLIES (AND (NOT (CONSP X4)) (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF) (NOT (EQUAL (CAR X3) 'IF))) (< (CC (CAR X4)) (+ 2 (CC X3) (CC X4)))). This simplifies, using the :definitions CC and FIX, the :executable- counterparts of CC, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :rewrite rules COMMUTATIVITY-OF-+, DEFAULT-CAR and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 2.2.3'' (IMPLIES (AND (NOT (CONSP X4)) (NOT (EQUAL (CAR X3) 'IF))) (< 0 (+ 2 (CC X3)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 2.2.2 (IMPLIES (AND (NOT (CONSP X3)) (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF) (NOT (EQUAL (CAR X3) 'IF))) (< (CC X5) (+ 2 (CC X3) (CC (CONS X5 X6))))). By case analysis we reduce the conjecture to Subgoal 2.2.2' (IMPLIES (AND (NOT (CONSP X3)) (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF) (NOT (EQUAL (CAR X3) 'IF))) (< (CC X5) (+ 2 (CC X3) (CC (CONS X5 X6))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS, DEFAULT-CAR and FOLD-CONSTS-IN-+, to Subgoal 2.2.2'' (IMPLIES (NOT (CONSP X3)) (< 0 (+ 3 (CC X6)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 2.2.1 (IMPLIES (AND (CONSP (CONS X4 X7)) (CONSP (CONS X5 X6)) (CONSP (LIST* (CONS X4 X7) X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 (CONS X4 X7) X5 X6)) (EQUAL X1 'IF) (NOT (EQUAL X4 'IF))) (< (CC X5) (+ 2 (CC (CONS X4 X7)) (CC (CONS X5 X6))))). By case analysis we reduce the conjecture to Subgoal 2.2.1' (IMPLIES (AND (CONSP (CONS X4 X7)) (CONSP (CONS X5 X6)) (CONSP (LIST* (CONS X4 X7) X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 (CONS X4 X7) X5 X6)) (EQUAL X1 'IF) (NOT (EQUAL X4 'IF))) (< (CC X5) (+ 2 (CC (CONS X4 X7)) (CC (CONS X5 X6))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-2-OF-+, COMMUTATIVITY-OF-+ and FOLD-CONSTS- IN-+, to Subgoal 2.2.1'' (IMPLIES (NOT (EQUAL X4 'IF)) (< 0 (+ 4 (CC X4) (CC X6) (CC X7)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 2.1 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (NOT (CONSP (CDR X)))) (< (CC (CADDR X)) 1)). But simplification reduces this to T, using the :executable-counterparts of <, CAR, CC and EQUAL and the :rewrite rules DEFAULT-CAR and DEFAULT- CDR. Subgoal 1 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (IF-EXPRP (CADR X))) (NORMP (CADDR X))) (O< (CC (CADDDR X)) (CC X))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions CC, FIX, IF-EXPRP and O<, the :executable-counterpart of CC, primitive type reasoning, the :rewrite rule UNICITY-OF-0 and the :type-prescription rule CC, to the following six conjectures. Subgoal 1.6 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NORMP (CADDR X)) (NOT (CONSP (CDR X)))) (< (CC (CADDDR X)) 1)). But simplification reduces this to T, using the :executable-counterparts of <, CAR, CC, CDR and CONSP and the :rewrite rules DEFAULT-CAR and DEFAULT-CDR. Subgoal 1.5 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NORMP (CADDR X)) (CONSP (CDR X)) (CONSP (CDDR X))) (< (CC (CADDDR X)) (+ 1 1 1 (CC (CADDR X)) (CC (CDDDR X))))). This simplifies, using the :definition SYNP, the :executable-counterpart of BINARY-+ and the :rewrite rule FOLD-CONSTS-IN-+, to Subgoal 1.5' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NORMP (CADDR X)) (CONSP (CDR X)) (CONSP (CDDR X))) (< (CC (CADDDR X)) (+ 3 (CC (CADDR X)) (CC (CDDDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of four rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2 and restrict the type of the new variable X1 to be that of the term it replaces. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. (3) Use CAR-CDR-ELIM to replace X4 by (CONS X5 X6), (CAR X4) by X5 and (CDR X4) by X6. (4) Finally, use CAR-CDR-ELIM to replace X6 by (CONS X7 X8), (CAR X6) by X7 and (CDR X6) by X8. These steps produce the following two goals. Subgoal 1.5.2 (IMPLIES (AND (NOT (CONSP X6)) (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF) (NOT (CONSP X3)) (NORMP X5)) (< (CC (CAR X6)) (+ 3 (CC X5) (CC X6)))). By case analysis we reduce the conjecture to Subgoal 1.5.2' (IMPLIES (AND (NOT (CONSP X6)) (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF) (NOT (CONSP X3)) (NORMP X5)) (< (CC (CAR X6)) (+ 3 (CC X5) (CC X6)))). This simplifies, using the :definitions CC and FIX, the :executable- counterparts of CC, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :rewrite rules COMMUTATIVITY-OF-+, DEFAULT-CAR and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 1.5.2'' (IMPLIES (AND (NOT (CONSP X6)) (NOT (CONSP X3)) (NORMP X5)) (< 0 (+ 3 (CC X5)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.5.1 (IMPLIES (AND (CONSP (CONS X7 X8)) (CONSP (LIST* X5 X7 X8)) (CONSP (LIST* X3 X5 X7 X8)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X5 X7 X8)) (EQUAL X1 'IF) (NOT (CONSP X3)) (NORMP X5)) (< (CC X7) (+ 3 (CC X5) (CC (CONS X7 X8))))). By case analysis we reduce the conjecture to Subgoal 1.5.1' (IMPLIES (AND (CONSP (CONS X7 X8)) (CONSP (LIST* X5 X7 X8)) (CONSP (LIST* X3 X5 X7 X8)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X5 X7 X8)) (EQUAL X1 'IF) (NOT (CONSP X3)) (NORMP X5)) (< (CC X7) (+ 3 (CC X5) (CC (CONS X7 X8))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to Subgoal 1.5.1'' (IMPLIES (AND (NOT (CONSP X3)) (NORMP X5)) (< 0 (+ 4 (CC X5) (CC X8)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.4 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NORMP (CADDR X)) (CONSP (CDR X)) (NOT (CONSP (CDDR X)))) (< (CC (CADDDR X)) 2)). But simplification reduces this to T, using the :executable-counterparts of <, CAR and CC and the :rewrite rules DEFAULT-CAR and DEFAULT-CDR. Subgoal 1.3 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (NORMP (CADDR X)) (NOT (CONSP (CDR X)))) (< (CC (CADDDR X)) 1)). But simplification reduces this to T, using the :executable-counterparts of <, CAR, CC, CDR and EQUAL and the :rewrite rules DEFAULT-CAR and DEFAULT-CDR. Subgoal 1.2 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (NORMP (CADDR X)) (CONSP (CDR X)) (CONSP (CDDR X))) (< (CC (CADDDR X)) (+ 1 1 (CC (CADR X)) 1 (CC (CADDR X)) (CC (CDDDR X))))). This simplifies, using the :definition SYNP, the :executable-counterpart of BINARY-+ and the :rewrite rules COMMUTATIVITY-2-OF-+ and FOLD-CONSTS- IN-+, to Subgoal 1.2' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (NORMP (CADDR X)) (CONSP (CDR X)) (CONSP (CDDR X))) (< (CC (CADDDR X)) (+ 3 (CC (CADR X)) (CC (CADDR X)) (CC (CDDDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of five rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2 and restrict the type of the new variable X1 to be that of the term it replaces. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. (3) Use CAR-CDR-ELIM to replace X4 by (CONS X5 X6), (CAR X4) by X5 and (CDR X4) by X6. (4) Use CAR-CDR-ELIM to replace X6 by (CONS X7 X8), (CAR X6) by X7 and (CDR X6) by X8. (5) Finally, use CAR-CDR-ELIM to replace X3 by (CONS X4 X6), (CAR X3) by X4 and (CDR X3) by X6. These steps produce the following three goals. Subgoal 1.2.3 (IMPLIES (AND (NOT (CONSP X6)) (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF) (NOT (EQUAL (CAR X3) 'IF)) (NORMP X5)) (< (CC (CAR X6)) (+ 3 (CC X3) (CC X5) (CC X6)))). By case analysis we reduce the conjecture to Subgoal 1.2.3' (IMPLIES (AND (NOT (CONSP X6)) (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF) (NOT (EQUAL (CAR X3) 'IF)) (NORMP X5)) (< (CC (CAR X6)) (+ 3 (CC X3) (CC X5) (CC X6)))). This simplifies, using the :definitions CC and FIX, the :executable- counterparts of CC, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :rewrite rules COMMUTATIVITY-OF-+, DEFAULT-CAR and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 1.2.3'' (IMPLIES (AND (NOT (CONSP X6)) (NOT (EQUAL (CAR X3) 'IF)) (NORMP X5)) (< 0 (+ 3 (CC X3) (CC X5)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.2.2 (IMPLIES (AND (NOT (CONSP X3)) (CONSP (CONS X7 X8)) (CONSP (LIST* X5 X7 X8)) (CONSP (LIST* X3 X5 X7 X8)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X5 X7 X8)) (EQUAL X1 'IF) (NOT (EQUAL (CAR X3) 'IF)) (NORMP X5)) (< (CC X7) (+ 3 (CC X3) (CC X5) (CC (CONS X7 X8))))). By case analysis we reduce the conjecture to Subgoal 1.2.2' (IMPLIES (AND (NOT (CONSP X3)) (CONSP (CONS X7 X8)) (CONSP (LIST* X5 X7 X8)) (CONSP (LIST* X3 X5 X7 X8)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X5 X7 X8)) (EQUAL X1 'IF) (NOT (EQUAL (CAR X3) 'IF)) (NORMP X5)) (< (CC X7) (+ 3 (CC X3) (CC X5) (CC (CONS X7 X8))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-2-OF-+, DEFAULT-CAR and FOLD-CONSTS-IN- +, to Subgoal 1.2.2'' (IMPLIES (AND (NOT (CONSP X3)) (NORMP X5)) (< 0 (+ 4 (CC X5) (CC X8)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.2.1 (IMPLIES (AND (CONSP (CONS X4 X6)) (CONSP (CONS X7 X8)) (CONSP (LIST* X5 X7 X8)) (CONSP (LIST* (CONS X4 X6) X5 X7 X8)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 (CONS X4 X6) X5 X7 X8)) (EQUAL X1 'IF) (NOT (EQUAL X4 'IF)) (NORMP X5)) (< (CC X7) (+ 3 (CC (CONS X4 X6)) (CC X5) (CC (CONS X7 X8))))). By case analysis we reduce the conjecture to Subgoal 1.2.1' (IMPLIES (AND (CONSP (CONS X4 X6)) (CONSP (CONS X7 X8)) (CONSP (LIST* X5 X7 X8)) (CONSP (LIST* (CONS X4 X6) X5 X7 X8)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 (CONS X4 X6) X5 X7 X8)) (EQUAL X1 'IF) (NOT (EQUAL X4 'IF)) (NORMP X5)) (< (CC X7) (+ 3 (CC (CONS X4 X6)) (CC X5) (CC (CONS X7 X8))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-2-OF-+, COMMUTATIVITY-OF-+ and FOLD-CONSTS- IN-+, to Subgoal 1.2.1'' (IMPLIES (AND (NOT (EQUAL X4 'IF)) (NORMP X5)) (< 0 (+ 5 (CC X4) (CC X5) (CC X6) (CC X8)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.1 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (NORMP (CADDR X)) (CONSP (CDR X)) (NOT (CONSP (CDDR X)))) (< (CC (CADDDR X)) (+ 1 1 (CC (CADR X)) 0))). This simplifies, using the :definitions FIX and SYNP, the :executable- counterparts of BINARY-+, CAR and CC, the :rewrite rules COMMUTATIVITY- OF-+, DEFAULT-CAR, DEFAULT-CDR, FOLD-CONSTS-IN-+ and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 1.1' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (NORMP NIL) (CONSP (CDR X)) (NOT (CONSP (CDDR X)))) (< 0 (+ 2 (CC (CADR X))))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Q.E.D. That completes the proof of the measure theorem for NORMP. Thus, we admit this function under the principle of definition. We observe that the type of NORMP is described by the theorem (OR (EQUAL (NORMP X) T) (EQUAL (NORMP X) NIL)). Summary Form: ( DEFUN NORMP ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION A1) (:DEFINITION A2) (:DEFINITION A3) (:DEFINITION CC) (:DEFINITION FIX) (:DEFINITION IF-EXPRP) (:DEFINITION NOT) (:DEFINITION O<) (:DEFINITION SYNP) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART CAR) (:EXECUTABLE-COUNTERPART CC) (:EXECUTABLE-COUNTERPART CDR) (:EXECUTABLE-COUNTERPART CONSP) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART SYMBOLP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE DEFAULT-CAR) (:REWRITE DEFAULT-CDR) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 2.46 seconds (prove: 1.83, print: 0.62, other: 0.01) NORMP ACL2 >>(DEFUN IF-DEPTH (X) (DECLARE (XARGS :MEASURE (CC X))) (IF (IF-EXPRP X) (+ 1 (IF-DEPTH (A1 X))) 0)) For the admission of IF-DEPTH we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (CC X). The non-trivial part of the measure conjecture is Goal (AND (O-P (CC X)) (IMPLIES (IF-EXPRP X) (O< (CC (A1 X)) (CC X)))). By the simple :definitions A1 and IF-EXPRP we reduce the conjecture to the following two conjectures. Subgoal 2 (O-P (CC X)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, the :rewrite rule O-P-DEF-O-FINP-1 and the :type-prescription rule CC. Subgoal 1 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF)) (O< (CC (CADR X)) (CC X))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions CC, FIX and O<, the :executable-counterpart of CC, primitive type reasoning, the :rewrite rule UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 1' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF)) (< (CC (CADR X)) (+ 1 (CC (CDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of two rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2 and restrict the type of the new variable X1 to be that of the term it replaces. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. These steps produce the following two goals. Subgoal 1.2 (IMPLIES (AND (NOT (CONSP X2)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (CONS X1 X2)) (EQUAL X1 'IF)) (< (CC (CAR X2)) (+ 1 (CC X2)))). By case analysis we reduce the conjecture to Subgoal 1.2' (IMPLIES (AND (NOT (CONSP X2)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (CONS X1 X2)) (EQUAL X1 'IF)) (< (CC (CAR X2)) (+ 1 (CC X2)))). But simplification reduces this to T, using the :definition CC, the :executable-counterparts of <, BINARY-+, CC, EQUAL, NOT and SYMBOLP, primitive type reasoning and the :rewrite rule DEFAULT-CAR. Subgoal 1.1 (IMPLIES (AND (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF)) (< (CC X3) (+ 1 (CC (CONS X3 X4))))). By case analysis we reduce the conjecture to Subgoal 1.1' (IMPLIES (AND (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF)) (< (CC X3) (+ 1 (CC (CONS X3 X4))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS and FOLD-CONSTS-IN-+, to Subgoal 1.1'' (< 0 (+ 2 (CC X4))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Q.E.D. That completes the proof of the measure theorem for IF-DEPTH. Thus, we admit this function under the principle of definition. We observe that the type of IF-DEPTH is described by the theorem (AND (INTEGERP (IF-DEPTH X)) (<= 0 (IF-DEPTH X))). We used primitive type reasoning. Summary Form: ( DEFUN IF-DEPTH ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION A1) (:DEFINITION CC) (:DEFINITION FIX) (:DEFINITION IF-EXPRP) (:DEFINITION NOT) (:DEFINITION O<) (:DEFINITION SYNP) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART CC) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART SYMBOLP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE DEFAULT-CAR) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.15 seconds (prove: 0.09, print: 0.04, other: 0.02) IF-DEPTH ACL2 >>(DEFUN IF-COMPLEXITY (X) (DECLARE (XARGS :MEASURE (CC X))) (IF (IF-EXPRP X) (* (IF-COMPLEXITY (A1 X)) (+ (IF-COMPLEXITY (A2 X)) (IF-COMPLEXITY (A3 X)))) 1)) For the admission of IF-COMPLEXITY we will use the relation O< (which is known to be well-founded on the domain recognized by O-P) and the measure (CC X). The non-trivial part of the measure conjecture is Goal (AND (O-P (CC X)) (IMPLIES (IF-EXPRP X) (O< (CC (A2 X)) (CC X))) (IMPLIES (IF-EXPRP X) (O< (CC (A1 X)) (CC X))) (IMPLIES (IF-EXPRP X) (O< (CC (A3 X)) (CC X)))). By the simple :definitions A1, A2, A3 and IF-EXPRP we reduce the conjecture to the following four conjectures. Subgoal 4 (O-P (CC X)). But simplification reduces this to T, using the :compound-recognizer rules NATP-CR and O-FINP-CR, the :rewrite rule O-P-DEF-O-FINP-1 and the :type-prescription rule CC. Subgoal 3 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF)) (O< (CC (CADDR X)) (CC X))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions CC, FIX and O<, the :executable-counterpart of CC, primitive type reasoning, the :rewrite rule UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 3' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF)) (< (CC (CADDR X)) (+ 1 (CC (CDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of three rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2 and restrict the type of the new variable X1 to be that of the term it replaces. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. (3) Finally, use CAR-CDR-ELIM to replace X4 by (CONS X5 X6), (CAR X4) by X5 and (CDR X4) by X6. These steps produce the following three goals. Subgoal 3.3 (IMPLIES (AND (NOT (CONSP X2)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (CONS X1 X2)) (EQUAL X1 'IF)) (< (CC (CADR X2)) (+ 1 (CC X2)))). By case analysis we reduce the conjecture to Subgoal 3.3' (IMPLIES (AND (NOT (CONSP X2)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (CONS X1 X2)) (EQUAL X1 'IF)) (< (CC (CADR X2)) (+ 1 (CC X2)))). But simplification reduces this to T, using the :definition CC, the :executable-counterparts of <, BINARY-+, CAR, CC, EQUAL, NOT and SYMBOLP, primitive type reasoning and the :rewrite rule DEFAULT-CDR. Subgoal 3.2 (IMPLIES (AND (NOT (CONSP X4)) (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF)) (< (CC (CAR X4)) (+ 1 (CC (CONS X3 X4))))). By case analysis we reduce the conjecture to Subgoal 3.2' (IMPLIES (AND (NOT (CONSP X4)) (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF)) (< (CC (CAR X4)) (+ 1 (CC (CONS X3 X4))))). This simplifies, using the :definitions CC, FIX and SYNP, the :executable- counterparts of BINARY-+, CC, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY-OF- +, DEFAULT-CAR, FOLD-CONSTS-IN-+ and UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 3.2'' (IMPLIES (NOT (CONSP X4)) (< 0 (+ 2 (CC X3)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 3.1 (IMPLIES (AND (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF)) (< (CC X5) (+ 1 (CC (LIST* X3 X5 X6))))). By case analysis we reduce the conjecture to Subgoal 3.1' (IMPLIES (AND (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF)) (< (CC X5) (+ 1 (CC (LIST* X3 X5 X6))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to Subgoal 3.1'' (< 0 (+ 3 (CC X3) (CC X6))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 2 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF)) (O< (CC (CADR X)) (CC X))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions CC, FIX and O<, the :executable-counterpart of CC, primitive type reasoning, the :rewrite rule UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 2' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF)) (< (CC (CADR X)) (+ 1 (CC (CDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of two rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2 and restrict the type of the new variable X1 to be that of the term it replaces. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. These steps produce the following two goals. Subgoal 2.2 (IMPLIES (AND (NOT (CONSP X2)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (CONS X1 X2)) (EQUAL X1 'IF)) (< (CC (CAR X2)) (+ 1 (CC X2)))). By case analysis we reduce the conjecture to Subgoal 2.2' (IMPLIES (AND (NOT (CONSP X2)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (CONS X1 X2)) (EQUAL X1 'IF)) (< (CC (CAR X2)) (+ 1 (CC X2)))). But simplification reduces this to T, using the :definition CC, the :executable-counterparts of <, BINARY-+, CC, EQUAL, NOT and SYMBOLP, primitive type reasoning and the :rewrite rule DEFAULT-CAR. Subgoal 2.1 (IMPLIES (AND (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF)) (< (CC X3) (+ 1 (CC (CONS X3 X4))))). By case analysis we reduce the conjecture to Subgoal 2.1' (IMPLIES (AND (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF)) (< (CC X3) (+ 1 (CC (CONS X3 X4))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS and FOLD-CONSTS-IN-+, to Subgoal 2.1'' (< 0 (+ 2 (CC X4))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF)) (O< (CC (CADDDR X)) (CC X))). This simplifies, using the :compound-recognizer rule O-FINP-CR, the :definitions CC, FIX and O<, the :executable-counterpart of CC, primitive type reasoning, the :rewrite rule UNICITY-OF-0 and the :type-prescription rule CC, to Subgoal 1' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF)) (< (CC (CADDDR X)) (+ 1 (CC (CDR X))))). The destructor terms (CAR X) and (CDR X) can be eliminated. Furthermore, those terms are at the root of a chain of four rounds of destructor elimination. (1) Use CAR-CDR-ELIM to replace X by (CONS X1 X2), (CAR X) by X1 and (CDR X) by X2 and restrict the type of the new variable X1 to be that of the term it replaces. (2) Use CAR-CDR-ELIM, again, to replace X2 by (CONS X3 X4), (CAR X2) by X3 and (CDR X2) by X4. (3) Use CAR-CDR-ELIM to replace X4 by (CONS X5 X6), (CAR X4) by X5 and (CDR X4) by X6. (4) Finally, use CAR-CDR-ELIM to replace X6 by (CONS X7 X8), (CAR X6) by X7 and (CDR X6) by X8. These steps produce the following four goals. Subgoal 1.4 (IMPLIES (AND (NOT (CONSP X2)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (CONS X1 X2)) (EQUAL X1 'IF)) (< (CC (CADDR X2)) (+ 1 (CC X2)))). By case analysis we reduce the conjecture to Subgoal 1.4' (IMPLIES (AND (NOT (CONSP X2)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (CONS X1 X2)) (EQUAL X1 'IF)) (< (CC (CADDR X2)) (+ 1 (CC X2)))). But simplification reduces this to T, using the :definition CC, the :executable-counterparts of <, BINARY-+, CAR, CC, CDR, EQUAL, NOT and SYMBOLP, primitive type reasoning and the :rewrite rule DEFAULT-CDR. Subgoal 1.3 (IMPLIES (AND (NOT (CONSP X4)) (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF)) (< (CC (CADR X4)) (+ 1 (CC (CONS X3 X4))))). By case analysis we reduce the conjecture to Subgoal 1.3' (IMPLIES (AND (NOT (CONSP X4)) (CONSP (CONS X3 X4)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X4)) (EQUAL X1 'IF)) (< (CC (CADR X4)) (+ 1 (CC (CONS X3 X4))))). This simplifies, using the :definitions CC, FIX and SYNP, the :executable- counterparts of BINARY-+, CAR, CC, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY- OF-+, DEFAULT-CDR, FOLD-CONSTS-IN-+ and UNICITY-OF-0 and the :type- prescription rule CC, to Subgoal 1.3'' (IMPLIES (NOT (CONSP X4)) (< 0 (+ 2 (CC X3)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.2 (IMPLIES (AND (NOT (CONSP X6)) (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF)) (< (CC (CAR X6)) (+ 1 (CC (LIST* X3 X5 X6))))). By case analysis we reduce the conjecture to Subgoal 1.2' (IMPLIES (AND (NOT (CONSP X6)) (CONSP (CONS X5 X6)) (CONSP (LIST* X3 X5 X6)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X5 X6)) (EQUAL X1 'IF)) (< (CC (CAR X6)) (+ 1 (CC (LIST* X3 X5 X6))))). This simplifies, using the :definitions CC, FIX and SYNP, the :executable- counterparts of BINARY-+, CC, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :rewrite rules CAR-CONS, CDR-CONS, COMMUTATIVITY-2-OF- +, COMMUTATIVITY-OF-+, DEFAULT-CAR, FOLD-CONSTS-IN-+ and UNICITY-OF- 0 and the :type-prescription rule CC, to Subgoal 1.2'' (IMPLIES (NOT (CONSP X6)) (< 0 (+ 3 (CC X3) (CC X5)))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Subgoal 1.1 (IMPLIES (AND (CONSP (CONS X7 X8)) (CONSP (LIST* X5 X7 X8)) (CONSP (LIST* X3 X5 X7 X8)) (SYMBOLP X1) (NOT (EQUAL X1 T)) (NOT (EQUAL X1 NIL)) (CONSP (LIST* X1 X3 X5 X7 X8)) (EQUAL X1 'IF)) (< (CC X7) (+ 1 (CC (LIST* X3 X5 X7 X8))))). By case analysis we reduce the conjecture to Subgoal 1.1' (IMPLIES (AND (CONSP (CONS X7 X8)) (CONSP (LIST* X5 X7 X8)) (CONSP (LIST* X3 X5 X7 X8)) (SYMBOLP X1) (NOT (EQUAL X1 T)) X1 (CONSP (LIST* X1 X3 X5 X7 X8)) (EQUAL X1 'IF)) (< (CC X7) (+ 1 (CC (LIST* X3 X5 X7 X8))))). This simplifies, using the :definitions CC and SYNP, the :executable- counterparts of BINARY-+, EQUAL, NOT and SYMBOLP, primitive type reasoning, the :meta rule CANCEL_PLUS-LESSP-CORRECT and the :rewrite rules CAR- CONS, CDR-CONS, COMMUTATIVITY-2-OF-+ and FOLD-CONSTS-IN-+, to Subgoal 1.1'' (< 0 (+ 4 (CC X3) (CC X5) (CC X8))). But simplification reduces this to T, using primitive type reasoning and the :type-prescription rule CC. Q.E.D. That completes the proof of the measure theorem for IF-COMPLEXITY. Thus, we admit this function under the principle of definition. We observe that the type of IF-COMPLEXITY is described by the theorem (AND (INTEGERP (IF-COMPLEXITY X)) (< 0 (IF-COMPLEXITY X))). We used primitive type reasoning. Summary Form: ( DEFUN IF-COMPLEXITY ...) Rules: ((:COMPOUND-RECOGNIZER NATP-CR) (:COMPOUND-RECOGNIZER O-FINP-CR) (:DEFINITION A1) (:DEFINITION A2) (:DEFINITION A3) (:DEFINITION CC) (:DEFINITION FIX) (:DEFINITION IF-EXPRP) (:DEFINITION NOT) (:DEFINITION O<) (:DEFINITION SYNP) (:ELIM CAR-CDR-ELIM) (:EXECUTABLE-COUNTERPART <) (:EXECUTABLE-COUNTERPART BINARY-+) (:EXECUTABLE-COUNTERPART CAR) (:EXECUTABLE-COUNTERPART CC) (:EXECUTABLE-COUNTERPART CDR) (:EXECUTABLE-COUNTERPART EQUAL) (:EXECUTABLE-COUNTERPART NOT) (:EXECUTABLE-COUNTERPART SYMBOLP) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:META CANCEL_PLUS-LESSP-CORRECT) (:REWRITE CAR-CONS) (:REWRITE CDR-CONS) (:REWRITE COMMUTATIVITY-2-OF-+) (:REWRITE COMMUTATIVITY-OF-+) (:REWRITE DEFAULT-CAR) (:REWRITE DEFAULT-CDR) (:REWRITE FOLD-CONSTS-IN-+) (:REWRITE O-P-DEF-O-FINP-1) (:REWRITE UNICITY-OF-0) (:TYPE-PRESCRIPTION CC)) Warnings: None Time: 0.62 seconds (prove: 0.27, print: 0.33, other: 0.02) IF-COMPLEXITY ACL2 >>(THEOREM PROBLEM-133A (<= 1 (IF-COMPLEXITY X)) :HINTS (("Goal" :INDUCT (IF-COMPLEXITY X))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (IF-COMPLEXITY X). This suggestion was produced using the :induction rule IF-COMPLEXITY. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (IF-EXPRP X)) (:P X)) (IMPLIES (AND (IF-EXPRP X) (:P (A1 X)) (:P (A2 X)) (:P (A3 X))) (:P X))). This induction is justified by the same argument used to admit IF-COMPLEXITY, namely, the measure (CC X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces the following two nontautological subgoals. Subgoal *1/2 (IMPLIES (NOT (IF-EXPRP X)) (<= 1 (IF-COMPLEXITY X))). But we reduce the conjecture to T, by primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/1 (IMPLIES (AND (IF-EXPRP X) (<= 1 (IF-COMPLEXITY (A1 X))) (<= 1 (IF-COMPLEXITY (A2 X))) (<= 1 (IF-COMPLEXITY (A3 X)))) (<= 1 (IF-COMPLEXITY X))). But we reduce the conjecture to T, by primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. That completes the proof of *1. Q.E.D. Summary Form: ( DEFTHM PROBLEM-133A ...) Rules: ((:FAKE-RUNE-FOR-TYPE-SET NIL) (:INDUCTION IF-COMPLEXITY) (:TYPE-PRESCRIPTION IF-COMPLEXITY)) Warnings: None Time: 0.05 seconds (prove: 0.00, print: 0.04, other: 0.01) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) PROBLEM-133A ACL2 >>(THEOREM PROBLEM-133B (IMPLIES (AND (RATIONALP X) (RATIONALP Y) (<= 1 X) (< 0 Y)) (<= Y (* X Y))) :RULE-CLASSES :LINEAR) [Note: A hint was supplied for our processing of the goal above. Thanks!] But simplification reduces this to T, using primitive type reasoning and the :rewrite rule <-*-X-Y-Y. Q.E.D. Summary Form: ( DEFTHM PROBLEM-133B ...) Rules: ((:DEFINITION NOT) (:FAKE-RUNE-FOR-TYPE-SET NIL) (:REWRITE <-*-X-Y-Y)) Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.01, other: 0.00) Summary Form: (IN-THEORY (DISABLE ...)) Rules: NIL Warnings: None Time: 0.02 seconds (prove: 0.00, print: 0.00, other: 0.02) PROBLEM-133B ACL2 >>(THEOREM PROBLEM-133C (IMPLIES (IF-EXPRP X) (< (IF-COMPLEXITY (A2 X)) (IF-COMPLEXITY X))) :HINTS (("Goal" :INDUCT (IF-COMPLEXITY X) :IN-THEORY (ENABLE PROBLEM-133B))) :RULE-CLASSES :LINEAR) ACL2 Warning [Non-rec] in ( DEFTHM PROBLEM-133C ...): The :LINEAR rule generated from PROBLEM-133C will be triggered only by terms containing the non-recursive function symbol A2. Unless this function is disabled, such triggering terms are unlikely to arise and so PROBLEM-133C is unlikely to ever be used. [Note: A hint was supplied for our processing of the goal above. Thanks!] Name the formula above *1. We have been told to use induction. One induction scheme is suggested by the induction hint. We will induct according to a scheme suggested by (IF-COMPLEXITY X). This suggestion was produced using the :induction rule IF-COMPLEXITY. If we let (:P X) denote *1 above then the induction scheme we'll use is (AND (IMPLIES (NOT (IF-EXPRP X)) (:P X)) (IMPLIES (AND (IF-EXPRP X) (:P (A1 X)) (:P (A2 X)) (:P (A3 X))) (:P X))). This induction is justified by the same argument used to admit IF-COMPLEXITY, namely, the measure (CC X) is decreasing according to the relation O< (which is known to be well-founded on the domain recognized by O- P). When applied to the goal at hand the above induction scheme produces one nontautological subgoal. Subgoal *1/ (IMPLIES (AND (IF-EXPRP X) (IMPLIES (IF-EXPRP (A1 X)) (< (IF-COMPLEXITY (A2 (A1 X))) (IF-COMPLEXITY (A1 X)))) (IMPLIES (IF-EXPRP (A2 X)) (< (IF-COMPLEXITY (A2 (A2 X))) (IF-COMPLEXITY (A2 X)))) (IMPLIES (IF-EXPRP (A3 X)) (< (IF-COMPLEXITY (A2 (A3 X))) (IF-COMPLEXITY (A3 X))))) (IMPLIES (IF-EXPRP X) (< (IF-COMPLEXITY (A2 X)) (IF-COMPLEXITY X)))). By the simple :definitions A1, A2, A3 and IF-EXPRP we reduce the conjecture to Subgoal *1/' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (IMPLIES (IF-EXPRP (CADR X)) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X)))) (IMPLIES (IF-EXPRP (CADDR X)) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X)))) (IMPLIES (IF-EXPRP (CADDDR X)) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X))))) (< (IF-COMPLEXITY (CADDR X)) (IF-COMPLEXITY X))). This simplifies, using the :definitions IF-COMPLEXITY and IF-EXPRP, the :executable-counterpart of EQUAL and the :rewrite rule DISTRIBUTIVITY, to the following 27 conjectures. Subgoal *1/27 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (CONSP (CADDR X))) (NOT (CONSP (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/27' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (CONSP (CADDR X))) (NOT (CONSP (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/26 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (CONSP (CADDR X))) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/26' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (CONSP (CADDR X))) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/25 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (CONSP (CADDR X))) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/25' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (CONSP (CADDR X))) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/24 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (NOT (CONSP (CADDDR X)))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/24' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (NOT (CONSP (CADDDR X)))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning, the :linear rule PROBLEM-133B and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/23 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/23' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning, the :linear rule PROBLEM-133B and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/22 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/22' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning, the :linear rule PROBLEM-133B and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/21 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (EQUAL (CAADDR X) 'IF)) (NOT (CONSP (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/21' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (EQUAL (CAADDR X) 'IF)) (NOT (CONSP (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/20 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (EQUAL (CAADDR X) 'IF)) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/20' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (EQUAL (CAADDR X) 'IF)) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/19 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (EQUAL (CAADDR X) 'IF)) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/19' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (CONSP (CADR X))) (NOT (EQUAL (CAADDR X) 'IF)) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/18 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (NOT (CONSP (CADDR X))) (NOT (CONSP (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/18' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (NOT (CONSP (CADDR X))) (NOT (CONSP (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/17 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (NOT (CONSP (CADDR X))) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/17' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (NOT (CONSP (CADDR X))) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/16 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (NOT (CONSP (CADDR X))) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/16' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (NOT (CONSP (CADDR X))) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/15 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (NOT (CONSP (CADDDR X)))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/15' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (NOT (CONSP (CADDDR X)))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning, the :linear rule PROBLEM-133B and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/14 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/14' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning, the :linear rule PROBLEM-133B and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/13 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/13' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning, the :linear rule PROBLEM-133B and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/12 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (NOT (EQUAL (CAADDR X) 'IF)) (NOT (CONSP (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/12' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (NOT (EQUAL (CAADDR X) 'IF)) (NOT (CONSP (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/11 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (NOT (EQUAL (CAADDR X) 'IF)) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/11' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (NOT (EQUAL (CAADDR X) 'IF)) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/10 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (NOT (EQUAL (CAADDR X) 'IF)) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/10' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (< (IF-COMPLEXITY (CADDAR (CDR X))) (IF-COMPLEXITY (CADR X))) (NOT (EQUAL (CAADDR X) 'IF)) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/9 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (NOT (CONSP (CADDR X))) (NOT (CONSP (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/9' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (NOT (CONSP (CADDR X))) (NOT (CONSP (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/8 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (NOT (CONSP (CADDR X))) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/8' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (NOT (CONSP (CADDR X))) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/7 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (NOT (CONSP (CADDR X))) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< 1 (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/7' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (NOT (CONSP (CADDR X))) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< 1 (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/6 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (NOT (CONSP (CADDDR X)))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/6' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (NOT (CONSP (CADDDR X)))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning, the :linear rule PROBLEM-133B and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/5 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X))) (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A3 X)))))). By the simple :definitions A1, A2 and A3 we reduce the conjecture to Subgoal *1/5' (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (< (IF-COMPLEXITY (CADDAR (CDDDR X))) (IF-COMPLEXITY (CADDDR X)))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDR X))) (* (IF-COMPLEXITY (CADR X)) (IF-COMPLEXITY (CADDDR X)))))). But simplification reduces this to T, using linear arithmetic, primitive type reasoning, the :linear rule PROBLEM-133B and the :type-prescription rule IF-COMPLEXITY. Subgoal *1/4 (IMPLIES (AND (CONSP X) (EQUAL (CAR X) 'IF) (NOT (EQUAL (CAADR X) 'IF)) (< (IF-COMPLEXITY (CADDAR (CDDR X))) (IF-COMPLEXITY (CADDR X))) (NOT (EQUAL (CAADDR (CDR X)) 'IF))) (< (IF-COMPLEXITY (CADDR X)) (+ (* (IF-COMPLEXITY (A1 X)) (IF-COMPLEXITY (A2 X)))