#| Copyright (C) 1994 by David Russinoff. All Rights Reserved. You may copy and distribute verbatim copies of this Nqthm-1992 event script as you receive it, in any medium, including embedding it verbatim in derivative works, provided that you conspicuously and appropriately publish on each copy a valid copyright notice "Copyright (C) 1994 by David Russinoff. All Rights Reserved." NO WARRANTY David Russinoff PROVIDES ABSOLUTELY NO WARRANTY. THE EVENT SCRIPT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SCRIPT IS WITH YOU. SHOULD THE SCRIPT PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. IN NO EVENT WILL David Russinoff BE LIABLE TO YOU FOR ANY DAMAGES, ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THIS SCRIPT (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES), EVEN IF YOU HAVE ADVISED US OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. |# ; Work of David Russinoff. (NOTE-LIB "wilson" T) (COMPILE-UNCOMPILED-DEFNS "tmp") (DEFN SQUARES (N P) (IF (ZEROP N) (LIST 0) (CONS (REMAINDER (TIMES N N) P) (SQUARES (SUB1 N) P)))) (DEFN RESIDUE (A P) (AND (NOT (DIVIDES P A)) (MEMBER (REMAINDER A P) (SQUARES P P)))) (PROVE-LEMMA ALL-SQUARES-1 NIL (IMPLIES (AND (NOT (ZEROP P)) (LEQ M N)) (MEMBER (REMAINDER (TIMES M M) P) (SQUARES N P)))) (PROVE-LEMMA ALL-SQUARES-2 NIL (EQUAL (REMAINDER (TIMES Y Y) P) (REMAINDER (TIMES (REMAINDER Y P) (REMAINDER Y P)) P)) ((USE (TIMES-MOD-1 (X Y) (N P)) (TIMES-MOD-3 (B (REMAINDER Y P)) (A Y) (N P))) (DISABLE TIMES-MOD-1 TIMES-MOD-3))) (PROVE-LEMMA ALL-SQUARES (REWRITE) (IMPLIES (AND (NOT (ZEROP P)) (NOT (MEMBER X (SQUARES P P)))) (NOT (EQUAL X (REMAINDER (TIMES Y Y) P)))) ((USE (ALL-SQUARES-1 (N P) (M (REMAINDER Y P))) (ALL-SQUARES-2)) (DISABLE TIMES-MOD-1 TIMES-MOD-3))) (PROVE-LEMMA EULER-1-1 NIL (IMPLIES (NOT (DIVIDES 2 P)) (EQUAL (TIMES 2 (QUOTIENT P 2)) (SUB1 P)))) (PROVE-LEMMA EULER-1-2 NIL (IMPLIES (NOT (DIVIDES 2 P)) (EQUAL (EXP (TIMES I I) (QUOTIENT P 2)) (EXP I (SUB1 P)))) ((USE (EXP-EXP (J 2) (K (QUOTIENT P 2))) (EULER-1-1)) (DISABLE EXP-EXP))) (PROVE-LEMMA EULER-1-3 NIL (IMPLIES (EQUAL (REMAINDER A P) (REMAINDER B P)) (EQUAL (REMAINDER (EXP A C) P) (REMAINDER (EXP B C) P))) ((USE (REMAINDER-EXP (I C) (N P)) (REMAINDER-EXP (A B) (I C) (N P))) (DISABLE REMAINDER-EXP))) (PROVE-LEMMA EULER-1-4 NIL (IMPLIES (AND (PRIME P) (NOT (DIVIDES 2 P)) (NOT (DIVIDES P I))) (EQUAL (REMAINDER (EXP (TIMES I I) (QUOTIENT P 2)) P) 1)) ((USE (EULER-1-2)) (DISABLE LESSP-REMAINDER-DIVISOR PRIME))) (PROVE-LEMMA EULER-1-5 NIL (IMPLIES (AND (PRIME P) (NOT (DIVIDES P A)) (EQUAL (REMAINDER A P) (REMAINDER (TIMES I I) P))) (NOT (DIVIDES P I))) ((USE (PRIME-KEY-REWRITE (A I) (B I))) (DISABLE PRIME-KEY-REWRITE PRIME))) (PROVE-LEMMA EULER-1-6 NIL (IMPLIES (AND (PRIME P) (NOT (DIVIDES 2 P)) (NOT (DIVIDES P A)) (EQUAL (REMAINDER A P) (REMAINDER (TIMES I I) P))) (EQUAL (REMAINDER (EXP A (QUOTIENT P 2)) P) 1)) ((USE (EULER-1-4) (EULER-1-5) (EULER-1-3 (B (TIMES I I)) (C (QUOTIENT P 2)))) (DISABLE PRIME LESSP-REMAINDER-DIVISOR B-I-LEMMA2 LESSP SUB1-NNUMBERP REMAINDER-0-CROCK REMAINDER))) (PROVE-LEMMA EULER-1-7 (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES 2 P)) (NOT (DIVIDES P A)) (MEMBER (REMAINDER A P) (SQUARES I P))) (EQUAL (REMAINDER (EXP A (QUOTIENT P 2)) P) 1)) ((USE (EULER-1-6)) (INDUCT (SQUARES I P)) (DISABLE PRIME REMAINDER LESSP-REMAINDER-DIVISOR))) (PROVE-LEMMA EULER-1 (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES 2 P)) (RESIDUE A P)) (EQUAL (REMAINDER (EXP A (QUOTIENT P 2)) P) 1)) ((DISABLE PRIME))) (DEFN COMPLEMENT (J A P) (REMAINDER (TIMES (INVERSE J P) A) P)) (TOGGLE G0219 INVERSE T) (PROVE-LEMMA COMPLEMENT-WORKS (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P J))) (EQUAL (REMAINDER (TIMES J (COMPLEMENT J A P)) P) (REMAINDER A P))) ((USE (INVERSE-INVERTS) (TIMES-MOD-3 (A (TIMES J (INVERSE J P))) (B A) (N P))) (DISABLE INVERSE-INVERTS TIMES-MOD-3 PRIME))) (PROVE-LEMMA BOUNDED-COMPLEMENT (REWRITE) (IMPLIES (NOT (ZEROP P)) (LESSP (COMPLEMENT J A P) P))) (TOGGLE COMPLEMENT-OFF COMPLEMENT T) (PROVE-LEMMA NON-ZEROP-COMPLEMENT (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P J)) (NOT (DIVIDES P A))) (NOT (ZEROP (COMPLEMENT J A P)))) ((USE (COMPLEMENT-WORKS)) (DISABLE COMPLEMENT-WORKS PRIME))) (PROVE-LEMMA COMPLEMENT-IS-UNIQUE (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P A)) (EQUAL (REMAINDER (TIMES J X) P) (REMAINDER A P))) (EQUAL (COMPLEMENT J A P) (REMAINDER X P))) ((USE (COMPLEMENT-WORKS) (THM-55-SPECIALIZED-TO-PRIMES (M J) (Y (COMPLEMENT J A P)))) (DISABLE COMPLEMENT-WORKS THM-55-SPECIALIZED-TO-PRIMES PRIME))) (TOGGLE SQUARES-OFF SQUARES T) (PROVE-LEMMA NO-SELF-COMPLEMENT (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P J)) (NOT (DIVIDES P A)) (NOT (RESIDUE A P))) (NOT (EQUAL J (COMPLEMENT J A P)))) ((USE (COMPLEMENT-WORKS) (ALL-SQUARES (X (REMAINDER A P)) (Y J))) (DISABLE COMPLEMENT-WORKS ALL-SQUARES PRIME1))) (PROVE-LEMMA COMPLEMENT-OF-COMPLEMENT (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P J)) (NOT (DIVIDES P A))) (EQUAL (COMPLEMENT (COMPLEMENT J A P) A P) (REMAINDER J P))) ((USE (COMPLEMENT-WORKS) (COMPLEMENT-IS-UNIQUE (J (COMPLEMENT J A P)) (X J))) (DISABLE COMPLEMENT-WORKS COMPLEMENT-IS-UNIQUE))) (DEFN COMP-LIST (I A P) (IF (ZEROP I) NIL (IF (MEMBER I (COMP-LIST (SUB1 I) A P)) (COMP-LIST (SUB1 I) A P) (CONS I (CONS (COMPLEMENT I A P) (COMP-LIST (SUB1 I) A P)))))) (PROVE-LEMMA ALL-NON-ZEROP-COMP-LIST (REWRITE) (IMPLIES (AND (PRIME P) (LESSP I P) (NOT (DIVIDES P A))) (ALL-NON-ZEROP (COMP-LIST I A P))) ((USE (NON-ZEROP-COMPLEMENT (J I))) (INDUCT (COMP-LIST I A P)))) (PROVE-LEMMA BOUNDED-COMP-LIST (REWRITE) (IMPLIES (LESSP I P) (ALL-LESSEQP (COMP-LIST I A P) (SUB1 P))) ((USE (BOUNDED-COMPLEMENT (J I))) (INDUCT (COMP-LIST I A P)))) (PROVE-LEMMA SUBSETP-POSITIVES-COMP-LIST (REWRITE) (SUBSETP (POSITIVES N) (COMP-LIST N A P))) (PROVE-LEMMA COMP-LIST-CLOSED-1 NIL (IMPLIES (AND (PRIME P) (NOT (ZEROP I)) (LESSP I P) (NOT (DIVIDES P A)) (MEMBER J (COMP-LIST I A P))) (MEMBER (COMPLEMENT J A P) (COMP-LIST I A P))) ((USE (COMPLEMENT-OF-COMPLEMENT (J I))) (INDUCT (COMP-LIST I A P)) (DISABLE COMPLEMENT-OF-COMPLEMENT))) (PROVE-LEMMA COMP-LIST-CLOSED-2 NIL (IMPLIES (AND (PRIME P) (NOT (ZEROP I)) (NOT (ZEROP J)) (LESSP I P) (LESSP J P) (NOT (DIVIDES P A)) (MEMBER (COMPLEMENT J A P) (COMP-LIST I A P))) (MEMBER J (COMP-LIST I A P))) ((USE (COMPLEMENT-OF-COMPLEMENT) (COMP-LIST-CLOSED-1 (J (COMPLEMENT J A P)))) (DISABLE COMPLEMENT-OF-COMPLEMENT COMP-LIST))) (PROVE-LEMMA ALL-DISTINCT-COMP-LIST-1 NIL (IMPLIES (AND (PRIME P) (LESSP I P) (NOT (DIVIDES P A)) (NOT (RESIDUE A P)) (ALL-DISTINCT (COMP-LIST (SUB1 I) A P))) (ALL-DISTINCT (COMP-LIST I A P))) ((USE (COMP-LIST-CLOSED-2 (J I) (I (SUB1 I))) (NO-SELF-COMPLEMENT (J I))) (DISABLE PRIME))) (PROVE-LEMMA ALL-DISTINCT-COMP-LIST (REWRITE) (IMPLIES (AND (PRIME P) (LESSP I P) (NOT (DIVIDES P A)) (NOT (RESIDUE A P))) (ALL-DISTINCT (COMP-LIST I A P))) ((USE (ALL-DISTINCT-COMP-LIST-1)) (INDUCT (POSITIVES I)) (DISABLE PRIME))) (PROVE-LEMMA PERM-POSITIVES-COMP-LIST (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P A)) (NOT (RESIDUE A P))) (PERM (POSITIVES (SUB1 P)) (COMP-LIST (SUB1 P) A P)))) (PROVE-LEMMA COMP-LIST-FACT (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P A)) (NOT (RESIDUE A P))) (EQUAL (TIMES-LIST (COMP-LIST (SUB1 P) A P)) (FACT (SUB1 P)))) ((USE (TIMES-LIST-EQUAL-FACT (N (SUB1 P)) (L (COMP-LIST (SUB1 P) A P)))) (DISABLE TIMES-LIST-EQUAL-FACT COMP-LIST))) (PROVE-LEMMA TIMES-MOD-4 NIL (IMPLIES (EQUAL (REMAINDER (TIMES I J) P) (REMAINDER A P)) (EQUAL (REMAINDER (TIMES I (TIMES J K)) P) (REMAINDER (TIMES A (REMAINDER K P)) P))) ((USE (TIMES-MOD-3 (A (TIMES I J)) (B K) (N P))) (DISABLE TIMES-MOD-3))) (PROVE-LEMMA TIMES-COMP-LIST-1 NIL (IMPLIES (AND (EQUAL (REMAINDER (TIMES I (COMPLEMENT I A P)) P) (REMAINDER A P)) (NOT (ZEROP I)) (NOT (MEMBER I (COMP-LIST (SUB1 I) A P)))) (EQUAL (REMAINDER (TIMES-LIST (COMP-LIST I A P)) P) (REMAINDER (TIMES A (REMAINDER (TIMES-LIST (COMP-LIST (SUB1 I) A P)) P)) P))) ((USE (TIMES-MOD-4 (J (COMPLEMENT I A P)) (K (TIMES-LIST (COMP-LIST (SUB1 I) A P))))) (DISABLE COMPLEMENT-WORKS))) (PROVE-LEMMA TIMES-COMP-LIST-2 NIL (IMPLIES (AND (PRIME P) (NOT (DIVIDES P I)) (NOT (MEMBER I (COMP-LIST (SUB1 I) A P)))) (EQUAL (REMAINDER (TIMES-LIST (COMP-LIST I A P)) P) (REMAINDER (TIMES A (REMAINDER (TIMES-LIST (COMP-LIST (SUB1 I) A P)) P)) P))) ((USE (TIMES-COMP-LIST-1) (COMPLEMENT-WORKS (J I))) (DISABLE COMPLEMENT-WORKS COMP-LIST TIMES-LIST PRIME))) (PROVE-LEMMA QUOTIENT-PLUS-1 NIL (IMPLIES (AND (NOT (ZEROP N)) (NUMBERP X) (EQUAL Y (PLUS X N))) (EQUAL (QUOTIENT Y N) (ADD1 (QUOTIENT X N))))) (PROVE-LEMMA TIMES-COMP-LIST-3 NIL (IMPLIES (AND (NOT (ZEROP I)) (NOT (MEMBER I (COMP-LIST (SUB1 I) A P)))) (EQUAL (QUOTIENT (LENGTH (COMP-LIST I A P)) 2) (ADD1 (QUOTIENT (LENGTH (COMP-LIST (SUB1 I) A P)) 2)))) ((USE (QUOTIENT-PLUS-1 (X (LENGTH (COMP-LIST (SUB1 I) A P))) (Y (LENGTH (COMP-LIST I A P))) (N 2))))) (PROVE-LEMMA TIMES-COMP-LIST-4 NIL (IMPLIES (AND (PRIME P) (NOT (ZEROP I)) (LESSP I P) (EQUAL (REMAINDER (TIMES-LIST (COMP-LIST (SUB1 I) A P)) P) (REMAINDER (EXP A (QUOTIENT (LENGTH (COMP-LIST (SUB1 I) A P)) 2)) P))) (EQUAL (REMAINDER (TIMES-LIST (COMP-LIST I A P)) P) (REMAINDER (EXP A (QUOTIENT (LENGTH (COMP-LIST I A P)) 2)) P))) ((USE (TIMES-COMP-LIST-2) (TIMES-COMP-LIST-3) (TIMES-MOD-1 (X A) (Y (EXP A (QUOTIENT (LENGTH (COMP-LIST (SUB1 I) A P)) 2))) (N P))) (DISABLE PRIME TIMES-MOD-1 TIMES-LIST))) (PROVE-LEMMA TIMES-COMP-LIST-5 NIL (IMPLIES (ZEROP I) (EQUAL (REMAINDER (TIMES-LIST (COMP-LIST I A P)) P) (REMAINDER (EXP A (QUOTIENT (LENGTH (COMP-LIST I A P)) 2)) P)))) (PROVE-LEMMA TIMES-COMP-LIST (REWRITE) (IMPLIES (AND (PRIME P) (LESSP I P)) (EQUAL (REMAINDER (TIMES-LIST (COMP-LIST I A P)) P) (REMAINDER (EXP A (QUOTIENT (LENGTH (COMP-LIST I A P)) 2)) P))) ((USE (TIMES-COMP-LIST-4) (TIMES-COMP-LIST-5)) (INDUCT (POSITIVES I)) (DISABLE PRIME REMAINDER TIMES-LIST COMP-LIST QUOTIENT LENGTH))) (PROVE-LEMMA SUB1-LENGTH-DELETE (REWRITE) (IMPLIES (MEMBER X B) (EQUAL (LENGTH (DELETE X B)) (SUB1 (LENGTH B))))) (PROVE-LEMMA EQUAL-LENGTH-PERM NIL (IMPLIES (PERM A B) (EQUAL (LENGTH A) (LENGTH B))) ((INDUCT (PERM A B)))) (PROVE-LEMMA LENGTH-POSITIVES (REWRITE) (EQUAL (LENGTH (POSITIVES N)) (FIX N)) ((INDUCT (POSITIVES N)))) (PROVE-LEMMA EULER-2-1 NIL (IMPLIES (AND (PRIME P) (NOT (DIVIDES P A)) (NOT (RESIDUE A P))) (EQUAL (REMAINDER (EXP A (QUOTIENT (LENGTH (COMP-LIST (SUB1 P) A P)) 2)) P) (SUB1 P))) ((USE (TIMES-COMP-LIST (I (SUB1 P))) (COMP-LIST-FACT) (WILSON-THM)) (DISABLE TIMES-COMP-LIST COMP-LIST-FACT))) (PROVE-LEMMA EULER-2-2 (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P A)) (NOT (RESIDUE A P))) (EQUAL (LENGTH (COMP-LIST (SUB1 P) A P)) (SUB1 P))) ((USE (EQUAL-LENGTH-PERM (A (POSITIVES (SUB1 P))) (B (COMP-LIST (SUB1 P) A P))) (PERM-POSITIVES-COMP-LIST)) (DISABLE EQUAL-LENGTH-PERM PERM-POSITIVES-COMP-LIST))) (PROVE-LEMMA EULER-2-3 NIL (IMPLIES (NOT (ZEROP P)) (EQUAL (DIVIDES 2 P) (NOT (DIVIDES 2 (SUB1 P))))) ((INDUCT (ODD P)))) (PROVE-LEMMA EULER-2-4 (REWRITE) (IMPLIES (NOT (DIVIDES 2 P)) (EQUAL (QUOTIENT (SUB1 P) 2) (QUOTIENT P 2))) ((USE (EULER-2-3) (REMAINDER-QUOTIENT (X P) (Y 2)) (REMAINDER-QUOTIENT (X (SUB1 P)) (Y 2))) (DISABLE REMAINDER-QUOTIENT))) (PROVE-LEMMA EULER-2 (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES 2 P)) (NOT (DIVIDES P A)) (NOT (RESIDUE A P))) (EQUAL (REMAINDER (EXP A (QUOTIENT P 2)) P) (SUB1 P))) ((USE (EULER-2-1)) (DISABLE EULER-2-1 PRIME DIVIDES RESIDUE EXP QUOTIENT LENGTH COMP-LIST))) (DEFN RES1 (N A P) (IF (ZEROP N) T (IF (LESSP (QUOTIENT P 2) (REMAINDER (TIMES A N) P)) (NOT (RES1 (SUB1 N) A P)) (RES1 (SUB1 N) A P)))) (DEFN REFLECT (X P) (DIFFERENCE P X)) (DEFN REFLECT-LIST (N A P) (IF (ZEROP N) NIL (IF (LESSP (QUOTIENT P 2) (REMAINDER (TIMES A N) P)) (CONS (REFLECT (REMAINDER (TIMES A N) P) P) (REFLECT-LIST (SUB1 N) A P)) (CONS (REMAINDER (TIMES A N) P) (REFLECT-LIST (SUB1 N) A P))))) (PROVE-LEMMA DIFF-MOD-1 (REWRITE) (IMPLIES (LEQ B A) (EQUAL (REMAINDER (DIFFERENCE A (REMAINDER B P)) P) (REMAINDER (DIFFERENCE A B) P))) ((USE (REMAINDER-QUOTIENT (X B) (Y P)) (REMAINDER-PLUS-TIMES-1 (X (DIFFERENCE A B)) (I (QUOTIENT B P)) (J P))) (DISABLE REMAINDER-QUOTIENT REMAINDER-PLUS-TIMES-1 REMAINDER-PLUS-TIMES-2))) (PROVE-LEMMA REM-DIFF-TIMES (REWRITE) (IMPLIES (AND (LESSP X P) (NOT (ZEROP X)) (NOT (ZEROP B))) (EQUAL (REMAINDER (DIFFERENCE (TIMES B P) X) P) (DIFFERENCE P X))) ((USE (REMAINDER-PLUS-TIMES-1 (X (DIFFERENCE P X)) (I (SUB1 B)) (J P))) (DISABLE REMAINDER-PLUS-TIMES-1 REMAINDER-PLUS-TIMES-2))) (PROVE-LEMMA REFLECT-COMMUTES-WITH-TIMES-1 (REWRITE) (IMPLIES (LEQ Y P) (EQUAL (REMAINDER (TIMES (REFLECT Y P) X) P) (REMAINDER (REFLECT (REMAINDER (TIMES Y X) P) P) P))) ((USE (DIFF-MOD-1 (A (TIMES P X)) (B (TIMES Y X))) (LESSP-TIMES-CANCELLATION (Z X) (X Y) (Y P)) (REM-DIFF-TIMES (B X) (X (REMAINDER (TIMES Y X) P)))) (DISABLE LESSP-TIMES-CANCELLATION REM-DIFF-TIMES DIFF-MOD-1))) (PROVE-LEMMA REFLECT-COMMUTES-WITH-TIMES-2 (REWRITE) (IMPLIES (LEQ Y P) (EQUAL (REMAINDER (TIMES X (REFLECT Y P)) P) (REMAINDER (REFLECT (REMAINDER (TIMES X Y) P) P) P))) ((USE (REFLECT-COMMUTES-WITH-TIMES-1)) (DISABLE REFLECT-COMMUTES-WITH-TIMES-1 REFLECT))) (PROVE-LEMMA TIMES-EXP-FACT (REWRITE) (IMPLIES (NOT (ZEROP N)) (EQUAL (REMAINDER (TIMES (TIMES A N) (TIMES (EXP A (SUB1 N)) (FACT (SUB1 N)))) P) (REMAINDER (TIMES (EXP A N) (FACT N)) P)))) (PROVE-LEMMA REM-REFLECT-LIST-1 (REWRITE) (IMPLIES (AND (NOT (ZEROP P)) (NOT (ZEROP N)) (NOT (LESSP (QUOTIENT P 2) (REMAINDER (TIMES A N) P))) (EQUAL (REMAINDER (TIMES-LIST (REFLECT-LIST (SUB1 N) A P)) P) (REMAINDER (TIMES (EXP A (SUB1 N)) (FACT (SUB1 N))) P))) (EQUAL (REMAINDER (TIMES-LIST (REFLECT-LIST N A P)) P) (REMAINDER (TIMES (EXP A N) (FACT N)) P))) ((USE (REMAINDER-EXP-LEMMA (A P) (X (TIMES A N)) (Y (TIMES-LIST (REFLECT-LIST (SUB1 N) A P))) (Z (TIMES (EXP A (SUB1 N)) (FACT (SUB1 N)))))) (HANDS-OFF TIMES DIFFERENCE QUOTIENT EXP FACT) (DISABLE REMAINDER-EXP-LEMMA REFLECT))) (PROVE-LEMMA REM-REFLECT-LIST-2 (REWRITE) (IMPLIES (AND (NOT (ZEROP P)) (NOT (ZEROP N)) (LESSP (QUOTIENT P 2) (REMAINDER (TIMES A N) P)) (EQUAL (REMAINDER (TIMES-LIST (REFLECT-LIST (SUB1 N) A P)) P) (REMAINDER (TIMES (EXP A (SUB1 N)) (FACT (SUB1 N))) P))) (EQUAL (REMAINDER (TIMES-LIST (REFLECT-LIST N A P)) P) (REMAINDER (REFLECT (REMAINDER (TIMES (EXP A N) (FACT N)) P) P) P))) ((USE (REMAINDER-EXP-LEMMA (A P) (X (TIMES A N)) (Y (TIMES-LIST (REFLECT-LIST (SUB1 N) A P))) (Z (TIMES (EXP A (SUB1 N)) (FACT (SUB1 N)))))) (HANDS-OFF TIMES DIFFERENCE QUOTIENT EXP FACT) (DISABLE REMAINDER-EXP-LEMMA REFLECT))) (PROVE-LEMMA REM-REFLECT-LIST-3 (REWRITE) (IMPLIES (AND (NOT (ZEROP P)) (NOT (ZEROP N)) (NOT (LESSP (QUOTIENT P 2) (REMAINDER (TIMES A N) P))) (EQUAL (REMAINDER (TIMES-LIST (REFLECT-LIST (SUB1 N) A P)) P) (REMAINDER (REFLECT (REMAINDER (TIMES (EXP A (SUB1 N)) (FACT (SUB1 N))) P) P) P))) (EQUAL (REMAINDER (TIMES-LIST (REFLECT-LIST N A P)) P) (REMAINDER (REFLECT (REMAINDER (TIMES (EXP A N) (FACT N)) P) P) P))) ((USE (REMAINDER-EXP-LEMMA (A P) (X (TIMES A N)) (Y (TIMES-LIST (REFLECT-LIST (SUB1 N) A P))) (Z (REFLECT (REMAINDER (TIMES (EXP A (SUB1 N)) (FACT (SUB1 N))) P) P)))) (HANDS-OFF TIMES DIFFERENCE QUOTIENT EXP FACT) (DISABLE REMAINDER-EXP-LEMMA REFLECT))) (PROVE-LEMMA DOUBLE-REFLECT (REWRITE) (IMPLIES (LEQ A P) (EQUAL (REMAINDER (REFLECT (REMAINDER (REFLECT A P) P) P) P) (REMAINDER A P)))) (PROVE-LEMMA REM-REFLECT-LIST-4 (REWRITE) (IMPLIES (AND (NOT (ZEROP P)) (NOT (ZEROP N)) (LESSP (QUOTIENT P 2) (REMAINDER (TIMES A N) P)) (EQUAL (REMAINDER (TIMES-LIST (REFLECT-LIST (SUB1 N) A P)) P) (REMAINDER (REFLECT (REMAINDER (TIMES (EXP A (SUB1 N)) (FACT (SUB1 N))) P) P) P))) (EQUAL (REMAINDER (TIMES-LIST (REFLECT-LIST N A P)) P) (REMAINDER (TIMES (EXP A N) (FACT N)) P))) ((USE (REMAINDER-EXP-LEMMA (A P) (X (TIMES A N)) (Y (TIMES-LIST (REFLECT-LIST (SUB1 N) A P))) (Z (REFLECT (REMAINDER (TIMES (EXP A (SUB1 N)) (FACT (SUB1 N))) P) P)))) (HANDS-OFF TIMES DIFFERENCE QUOTIENT EXP FACT) (DISABLE REMAINDER-EXP-LEMMA REFLECT))) (PROVE-LEMMA REM-REFLECT-LIST-BASE-CASE (REWRITE) (IMPLIES (ZEROP N) (EQUAL (REMAINDER (TIMES-LIST (REFLECT-LIST N A P)) P) (REMAINDER (TIMES (EXP A N) (FACT N)) P)))) (PROVE-LEMMA REM-REFLECT-LIST NIL (IMPLIES (NOT (ZEROP P)) (EQUAL (REMAINDER (TIMES-LIST (REFLECT-LIST N A P)) P) (IF (RES1 N A P) (REMAINDER (TIMES (EXP A N) (FACT N)) P) (REMAINDER (REFLECT (REMAINDER (TIMES (EXP A N) (FACT N)) P) P) P)))) ((HANDS-OFF TIMES-LIST REFLECT-LIST QUOTIENT EXP FACT TIMES) (DISABLE REFLECT))) (PROVE-LEMMA LENGTH-REFLECT-LIST (REWRITE) (EQUAL (LENGTH (REFLECT-LIST N A P)) (FIX N)) ((INDUCT (POSITIVES N)))) (PROVE-LEMMA ALL-LESSEQP-REFLECT-LIST-1 (REWRITE) (IMPLIES (LESSP (QUOTIENT P 2) X) (NOT (LESSP (QUOTIENT P 2) (REFLECT X P))))) (PROVE-LEMMA ALL-LESSEQP-REFLECT-LIST (REWRITE) (ALL-LESSEQP (REFLECT-LIST N A P) (QUOTIENT P 2)) ((DISABLE REFLECT))) (PROVE-LEMMA ALL-NON-ZEROP-REFLECT-LIST (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P A)) (LESSP B P)) (ALL-NON-ZEROP (REFLECT-LIST B A P))) ((INDUCT (REFLECT-LIST B A P)) (DISABLE PRIME1))) (PROVE-LEMMA ALL-DISTINCT-REFLECT-LIST-1 (REWRITE) (IMPLIES (AND (PRIME P) (LESSP J I) (LESSP I P) (NOT (DIVIDES P A))) (NOT (EQUAL (REMAINDER (TIMES A I) P) (REMAINDER (TIMES A J) P)))) ((DISABLE PRIME))) (PROVE-LEMMA ALL-DISTINCT-REFLECT-LIST-2 (REWRITE) (IMPLIES (AND (NUMBERP X) (NUMBERP Y) (LESSP X P) (LESSP Y P)) (EQUAL (EQUAL (DIFFERENCE P X) (DIFFERENCE P Y)) (EQUAL X Y)))) (PROVE-LEMMA NUMBERP-REMAINDER (REWRITE) (NUMBERP (REMAINDER A P))) (PROVE-LEMMA ALL-DISTINCT-REFLECT-LIST-3 (REWRITE) (IMPLIES (AND (PRIME P) (LESSP J I) (LESSP I P) (NOT (DIVIDES P A))) (NOT (EQUAL (REFLECT (REMAINDER (TIMES A I) P) P) (REFLECT (REMAINDER (TIMES A J) P) P)))) ((USE (ALL-DISTINCT-REFLECT-LIST-1)) (HANDS-OFF DIFFERENCE REMAINDER TIMES) (DISABLE ALL-DISTINCT-REFLECT-LIST-1 PRIME))) (PROVE-LEMMA PLUS-MOD-1 (REWRITE) (EQUAL (REMAINDER (PLUS (REMAINDER X P) Y) P) (REMAINDER (PLUS X Y) P)) ((USE (REMAINDER-QUOTIENT (Y P)) (REMAINDER-PLUS-TIMES-1 (J P) (X (PLUS (REMAINDER X P) Y)) (I (QUOTIENT X P)))) (DISABLE REMAINDER-QUOTIENT REMAINDER-QUOTIENT-ELIM REMAINDER-PLUS-TIMES-1))) (PROVE-LEMMA PLUS-MOD-2 (REWRITE) (EQUAL (REMAINDER (PLUS Y (REMAINDER X P)) P) (REMAINDER (PLUS X Y) P)) ((USE (PLUS-MOD-1)) (DISABLE PLUS-MOD-1))) (PROVE-LEMMA ALL-DISTINCT-REFLECT-LIST-4 NIL (IMPLIES (AND (EQUAL X (DIFFERENCE P Y)) (LESSP Y P)) (EQUAL (REMAINDER (PLUS X Y) P) 0))) (PROVE-LEMMA ALL-DISTINCT-REFLECT-LIST-5 NIL (IMPLIES (AND (EQUAL (REMAINDER (TIMES A I) P) (DIFFERENCE P (REMAINDER (TIMES A J) P))) (NOT (ZEROP P))) (EQUAL (REMAINDER (TIMES A (PLUS I J)) P) 0)) ((USE (ALL-DISTINCT-REFLECT-LIST-4 (X (REMAINDER (TIMES A I) P)) (Y (REMAINDER (TIMES A J) P)))) )) (PROVE-LEMMA ALL-DISTINCT-REFLECT-LIST-6 NIL (IMPLIES (AND (LEQ I (QUOTIENT P 2)) (LESSP J I)) (AND (NOT (ZEROP (PLUS I J))) (LESSP (PLUS I J) P)))) (PROVE-LEMMA ALL-DISTINCT-REFLECT-LIST-7 (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P A)) (LEQ I (QUOTIENT P 2)) (LESSP J I)) (NOT (EQUAL (REMAINDER (TIMES A I) P) (REFLECT (REMAINDER (TIMES A J) P) P)))) ((USE (ALL-DISTINCT-REFLECT-LIST-5) (ALL-DISTINCT-REFLECT-LIST-6)) (HANDS-OFF DIFFERENCE TIMES PLUS) (DISABLE PRIME1))) (PROVE-LEMMA ALL-DISTINCT-REFLECT-LIST-8 (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P A)) (LEQ I (QUOTIENT P 2)) (LESSP J I)) (NOT (EQUAL (REFLECT (REMAINDER (TIMES A I) P) P) (REMAINDER (TIMES A J) P)))) ((USE (ALL-DISTINCT-REFLECT-LIST-5 (J I) (I J)) (ALL-DISTINCT-REFLECT-LIST-6)) (HANDS-OFF TIMES DIFFERENCE) (DISABLE PRIME1))) (PROVE-LEMMA ALL-DISTINCT-REFLECT-LIST-9 (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES 2 P)) (NOT (DIVIDES P A)) (LEQ I (QUOTIENT P 2)) (LESSP J I)) (NOT (MEMBER (REMAINDER (TIMES A I) P) (REFLECT-LIST J A P)))) ((USE (ALL-DISTINCT-REFLECT-LIST-1)) (INDUCT (REFLECT-LIST J A P)) (HANDS-OFF QUOTIENT REMAINDER TIMES) (DISABLE PRIME1 REFLECT ALL-DISTINCT-REFLECT-LIST-1))) (PROVE-LEMMA ALL-DISTINCT-REFLECT-LIST-10 (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES 2 P)) (NOT (DIVIDES P A)) (LEQ I (QUOTIENT P 2)) (LESSP J I)) (NOT (MEMBER (REFLECT (REMAINDER (TIMES A I) P) P) (REFLECT-LIST J A P)))) ((USE (ALL-DISTINCT-REFLECT-LIST-3)) (INDUCT (REFLECT-LIST J A P)) (HANDS-OFF QUOTIENT REMAINDER TIMES) (DISABLE PRIME1 REFLECT ALL-DISTINCT-REFLECT-LIST-3))) (PROVE-LEMMA ALL-DISTINCT-REFLECT-LIST (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES 2 P)) (NOT (DIVIDES P A)) (LEQ I (QUOTIENT P 2))) (ALL-DISTINCT (REFLECT-LIST I A P))) ((USE (ALL-DISTINCT-REFLECT-LIST-9 (J (SUB1 I))) (ALL-DISTINCT-REFLECT-LIST-10 (J (SUB1 I)))) (INDUCT (REFLECT-LIST I A P)) (HANDS-OFF QUOTIENT REMAINDER TIMES) (DISABLE ALL-DISTINCT-REFLECT-LIST-9 ALL-DISTINCT-REFLECT-LIST-10 PRIME DIVIDES REFLECT))) (PROVE-LEMMA TIMES-REFLECT-LIST (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES 2 P)) (NOT (DIVIDES P A))) (EQUAL (TIMES-LIST (REFLECT-LIST (QUOTIENT P 2) A P)) (FACT (QUOTIENT P 2)))) ((USE (PIGEON-HOLE-PRINCIPLE (L (REFLECT-LIST (QUOTIENT P 2) A P)))) (HANDS-OFF QUOTIENT REMAINDER) (DISABLE PRIME1 REFLECT-LIST TIMES-LIST FACT))) (PROVE-LEMMA PLUS-X-X-EVEN (REWRITE) (EQUAL (REMAINDER (PLUS X X) 2) 0)) (PROVE-LEMMA RES1-REM-1-1 NIL (IMPLIES (AND (NOT (ZEROP X)) (NOT (DIVIDES 2 P))) (NOT (EQUAL (REMAINDER (DIFFERENCE P X) P) X))) ((USE (DIFFERENCE-ELIM (Y P))))) (PROVE-LEMMA RES1-REM-1 NIL (IMPLIES (AND (PRIME P) (NOT (DIVIDES 2 P)) (NOT (DIVIDES P A)) (RES1 (QUOTIENT P 2) A P)) (EQUAL (REMAINDER (EXP A (QUOTIENT P 2)) P) 1)) ((USE (REM-REFLECT-LIST (N (QUOTIENT P 2))) (PRIME-KEY-TRICK (M (FACT (QUOTIENT P 2))) (A (EXP A (QUOTIENT P 2))) (B 1))) (DISABLE PRIME-KEY-TRICK LESSP-REMAINDER-DIVISOR PRIME1))) (PROVE-LEMMA REMAINDER-LESSP NIL (IMPLIES (LESSP A P) (EQUAL (REMAINDER A P) (FIX A)))) (PROVE-LEMMA RES1-REM-2 NIL (IMPLIES (AND (PRIME P) (NOT (DIVIDES 2 P)) (NOT (DIVIDES P A)) (NOT (RES1 (QUOTIENT P 2) A P))) (NOT (EQUAL (REMAINDER (EXP A (QUOTIENT P 2)) P) 1))) ((USE (REM-REFLECT-LIST (N (QUOTIENT P 2))) (REMAINDER-EXP-LEMMA (A P) (Y (EXP A (QUOTIENT P 2))) (Z 1) (X (FACT (QUOTIENT P 2)))) (RES1-REM-1-1 (X (REMAINDER (FACT (QUOTIENT P 2)) P))) (REMAINDER-LESSP (A 1))) (HANDS-OFF FACT EXP QUOTIENT REMAINDER REFLECT-LIST) (DISABLE LESSP-REMAINDER-DIVISOR PRIME1 DIFFERENCE COROLLARY-55 REMAINDER-EXP-LEMMA))) (PROVE-LEMMA TWO-EVEN NIL (IMPLIES (NOT (DIVIDES 2 P)) (NOT (EQUAL (SUB1 P) 1))) ((INDUCT (ODD P)))) (PROVE-LEMMA GAUSS-LEMMA NIL (IMPLIES (AND (PRIME P) (NOT (DIVIDES P A)) (NOT (DIVIDES 2 P))) (EQUAL (RES1 (QUOTIENT P 2) A P) (RESIDUE A P))) ((USE (EULER-1) (EULER-2) (RES1-REM-1) (RES1-REM-2) (TWO-EVEN)) (DISABLE EULER-1 EULER-2 QUOTIENT EXP RESIDUE RES1 PRIME DIVIDES))) (DEFN PLUS-LIST (L) (IF (NLISTP L) 0 (PLUS (CAR L) (PLUS-LIST (CDR L))))) (DEFN QUOT-LIST (N A P) (IF (ZEROP N) NIL (CONS (QUOTIENT (TIMES A N) P) (QUOT-LIST (SUB1 N) A P)))) (DEFN REM-LIST (N A P) (IF (ZEROP N) NIL (CONS (REMAINDER (TIMES A N) P) (REM-LIST (SUB1 N) A P)))) (PROVE-LEMMA REM-QUOT-LIST NIL (EQUAL (TIMES A (PLUS-LIST (POSITIVES N))) (PLUS (TIMES P (PLUS-LIST (QUOT-LIST N A P))) (PLUS-LIST (REM-LIST N A P))))) (DEFN EVEN3 (X) (IF (ZEROP X) T (NOT (EVEN3 (SUB1 X))))) (PROVE-LEMMA EVEN3-PLUS (REWRITE) (EQUAL (EVEN3 (PLUS A B)) (EQUAL (EVEN3 A) (EVEN3 B)))) (PROVE-LEMMA EVEN3-DIFF (REWRITE) (IMPLIES (LEQ X P) (EQUAL (EVEN3 (DIFFERENCE P X)) (EQUAL (EVEN3 P) (EVEN3 X))))) (PROVE-LEMMA EVEN3-TIMES (REWRITE) (EQUAL (EVEN3 (TIMES A B)) (OR (EVEN3 A) (EVEN3 B)))) (PROVE-LEMMA EVEN3-REM (REWRITE) (IMPLIES (NOT (EVEN3 P)) (EQUAL (EVEN3 (DIFFERENCE P (REMAINDER X P))) (NOT (EVEN3 (REMAINDER X P)))))) (PROVE-LEMMA EVEN3-REM-REFLECT (REWRITE) (IMPLIES (NOT (EVEN3 P)) (EQUAL (RES1 N A P) (IFF (EVEN3 (PLUS-LIST (REM-LIST N A P))) (EVEN3 (PLUS-LIST (REFLECT-LIST N A P))))))) (PROVE-LEMMA PERM-PLUS-LIST-1 (REWRITE) (IMPLIES (MEMBER X M) (EQUAL (PLUS X (PLUS-LIST (DELETE X M))) (PLUS-LIST M)))) (PROVE-LEMMA PERM-PLUS-LIST NIL (IMPLIES (PERM L M) (EQUAL (PLUS-LIST L) (PLUS-LIST M)))) (PROVE-LEMMA EVEN3-EVEN NIL (EQUAL (DIVIDES 2 P) (EVEN3 P))) (PROVE-LEMMA PLUS-REFLECT-LIST (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P A)) (NOT (EVEN3 P))) (EQUAL (PLUS-LIST (REFLECT-LIST (QUOTIENT P 2) A P)) (PLUS-LIST (POSITIVES (QUOTIENT P 2))))) ((USE (PERM-PLUS-LIST (M (REFLECT-LIST (QUOTIENT P 2) A P)) (L (POSITIVES (QUOTIENT P 2)))) (PIGEON-HOLE-PRINCIPLE (L (REFLECT-LIST (QUOTIENT P 2) A P))) (EVEN3-EVEN) (ALL-NON-ZEROP-REFLECT-LIST (B (QUOTIENT P 2)))) (DISABLE PRIME))) (PROVE-LEMMA EQUALS-HAVE-SAME-PARITY NIL (IMPLIES (EQUAL X Y) (EQUAL (EVEN3 X) (EVEN3 Y)))) (PROVE-LEMMA RES1-QUOT-LIST NIL (IMPLIES (AND (PRIME P) (NOT (EVEN3 P)) (NOT (EVEN3 A)) (NOT (DIVIDES P A))) (EQUAL (RES1 (QUOTIENT P 2) A P) (EVEN3 (PLUS-LIST (QUOT-LIST (QUOTIENT P 2) A P))))) ((USE (REM-QUOT-LIST (N (QUOTIENT P 2))) (EQUALS-HAVE-SAME-PARITY (X (TIMES A (PLUS-LIST (POSITIVES (QUOTIENT P 2))))) (Y (PLUS (TIMES P (PLUS-LIST (QUOT-LIST (QUOTIENT P 2) A P))) (PLUS-LIST (REM-LIST (QUOTIENT P 2) A P)))))) (DISABLE PRIME))) (DEFN WINS1 (X L) (IF (NLISTP L) 0 (IF (LESSP (CAR L) X) (ADD1 (WINS1 X (CDR L))) (WINS1 X (CDR L))))) (DEFN WINS (K L) (IF (NLISTP K) 0 (PLUS (WINS1 (CAR K) L) (WINS (CDR K) L)))) (DEFN LOSSES1 (X L) (IF (NLISTP L) 0 (IF (LESSP X (CAR L)) (ADD1 (LOSSES1 X (CDR L))) (LOSSES1 X (CDR L))))) (DEFN LOSSES (K L) (IF (NLISTP K) 0 (PLUS (LOSSES1 (CAR K) L) (LOSSES (CDR K) L)))) (PROVE-LEMMA WIN-SOME-LOSE-SOME-1 (REWRITE) (IMPLIES (AND (NOT (MEMBER X L)) (ALL-NON-ZEROP L)) (EQUAL (PLUS (LOSSES1 X L) (WINS1 X L)) (LENGTH L)))) (PROVE-LEMMA WIN-SOME-LOSE-SOME-2 (REWRITE) (IMPLIES (AND (NLISTP (INTERSECT L M)) (ALL-NON-ZEROP L) (ALL-NON-ZEROP M)) (EQUAL (PLUS (WINS L M) (LOSSES L M)) (TIMES (LENGTH L) (LENGTH M))))) (PROVE-LEMMA EQUAL-LOSSES-WINS (REWRITE) (EQUAL (LOSSES L M) (WINS M L))) (PROVE-LEMMA A-WINNER-EVERY-TIME (REWRITE) (IMPLIES (AND (NLISTP (INTERSECT L M)) (ALL-NON-ZEROP L) (ALL-NON-ZEROP M)) (EQUAL (PLUS (WINS L M) (WINS M L)) (TIMES (LENGTH L) (LENGTH M)))) ((USE (WIN-SOME-LOSE-SOME-2)) (DISABLE WIN-SOME-LOSE-SOME-2))) (DEFN MULTS (N P) (IF (ZEROP N) NIL (CONS (TIMES N P) (MULTS (SUB1 N) P)))) (PROVE-LEMMA LENGTH-MULTS (REWRITE) (EQUAL (LENGTH (MULTS N P)) (FIX N))) (PROVE-LEMMA LEQ-N-WINS1 NIL (IMPLIES (LESSP (TIMES N P) A) (LEQ N (WINS1 A (MULTS N P)))) ((INDUCT (MULTS N P)))) (PROVE-LEMMA MONOTONE-WINS1 NIL (IMPLIES (LEQ N M) (LEQ (WINS1 A (MULTS N P)) (WINS1 A (MULTS M P)))) ((INDUCT (MULTS M P)))) (DEFN QUOT-QUOT-INDUCTION (A B C D) (IF (ZEROP B) T (IF (ZEROP D) T (IF (LESSP A D) T (IF (LESSP C B) T (QUOT-QUOT-INDUCTION (DIFFERENCE A D) B (DIFFERENCE C B) D)))))) (PROVE-LEMMA LEQ-TIMES-QUOT NIL (IMPLIES (AND (NOT (ZEROP B)) (LEQ (TIMES A B) (TIMES C D))) (LEQ (QUOTIENT A D) (QUOTIENT C B))) ((INDUCT (QUOT-QUOT-INDUCTION A B C D)))) (PROVE-LEMMA LEQ-QUOT-TIMES NIL (LEQ (QUOTIENT (TIMES (QUOTIENT P 2) Q) P) (QUOTIENT Q 2)) ((USE (LEQ-TIMES-QUOT (A (TIMES (QUOTIENT P 2) Q)) (D P) (C Q) (B 2))) )) (DEFN MONOTONE-QUOT-INDUCTION (I J P) (IF (ZEROP P) T (IF (LESSP I P) T (IF (LESSP J P) T (MONOTONE-QUOT-INDUCTION (DIFFERENCE I P) (DIFFERENCE J P) P))))) (PROVE-LEMMA MONOTONE-QUOT NIL (IMPLIES (LEQ J I) (LEQ (QUOTIENT J P) (QUOTIENT I P))) ((INDUCT (MONOTONE-QUOT-INDUCTION I J P)))) (PROVE-LEMMA LEQ-QUOT-TIMES-2 NIL (IMPLIES (LEQ J (QUOTIENT P 2)) (LEQ (QUOTIENT (TIMES J Q) P) (QUOTIENT Q 2))) ((USE (LEQ-QUOT-TIMES) (MONOTONE-QUOT (J (TIMES J Q)) (I (TIMES (QUOTIENT P 2) Q))) (LESSP-TIMES-CANCELLATION (X J) (Y (QUOTIENT P 2)) (Z Q))) (DISABLE LESSP-TIMES-CANCELLATION))) (PROVE-LEMMA LEQ-QUOT-WINS1-1 NIL (IMPLIES (NOT (DIVIDES P X)) (LESSP (TIMES (QUOTIENT X P) P) X))) (PROVE-LEMMA LEQ-QUOT-WINS1-2 NIL (IMPLIES (AND (PRIME P) (NOT (DIVIDES P Q)) (NOT (ZEROP Q)) (NOT (ZEROP J)) (LESSP J P)) (LESSP (TIMES (QUOTIENT (TIMES J Q) P) P) (TIMES J Q))) ((USE (LEQ-QUOT-WINS1-1 (X (TIMES J Q)))) (DISABLE PRIME QUOTIENT TIMES))) (PROVE-LEMMA LEQ-QUOT-WINS1 NIL (IMPLIES (AND (PRIME P) (NOT (DIVIDES P Q)) (LEQ J (QUOTIENT P 2)) (NOT (ZEROP J)) (NOT (ZEROP Q))) (LEQ (QUOTIENT (TIMES J Q) P) (WINS1 (TIMES J Q) (MULTS (QUOTIENT Q 2) P)))) ((USE (LEQ-QUOT-TIMES-2) (MONOTONE-WINS1 (A (TIMES J Q)) (N (QUOTIENT (TIMES J Q) P)) (M (QUOTIENT Q 2))) (LEQ-N-WINS1 (A (TIMES J Q)) (N (QUOTIENT (TIMES J Q) P))) (LEQ-QUOT-WINS1-2)) (DISABLE PRIME))) (DEFN WINS2 (A N P) (IF (ZEROP N) 0 (IF (LESSP (TIMES N P) A) N (WINS2 A (SUB1 N) P)))) (PROVE-LEMMA LEQ-WINS2 NIL (LEQ (TIMES (WINS2 A N P) P) A)) (PROVE-LEMMA LEQ-WINS1-N NIL (LEQ (WINS1 A (MULTS N P)) N)) (PROVE-LEMMA LEQ-WINS1-WINS2 NIL (LEQ (WINS1 A (MULTS N P)) (WINS2 A N P)) ((USE (LEQ-WINS1-N)) (INDUCT (WINS2 A N P)))) (PROVE-LEMMA LEQ-WINS1 NIL (LEQ (TIMES (WINS1 A (MULTS N P)) P) A) ((USE (LEQ-WINS2) (LEQ-WINS1-WINS2) (LESSP-TIMES-CANCELLATION (X (WINS1 A (MULTS N P))) (Y (WINS2 A N P)) (Z P))) (DISABLE LESSP-TIMES-CANCELLATION))) (PROVE-LEMMA LEQ-WINS1-QUOT NIL (IMPLIES (NOT (ZEROP P)) (LEQ (WINS1 A (MULTS N P)) (QUOTIENT A P))) ((USE (MONOTONE-QUOT (I A) (J (TIMES (WINS1 A (MULTS N P)) P))) (LEQ-WINS1)) )) (PROVE-LEMMA EQUAL-QUOT-WINS1 (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P Q)) (LEQ J (QUOTIENT P 2)) (NOT (ZEROP J)) (NOT (ZEROP Q))) (EQUAL (WINS1 (TIMES J Q) (MULTS (QUOTIENT Q 2) P)) (QUOTIENT (TIMES J Q) P))) ((USE (LEQ-QUOT-WINS1) (LEQ-WINS1-QUOT (A (TIMES J Q)) (N (QUOTIENT Q 2)))))) (PROVE-LEMMA EQUAL-WINS-PLUS-QUOT-LIST (REWRITE) (IMPLIES (AND (PRIME P) (NOT (DIVIDES P Q)) (NOT (ZEROP Q)) (NOT (ZEROP J)) (LEQ J (QUOTIENT P 2))) (EQUAL (WINS (MULTS J Q) (MULTS (QUOTIENT Q 2) P)) (PLUS-LIST (QUOT-LIST J Q P)))) ((INDUCT (MULTS J Q)))) (PROVE-LEMMA GAUSS-COROLLARY (REWRITE) (IMPLIES (AND (PRIME P) (PRIME Q) (NOT (EQUAL P 2)) (NOT (EQUAL Q 2)) (NOT (EQUAL P Q))) (EQUAL (RES1 (QUOTIENT P 2) Q P) (RESIDUE Q P))) ((USE (GAUSS-LEMMA (A Q))) (DISABLE RES1 RESIDUE QUOTIENT PRIME1 REMAINDER))) (PROVE-LEMMA RESIDUE-QUOT-LIST NIL (IMPLIES (AND (PRIME P) (PRIME Q) (NOT (EQUAL P Q)) (NOT (EQUAL P 2)) (NOT (EQUAL Q 2))) (EQUAL (EQUAL (RESIDUE Q P) (RESIDUE P Q)) (EVEN3 (PLUS (PLUS-LIST (QUOT-LIST (QUOTIENT P 2) Q P)) (PLUS-LIST (QUOT-LIST (QUOTIENT Q 2) P Q)))))) ((USE (RES1-QUOT-LIST (A Q)) (RES1-QUOT-LIST (A P) (P Q)) (EVEN3-EVEN) (EVEN3-EVEN (P Q))) (DISABLE RESIDUE RES1 QUOTIENT QUOT-LIST PLUS-LIST LESSP-REMAINDER-DIVISOR DIFFERENCE LESSP))) (PROVE-LEMMA ALL-NON-ZEROP-MULTS (REWRITE) (IMPLIES (NOT (ZEROP P)) (ALL-NON-ZEROP (MULTS N P)))) (PROVE-LEMMA EMPTY-INTERSECT-MULTS-1 (REWRITE) (IMPLIES (AND (PRIME P) (PRIME Q) (NOT (EQUAL P Q)) (LESSP I Q) (LESSP J P)) (NOT (MEMBER (TIMES I P) (MULTS J Q)))) ((INDUCT (MULTS J Q)))) (PROVE-LEMMA EMPTY-INTERSECT-MULTS (REWRITE) (IMPLIES (AND (PRIME P) (PRIME Q) (NOT (EQUAL P Q)) (LESSP I Q)) (NOT (LISTP (INTERSECT (MULTS I P) (MULTS (QUOTIENT P 2) Q))))) ((USE (EMPTY-INTERSECT-MULTS-1 (J (QUOTIENT P 2)))) (INDUCT (MULTS I P)) (DISABLE PRIME1 QUOTIENT EMPTY-INTERSECT-MULTS-1 LESSP-REMAINDER-DIVISOR))) (PROVE-LEMMA EQUAL-PLUS-QUOT-LIST-WINS (REWRITE) (IMPLIES (AND (PRIME P) (PRIME Q) (NOT (EQUAL P Q))) (EQUAL (PLUS-LIST (QUOT-LIST (QUOTIENT P 2) Q P)) (WINS (MULTS (QUOTIENT P 2) Q) (MULTS (QUOTIENT Q 2) P)))) ((USE (EQUAL-WINS-PLUS-QUOT-LIST (J (QUOTIENT P 2)))) (DISABLE EQUAL-WINS-PLUS-QUOT-LIST MULTS QUOT-LIST WINS PLUS-LIST PRIME1))) (PROVE-LEMMA LAW-OF-QUADRATIC-RECIPROCITY NIL (IMPLIES (AND (PRIME P) (PRIME Q) (NOT (EQUAL P Q)) (NOT (EQUAL P 2)) (NOT (EQUAL Q 2))) (EQUAL (EQUAL (RESIDUE Q P) (RESIDUE P Q)) (EVEN (TIMES (QUOTIENT P 2) (QUOTIENT Q 2))))) ((USE (RESIDUE-QUOT-LIST) (EVEN3-EVEN (P (TIMES (QUOTIENT P 2) (QUOTIENT Q 2))))) (HANDS-OFF QUOTIENT QUOT-LIST EVEN3 RESIDUE TIMES) (DISABLE RESIDUE PRIME1 QUOT-LIST PLUS-LIST EVEN3-PLUS LESSP-REMAINDER-DIVISOR INTERSECT)))