(def-theorem metric-separation-for-reals  
    "forall(x,y:rr,x=y 
      iff
  forall(r:rr,0<r implies forsome(z:rr, abs(z-x)<=r and abs(z-y)<=r)))"
    (theory h-o-real-arithmetic)
    (proof
      (
        
        direct-and-antecedent-inference-strategy
        (backchain "with(y,x:rr,x=y);")
        (instantiate-existential ("y"))
        (block 
            (script-comment "proving abs(y-y)=0")
            (unfold-single-defined-constant (0) abs)
            (prove-by-logic-and-simplification 3))
        (instantiate-universal-antecedent "with(p:prop,p);" ("abs(x-y)/3"))
        (contrapose "with(p:prop,p);")
        (block 
            (script-comment "prove 0<abs(x-y)/3")
            (unfold-single-defined-constant (0) abs)
            (case-split ("0<=x-y"))
            simplify
            simplify)
        (block 
            (script-comment "the distance from z_$0 to both x and y is less 
                                              than a third of the distance between x and y")
            (apply-macete-with-minor-premises point-separation-for-rr-distance)
            beta-reduce-repeatedly
            (cut-with-single-formula "abs(x-y)<=abs(z_$0-y)+abs(z_$0-x)")
            simplify)
        (weaken (0 1))
        (force-substitution "x-y" "(x-z_$0)+(z_$0-y)" (0))
        (force-substitution "abs(z_$0-y)+abs(z_$0-x)" "abs(x-z_$0)+abs(z_$0-y)" (0))
        (apply-macete-with-minor-premises triangle-inequality)
        (block 
            (script-comment "another triviality.")
            (force-substitution "z_$0-x" "[-1]*(x-z_$0)" (0))
            (apply-macete-with-minor-premises absolute-value-product)
            (apply-macete absolute-value-non-positive)
            simplify
            simplify)
        simplify
        )))


(def-constant lim%rr 
    "lambda(s:[zz,rr],iota(x:rr, forall(eps:rr,0<eps implies forsome(n:zz, 
                forall(p:zz, n<=p implies abs(x-s(p))<=eps)))))"
    (theory h-o-real-arithmetic))


(def-theorem characterization-of-real-limit 
    "forall(s:[zz,rr],x:rr,lim%rr(s)=x iff forall(eps:rr,0<eps implies forsome(n:zz, 
forall(p:zz, n<=p implies abs(x-s(p))<=eps))))"
    (theory h-o-real-arithmetic)
    (proof
      (
        (unfold-single-defined-constant (0) lim%rr)
        direct-and-antecedent-inference-strategy
        (contrapose "with(x,r:rr,r=x);")
        (block 
            (eliminate-defined-iota-expression 0 w)
            (contrapose "with(p:prop,forall(eps:rr,0<eps implies forsome(n:zz,p)));")
            auto-instantiate-existential
            (backchain "with(x,w:rr,w=x);")
            (backchain "with(p:prop,forall(n:zz,forsome(p:zz,with(p:prop,p))));"))
        (apply-macete-with-minor-premises eliminate-iota-macete)
        direct-and-antecedent-inference-strategy
        (block 
            (script-comment "uniqueness.")
            (apply-macete-with-minor-premises metric-separation-for-reals)
            direct-and-antecedent-inference-strategy
              
            (instantiate-universal-antecedent
              "with(p:prop,forall(eps:rr,0<eps implies forsome(n:zz,p)));"
              ("r"))
            (instantiate-universal-antecedent
              "with(p:prop,forall(eps:rr,0<eps implies forsome(n:zz,p)));"
              ("r"))
            (instantiate-existential ("s(max(n,n_$0))"))
            (cut-with-single-formula "forall(x,y:rr,abs(x-y)=abs(y-x))")
            (backchain "with(p:prop,forall(x,y:rr,p));")
            (backchain "with(r:rr,s:[zz,rr],b_$0:rr,n:zz,
    forall(p:zz,n<=p implies abs(b_$0-s(p))<=r));")
            (apply-macete-with-minor-premises maximum-1st-arg)
            (cut-with-single-formula "abs(b_$0-s(max(n,n_$0)))<=r")
            (script-comment "we needed definedness here.")
            (force-substitution "y-x" "[-1]*(x-y)" (0))
            (apply-macete-with-minor-premises absolute-value-product)
            (apply-macete absolute-value-non-positive)
            simplify
            simplify
            (cut-with-single-formula "forall(x,y:rr, abs(x-y)=abs(y-x))")
            (backchain "with(p:prop,forall(x,y:rr,p));")
            (backchain "with(r:rr,s:[zz,rr],x:rr,n_$0:zz,
    forall(p:zz,n_$0<=p implies abs(x-s(p))<=r));")
            (apply-macete-with-minor-premises maximum-2nd-arg)
            (cut-with-single-formula "abs(b_$0-s(max(n,n_$0)))<=r")
            (backchain "with(r:rr,s:[zz,rr],b_$0:rr,n:zz,
    forall(p:zz,n<=p implies abs(b_$0-s(p))<=r));")
            (apply-macete-with-minor-premises maximum-1st-arg))
        )))


