(def-language schroeder-bernstein-language (embedded-language generic-theory-2) (constants (f "[ind_1,ind_2]") (g "[ind_2,ind_1]")))
(def-theory schroeder-bernstein-theory (language schroeder-bernstein-language) (component-theories generic-theory-2) (axioms (f-totality "total_q{f,[ind_1,ind_2]}" d-r-convergence) (g-totality "total_q{g,[ind_2,ind_1]}" d-r-convergence) (f-injectiveness "injective_q{f}") (g-injectiveness "injective_q{g}")))
(def-recursive-constant (a%seq b%seq) ("lambda(a%seq_0:[nn,sets[ind_1]],b%seq_0:[nn,sets[ind_2]], lambda(i:nn, if(i=0, dom{f}, lambda(dummy:sets[ind_2], if(#(dummy), image{g, dummy}, ?[ind_1,unit%sort])) (b%seq_0(i-1)))))" "lambda(a%seq_0:[nn,sets[ind_1]],b%seq_0:[nn,sets[ind_2]], lambda(i:nn, if(i=0, dom{g}, lambda(dummy:sets[ind_1], if(#(dummy), image{f, dummy}, ?[ind_2,unit%sort])) (a%seq_0(i-1)))))") (theory schroeder-bernstein-theory) (definition-name schroeder-bernstein-set-functions))
(def-translation schroeder-bernstein-symmetry (source schroeder-bernstein-theory) (target schroeder-bernstein-theory) (fixed-theories h-o-real-arithmetic) (sort-pairs (ind_1 ind_2) (ind_2 ind_1)) (constant-pairs (f "g") (g "f") (a%seq "b%seq") (b%seq "a%seq")) force-under-quick-load)
(def-constant last%a%index "lambda(x:ind_1, iota(i:nn, x in (a%seq(i) diff a%seq(1+i))))" (theory schroeder-bernstein-theory))
(def-constant a%inf "indic(x:ind_1, not(#(last%a%index(x))))" (theory schroeder-bernstein-theory))
(def-constant a%even "indic(x:ind_1, even(last%a%index(x)))" (theory schroeder-bernstein-theory))
(def-constant a%odd "indic(x:ind_1, odd(last%a%index(x)))" (theory schroeder-bernstein-theory))
(def-transported-symbols (last%a%index a%inf a%even a%odd) (translation schroeder-bernstein-symmetry) (renamer sb-renamer))
(def-constant h "lambda(x:ind_1, if(x in a%inf or x in a%even, f(x), inverse(g)(x)))" (theory schroeder-bernstein-theory))
(def-theorem a-seq-b-seq-definedness "forall(n:zz, 0<=n implies #(a%seq(n),sets[ind_1]) and #(b%seq(n),sets[ind_2]))" lemma (theory schroeder-bernstein-theory) (proof ((induction integer-inductor ("n")))))
(def-theorem a-seq-definedness "total_q{a%seq,[nn,sets[ind_1]]}" lemma (theory schroeder-bernstein-theory) (usages d-r-convergence) (proof ( insistent-direct-inference (instantiate-theorem a-seq-b-seq-definedness ("x_0")) (simplify-antecedent "with(x_0:nn,not(0<=x_0))") )))
(def-theorem b-seq-definedness "total_q{b%seq,[nn,sets[ind_2]]}" lemma (theory schroeder-bernstein-theory) (usages d-r-convergence) (proof ( insistent-direct-inference (instantiate-theorem a-seq-b-seq-definedness ("x_0")) (simplify-antecedent "with(x_0:nn,not(0<=x_0))") )))
(def-translation schroeder-bernstein->generic-theory-2 (source schroeder-bernstein-theory) (target generic-theory-2) (fixed-theories h-o-real-arithmetic) (assumptions "with(a:sets[ind_1],nonempty_indic_q{a})" "with(b:sets[ind_2],nonempty_indic_q{b})" "with(u:[ind_1,ind_2],a:sets[ind_1],dom{u}=a)" "with(v:[ind_2,ind_1],b:sets[ind_2],dom{v}=b)" "with(u:[ind_1,ind_2],b:sets[ind_2],ran{u} subseteq b)" "with(v:[ind_2,ind_1],a:sets[ind_1],ran{v} subseteq a)" "with(u:[ind_1,ind_2],a:sets[ind_1],injective_on_q{u,a})" "with(v:[ind_2,ind_1],b:sets[ind_2],injective_on_q{v,b})") (sort-pairs (ind_1 (indic "with(a:sets[ind_1],a)")) (ind_2 (indic "with(b:sets[ind_2],b)"))) (constant-pairs (f "with(u:[ind_1,ind_2],u)") (g "with(v:[ind_2,ind_1],v)")) dont-enrich force-under-quick-load (theory-interpretation-check using-simplification))
(def-theorem sb-theorem-lemma-1 "forsome(h_0:[ind_1,ind_2], bijective_q{h_0})" lemma (theory generic-theory-2) (translation schroeder-bernstein->generic-theory-2) (proof ( (assume-theorem h-bijectiveness) auto-instantiate-existential )))
(def-theorem sb-theorem-lemma-2 "forall(a:sets[ind_1], b:sets[ind_2], (a=empty_indic{ind_1} or b=empty_indic{ind_2}) implies ((a embeds b) and (b embeds a) implies (a equinumerous b)))" lemma (theory generic-theory-2) (proof ( direct-inference direct-inference (antecedent-inference "with(p,q:prop, p or q)") (force-substitution "a" "empty_indic{ind_1}" (1)) (apply-macete-with-minor-premises tr%embeds-in-empty-indic) direct-inference (backchain "with(p,q:prop, p and q)") (apply-macete-with-minor-premises equinumerous-to-empty-indic) (force-substitution "b" "empty_indic{ind_2}" (0)) (apply-macete-with-minor-premises embeds-in-empty-indic) direct-inference (backchain "with(p,q:prop, p and q)") (apply-macete-with-minor-premises tr%equinumerous-is-symmetric) (apply-macete-with-minor-premises tr%equinumerous-to-empty-indic) )))
(def-theorem schroeder-bernstein-theorem Remark: This entry is multiply defined. See: [1] [2] "forall(a:sets[ind_1], b:sets[ind_2], (a embeds b) and (b embeds a) implies (a equinumerous b))" (theory generic-theory-2) (usages transportable-macete) (proof ( direct-inference-strategy (case-split ("a=empty_indic{ind_1} or b=empty_indic{ind_2}")) (apply-macete-with-minor-premises sb-theorem-lemma-2) direct-inference (antecedent-inference-strategy (1)) (instantiate-theorem sb-theorem-lemma-1 ("f_$1" "f_$0" "b" "a")) (weaken (1 2 3 4 5 6)) (contrapose "with(p:prop, not(p))") (instantiate-transported-theorem equals-empty-indic-iff-empty () ("a")) simplify (weaken (1 2 3 4 5 6)) (contrapose "with(p:prop, not(p))") (instantiate-transported-theorem equals-empty-indic-iff-empty () ("b")) simplify (weaken (4 5 6 7 8 9 10)) (instantiate-existential ("h_0")) insistent-direct-and-antecedent-inference-strategy (weaken (1 3)) extensionality direct-inference (instantiate-universal-antecedent "with(a,b:sets[ind_1], a subseteq b)" ("x_0")) (instantiate-universal-antecedent "with(p:prop, forall(x_$0:ind_1,p))" ("x_0")) beta-reduce-repeatedly simplify (weaken (1)) (incorporate-antecedent "with(p:prop, p)") simplify-insistently (weaken (0 2 3)) extensionality direct-inference (instantiate-universal-antecedent "with(a,b:sets[ind_2], a subseteq b)" ("x_0")) beta-reduce-repeatedly (raise-conditional (0)) simplify direct-inference (instantiate-universal-antecedent "with(p:prop, forall(x_$0:ind_1,p))" ("x_$0")) (weaken (1 2)) simplify (contrapose "with(p:prop, not(p))") simplify (weaken (1 2)) (weaken (1)) (incorporate-antecedent "with(p:prop, p)") simplify-insistently direct-and-antecedent-inference-strategy (raise-conditional (0)) simplify auto-instantiate-existential (weaken (0 1 5 7 8)) (backchain "with(p:prop, forall(x_1,x_2:ind_1,p))") direct-and-antecedent-inference-strategy )))