(def-language language-for-ms-subspace (embedded-languages metric-spaces-language) (sorts (aa pp)))
(def-theory ms-subspace (component-theories metric-spaces) (language language-for-ms-subspace))
(def-theorem () "forall(x,y,z:aa,dist(x,z)<=dist(y,z)+dist(x,y))" lemma (theory ms-subspace) (proof ( (apply-macete-with-minor-premises commutative-law-for-addition) (apply-macete-with-minor-premises triangle-inequality-for-distance) )))
(def-theory-ensemble-instances metric-spaces force-under-quick-load (target-theories ms-subspace ms-subspace) (multiples 1 2) (theory-interpretation-check using-simplification) (sorts (pp aa aa)) (constants (dist "lambda(x,y:aa, dist(x,y))" "lambda(x,y:aa, dist(x,y))")) (special-renamings (ball sub%ball) (open%ball sub%open%ball) (lipschitz%bound sub%lipschitz%bound) (lipschitz%bound%on sub%lipschitz%bound%on) (complete sub%complete) (cauchy sub%cauchy) (lim sub%lim)))
(def-theorem cauchy-extends "forall(s:[zz,aa],cauchy(s) iff sub%cauchy(s))" (proof (unfold-defined-constants)) (usages transportable-macete) (theory ms-subspace))
(def-constant subspace%closed "forall(s:[zz,aa], #(lim(s)) implies #(lim(s),aa))" (theory ms-subspace))
(def-theorem limit-definedness-extends "forall(s:[zz,aa],subspace%closed implies lim(s) == sub%lim(s))" reverse (usages transportable-macete) (proof ((unfold-single-defined-constant (0) subspace%closed) insistent-direct-inference-strategy (antecedent-inference "with(s:[zz,aa],#(lim(s)) or #(sub%lim(s)));") (force-substitution "lim(s)=sub%lim(s)" "sub%lim(s)=lim(s)" (0)) (cut-with-single-formula "forsome(x:aa, lim(s)=x)") (antecedent-inference "with(s:[zz,aa],forsome(x:aa,lim(s)=x));") (backchain "with(x:aa,s:[zz,aa],lim(s)=x);") (apply-macete-with-minor-premises tr%characterization-of-limit) beta-reduce-repeatedly (backchain-backwards "with(x:aa,s:[zz,aa],lim(s)=x);") (cut-with-single-formula "lim(s)=lim(s)") (incorporate-antecedent "with(s:[zz,aa],lim(s)=lim(s));") (apply-macete-with-minor-premises characterization-of-limit) (instantiate-existential ("lim(s)")) simplify (apply-macete-with-minor-premises characterization-of-limit) (cut-with-single-formula "sub%lim(s)=sub%lim(s)") (incorporate-antecedent "with(s:[zz,aa],sub%lim(s)=sub%lim(s));") (apply-macete-with-minor-premises tr%characterization-of-limit) beta-reduce-repeatedly)) (theory ms-subspace))
(def-theorem completeness-extends "complete implies subspace%closed iff sub%complete" reverse (proof ( (unfold-single-defined-constant (0) complete) (unfold-single-defined-constant (0) sub%complete) (force-substitution "sub%cauchy(s)" "cauchy(s)" (0)) direct-and-antecedent-inference-strategy (force-substitution "sub%lim(s)" "lim(s)" (0)) (backchain "forall(s:[zz,pp],cauchy(s) implies #(lim(s)));") (apply-macete-with-minor-premises limit-definedness-extends) (unfold-single-defined-constant (0) subspace%closed) direct-and-antecedent-inference-strategy (instantiate-universal-antecedent "forall(s:[zz,aa],cauchy(s) implies #(sub%lim(s)));" ("s")) (contrapose "with(s:[zz,aa],not(cauchy(s)));") (apply-macete-with-minor-premises convergent-implies-cauchy) (cut-with-single-formula "forsome(x:aa, lim(s)=x)") (antecedent-inference "with(s:[zz,aa],forsome(x:aa,lim(s)=x));") (instantiate-existential ("sub%lim(s)")) (apply-macete-with-minor-premises characterization-of-limit) (cut-with-single-formula "sub%lim(s)=sub%lim(s)") (incorporate-antecedent "with(s:[zz,aa],sub%lim(s)=sub%lim(s));") (apply-macete-with-minor-premises tr%characterization-of-limit) beta-reduce-repeatedly (apply-macete-with-minor-premises cauchy-extends) )) (usages transportable-macete) (theory ms-subspace))
(def-constant subspace%dense "forall(x:pp, forsome(s:[zz,aa], lim(s)=x))" (theory ms-subspace))