(def-theorem abs-free-characterization-of-real-limit 
    "forall(s:[zz,rr],x:rr,
          lim%rr(s)=x
            iff 
          forall(eps:rr,
              0<eps
                implies 
              forsome(n:zz,
                  forall(p:zz,
                      n<=p implies x-eps<=s(p) and s(p)<=x+eps))))"
    (theory h-o-real-arithmetic)
    (proof
      (
        (apply-macete-with-minor-premises characterization-of-real-limit)
        (force-substitution "abs(x-s(p))<=eps" "x-eps<=s(p) and s(p)<=x+eps" (0))
        (case-split ("#(s(p))"))
        (unfold-single-defined-constant (0) abs)
        (case-split ("s(p)<=x"))
        simplify
        simplify
        direct-and-antecedent-inference-strategy
        )))


(def-theorem existence-of-real-limit 
    "forall(s:[zz,rr],
        #(lim%rr(s))
          iff 
        forsome(x:rr,
            forall(eps:rr,
                0<eps
                  implies 
                forsome(n:zz,
                    forall(p:zz,n<=p implies abs(x-s(p))<=eps)))))"
    (theory h-o-real-arithmetic)
    (proof
      (
        direct-and-antecedent-inference-strategy
        (cut-with-single-formula "lim%rr(s)=lim%rr(s)")
        (incorporate-antecedent "with(s:[zz,rr],lim%rr(s)=lim%rr(s));")
        (apply-macete-with-minor-premises characterization-of-real-limit)
        direct-inference
        (instantiate-existential ("lim%rr(s)"))
        (cut-with-single-formula "lim%rr(s)=x")
        (apply-macete-with-minor-premises characterization-of-real-limit)
        )
      ))


(def-theorem homogeneity-of-real-limit 
    "forall(a:[zz,rr], b:rr, #(lim%rr(a)) implies 
                    lim%rr(lambda(n:zz,b*a(n)))=b*lim%rr(a))"
    (theory h-o-real-arithmetic)
    (proof
      (
        direct-and-antecedent-inference-strategy
        (cut-with-single-formula "forsome(s:rr, lim%rr(a)=s)")
        (antecedent-inference "with(a:[zz,rr],forsome(s:rr,lim%rr(a)=s));")
        (backchain "with(s:rr,a:[zz,rr],lim%rr(a)=s);")
        (apply-macete-with-minor-premises characterization-of-real-limit)
        direct-and-antecedent-inference-strategy
        beta-reduce-with-minor-premises
        (force-substitution "b*s-b*a(p)" "b*(s-a(p))" (0))
        (apply-macete-with-minor-premises absolute-value-product)
        (case-split ("abs(b)=0"))
        simplify
        (incorporate-antecedent "with(a:[zz,rr],#(lim%rr(a)));")
        (apply-macete-with-minor-premises existence-of-real-limit)
        direct-and-antecedent-inference-strategy
        (instantiate-universal-antecedent 
          "with(p:prop, forall(eps:rr, 0<eps implies p))" ("1"))
        (simplify-antecedent "not(0<1);")
        (instantiate-existential ("n"))
        (instantiate-universal-antecedent "with(a:[zz,rr],x:rr,n:zz,
    forall(p:zz,n<=p implies abs(x-a(p))<=1));" ("p"))
        (force-substitution "abs(b)*abs(s-a(p))<=eps" "abs(s-a(p))<=eps/abs(b)" (0))
        (incorporate-antecedent "with(s:rr,a:[zz,rr],lim%rr(a)=s);")
        (apply-macete-with-minor-premises characterization-of-real-limit)
        direct-and-antecedent-inference-strategy
        (instantiate-universal-antecedent 
            "with(p:prop, forall(eps:rr, 0<eps implies p))" ("eps/abs(b)"))
        (contrapose "with(b,eps:rr,not(0<eps/abs(b)));")
        simplify
        (cut-with-single-formula "0<abs(b)")
        simplify
        (apply-macete-with-minor-premises positivity-of-inverse)
        simplify
        (apply-macete-with-minor-premises fractional-expression-manipulation)
        simplify
        simplify
        (instantiate-existential ("lim%rr(a)"))
        )))


