(def-constant divides "lambda(a,b:rr, #(b/a,zz))" (theory h-o-real-arithmetic))
(def-theorem divisibility-lemma "forall(a,b:zz, not(a=0) implies (a divides b iff forsome(k:zz, b = k*a)))" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant (0) divides) direct-and-antecedent-inference-strategy (cut-with-single-formula "forsome(k:zz, b/a=k)") (antecedent-inference "with(p:prop,forsome(k:zz,p));") (incorporate-antecedent "with(r:rr,#(r,zz));") (backchain "with(k:zz,r:rr,r=k);") direct-and-antecedent-inference-strategy (incorporate-antecedent "with(k:zz,r:rr,r=k);") (apply-macete-with-minor-premises fractional-expression-manipulation) direct-and-antecedent-inference-strategy (instantiate-existential ("k")) (instantiate-existential ("b/a")) (cut-with-single-formula "b/a=k") (apply-macete-with-minor-premises fractional-expression-manipulation) simplify )))
(def-theorem divides-implies-le "forall(x,y:rr, 0<x and 0<y and x divides y implies x<=y)" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant (0) divides) direct-and-antecedent-inference-strategy (force-substitution "x<=y" "0<=x*(y/x-1)" (0)) (move-to-sibling 1) (apply-macete-with-minor-premises fractional-expression-manipulation) simplify simplify (cut-with-single-formula "0<y/x") simplify simplify (apply-macete-with-minor-premises positivity-of-inverse) )))
(def-constant positive%prime "lambda(m:zz, 1<m and forall(a:zz, 0<a and a divides m implies (a=1 or a=m)))" (theory h-o-real-arithmetic))
(def-constant no%factors%between "lambda(a,b:zz,c:rr, forall(k:zz, a<=k and k<=b implies not(k divides c)))" (theory h-o-real-arithmetic))
(def-theorem positive-prime-characterization "forall(m:zz, positive%prime(m) iff (2<=m and no%factors%between(2,m-1,m)))" (theory h-o-real-arithmetic) (proof ( unfold-defined-constants direct-and-antecedent-inference-strategy simplify (instantiate-universal-antecedent "with(p:prop,forall(a:zz,p));" ("k")) (simplify-antecedent "with(k:zz,not(0<k));") (simplify-antecedent "with(k:zz,2<=k);") (simplify-antecedent "with(m,k:zz,k<=m-1);") simplify (contrapose "with(m,a:zz,a divides m);") (case-split ("a<m")) (backchain "with(p:prop,forall(k:zz,p));") simplify (contrapose "with(m,a:zz,not(a<m));") (cut-with-single-formula "a<=m") (move-to-sibling 1) (apply-macete-with-minor-premises divides-implies-le) simplify simplify )))
(def-theorem no-factors-recursion "forall(a,b:zz,theta:rr, a<=b implies no%factors%between(a,b,theta) iff (not(a divides theta) and no%factors%between(a+1,b,theta)))" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant-globally no%factors%between) direct-and-antecedent-inference-strategy (backchain "with(p:prop,forall(k:zz,p));") simplify (backchain "with(p:prop,forall(k:zz,p));") simplify (cut-with-single-formula "k=a or a+1<=k") (antecedent-inference "with(p:prop,p or p);") simplify (backchain "with(p:prop,forall(k_$0:zz,p));") simplify simplify )))
(def-theorem no-factors-base "forall(a,b:zz,theta:rr, b<a implies (no%factors%between(a,b,theta) iff truth))" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant (0) no%factors%between) direct-and-antecedent-inference-strategy (simplify-antecedent "with(a,b:zz,b<a);") )))
(def-compound-macete crude-primality-test (sequential positive-prime-characterization (repeat no-factors-recursion no-factors-base divides-equation_h-o-real-arithmetic simplify)))
(def-theorem primes-exist "positive%prime(37)" (theory h-o-real-arithmetic) (proof ( (apply-macete crude-primality-test) )))
(def-theorem primality-test-refinement-lemma "forall(a,n:zz, 1<=a and n<a^2 and a<=n-1 implies no%factors%between(2,a,n) iff no%factors%between(2,n-1,n))" lemma (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant-globally no%factors%between) direct-and-antecedent-inference-strategy (block (script-comment "one direction of the biconditional.") (cut-with-single-formula "k<=a or a<k") (antecedent-inference "with(p:prop,p or p);") (backchain "with(p:prop,forall(k_$0:zz,p));") direct-and-antecedent-inference-strategy (contrapose "with(p:prop,forall(k_$0:zz,p));") (instantiate-existential ("n/k")) (cut-with-single-formula "0<n/k") (cut-with-single-formula "1=n/k or 2<=n/k") (antecedent-inference "with(p:prop,p or p);") (contrapose "with(r:rr,1=r);") (apply-macete-with-minor-premises fractional-expression-manipulation) simplify (incorporate-antecedent "with(n,k:zz,k divides n);") (unfold-single-defined-constant (0) divides) simplify (apply-macete-with-minor-premises fractional-expression-manipulation) simplify (cut-with-single-formula "not(a^2<=n)") (move-to-sibling 1) simplify (contrapose "with(p:prop,not(p));") (force-substitution "n" "(n/k)*k" (0)) (force-substitution "a^2" "a*a" (0)) (apply-macete-with-minor-premises monotone-product-lemma) simplify simplify simplify (unfold-single-defined-constant (0) divides) simplify (incorporate-antecedent "with(n,k:zz,k divides n);") (unfold-single-defined-constant (0) divides) simplify simplify) (block (script-comment "the other direction now.") (cut-with-single-formula "positive%prime(n)") (incorporate-antecedent "with(n:zz,positive%prime(n));") (unfold-single-defined-constant (0) positive%prime) direct-and-antecedent-inference-strategy (instantiate-universal-antecedent "with(p:prop,forall(a:zz,p and p implies (p or p)));" ("k_$0")) (simplify-antecedent "with(p:prop,not(p));") (simplify-antecedent "with(k_$0:zz,k_$0=1);") (simplify-antecedent "with(n,k_$0:zz,k_$0=n);") (apply-macete-with-minor-premises positive-prime-characterization) direct-and-antecedent-inference-strategy simplify (unfold-single-defined-constant (0) no%factors%between)) )))
(def-theorem primality-test-refinement "forall(n:zz, positive%prime(n) iff (n=2 or forsome(a:zz, 1<=a and n<a^2 and a<=n-1 and no%factors%between(2,a,n))))" (theory h-o-real-arithmetic) (proof ( (apply-macete-with-minor-premises primality-test-refinement-lemma) (apply-macete-with-minor-premises positive-prime-characterization) direct-and-antecedent-inference-strategy (instantiate-existential ("n-1")) simplify simplify (cut-with-single-formula "3*n<=n^2") simplify (force-substitution "n^2" "n*n" (0)) (apply-macete-with-minor-premises monotone-product-lemma) simplify simplify simplify simplify simplify simplify (apply-macete-with-minor-premises no-factors-base) )))
(def-theorem 3rd-mersenne-number-is-prime "positive%prime(2^2^3+1)" (theory h-o-real-arithmetic) (proof ( simplify (apply-macete-with-minor-premises primality-test-refinement) direct-and-antecedent-inference-strategy (instantiate-existential ("17")) simplify simplify simplify (block (let-macete no-factors-reduction (repeat no-factors-recursion no-factors-base divides-equation_h-o-real-arithmetic simplify)) (apply-macete $no-factors-reduction)) )))
(def-theorem prod-decomposition "forall(a,b,k:zz, f:[zz,zz], a<=k and k<=b implies prod(a,b,f)==prod(a,k,f)*prod(k+1,b,f))" (theory h-o-real-arithmetic) (proof ( (induction integer-inductor ("b")) (backchain "with(p:prop,p implies p);") direct-and-antecedent-inference-strategy )))
(def-theorem prod-integer-definedness "forall(m,n:zz,f:[zz,zz],forall(k:zz,m<=k and k<=n implies #(f(k),zz)) implies #(prod(m,n,f),zz))" (theory h-o-real-arithmetic) (proof ( (prove-iteration-operator-definedness "m" "n" prod) )))
(def-theorem product-is-divisible-by-factors "forall(a,b,k:zz, f:[zz,zz], a<=k and k<=b and forall(x:zz, a<=x and x<=b implies #(f(x))) and not(f(k)=0) implies f(k) divides prod(a,b,f))" (theory h-o-real-arithmetic) (proof ( direct-and-antecedent-inference-strategy (cut-with-single-formula "prod(a,b,f)=prod(a,k,f)*prod(k+1,b,f)") (block (script-comment "`cut-with-single-formula' at (0)") (backchain "with(r:rr,r=r);") (unfold-single-defined-constant (0) prod) simplify (unfold-single-defined-constant (0) divides) simplify sort-definedness (block (script-comment "`sort-definedness' at (0)") (apply-macete-with-minor-premises prod-integer-definedness) direct-and-antecedent-inference-strategy simplify ) (block (script-comment "`sort-definedness' at (1)") (apply-macete-with-minor-premises prod-integer-definedness) direct-and-antecedent-inference-strategy simplify ) ) (block (script-comment "`cut-with-single-formula' at (1)") (apply-macete-with-minor-premises prod-decomposition) simplify ) )))
(def-theorem addition-preserves-divisibility "forall(a,b,c:rr, a divides b and a divides c implies a divides b+c)" (theory h-o-real-arithmetic) (proof ( unfold-defined-constants simplify direct-and-antecedent-inference-strategy (cut-with-single-formula "forsome(x,y:zz, c*a^[-1]=y and b*a^[-1]=x)") (block (script-comment "`cut-with-single-formula' at (0)") (antecedent-inference "with(p:prop,forsome(x,y:zz,p));") (incorporate-antecedent "with(p:prop,p and p);") simplify direct-and-antecedent-inference-strategy (backchain "with(x:zz,b,a:rr,a^[-1]*b=x);") (backchain "with(y:zz,c,a:rr,a^[-1]*c=y);") simplify ) (block (script-comment "`cut-with-single-formula' at (1)") (instantiate-existential ("b/a" "c/a")) simplify ) )))
(def-theorem subtraction-preserves-divisibility "forall(a,b,c:rr, a divides b and a divides c implies a divides b-c)" (theory h-o-real-arithmetic) (proof ( (force-substitution "b-c" "b+(-c)" (0)) (apply-macete-with-minor-premises addition-preserves-divisibility) unfold-defined-constants direct-and-antecedent-inference-strategy (force-substitution "(-c)/a" "[-1]*(c/a)" (0)) simplify simplify simplify )))
(def-theorem multiplication-preserves-divisibility "forall(a,b:rr, c:zz, a divides b implies a divides c*b)" (theory h-o-real-arithmetic) (proof ( unfold-defined-constants simplify direct-and-antecedent-inference-strategy (cut-with-single-formula "forsome(x:zz, a^[-1]*b=x)") (block (script-comment "`cut-with-single-formula' at (0)") (antecedent-inference "with(p:prop,forsome(x:zz,p));") (force-substitution "c*a^[-1]*b" "c*(a^[-1]*b)" (0)) (block (script-comment "`force-substitution' at (0)") (backchain "with(x:zz,r:rr,r=x);") simplify ) (block (script-comment "`force-substitution' at (1)") (weaken (0)) simplify ) ) (instantiate-existential ("a^[-1]*b")) )))
(def-theorem non-divisibility-into-1 "forall(a,b:rr, 1<a implies not(a divides 1))" (theory h-o-real-arithmetic) (proof ( unfold-defined-constants direct-and-antecedent-inference-strategy (cut-with-single-formula "0<1/a and 1/a<1") (move-to-sibling 1) (apply-macete-with-minor-premises fractional-expression-manipulation) simplify (antecedent-inference "with(p:prop,p and p);") (contrapose "with(r:rr,r<1);") (weaken (2)) simplify )))
(def-theorem addition-of-one-destroys-divisibility "forall(a,b:rr, 1<a and a divides b implies not(a divides b+1))" (theory h-o-real-arithmetic) (proof ( direct-and-antecedent-inference-strategy (cut-with-single-formula "not(a divides 1)") (move-to-sibling 1) (apply-macete-with-minor-premises non-divisibility-into-1) (contrapose "with(p:prop,not(p));") (force-substitution "1" "(b+1)-b" (0)) (apply-macete-with-minor-premises subtraction-preserves-divisibility) direct-and-antecedent-inference-strategy simplify )))
(def-theorem divisibility-is-transitive "forall(a,b,c:rr, a divides b and b divides c implies a divides c)" (theory h-o-real-arithmetic) (proof ( unfold-defined-constants direct-and-antecedent-inference-strategy (cut-with-single-formula "forsome(x,y:zz,c/b=x and b/a=y)") (block (script-comment "`cut-with-single-formula' at (0)") (antecedent-inference "with(p:prop,forsome(x,y:zz,p));") (force-substitution "c/a" "x*y" (0)) simplify (block (script-comment "`force-substitution' at (1)") insistent-direct-inference (incorporate-antecedent "with(p:prop,p and p);") (apply-macete-with-minor-premises fractional-expression-manipulation) simplify direct-and-antecedent-inference-strategy (backchain-backwards "with(c,b:rr,x:zz,x*b=c);") (backchain-backwards "with(b,a:rr,y:zz,y*a=b);") (weaken (0 1)) simplify ) ) (instantiate-existential ("c/b" "b/a")) )))
(def-theorem self-divisibility "forall(k:rr, not(k=0) implies k divides k)" (theory h-o-real-arithmetic) lemma (proof ( (unfold-single-defined-constant (0) divides) simplify )))
(def-theorem divisibility-by-prime "forall(k:zz, 2<=k implies forsome(j:zz, positive%prime(j) and j divides k))" (theory h-o-real-arithmetic) (proof ( (induction complete-inductor ("k")) (case-split ("positive%prime(m)")) (instantiate-existential ("m")) (unfold-single-defined-constant (0) divides) simplify (contrapose "with(p:prop,not(p));") (apply-macete-with-minor-premises positive-prime-characterization) direct-and-antecedent-inference-strategy (unfold-single-defined-constant (0) no%factors%between) direct-and-antecedent-inference-strategy (contrapose "with(p:prop,forall(j:zz,p or p));") (instantiate-universal-antecedent "with(p:prop,forall(k:zz,p));" ("k")) (simplify-antecedent "with(p:prop,not(p));") (instantiate-existential ("j")) (apply-macete-with-minor-premises divisibility-is-transitive) (instantiate-existential ("k")) )))
(def-theorem product-gte-1 "forall(f:[zz,rr], a,b:zz, forall(k:zz,a<=k and k<=b implies 1<=f(k)) implies 1<=prod(a,b,f))" (theory h-o-real-arithmetic) (proof ( direct-and-antecedent-inference-strategy (case-split ("a<=b")) (induction integer-inductor ()) (force-substitution "1" "1*1" (0)) (apply-macete-with-minor-premises monotone-product-lemma) simplify direct-inference (backchain "with(p:prop,forall(k:zz,p));") simplify (backchain "with(p:prop,p implies p);") direct-and-antecedent-inference-strategy simplify simplify (unfold-single-defined-constant (0) prod) simplify )))
(def-theorem infinity-of-primes "forall(k:zz, forsome(m:zz, k<=m and positive%prime(m)))" (theory h-o-real-arithmetic) (proof ( (cut-with-single-formula "forall(k:zz,0<=k implies forsome(m:zz,k<=m and positive%prime(m)))") (block (script-comment "`cut-with-single-formula' at (0)") direct-and-antecedent-inference-strategy (case-split ("0<=k")) (backchain "with(p:prop,forall(k:zz,p));") (block (script-comment "`case-split' at (2)") (instantiate-universal-antecedent "with(p:prop,forall(k:zz,p));" ("0")) (simplify-antecedent "not(0<=0);") (block (script-comment "`instantiate-universal-antecedent' at (0 0 1 0 0)") (instantiate-existential ("m")) simplify))) (block (script-comment "`cut-with-single-formula' at (1)") direct-and-antecedent-inference-strategy (cut-with-single-formula "not(k<0)") (move-to-sibling 1) simplify (block (script-comment "`cut-with-single-formula' at (0)") (contrapose "with(p:prop,not(p));") (cut-with-single-formula "not(positive%prime(prod(2,k,lambda(j:zz,j))+1))") (move-to-sibling 1) (block (script-comment "`cut-with-single-formula' at (1)") (backchain "with(p:prop,forall(m:zz,p));") (block (script-comment "`backchain' at (0)") (weaken (0)) unfold-defined-constants (cut-with-single-formula "k=0 or k=1 or 2<=k ") (move-to-sibling 1) simplify (block (script-comment "`cut-with-single-formula' at (0)") (antecedent-inference "with(p:prop,p or p or p);") simplify simplify (block (script-comment "`antecedent-inference' at (2)") simplify (cut-with-single-formula "k<=prod(2,[-1]+k,lambda(j:zz,j))*k") simplify (block (script-comment "`cut-with-single-formula' at (1)") simplify (weaken (1)) (apply-macete-with-minor-premises product-gte-1) beta-reduce-repeatedly simplify)))) (block (script-comment "`backchain' at (1)") sort-definedness (apply-macete-with-minor-premises prod-integer-definedness) beta-reduce-repeatedly)) (block (script-comment "`cut-with-single-formula' at (0)") (contrapose "with(p:prop,not(p));") (instantiate-theorem divisibility-by-prime ("prod(2,k,lambda(j:zz,j))+1")) (block (script-comment "`instantiate-theorem' at (0 0)") (contrapose "with(r:rr,not(2<=r));") simplify (apply-macete-with-minor-premises product-gte-1) simplify) (block (script-comment "`instantiate-theorem' at (0 1 0 0)") (contrapose "with(r:rr,j:zz,j divides r);") (apply-macete-with-minor-premises addition-of-one-destroys-divisibility) direct-and-antecedent-inference-strategy (block (script-comment "`direct-and-antecedent-inference-strategy' at (0)") (incorporate-antecedent "with(j:zz,positive%prime(j));") (apply-macete-with-minor-premises positive-prime-characterization) simplify) (block (script-comment "`direct-and-antecedent-inference-strategy' at (1)") (force-substitution "j" "lambda(j:zz,j)(j)" (0)) (block (script-comment "`force-substitution' at (0)") (apply-macete-with-minor-premises product-is-divisible-by-factors) direct-and-antecedent-inference-strategy simplify (block (script-comment "`direct-and-antecedent-inference-strategy' at (1)") (contrapose "with(j:zz,positive%prime(j));") (backchain "with(p:prop,forall(m:zz,p));") simplify) beta-reduce-repeatedly simplify) beta-reduce-repeatedly))))) )))
(def-constant ideal "lambda(x:sets[zz], nonempty_indic_q{x} and forall(a,b,c:zz, a in x and b in x implies (a+b) in x and c*a in x))" (theory h-o-real-arithmetic))
(def-theorem divisibility-preserves-ideal-membership "forall(x:sets[zz], k,m:zz , ideal(x) and k in x and k divides m implies m in x)" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant (0) ideal) (unfold-single-defined-constant (0) divides) direct-and-antecedent-inference-strategy (force-substitution "m" "(m/k)*k" (0)) (backchain "with(p:prop,forall(a,b,c:zz,p));") direct-and-antecedent-inference-strategy (instantiate-existential ("x_$0")) simplify (simplify-antecedent "with(k,m:zz,#(m/k,zz));") definedness simplify (simplify-antecedent "with(k,m:zz,#(m*k^[-1],zz));") )))
(def-constant princ%ideal "lambda(k:zz, if(k=0, singleton{0}, indic{n:zz, k divides n}))" (theory h-o-real-arithmetic))
(def-theorem princ%ideal-is-ideal "forall(k:zz, ideal(princ%ideal(k)))" (theory h-o-real-arithmetic) (proof ( unfold-defined-constants direct-inference (case-split ("k=0")) simplify-insistently (block (script-comment "`case-split' at (2)") simplify-insistently direct-and-antecedent-inference-strategy (block (script-comment "`direct-and-antecedent-inference-strategy' at (0)") (instantiate-existential ("k")) (unfold-single-defined-constant (0) divides) simplify ) (block (script-comment "`direct-and-antecedent-inference-strategy' at (1 0 0 0 0 0)") (apply-macete-with-minor-premises addition-preserves-divisibility) direct-and-antecedent-inference-strategy ) (apply-macete-with-minor-premises multiplication-preserves-divisibility) ) )))
(def-theorem princ%ideal-contains-its-generator "forall(k:zz, k in princ%ideal(k))" (theory h-o-real-arithmetic) lemma (proof ( direct-and-antecedent-inference-strategy (unfold-single-defined-constant (0) princ%ideal) (case-split ("k=0")) simplify simplify (apply-macete-with-minor-premises self-divisibility) )))
(def-theorem characterization-of-divisibility "forall(a,b:rr, a divides b iff b mod a = 0)" (theory h-o-real-arithmetic) (proof ( unfold-defined-constants direct-and-antecedent-inference-strategy (cut-with-single-formula "floor(b/a)=b/a") (move-to-sibling 1) (apply-macete-with-minor-premises floor-characterization) simplify (incorporate-antecedent "with(r:rr,z:zz,z=r);") (apply-macete-with-minor-premises fractional-expression-manipulation) simplify (cut-with-single-formula "floor(b/a)=b/a") (incorporate-antecedent "with(p:prop,p);") (apply-macete-with-minor-premises fractional-expression-manipulation) simplify )))
(def-theorem division-with-remainder "forall(a,c:rr, 0<a implies a divides c-(c mod a) and 0<=c mod a and c mod a<a)" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant-globally mod) direct-and-antecedent-inference-strategy (move-to-ancestor 1) (cut-with-single-formula "forsome(p:zz, floor(c/a)=p)") (antecedent-inference "with(p:prop,forsome(p:zz,with(p:prop,p)));") (backchain "with(p,z:zz,z=p);") (backchain "with(p,z:zz,z=p);") (backchain "with(p,z:zz,z=p);") (incorporate-antecedent "with(p,z:zz,z=p);") (apply-macete-with-minor-premises floor-characterization) (apply-macete-with-minor-premises fractional-expression-manipulation) simplify direct-and-antecedent-inference-strategy (unfold-single-defined-constant (0) divides) simplify (instantiate-existential ("floor(c/a)")) simplify )))
(def-theorem every-non-trivial-ideal-contains-a-positive-element "forall(ide:sets[zz], ideal(ide) implies (not(ide=singleton{0}) iff forsome(a:zz,0<a and a in ide)))" (theory h-o-real-arithmetic) (proof ( direct-and-antecedent-inference-strategy (contrapose "with(p:prop,not(p));") (apply-macete-with-minor-premises tr%subseteq-antisymmetry) simplify-insistently direct-and-antecedent-inference-strategy (contrapose "with(p:prop,forall(a:zz,p));") (cut-with-single-formula "0<x_$2 or 0<-x_$2") (antecedent-inference "with(p:prop,p or p);") auto-instantiate-existential auto-instantiate-existential simplify (incorporate-antecedent "with(ide:sets[zz],ideal(ide));") (unfold-single-defined-constant (0) ideal) direct-and-antecedent-inference-strategy (backchain "with(p:prop,forall(a,b,c:zz,p));") direct-and-antecedent-inference-strategy (instantiate-existential ("x_$0")) simplify (incorporate-antecedent "with(ide:sets[zz],ideal(ide));") (unfold-single-defined-constant (0) ideal) direct-and-antecedent-inference-strategy (force-substitution "x_$1" "0*x_$0" (0)) (backchain "with(p:prop,forall(a,b,c:zz,p));") direct-and-antecedent-inference-strategy (instantiate-existential ("x_$0")) simplify (contrapose "with(a:zz,ide:sets[zz],a in ide);") (backchain "with(f,ide:sets[zz],ide=f);") (apply-macete-with-minor-premises indicator-facts-macete) simplify )))
(def-theorem principal-ideal-theorem "forall(x:sets[zz], ideal(x) iff forsome(k:zz,x=princ%ideal(k) and 0<=k))" (theory h-o-real-arithmetic) (proof ( direct-and-antecedent-inference-strategy (block (script-comment "`direct-and-antecedent-inference-strategy' at (0 0)") (case-split ("forsome(a:zz, a in x and 0<a)")) (block (script-comment "`case-split' at (1)") (antecedent-inference "with(p:prop,forsome(a:zz,p));") (instantiate-theorem well-ordering-for-integers ("lambda(j:zz,j in x and 0<j )")) (block (script-comment "`instantiate-theorem' at (0 0 0)") (instantiate-universal-antecedent "with(p:prop,forall(y:zz,p));" ("a")) (beta-reduce-antecedent "with(a:zz,x:sets[zz],not(lambda(j:zz,j in x and 0<j)(a)));")) (block (script-comment "`instantiate-theorem' at (0 0 1)") (contrapose "with(p:prop,forall(n:zz,p));") beta-reduce-repeatedly (instantiate-existential ("0")) simplify) (block (script-comment "`instantiate-theorem' at (0 1 0 0)") (beta-reduce-antecedent "with(x:sets[zz],u:zz, forall(v:zz, v<u implies not(lambda(j:zz,j in x and 0<j)(v))));") (beta-reduce-antecedent "with(u:zz,x:sets[zz],lambda(j:zz,j in x and 0<j)(u));") (instantiate-existential ("u")) (block (script-comment "`instantiate-existential' at (0 0)") (unfold-single-defined-constant (0) princ%ideal) simplify (apply-macete-with-minor-premises tr%subseteq-antisymmetry) simplify-insistently direct-and-antecedent-inference-strategy (block (script-comment "`direct-and-antecedent-inference-strategy' at (0 0 0)") (contrapose "with(p:prop,forall(v:zz,p));") (instantiate-existential ("x_$2 mod u")) (instantiate-theorem division-with-remainder ("u" "x_$2")) (block (script-comment "`instantiate-existential' at (0 1 0)") (unfold-single-defined-constant (0) mod) (incorporate-antecedent "with(x:sets[zz],ideal(x));") (unfold-single-defined-constant (0) ideal) direct-and-antecedent-inference-strategy simplify (backchain "with(p:prop,forall(a,b,c:zz,p));") direct-and-antecedent-inference-strategy (backchain "with(p:prop,forall(a,b,c:zz,p));") direct-inference simplify-insistently (instantiate-existential ("u"))) (block (script-comment "`instantiate-existential' at (0 1 1)") simplify sort-definedness (instantiate-theorem floor-definedness ("x_$2*u^[-1]")) simplify (instantiate-theorem division-with-remainder ("u" "x_$2")) (case-split ("0=x_$2 mod u")) (move-to-sibling 2) simplify (block (script-comment "`case-split' at (1)") (contrapose "with(p:prop,not(p));") (incorporate-antecedent "with(r:rr,0=r);") (apply-macete-with-minor-premises characterization-of-divisibility) direct-and-antecedent-inference-strategy)) (block (script-comment "`instantiate-existential' at (1)") unfold-defined-constants simplify)) (block (script-comment "`direct-and-antecedent-inference-strategy' at (1 0 0)") sort-definedness (assume-theorem floor-definedness) simplify (force-substitution "x_$1" "(x_$1/u)*u" (0)) (block (script-comment "`force-substitution' at (0)") (incorporate-antecedent "with(x:sets[zz],ideal(x));") (unfold-single-defined-constant (0) ideal) direct-and-antecedent-inference-strategy (backchain "with(p:prop,forall(a,b,c:zz,p));") (block (script-comment "`backchain' at (0)") direct-inference (instantiate-existential ("a"))) (block (script-comment "`backchain' at (1)") (incorporate-antecedent "with(x_$1,u:zz,u divides x_$1);") (unfold-single-defined-constant (0) divides) simplify)) simplify)) simplify)) (block (script-comment "`case-split' at (2)") (case-split ("x=singleton{0}")) (block (script-comment "`case-split' at (1)") (backchain "with(f,x:sets[zz],x=f);") (instantiate-existential ("0")) (unfold-single-defined-constant (0) princ%ideal) simplify) (block (script-comment "`case-split' at (2)") (incorporate-antecedent "with(f,x:sets[zz],not(x=f));") (apply-macete-with-minor-premises every-non-trivial-ideal-contains-a-positive-element) direct-and-antecedent-inference-strategy (contrapose "with(p:prop,not(p));") auto-instantiate-existential))) (block (script-comment "`direct-and-antecedent-inference-strategy' at (0 1 0 0)") (backchain "with(k:zz,0<=k);") (backchain "with(k:zz,0<=k);") (backchain "with(f,x:sets[zz],x=f);") (apply-macete-with-minor-premises princ%ideal-is-ideal)) )))
(def-constant generator "lambda(x:sets[zz], iota(k:zz,x=princ%ideal(k) and 0<=k))" (theory h-o-real-arithmetic))
(def-theorem iota-free-characterization-of-generator "forall(x:sets[zz],k:zz, generator(x)=k iff (0<=k and x=princ%ideal(k)))" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant (0) generator) (label-node l_0) direct-and-antecedent-inference-strategy (jump-to-node l_0) (for-nodes (unsupported-descendents) (if (matches? "with(p:prop,p)" "with(u:zz,p:prop,iota(k:zz,p)=u)") (block (contrapose "with(k,z:zz,z=k);") (eliminate-defined-iota-expression 0 w) (simplify-antecedent "with(p:prop,not(p));")) (if (matches? "with(u:zz,p:prop,iota(k:zz,p)=u)") (apply-macete-with-minor-premises eliminate-iota-macete) (skip)))) (backchain "with(f:sets[zz],x:sets[rr],x=f);") (backchain "with(f:sets[zz],x:sets[rr],x=f);") direct-and-antecedent-inference-strategy (weaken (0 3)) (incorporate-antecedent "with(f:sets[zz],f=f);") (unfold-single-defined-constant-globally princ%ideal) (label-node l_1) (case-split ("k=0" "b=0")) (jump-to-node l_1) (for-nodes (unsupported-descendents) (block simplify (apply-macete-with-minor-premises tr%subseteq-antisymmetry) simplify-insistently direct-and-antecedent-inference-strategy)) (cut-with-single-formula "b<=k and k<=b") simplify (apply-macete-with-minor-premises divides-implies-le) simplify direct-and-antecedent-inference-strategy (backchain "with(b,k:zz, forall(x_$2:zz,k divides x_$2 implies b divides x_$2));") (apply-macete-with-minor-premises self-divisibility) (backchain "with(k,b:zz, forall(x_$1:zz,b divides x_$1 implies k divides x_$1));") (apply-macete-with-minor-premises self-divisibility) (instantiate-existential ("b")) (apply-macete-with-minor-premises self-divisibility) (instantiate-universal-antecedent "with(p:prop,forall(x_$2:zz,p));" ("k")) (contrapose "with(p:prop,not(p));") (apply-macete-with-minor-premises self-divisibility) )))
(def-theorem definedness-of-generator "forall(x:sets[zz],k:zz, ideal(x) implies #(generator(x)))" (theory h-o-real-arithmetic) (usages d-r-convergence) (proof ( direct-and-antecedent-inference-strategy (cut-with-single-formula "forsome(k:zz, generator(x)=k)") (antecedent-inference "with(p:prop,forsome(k:zz,p));") (apply-macete-with-minor-premises iota-free-characterization-of-generator) (instantiate-theorem principal-ideal-theorem ("x")) auto-instantiate-existential )))
(def-theorem divisibility-characterization-of-generator "forall(x:sets[zz], ideal(x) and not(x = singleton{0}) implies forall(k:zz, k in x iff generator(x) divides k))" (theory h-o-real-arithmetic) reverse (proof ( direct-inference direct-inference (cut-with-single-formula "forsome(k:zz, generator(x_$1)=k)") (antecedent-inference "with(p:prop,forsome(k:zz,p));") (backchain "with(k,z:zz,z=k);") (incorporate-antecedent "with(k,z:zz,z=k);") (apply-macete-with-minor-premises iota-free-characterization-of-generator) (case-split ("k=0")) (unfold-single-defined-constant (0) princ%ideal) simplify direct-and-antecedent-inference-strategy (incorporate-antecedent "with(f,x_$1:sets[zz],x_$1=f);") (apply-macete-with-minor-premises tr%subseteq-antisymmetry) (unfold-single-defined-constant (0) princ%ideal) simplify-insistently (unfold-single-defined-constant (0) princ%ideal) (apply-macete-with-minor-premises divisibility-preserves-ideal-membership) (instantiate-existential ("k")) (backchain "with(f,x_$1:sets[zz],x_$1=f);") (unfold-single-defined-constant (0) princ%ideal) simplify (apply-macete-with-minor-premises self-divisibility) (instantiate-existential ("generator(x_$1)")) simplify )))
(def-theorem integer-combinations-form-an-ideal "forall(a,b:zz, ideal(indic{x:zz, forsome(r,s:zz, x=r*b+s*a)}))" lemma (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant (0) ideal) direct-and-antecedent-inference-strategy (block (script-comment "`direct-and-antecedent-inference-strategy' at (0 0)") (instantiate-existential ("a")) simplify-insistently (instantiate-existential ("0" "1")) simplify ) (incorporate-antecedent "with(a_$0,a,b:zz, a_$0 in indic{x:zz, forsome(r,s:zz,x=r*b+s*a)});" ) (incorporate-antecedent "with(b_$0,a,b:zz, b_$0 in indic{x:zz, forsome(r,s:zz,x=r*b+s*a)});" ) simplify-insistently direct-and-antecedent-inference-strategy (instantiate-existential ("r_$0+r" "s_$0+s")) simplify (block (script-comment "`simplify' at (0)") (backchain "with(a,s_$0,b,r_$0,b_$0:zz,b_$0=r_$0*b+s_$0*a);") (backchain "with(a,s,b,r,a_$0:zz,a_$0=r*b+s*a);") (weaken (0 1)) simplify ) (block (script-comment "`direct-and-antecedent-inference-strategy' at (0 1 0 0 1 0 0)") (incorporate-antecedent "with(a_$0,a,b:zz, a_$0 in indic{x:zz, forsome(r,s:zz,x=r*b+s*a)});" ) simplify-insistently direct-and-antecedent-inference-strategy (instantiate-existential ("c_$0*r" "c_$0*s")) (cut-with-single-formula "0<c_$0 or c_$0=0 or c_$0<0") (antecedent-inference "with(p:prop,p or p or p);") (move-to-ancestor 2) (move-to-descendent (1)) simplify simplify simplify simplify ) )))
(def-constant gcd "lambda(a,b:zz, generator(indic{x:zz, forsome(r,s:zz, x=r*a + s*b)}))" (theory h-o-real-arithmetic))
(def-theorem symmetry-of-gcd "forall(a,b:zz, gcd(a,b)=gcd(b,a))" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant-globally gcd) direct-inference (force-substitution "forsome(r,s:zz,x=r*a+s*b)" "forsome(r,s:zz,x=r*b+s*a)" (0)) simplify (apply-macete-with-minor-premises definedness-of-generator) (apply-macete-with-minor-premises integer-combinations-form-an-ideal) (label-node l_0) direct-and-antecedent-inference-strategy (jump-to-node l_0) (for-nodes (unsupported-descendents) (block (instantiate-existential ("s" "r")) simplify)) )))
(def-theorem gcd-usually-is-non-zero "forall(a,b:zz, gcd(a,b)=0 iff (a =0 and b=0))" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant (0) gcd) (apply-macete-with-minor-premises iota-free-characterization-of-generator) (unfold-single-defined-constant (0) princ%ideal) (apply-macete-with-minor-premises tr%subseteq-antisymmetry) simplify-insistently direct-and-antecedent-inference-strategy (let-script prove-cut 3 ( (contrapose "with(p:prop,forall(x:zz,p))") (instantiate-existential ($1)) (instantiate-existential ($2 $3)) simplify)) ($prove-cut "a" "1" "0") ($prove-cut "b" "0" "1") (simplify-antecedent "with(r:rr,x_$2:zz,x_$2=r+r);") (instantiate-existential ("0" "0")) simplify )))
(def-theorem characterization-of-gcd "forall(a,b:zz, not(b=0) implies gcd(a,b) divides a and gcd(a,b) divides b and forall(k:zz, k divides a and k divides b implies k divides gcd(a,b)))" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant (0 1) gcd) (apply-macete-with-minor-premises rev%divisibility-characterization-of-generator) (apply-macete-with-minor-premises indicator-facts-macete) beta-reduce-repeatedly direct-and-antecedent-inference-strategy (instantiate-existential ("1" "0")) simplify (instantiate-existential ("0" "1")) simplify (case-split ("k=0")) (contrapose "with(b,k:zz,k divides b);") (unfold-single-defined-constant (0) divides) simplify (cut-with-single-formula "forsome(k:zz, gcd(a,b)=k)") (antecedent-inference "with(p:prop,forsome(k:zz,p));") (backchain "with(k_$0,b,a:zz,gcd(a,b)=k_$0);") (incorporate-antecedent "with(k_$0,b,a:zz,gcd(a,b)=k_$0);") (unfold-single-defined-constant (0) gcd) (apply-macete-with-minor-premises iota-free-characterization-of-generator) direct-and-antecedent-inference-strategy (cut-with-single-formula "k_$0 in indic{x:zz, forsome(r,s:zz,x=r*a+s*b)}") (incorporate-antecedent "with(k_$0:zz,f:sets[zz],k_$0 in f);") (apply-macete-with-minor-premises indicator-facts-macete) beta-reduce-repeatedly direct-and-antecedent-inference-strategy (backchain "with(b,s,a,r,k_$0:zz,k_$0=r*a+s*b);") (apply-macete-with-minor-premises addition-preserves-divisibility) (apply-macete-with-minor-premises multiplication-preserves-divisibility) direct-inference (backchain "with(f:sets[zz],f=f);") (apply-macete-with-minor-premises princ%ideal-contains-its-generator) (instantiate-existential ("gcd(a,b)")) simplify (unfold-single-defined-constant (0) gcd) (apply-macete-with-minor-premises definedness-of-generator) (apply-macete-with-minor-premises integer-combinations-form-an-ideal) (weaken (0)) (apply-macete-with-minor-premises tr%subseteq-antisymmetry) simplify-insistently direct-and-antecedent-inference-strategy (contrapose "with(p:prop,forall(x_$2:zz,p));") (instantiate-existential ("b")) (weaken (0)) (apply-macete-with-minor-premises integer-combinations-form-an-ideal) )))
(def-constant relatively%prime "lambda(a,b:zz, gcd(a,b)=1)" (theory h-o-real-arithmetic))
(def-theorem relative-primality-to-primes "forall(a,b:zz, positive%prime(b) implies (b divides a or relatively%prime(a,b)))" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant (0) positive%prime) (unfold-single-defined-constant (0) relatively%prime) direct-and-antecedent-inference-strategy (instantiate-theorem characterization-of-gcd ("a" "b")) (simplify-antecedent "with(b:zz,b=0);") (instantiate-universal-antecedent "with(p:prop,forall(a:zz,p and p implies (p or p)));" ("gcd(a,b)")) (cut-with-single-formula "0<=gcd(a,b) and not(gcd(a,b)=0)") (simplify-antecedent "with(z:zz,not(0<z));") (apply-macete-with-minor-premises gcd-usually-is-non-zero) simplify (cut-with-single-formula "forsome(k:zz,gcd(a,b)=k)") (antecedent-inference "with(p:prop,forsome(k:zz,p));") (backchain "with(k,z:zz,z=k);") (incorporate-antecedent "with(k,z:zz,z=k);") (unfold-single-defined-constant (0) gcd) (apply-macete-with-minor-premises iota-free-characterization-of-generator) direct-and-antecedent-inference-strategy (instantiate-existential ("gcd(a,b)")) (contrapose "with(p:prop,not(p));") (backchain-backwards "with(b,z:zz,z=b);") )))
(def-theorem relatively-prime-divisors-of-a-product "forall(a,b,c:zz, relatively%prime(a,b) and a divides b*c implies a divides c)" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant (0) relatively%prime) (unfold-single-defined-constant (0) gcd) (apply-macete-with-minor-premises iota-free-characterization-of-generator) (apply-macete-with-minor-premises tr%subseteq-antisymmetry) simplify-insistently direct-and-antecedent-inference-strategy (instantiate-universal-antecedent "with(p:prop,f:sets[zz], forall(x_$1:zz,x_$1 in f implies forsome(r,s:zz,p)));" ("1")) (contrapose "with(p:prop,not(p));") (apply-macete-with-minor-premises princ%ideal-contains-its-generator) (cut-with-single-formula "c=r*c*a+s*(c*b)") (backchain "with(b,s,a,r,c:zz,c=r*c*a+s*(c*b));") (apply-macete-with-minor-premises addition-preserves-divisibility) (apply-macete-with-minor-premises multiplication-preserves-divisibility) (apply-macete-with-minor-premises self-divisibility) direct-inference (contrapose "with(r:rr,a:zz,a divides r);") (unfold-single-defined-constant (0) divides) simplify (cut-with-single-formula "c<0 or c=0 or 0<c") (antecedent-inference "with(p:prop,p or p or p);") simplify simplify simplify simplify (unfold-single-defined-constant (0) princ%ideal) )))
(def-theorem prime-divisor-of-a-product "forall(a,b,c:zz, positive%prime(a) and a divides b*c and not(a divides b) implies a divides c)" (theory h-o-real-arithmetic) (proof ( direct-and-antecedent-inference-strategy (apply-macete-with-minor-premises relatively-prime-divisors-of-a-product) (instantiate-existential ("b")) (assume-theorem relative-primality-to-primes) (cut-with-single-formula "relatively%prime(b,a)") (move-to-sibling 1) (backchain "with(p:prop,forall(a,b:zz,p));") direct-inference (incorporate-antecedent "with(a,b:zz,relatively%prime(b,a));") (unfold-single-defined-constant-globally relatively%prime) direct-and-antecedent-inference-strategy (apply-macete-with-minor-premises symmetry-of-gcd) )))
(def-theorem prime-divisor-of-a-general-product "forall(f:[zz,zz],m,n,p:zz, positive%prime(p) implies p divides prod(m,n,f) iff (forsome(j:zz,m<=j and j<=n and p divides f(j)) and forall(j:zz,m<=j and j<=n implies #(f(j)))))" (theory h-o-real-arithmetic) (proof ( direct-and-antecedent-inference-strategy (cut-with-single-formula "m<=n") (induction trivial-integer-inductor ()) beta-reduce-repeatedly (unfold-single-defined-constant (0) prod) simplify (unfold-single-defined-constant (0) prod) simplify direct-and-antecedent-inference-strategy (instantiate-existential ("m")) (cut-with-single-formula "p divides prod(m,t,f) or p divides f(1+t)") (antecedent-inference "with(p:prop,p or p);") (antecedent-inference "with(p:prop,p implies p);") (instantiate-existential ("j")) simplify (instantiate-existential ("1+t")) simplify direct-and-antecedent-inference-strategy (apply-macete-with-minor-premises prime-divisor-of-a-product) (instantiate-existential ("prod(m,t,f)")) simplify (apply-macete-with-minor-premises prod-integer-definedness) simplify (apply-macete-with-minor-premises prod-definedness-converse) direct-and-antecedent-inference-strategy auto-instantiate-existential (contrapose "with(r:rr,p:zz,p divides r);") (unfold-single-defined-constant (0) prod) simplify (apply-macete-with-minor-premises non-divisibility-into-1) (incorporate-antecedent "with(p:zz,positive%prime(p));") (unfold-single-defined-constant (0) positive%prime) simplify (cut-with-single-formula "forall(j:zz, m<=j and j<=n implies #(f(j)))") simplify (apply-macete-with-minor-premises prod-definedness-converse) direct-and-antecedent-inference-strategy (instantiate-existential ("n" "m")) (block (script-comment "this is the trivial case.") (case-split ("f(j)=0")) (force-substitution "prod(m,n,f)" "prod(m,j,f)*prod(j+1,n,f)" (0)) (move-to-sibling 1) (apply-macete-with-minor-premises prod-decomposition) (unfold-single-defined-constant (0) prod) (cut-with-single-formula "#(prod(m,j-1,f))") (cut-with-single-formula "#(prod(j+1,n,f))") simplify (apply-macete-with-minor-premises prod-definedness) direct-and-antecedent-inference-strategy simplify (apply-macete-with-minor-premises prod-definedness) direct-and-antecedent-inference-strategy simplify (apply-macete-with-minor-premises divisibility-is-transitive) auto-instantiate-existential (apply-macete-with-minor-premises product-is-divisible-by-factors) direct-and-antecedent-inference-strategy) )))
(def-theorem prime-divisor-of-a-power "forall(p,q,n:zz, 1<=n and positive%prime(p) and positive%prime(q) and p divides q^n implies p=q)" (theory h-o-real-arithmetic) (proof ( (force-substitution "q^n" "prod(1,n,lambda(j:zz,q))" (0)) (apply-macete-with-minor-premises prime-divisor-of-a-general-product) beta-reduce-repeatedly direct-and-antecedent-inference-strategy (incorporate-antecedent "with(p:zz,positive%prime(p));") (incorporate-antecedent "with(q:zz,positive%prime(q));") (unfold-single-defined-constant-globally positive%prime) direct-and-antecedent-inference-strategy (backchain "with(q:zz, forall(a:zz,0<a and a divides q implies (a=1 or a=q)));") simplify (induction integer-inductor ()) (backchain-backwards "with(r:rr,r==r);") simplify )))
(def-theorem prime-divisor-of-a-prime "forall(p,q:zz, positive%prime(p) and positive%prime(q) and p divides q implies p=q)" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant-globally positive%prime) direct-and-antecedent-inference-strategy (backchain "with(q:zz, forall(a:zz,0<a and a divides q implies (a=1 or a=q)));") simplify )))
(def-constant prime%decomposition "lambda(p:[zz,zz],n:zz, forall(j:zz, 1<=j and j<=n implies positive%prime(p(j))) and forall(j,k:zz, 1<=j and j<=k and k<=n implies p(k)<=p(j)))" (theory h-o-real-arithmetic))
(def-constant smallest%factor "lambda(x:zz,iota(y:zz,2<=y and y divides x and forall(z:zz, 2<=z and z divides x implies y<=z)))" (theory h-o-real-arithmetic))
(def-theorem iota-free-smallest%proper%factor "forall(j,k:zz, smallest%factor(j)=k iff (2<=k and k divides j and forall(p:zz, 2<=p and p divides j implies k<=p)))" (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant-globally smallest%factor) direct-and-antecedent-inference-strategy (let-script scripto 0 ((contrapose "with(k,z:zz,z=k);") (apply-macete-with-minor-premises eliminate-iota-macete) (contrapose "with(p:prop,not(p));"))) $scripto $scripto $scripto (backchain "with(p:prop,p and p);") direct-and-antecedent-inference-strategy (apply-macete-with-minor-premises eliminate-iota-macete) direct-and-antecedent-inference-strategy (cut-with-single-formula "b<=k and k<=b") simplify direct-inference (backchain "with(b,j:zz,forall(z:zz,2<=z and z divides j implies b<=z));") direct-and-antecedent-inference-strategy (backchain "with(k,j:zz,forall(p:zz,2<=p and p divides j implies k<=p));") direct-and-antecedent-inference-strategy )))
(def-theorem smallest%proper%factor-defined "forall(x:zz,2<=x implies #(smallest%factor(x)))" (theory h-o-real-arithmetic) (proof ( direct-and-antecedent-inference-strategy (cut-with-single-formula "forsome(s:zz, smallest%factor(x)=s)") (antecedent-inference "with(p:prop,forsome(s:zz,p));") (apply-macete-with-minor-premises iota-free-smallest%proper%factor) (instantiate-theorem well-ordering-for-integers ("lambda(j:zz, 2<=j and j divides x)")) (contrapose "with(p:prop,forall(y:zz,p));") (instantiate-existential ("x")) beta-reduce-repeatedly (apply-macete-with-minor-premises self-divisibility) simplify (instantiate-universal-antecedent "with(p:prop,forall(n:zz,p));" ("1")) (simplify-antecedent "with(m:zz,f:[zz,prop],f(m));") (instantiate-existential ("u")) (instantiate-universal-antecedent "with(p:prop,forall(v:zz,p));" ("p")) simplify (simplify-antecedent "with(p:prop,not(p));") )))
(def-theorem smallest%proper%factor-is-prime "forall(x:zz,2<=x implies positive%prime(smallest%factor(x)))" (theory h-o-real-arithmetic) (proof ( direct-and-antecedent-inference-strategy (cut-with-single-formula "forsome(s:zz, smallest%factor(x)=s)") (antecedent-inference "with(p:prop,forsome(s:zz,p));") (backchain "with(s,z:zz,z=s);") (incorporate-antecedent "with(s,z:zz,z=s);") (apply-macete-with-minor-premises iota-free-smallest%proper%factor) direct-and-antecedent-inference-strategy (unfold-single-defined-constant (0) positive%prime) direct-and-antecedent-inference-strategy simplify (cut-with-single-formula "a<=s and s<=a") simplify direct-inference (apply-macete-with-minor-premises divides-implies-le) simplify (backchain "with(p:prop,forall(p:zz,with(p:prop,p)));") (apply-macete-with-minor-premises divisibility-is-transitive) direct-and-antecedent-inference-strategy simplify auto-instantiate-existential (instantiate-existential ("smallest%factor(x)")) simplify (apply-macete-with-minor-premises smallest%proper%factor-defined) )))
(def-theorem existence-of-prime-factorization "forall(m:zz, 2<=m implies forsome(p:[zz,zz],n:zz, prime%decomposition(p,n) and m=prod(1,n,p)))" (theory h-o-real-arithmetic) (proof ( (let-script use-macete-on 2 ((incorporate-antecedent ($2)) (apply-macete-with-minor-premises $1) direct-and-antecedent-inference-strategy simplify)) (let-script use-definition 1 ((incorporate-antecedent ((% "~a" $1))) (unfold-single-defined-constant-globally $1) direct-and-antecedent-inference-strategy simplify)) (induction complete-inductor ("m")) (cut-with-single-formula "forsome(s:zz,smallest%factor(m)=s)") (antecedent-inference "with(p:prop,forsome(s:zz,p));") (case-split ("s=m")) (block (cut-with-single-formula "positive%prime(m)") (move-to-sibling 1) (backchain-backwards "with(m,s:zz,s=m);") (backchain-backwards "with(s,m:zz,smallest%factor(m)=s);") (apply-macete-with-minor-premises smallest%proper%factor-is-prime) (instantiate-existential ("1" "lambda(j:zz,m)")) (unfold-single-defined-constant (0) prime%decomposition) simplify (unfold-single-defined-constant (0) prod) (unfold-single-defined-constant (0) prod) simplify) (cut-with-single-formula "forsome(t:zz, m/s=t)") (antecedent-inference "with(p:prop,forsome(t:zz,p));") (block (cut-with-single-formula "2<=t and t<m") (move-to-sibling 1) (cut-with-single-formula "0<t and not(t=1)") simplify (backchain-backwards "with(t,s,m:zz,m/s=t);") (apply-macete-with-minor-premises fractional-expression-manipulation) simplify ($use-macete-on iota-free-smallest%proper%factor "smallest%factor") ($use-macete-on iota-free-smallest%proper%factor "smallest%factor") (backchain-backwards "with(t,s,m:zz,m/s=t);") (backchain-backwards "with(t,s,m:zz,m/s=t);") (apply-macete-with-minor-premises fractional-expression-manipulation) simplify ($use-macete-on iota-free-smallest%proper%factor "smallest%factor")) (move-to-ancestor 3) (move-to-descendent (1)) ($use-macete-on iota-free-smallest%proper%factor "smallest%factor") ($use-definition divides) ($use-definition divides) (instantiate-universal-antecedent "with(p:prop,forall(k:zz,p));" ("t")) ($use-definition prime%decomposition) (instantiate-existential ("lambda(j:zz, if(j=n+1,s,p(j)))" "n+1")) beta-reduce-repeatedly (case-split ("j_$0<=n")) simplify simplify (backchain-backwards "with(s,m:zz,smallest%factor(m)=s);") (apply-macete-with-minor-premises smallest%proper%factor-is-prime) beta-reduce-repeatedly (case-split ("k_$0<=n " "j_$0<=n")) simplify simplify simplify ($use-macete-on iota-free-smallest%proper%factor "smallest%factor") (backchain "with(s:zz, forall(p:zz, with(p:prop, with(p:prop,p and p) implies with(p:zz,s<=p))));") (apply-macete-with-minor-premises divisibility-is-transitive) direct-inference ($use-macete-on positive-prime-characterization "positive%prime") (instantiate-existential ("prod(1,n,p)")) (apply-macete-with-minor-premises product-is-divisible-by-factors) direct-and-antecedent-inference-strategy (instantiate-universal-antecedent "with(p:[zz,zz],n:zz, forall(j:zz,1<=j and j<=n implies positive%prime(p(j))));" ("x")) ($use-macete-on positive-prime-characterization "positive%prime") (backchain-backwards "with(p:[zz,zz],n,t:zz,t=prod(1,n,p));") (cut-with-single-formula "m/t=s") (unfold-single-defined-constant (0) divides) (incorporate-antecedent "with(t,s,m:zz,m/s=t);") (apply-macete-with-minor-premises fractional-expression-manipulation) simplify (instantiate-universal-antecedent "with(p:[zz,zz],n:zz, forall(j:zz,1<=j and j<=n implies positive%prime(p(j))));" ("j_$0")) simplify (incorporate-antecedent "with(t,s,m:zz,m/s=t);") (apply-macete-with-minor-premises fractional-expression-manipulation) direct-and-antecedent-inference-strategy (unfold-single-defined-constant (0) prod) simplify (case-split ("n<=0")) (contrapose "with(p:[zz,zz],n,t:zz,t=prod(1,n,p));") (unfold-single-defined-constant (0) prod) simplify simplify beta-reduce-repeatedly (cut-with-single-formula "prod(1,n,lambda(j:zz,if(j=1+n, s, p(j))))==prod(1,n,p)") (backchain "with(r:rr,r==r);") (backchain-backwards "with(p:[zz,zz],n,t:zz,t=prod(1,n,p));") (cut-with-single-formula "1<=n") (move-to-sibling 1) simplify (cut-with-single-formula "forsome(q:[zz,zz],q=lambda(j:zz,if(j=1+n, s, p(j))))") (antecedent-inference "with(p:prop,forsome(q:[zz,zz],p));") (backchain-backwards "with(f,q:[zz,zz],q=f);") (cut-with-single-formula "forall(k:zz,1<=k and k<=n implies q(k)==p(k))") (weaken (4 5 6 7 13 12 11 10 9 8 14 3 1)) (induction integer-inductor ("n")) (backchain "with(p:prop,p implies p);") direct-and-antecedent-inference-strategy (backchain "with(p:prop,forall(k:zz,p));") simplify (backchain "with(p,q:[zz,zz],t:zz, forall(k:zz,1<=k and k<=1+t implies q(k)==p(k)));") simplify (backchain "with(f,q:[zz,zz],q=f);") beta-reduce-repeatedly direct-and-antecedent-inference-strategy simplify (instantiate-existential ("lambda(j:zz,if(j=1+n, s, p(j)))")) (instantiate-existential ("smallest%factor(m)")) (move-to-ancestor 1) (move-to-descendent (1 0)) (apply-macete-with-minor-premises smallest%proper%factor-defined) simplify )))
(def-theorem unique-factorization-lemma-1 "forall(p,q:[zz,zz],m,n:zz, 1<=n and 1<=m and prime%decomposition(p,n) and prime%decomposition(q,m) and prod(1,n,p)=prod(1,m,q) implies p(n)<=q(m))" lemma (theory h-o-real-arithmetic) (proof ( (unfold-single-defined-constant-globally prime%decomposition) direct-and-antecedent-inference-strategy (incorporate-antecedent "with(r:rr,r=r);") (unfold-single-defined-constant (1) prod) simplify direct-and-antecedent-inference-strategy (cut-with-single-formula "q(m) divides prod(1,n,p)") (move-to-sibling 1) (apply-macete-with-minor-premises divisibility-lemma) (instantiate-existential ("prod(1,[-1]+m,q)")) (apply-macete-with-minor-premises prod-integer-definedness) direct-and-antecedent-inference-strategy (cut-with-single-formula "positive%prime(q(k))") simplify (cut-with-single-formula "positive%prime(q(m))") (incorporate-antecedent "with(z:zz,positive%prime(z));") (apply-macete-with-minor-premises positive-prime-characterization) simplify simplify (apply-macete-with-minor-premises prod-integer-definedness) direct-and-antecedent-inference-strategy (cut-with-single-formula "positive%prime(p(k))") simplify (cut-with-single-formula "forsome(v:zz, 1<=v and v<=n and q(m)=p(v))") (move-to-sibling 1) (apply-macete-with-minor-premises prime-divisor-of-a-prime) (incorporate-antecedent "with(r:rr,z:zz,z divides r);") (apply-macete-with-minor-premises prime-divisor-of-a-general-product) direct-and-antecedent-inference-strategy (instantiate-existential ("j")) simplify (antecedent-inference "with(p:prop,forsome(v:zz,p));") (cut-with-single-formula "p(n)<=p(v)") simplify simplify)))
(def-theorem unique-factorization-lemma-2 "forall(p,q:[zz,zz],m,n:zz, 1<=n and 1<=m and prime%decomposition(p,n) and prime%decomposition(q,m) and prod(1,n,p)=prod(1,m,q) implies p(n)=q(m))" lemma (theory h-o-real-arithmetic) (proof ( direct-and-antecedent-inference-strategy (cut-with-single-formula "p(n)<=q(m) and q(m)<=p(n)") simplify direct-and-antecedent-inference-strategy (apply-macete-with-minor-premises unique-factorization-lemma-1) direct-and-antecedent-inference-strategy (apply-macete-with-minor-premises unique-factorization-lemma-1) direct-and-antecedent-inference-strategy )))
(def-theorem unique-factorization-lemma-3 "forall(p,q:[zz,zz],m,n:zz, 1<=n and 1<=m and prime%decomposition(p,n) and prime%decomposition(q,m) and prod(1,n,p)=prod(1,m,q) implies prod(1,n-1,p)=prod(1,m-1,q))" lemma (theory h-o-real-arithmetic) (proof ( direct-and-antecedent-inference-strategy (cut-with-single-formula "p(n)=q(m)") (move-to-sibling 1) (apply-macete-with-minor-premises unique-factorization-lemma-2) direct-and-antecedent-inference-strategy (incorporate-antecedent "with(q:[zz,zz],m:zz,p:[zz,zz],n:zz,prod(1,n,p)=prod(1,m,q));") (unfold-single-defined-constant (0 1) prod) simplify (backchain "with(z:zz,z=z);") (cut-with-single-formula "2<=q(m)") simplify (cut-with-single-formula "positive%prime(q(m))") (incorporate-antecedent "with(z:zz,positive%prime(z));") (apply-macete-with-minor-premises positive-prime-characterization) simplify (incorporate-antecedent "with(m:zz,q:[zz,zz],prime%decomposition(q,m));") (unfold-single-defined-constant (0) prime%decomposition) direct-and-antecedent-inference-strategy simplify )))
(def-theorem unique-factorization-lemma-4 "forall(p,q:[zz,zz],m,n:zz, prime%decomposition(p,n) and 1<=n implies not(prod(1,n,p)=1))" lemma (theory h-o-real-arithmetic) (proof ( direct-and-antecedent-inference-strategy (cut-with-single-formula "2<=prod(1,n,p)") simplify (unfold-single-defined-constant (0) prod) simplify (force-substitution "2" "1*2" (0)) (move-to-sibling 1) simplify (apply-macete-with-minor-premises monotone-product-lemma) direct-and-antecedent-inference-strategy simplify (apply-macete-with-minor-premises product-gte-1) direct-and-antecedent-inference-strategy (let-script use-prime-def 1 ((cut-with-single-formula (% "positive%prime(p(~a))" $1)) (incorporate-antecedent "with(z:zz,positive%prime(z));") (apply-macete-with-minor-premises positive-prime-characterization) simplify (incorporate-antecedent "with(n:zz,p:[zz,zz],prime%decomposition(p,n));") (unfold-single-defined-constant-globally prime%decomposition) direct-and-antecedent-inference-strategy simplify)) ($use-prime-def "k") simplify ($use-prime-def "n") )))
(def-theorem unique-factorization-lemma-5 "forall(p,q:[zz,zz],m,n,k:zz, k<=m and k<=n and 0<=k and prime%decomposition(p,n) and prime%decomposition(q,m) and prod(1,n,p)=prod(1,m,q) implies prod(1,n-k,p)=prod(1,m-k,q))" (theory h-o-real-arithmetic) (proof ( (induction trivial-integer-inductor ("k")) beta-reduce-repeatedly direct-and-antecedent-inference-strategy simplify (force-substitution "[-1]+n+[-1]*t" "(n-t)-1" (0)) (move-to-sibling 1) simplify (force-substitution "[-1]+m+[-1]*t" "(m-t)-1" (0)) (move-to-sibling 1) simplify (apply-macete-with-minor-premises unique-factorization-lemma-3) direct-and-antecedent-inference-strategy simplify simplify (let-script use-def 1 ((incorporate-antecedent $1) (unfold-single-defined-constant-globally prime%decomposition) direct-and-antecedent-inference-strategy simplify simplify)) ($use-def "prime%decomposition(p,n)") ($use-def "prime%decomposition(q,m)") simplify )))
(def-theorem unique-factorization-theorem "forall(p,q:[zz,zz],m,n,k:zz, 1<=m and 1<=n and prime%decomposition(p,n) and prime%decomposition(q,m) and prod(1,n,p)=prod(1,m,q) implies m=n and forall(k:zz,1<=k and k<=m implies p(k)=q(k)))" (theory h-o-real-arithmetic) (proof ( (let-script use-def 1 ((incorporate-antecedent $1) (unfold-single-defined-constant-globally prime%decomposition) direct-and-antecedent-inference-strategy simplify simplify ) ) direct-and-antecedent-inference-strategy (block (script-comment "`direct-and-antecedent-inference-strategy' at (0 0 0 0)") (cut-with-single-formula "forall(k:zz, 1<=k and k<=n and k<=m implies prod(1,n-k,p)=prod(1,m-k,q))" ) (block (script-comment "`cut-with-single-formula' at (0)") (case-split ("n<=m")) (block (script-comment "`case-split' at (1)") (instantiate-universal-antecedent "with(p:prop,forall(k:zz,p));" ("n")) (simplify-antecedent "with(p:prop,not(p));") (block (script-comment "`instantiate-universal-antecedent' at (0 0 1)") (contrapose "with(q:[zz,zz],m:zz,p:[zz,zz],n:zz, prod(1,n-n,p)=prod(1,m-n,q));" ) (unfold-single-defined-constant (0) prod) simplify (force-substitution "1=prod(1,[-1]*n+m,q)" "prod(1,[-1]*n+m,q)=1" (0)) (block (script-comment "`force-substitution' at (0)") (apply-macete-with-minor-premises unique-factorization-lemma-4) simplify ($use-def "prime%decomposition(q,m)") ) simplify ) ) (block (script-comment "`case-split' at (2)") (instantiate-universal-antecedent "with(p:prop,forall(k:zz,p));" ("m")) (simplify-antecedent "with(m,n:zz,not(n<=m));") (simplify-antecedent "with(m:zz,not(m<=m));") (block (script-comment "`instantiate-universal-antecedent' at (0 0 1)") (contrapose "with(q,p:[zz,zz],m,n:zz,prod(1,n-m,p)=prod(1,m-m,q));") (unfold-single-defined-constant (1) prod) simplify (apply-macete-with-minor-premises unique-factorization-lemma-4) direct-and-antecedent-inference-strategy ($use-def "prime%decomposition(p,n)") simplify ) ) ) (block (script-comment "`cut-with-single-formula' at (1)") direct-and-antecedent-inference-strategy (apply-macete-with-minor-premises unique-factorization-lemma-5) direct-and-antecedent-inference-strategy (apply-macete-with-minor-premises unique-factorization-lemma-2) simplify ) ) (block (script-comment "`direct-and-antecedent-inference-strategy' at (0 0 1 0 0 0 0)") (apply-macete-with-minor-premises unique-factorization-lemma-2) direct-and-antecedent-inference-strategy ($use-def "prime%decomposition(p,n)") ($use-def "prime%decomposition(q,m)") (block (script-comment "`direct-and-antecedent-inference-strategy' at (4)") (force-substitution "k" "n-(n-k)" (0)) (block (script-comment "`force-substitution' at (0)") (force-substitution "k" "m-(n-k)" (1)) (block (script-comment "`force-substitution' at (0)") (apply-macete-with-minor-premises unique-factorization-lemma-5) direct-and-antecedent-inference-strategy simplify simplify simplify ) simplify ) simplify ) ) )))