(def-theorem lim%rr-negative 
    "forall(a:[zz,rr], b:rr,
                    lim%rr(lambda(n:zz,[-1]*a(n)))==-lim%rr(a))"  
    (theory h-o-real-arithmetic)
    (proof
      (
        insistent-direct-inference-strategy
        (antecedent-inference "with(a:[zz,rr],
    #(lim%rr(lambda(n:zz,[-1]*a(n)))) or #(-lim%rr(a)));")
        (force-substitution "a" "lambda(n:zz,[-1]*lambda(n:zz,[-1]*a(n))(n))" (1))
        (apply-macete-locally homogeneity-of-real-limit (0) "lim%rr(lambda(n:zz,[-1]*lambda(n:zz,[-1]*a(n))(n)))")
        simplify
        insistent-direct-inference
        extensionality
        direct-and-antecedent-inference-strategy
        beta-reduce-repeatedly
        simplify
        (apply-macete-with-minor-premises homogeneity-of-real-limit)
        simplify
        )))


(def-theorem lim%rr-preserves-upper-bound 
    "forall(a:[nn,rr], b:rr, forall(i:nn, a(i)<=b) and #(lim%rr(a)) implies lim%rr(a)<=b)"
    (theory h-o-real-arithmetic)
    (proof
      (
        direct-and-antecedent-inference-strategy
        (cut-with-single-formula "forsome(s:rr, lim%rr(a)=s)")
        (antecedent-inference "with(a:[nn,rr],forsome(s:rr,lim%rr(a)=s));")
        (backchain "with(s:rr,a:[nn,rr],lim%rr(a)=s);")
        (incorporate-antecedent "with(s:rr,a:[nn,rr],lim%rr(a)=s);")
        (apply-macete-with-minor-premises abs-free-characterization-of-real-limit)
        direct-and-antecedent-inference-strategy
        (instantiate-universal-antecedent
          "with(p:prop,  forall(eps:rr, 0<eps implies p))"
          ("(s-b)/2"))
        simplify
        (instantiate-universal-antecedent "with(a:[nn,rr],b,s:rr,n_$0:zz,
    forall(p_$0:zz,
        n_$0<=p_$0
          implies 
        s-(s-b)/2<=a(p_$0) and a(p_$0)<=s+(s-b)/2));" ("n_$0"))
        (simplify-antecedent "with(n_$0:zz,not(n_$0<=n_$0));")
        (instantiate-universal-antecedent "with(b:rr,a:[nn,rr],forall(i:nn,a(i)<=b));" ("n_$0"))
        simplify
        (instantiate-existential ("lim%rr(a)"))
        )))


(def-theorem lim%rr-preserves-lower-bound 
    "forall(a:[nn,rr], b:rr, forall(i:nn, b<=a(i)) and #(lim%rr(a)) 
                            implies
                  b<=lim%rr(a))"
    (theory h-o-real-arithmetic)
    (proof
      (
        direct-and-antecedent-inference-strategy
        (cut-with-single-formula "lim%rr(lambda(n:zz,[-1]*a(n)))<=-b")
        (incorporate-antecedent "with(b:rr,a:[nn,rr],lim%rr(lambda(n:zz,[-1]*a(n)))<=-b);")
        (apply-macete-with-minor-premises homogeneity-of-real-limit)
        simplify
        (apply-macete-with-minor-premises lim%rr-preserves-upper-bound)
        direct-and-antecedent-inference-strategy
        simplify
        (apply-macete-with-minor-premises homogeneity-of-real-limit)
        simplify
        (weaken (0 1))
        sort-definedness
        direct-and-antecedent-inference-strategy
        (case-split ("#(xx_0,zz)"))
        (beta-reduce-antecedent "with(xx_0:ind,a:[nn,rr],#(lambda(n:zz,[-1]*a(n))(xx_0)));")
        )))


(def-constant bounded%non%decreasing%seq 
    "lambda(a:[nn,rr], forsome(b:rr, forall(n:nn, a(n)<=a(n+1) and a(n)<=b)))"
    (theory h-o-real-arithmetic))


(def-theorem bounded%non%decreasing%seq-convergent 
    "forall(a:[nn,rr], bounded%non%decreasing%seq(a) 
                                                implies
                                          forall(n:nn, a(n)<=lim%rr(a)))"
    (theory h-o-real-arithmetic)
    (proof
      (
        (unfold-single-defined-constant (0) bounded%non%decreasing%seq)
        direct-and-antecedent-inference-strategy
        (instantiate-theorem completeness ("lambda(x:rr, forsome(n:nn, x=a(n)))"))
        (contrapose "with(a:[nn,rr],
    forall(x_0:rr,not(lambda(x:rr,forsome(n:nn,x=a(n)))(x_0))));")
        (instantiate-existential ("a(0)"))
        beta-reduce-with-minor-premises
        (instantiate-existential ("0"))
        simplify
        (instantiate-universal-antecedent "with(b:rr,a:[nn,rr],forall(n:nn,a(n)<=a(n+1) and a(n)<=b));" ("0"))
        (beta-reduce-antecedent "with(a:[nn,rr],
    forall(alpha:rr,
        forsome(theta:rr,
            lambda(x:rr,forsome(n:nn,x=a(n)))(theta)
              and 
            not(theta<=alpha))));")
        (contrapose "with(a:[nn,rr],
    forall(alpha:rr,
        forsome(theta:rr,
            forsome(n:nn,theta=a(n)) and not(theta<=alpha))));")
        (instantiate-existential ("b"))
        (antecedent-inference "with(a:[nn,rr],theta:rr,forsome(n:nn,theta=a(n)));")
        (backchain "with(n_$0:nn,a:[nn,rr],theta:rr,theta=a(n_$0));")
        (beta-reduce-antecedent "with(gamma:rr,a:[nn,rr],
    forall(theta:rr,
        lambda(x:rr,forsome(n:nn,x=a(n)))(theta)
          implies 
        theta<=gamma));")
        (cut-with-single-formula "lim%rr(a)=gamma")
        (backchain "with(gamma:rr,a:[nn,rr],lim%rr(a)=gamma);")
        (backchain "with(gamma:rr,a:[nn,rr],
    forall(theta:rr,
        forsome(n:nn,theta=a(n)) implies theta<=gamma));")
        (instantiate-existential ("n"))
        (apply-macete-with-minor-premises abs-free-characterization-of-real-limit)
        direct-and-antecedent-inference-strategy
        (beta-reduce-antecedent "with(gamma:rr,a:[nn,rr],
    forall(gamma_1:rr,
        forall(theta:rr,
            lambda(x:rr,forsome(n:nn,x=a(n)))(theta)
              implies 
            theta<=gamma_1)
          implies 
        gamma<=gamma_1));")
        (instantiate-universal-antecedent "with(gamma:rr,a:[nn,rr],
    forall(gamma_1:rr,
        forall(theta:rr,
            forsome(n:nn,theta=a(n)) implies theta<=gamma_1)
          implies 
        gamma<=gamma_1));" ("gamma-eps"))
        (contrapose "with(eps,gamma,theta_$0:rr,not(theta_$0<=gamma-eps));")
        (backchain "with(n_$0:nn,a:[nn,rr],theta_$0:rr,theta_$0=a(n_$0));")
        (instantiate-universal-antecedent "with(a:[nn,rr],eps,gamma:rr,
    forall(n:zz,
        forsome(p:zz,
            n<=p
              and 
            (not(gamma-eps<=a(p)) or not(a(p)<=gamma+eps)))));" ("n_$0"))
        (cut-with-single-formula "a(n_$0)<=a(p)")
        simplify
        (weaken (0 2 3 4))
        (induction integer-inductor ("p"))
        (instantiate-universal-antecedent "with(b:rr,a:[nn,rr],forall(n:nn,a(n)<=a(n+1) and a(n)<=b));" ("t"))
        simplify
        (instantiate-universal-antecedent "with(gamma:rr,a:[nn,rr],
    forall(theta:rr,
        forsome(n:nn,theta=a(n)) implies theta<=gamma));" ("a(p)"))
        (instantiate-universal-antecedent "with(p:zz,a:[nn,rr],forall(n_$0:nn,not(a(p)=a(n_$0))));" ("p"))
        (simplify-antecedent "with(p:zz,a:[nn,rr],not(a(p)=a(p)));")
        (instantiate-universal-antecedent "with(b:rr,a:[nn,rr],forall(n:nn,a(n)<=a(n+1) and a(n)<=b));" ("p"))
        (apply-macete-with-minor-premises nn-defining-axiom_h-o-real-arithmetic)
        simplify
        (cut-with-single-formula "0<=n_$0")
        simplify
        (apply-macete-with-minor-premises nn-in-quasi-sort_h-o-real-arithmetic)
        (apply-macete-with-minor-premises nn-defining-axiom_h-o-real-arithmetic)
        simplify
        (cut-with-single-formula "0<=n_$0")
        simplify
        (apply-macete-with-minor-premises nn-in-quasi-sort_h-o-real-arithmetic)
        (simplify-antecedent "with(eps,gamma:rr,p:zz,a:[nn,rr],not(a(p)<=gamma+eps));")
        (cut-with-single-formula "a(n_$0)<=a(p)")
        (weaken (0 2 3 4))
        (simplify-antecedent "with(eps,gamma:rr,gamma<=gamma-eps);")
        )))


(def-constant bounded%non%increasing%seq 
    "lambda(a:[nn,rr], forsome(b:rr, forall(n:nn, a(n+1)<=a(n) and b<=a(n))))"
    (theory h-o-real-arithmetic))


(def-theorem bounded%nonincreasing%seq-convergent 
    "forall(a:[nn,rr], bounded%non%increasing%seq(a) 
                                                implies
                                          forall(n:nn, lim%rr(a)<=a(n)))"
    (theory h-o-real-arithmetic)
    (proof
      (
        (unfold-single-defined-constant (0) bounded%non%increasing%seq)
        direct-and-antecedent-inference-strategy
        (cut-with-single-formula "lambda(n:zz,[-1]*a(n))(n)<=lim%rr(lambda(n:zz,[-1]*a(n))) ")
        (cut-with-single-formula "#(lim%rr(lambda(n:zz,[-1]*a(n))))")
        (incorporate-antecedent "with(n:nn,a:[nn,rr],
    lambda(n:zz,[-1]*a(n))(n)<=lim%rr(lambda(n:zz,[-1]*a(n))));")
        (apply-macete-with-minor-premises homogeneity-of-real-limit)
        simplify
        (incorporate-antecedent "with(a:[nn,rr],#(lim%rr(lambda(n:zz,[-1]*a(n)))));")
        (apply-macete-with-minor-premises lim%rr-negative)
        simplify
        (apply-macete-with-minor-premises bounded%non%decreasing%seq-convergent)
        (unfold-single-defined-constant (0) bounded%non%decreasing%seq)
        beta-reduce-with-minor-premises
        (instantiate-existential ("-b"))
        beta-reduce-repeatedly
        simplify
        (instantiate-universal-antecedent "with(b:rr,a:[nn,rr],forall(n:nn,a(n+1)<=a(n) and b<=a(n)));" ("n_$0"))
        simplify
        beta-reduce-repeatedly
        simplify
        (weaken (0))
        sort-definedness
        direct-and-antecedent-inference-strategy
        (case-split ("#(xx_0,zz)"))
        simplify
        )))


(def-theorem additivity-of-real-limit 
    "forall(a,b:[zz,rr],  #(lim%rr(a)) and #(lim%rr(b)) implies 
                    lim%rr(lambda(n:zz,a(n)+b(n)))=lim%rr(a)+lim%rr(b))"
    (theory h-o-real-arithmetic)
    (proof
      (
        direct-and-antecedent-inference-strategy
        (cut-with-single-formula "forsome(s,t:rr, lim%rr(a)=s and lim%rr(b)=t)")
        (antecedent-inference "with(b,a:[zz,rr],
    forsome(s,t:rr,lim%rr(a)=s and lim%rr(b)=t));")
        (backchain "with(t:rr,b:[zz,rr],s:rr,a:[zz,rr],
    lim%rr(a)=s and lim%rr(b)=t);")
        (backchain "with(t:rr,b:[zz,rr],s:rr,a:[zz,rr],
    lim%rr(a)=s and lim%rr(b)=t);")
        (apply-macete-with-minor-premises abs-free-characterization-of-real-limit)
        direct-and-antecedent-inference-strategy
        beta-reduce-repeatedly
        (incorporate-antecedent "with(t:rr,b:[zz,rr],s:rr,a:[zz,rr],
    lim%rr(a)=s and lim%rr(b)=t);")
        (apply-macete-with-minor-premises abs-free-characterization-of-real-limit)
        direct-and-antecedent-inference-strategy
        (instantiate-universal-antecedent "with(p:prop,  forall(eps:rr, 0<eps  implies p))" ("eps/2"))
        (simplify-antecedent "with(eps:rr,not(0<eps/2));")
        (instantiate-universal-antecedent "with(p:prop,  forall(eps:rr, 0<eps  implies p))" ("eps/2"))
        (simplify-antecedent "with(eps:rr,not(0<eps/2));")
        (cut-with-single-formula "forsome(s:zz, n_$1<=s and n_$0<=s)")
        (antecedent-inference "with(n_$0,n_$1:zz,forsome(s:zz,n_$1<=s and n_$0<=s));")
        (instantiate-existential ("s_$0"))
        (instantiate-universal-antecedent "with(a:[zz,rr],eps,s:rr,n_$1:zz,
    forall(p_$0:zz,
        n_$1<=p_$0 implies 
        s-eps/2<=a(p_$0) and a(p_$0)<=s+eps/2));" ("p"))
        (simplify-antecedent "with(p,n_$1:zz,not(n_$1<=p));")
        (instantiate-universal-antecedent "with(b:[zz,rr],eps,t:rr,n_$0:zz,
    forall(p_$0:zz,
        n_$0<=p_$0 implies 
        t-eps/2<=b(p_$0) and b(p_$0)<=t+eps/2));" ("p"))
        (simplify-antecedent "with(p,n_$0:zz,not(n_$0<=p));")
        simplify
        (instantiate-universal-antecedent "with(a:[zz,rr],eps,s:rr,n_$1:zz,
    forall(p_$0:zz,
        n_$1<=p_$0 implies 
        s-eps/2<=a(p_$0) and a(p_$0)<=s+eps/2));" ("p"))
        (simplify-antecedent "with(p,n_$1:zz,not(n_$1<=p));")
        (instantiate-universal-antecedent "with(b:[zz,rr],eps,t:rr,n_$0:zz,
    forall(p_$0:zz,
        n_$0<=p_$0 implies 
        t-eps/2<=b(p_$0) and b(p_$0)<=t+eps/2));" ("p"))
        (simplify-antecedent "with(p,n_$0:zz,not(n_$0<=p));")
        simplify
        (instantiate-existential ("max(n_$1,n_$0)"))
        simplify
        simplify
        (instantiate-existential ("lim%rr(a)" "lim%rr(b)"))
        )))


(def-theorem real-convergent-bounded 
    "forall(a:[zz,rr], #(lim%rr(a))  
          implies 
      forsome(u:rr, k:zz, forall(n:zz, k<=n implies  abs(a(n))<=u)))"
    (theory h-o-real-arithmetic)
    (proof
      (
        (apply-macete-with-minor-premises existence-of-real-limit)
        direct-and-antecedent-inference-strategy
        (instantiate-universal-antecedent "with(p:prop,
    forall(eps:rr,  0<eps implies p))" ("1"))
        (simplify-antecedent "not(0<1);")
        (instantiate-existential ("abs(x)+1" "n"))
        (cut-with-single-formula "abs(a(n_$0))-abs(x)<=abs(x-a(n_$0))")
        (instantiate-universal-antecedent "with(q:prop,forall(p:zz,q))" ("n_$0"))
        simplify
        (cut-with-single-formula "forall(a,b:rr, abs(a)-abs(b)<=abs(b-a))")
        (backchain "forall(a,b:rr,abs(a)-abs(b)<=abs(b-a));")
        (instantiate-universal-antecedent "with(a:[zz,rr],x:rr,n:zz,
    forall(p:zz,n<=p implies abs(x-a(p))<=1));" ("n_$0"))
        (weaken (0 1))
        unfold-defined-constants
        (prove-by-logic-and-simplification 3)
        )))


(def-theorem limit-of-constants 
    "forall(s:rr, lim%rr(lambda(k:zz, s))=s)"
    (theory h-o-real-arithmetic)
    (proof
      (
        (apply-macete-with-minor-premises abs-free-characterization-of-real-limit)
        direct-and-antecedent-inference-strategy
        (instantiate-existential ("0"))
        beta-reduce-repeatedly
        simplify
        simplify
        )))


(def-theorem real-limit-square 
    "forall(a:[zz,rr],  #(lim%rr(a))  implies 
                    lim%rr(lambda(n:zz,a(n)^2))=lim%rr(a)^2)"
    (theory h-o-real-arithmetic)
    (proof
      (
        direct-and-antecedent-inference-strategy
        (cut-with-single-formula "forsome(s:rr,lim%rr(a)=s)")
        (move-to-sibling 1)
        (instantiate-existential ("lim%rr(a)"))
        (antecedent-inference "with(a:[zz,rr],forsome(s:rr,lim%rr(a)=s));")
        (backchain-repeatedly ("with(s:rr,a:[zz,rr],lim%rr(a)=s);"))
        (incorporate-antecedent "with(s:rr,a:[zz,rr],lim%rr(a)=s);")
        (apply-macete-with-minor-premises characterization-of-real-limit)
        direct-and-antecedent-inference-strategy
        (cut-with-single-formula "forsome(m:rr,p:zz, forall(k:zz,p<=k implies abs(s+a(k))<=m))")
        (move-to-sibling 1)
        (force-substitution "s+a(k)" "lambda(k:zz,s+a(k))(k)" (0))
        (move-to-sibling 1)
        beta-reduce-repeatedly
        (apply-macete-with-minor-premises real-convergent-bounded)
        (force-substitution "s" "lambda(k:zz,s)(k)" (0))
        (apply-macete-with-minor-premises additivity-of-real-limit)
        simplify
        (apply-macete-with-minor-premises limit-of-constants)
        simplify
        beta-reduce-repeatedly
        (antecedent-inference "with(a:[zz,rr],s:rr,
    forsome(m:rr,p:zz,
        forall(k:zz,p<=k implies abs(s+a(k))<=m)));")
        (instantiate-universal-antecedent "with(a:[zz,rr],s:rr,
    forall(eps:rr,
        0<eps
          implies 
        forsome(n:zz,
            forall(p:zz,n<=p implies abs(s-a(p))<=eps))));" ("eps/max(1,m)"))
        (contrapose "with(m,eps:rr,not(0<eps/max(1,m)));")
        (apply-macete-with-minor-premises fractional-expression-manipulation)
        simplify
        (instantiate-existential ("max(n_$0,p)"))
        (force-substitution "s^2-a(p_$0)^2" "(s-a(p_$0))*(s+a(p_$0))" (0))
        (move-to-sibling 1)
        (cut-with-single-formula "#(a(p_$0))")
        simplify
        (instantiate-universal-antecedent "with(m:rr,a:[zz,rr],s:rr,p:zz,
    forall(k:zz,p<=k implies abs(s+a(k))<=m));" ("p_$0"))
        (cut-with-single-formula "p<=max(n_$0,p)")
        simplify
        (apply-macete-with-minor-premises maximum-2nd-arg)
        (apply-macete-with-minor-premises transitivity-of-<=)
        (instantiate-existential ("(eps/max(1,m))*m"))
        (apply-macete-with-minor-premises absolute-value-product)
        (apply-macete-with-minor-premises monotone-product-lemma)
        direct-and-antecedent-inference-strategy
        (apply-macete-with-minor-premises non-negativity-of-absolute-value)
        (backchain "with(m,eps:rr,a:[zz,rr],s:rr,n_$0:zz,
    forall(p_$0:zz,
        n_$0<=p_$0 implies abs(s-a(p_$0))<=eps/max(1,m)));")
        (cut-with-single-formula "n_$0<=max(n_$0,p)")
        simplify
        (apply-macete-with-minor-premises maximum-1st-arg)
        (apply-macete-with-minor-premises non-negativity-of-absolute-value)
        (backchain "with(m:rr,a:[zz,rr],s:rr,p:zz,
    forall(k:zz,p<=k implies abs(s+a(k))<=m));")
        (cut-with-single-formula "p<=max(n_$0,p)")
        simplify
        (apply-macete-with-minor-premises maximum-2nd-arg)
        (apply-macete-with-minor-premises fractional-expression-manipulation)
        simplify
        )))


(def-theorem product-in-terms-of-squares-lemma 
  Remark: This entry is multiply defined. See:  [1] [2]
    "forall(a,b:rr, a*b=1/2*((a+b)^2+[-1]*(a^2+b^2)))"
    
    (proof
      (
        simplify
        ))
    (theory h-o-real-arithmetic))

(def-schematic-macete abstraction-builder-for-sums-of-sequences
    "with(a,b:rr,
              lim%rr(lambda(x:zz,a+b))=lim%rr(lambda(x:zz,lambda(x:zz,a)(x)+lambda(x:zz,b)(x))))"
    (theory h-o-real-arithmetic)
    null)

(def-schematic-macete abstraction-builder-for-products-of-sequences
    "with(a,b:rr,
              lim%rr(lambda(x:zz,a*b))=lim%rr(lambda(x:zz,lambda(x:zz,a)(x)*lambda(x:zz,b)(x))))"
    (theory h-o-real-arithmetic)
    null)

(def-schematic-macete abstraction-builder-for-squares-of-sequences
    "with(a:rr, lim%rr(lambda(x:zz,a^2))=lim%rr(lambda(x:zz,lambda(x:zz,a)(x)^2)))"
    (theory h-o-real-arithmetic)
    null)


(def-compound-macete abstraction-for-sequences 
    (series
      (sound
        abstraction-builder-for-sums-of-sequences
        beta-reduce-repeatedly
        beta-reduce-repeatedly)
      (sound
        abstraction-builder-for-products-of-sequences
        beta-reduce-repeatedly
        beta-reduce-repeatedly)
      (sound
        abstraction-builder-for-squares-of-sequences
        beta-reduce-repeatedly
        beta-reduce-repeatedly)))


(def-theorem homogeneity-of-real-limit-corollary 
    "forall(a:[zz,rr], s,b:rr, b*lim%rr(a)=s implies 
                                                          lim%rr(lambda(n:zz,b*a(n)))=s)"
    (theory h-o-real-arithmetic)
    (proof
      (
        (apply-macete-with-minor-premises homogeneity-of-real-limit)
        )))


(def-theorem additivity-of-real-limit-corollary 
    "forall(a,b:[zz,rr], s:rr, lim%rr(a)+lim%rr(b)=s
                                                  implies 
                                                  lim%rr(lambda(n:zz,a(n)+b(n)))=s)"
    (theory h-o-real-arithmetic)
    (proof
      (
        (apply-macete-with-minor-premises additivity-of-real-limit)
        )))


(def-theorem real-limit-square-corollary 
    "forall(a:[zz,rr], s:rr, lim%rr(a)^2=s
                        implies 
                    lim%rr(lambda(n:zz,a(n)^2))=s)"
    (theory h-o-real-arithmetic)
    (proof
      (
        (apply-macete-with-minor-premises real-limit-square)
        )))


(def-theorem equal-arguments-implies-equal 
    "forall(op:[rr,rr,rr],a,b,c,d:rr, a=c and b=d and #(op(a,b)) implies op(a,b)=op(c,d))"
    (theory h-o-real-arithmetic)
    (proof
      (
        simplify
        )))


(def-theorem real-limit-product 
    "forall(a,b:[zz,rr],  #(lim%rr(a))  and  #(lim%rr(b))implies 
                    lim%rr(lambda(n:zz,a(n)*b(n)))=lim%rr(a)*lim%rr(b))"
    (theory h-o-real-arithmetic)
    (proof
      (
        direct-and-antecedent-inference-strategy
        (apply-macete-with-minor-premises product-in-terms-of-squares-lemma)
        (force-substitution "((a(n)+b(n))^2+[-1]*(a(n)^2+b(n)^2))" "lambda(n:zz,((a(n)+b(n))^2+[-1]*(a(n)^2+b(n)^2)))(n)" (0))
        (move-to-sibling 1)
        beta-reduce-repeatedly
        (apply-macete homogeneity-of-real-limit-corollary)
        (apply-macete-with-minor-premises equal-arguments-implies-equal)
        direct-and-antecedent-inference-strategy
        simplify
        (apply-macete-with-minor-premises abstraction-for-sequences)
        (apply-macete additivity-of-real-limit-corollary)
        (apply-macete-with-minor-premises equal-arguments-implies-equal)
        direct-and-antecedent-inference-strategy
        (apply-macete-with-minor-premises abstraction-for-sequences)
        (apply-macete real-limit-square-corollary)
        (apply-macete-with-minor-premises abstraction-for-sequences)
        (apply-macete-with-minor-premises equal-arguments-implies-equal)
        direct-and-antecedent-inference-strategy
        beta-reduce-repeatedly
        (weaken (0))
        (apply-macete-with-minor-premises additivity-of-real-limit-corollary)
        simplify
        definedness
        (force-substitution "(a(n)^2+b(n)^2)" "lambda(n:zz,(a(n)^2+b(n)^2))(n)" (0))
        (apply-macete homogeneity-of-real-limit-corollary)
        (apply-macete-with-minor-premises equal-arguments-implies-equal)
        direct-and-antecedent-inference-strategy
        (weaken (2 1 0))
        (apply-macete-with-minor-premises abstraction-for-sequences)
        (apply-macete additivity-of-real-limit-corollary)
        (apply-macete equal-arguments-implies-equal)
        direct-and-antecedent-inference-strategy
        (apply-macete real-limit-square-corollary)
        simplify
        (weaken (0))
        (apply-macete real-limit-square-corollary)
        simplify
        definedness
        definedness
        beta-reduce-repeatedly
        definedness
        definedness
        )))