(def-theorem schroeder-bernstein-for-types "forall(f:[ind_2,ind_1],g:[ind_1,ind_2], total_q{g,[ind_1,ind_2]} and total_q{f,[ind_2,ind_1]} and injective_q{f} and injective_q{g} implies forsome(h:[ind_1,ind_2], bijective_q{h}))" (theory generic-theory-2) (proof ( direct-and-antecedent-inference-strategy (cut-with-single-formula "forsome(z:sets[ind_1], lambda(x:sets[ind_1],image(f,image(g,x)^^)^^)(z)=z)") (move-to-sibling 1) (apply-macete-with-minor-premises tr%knaster-fixed-point-theorem) (apply-macete-with-minor-premises monotonicity-of-sb-functional) (block (script-comment "this proves the lattice of subsets satisfies the conditions of knaster's theorem.") direct-and-antecedent-inference-strategy unfold-defined-constants (instantiate-existential ("empty_indic{ind_1}" "indic{x:ind_1,truth}")) simplify-insistently simplify-insistently) (block (script-comment "this uses the fixed point property.") (antecedent-inference "with(p:prop,forsome(z:sets[ind_1],p));") (beta-reduce-antecedent "with(z:sets[ind_1],f:[ind_2,ind_1],g:[ind_1,ind_2], lambda(x:sets[ind_1],image{f,image{g,x}^^}^^)(z)=z);") (move-to-ancestor 1) (apply-macete-with-minor-premises tr%subseteq-antisymmetry) simplify-insistently direct-and-antecedent-inference-strategy (instantiate-existential ("lambda(x:ind_1,if(x in z, g(x), inverse{f}(x)))")) insistent-direct-inference-strategy beta-reduce-repeatedly) (block (script-comment "this proves totality") (case-split ("x_$1 in z")) simplify simplify (apply-macete-with-minor-premises eliminate-iota-macete) (instantiate-universal-antecedent "with(z:sets[ind_1],p:prop, forall(x:ind_1,forall(x_$1:ind_2,p) implies x in z));" ("x_$1")) (instantiate-existential ("x_$3")) (backchain "with(f:[ind_2,ind_1],injective_q{f});")) beta-reduce-repeatedly (case-split ("forsome(x:ind_1, x in z and y_$1=g(x))")) (instantiate-existential ("x")) simplify (instantiate-existential ("f(y_$1)")) (cut-with-single-formula "not(f(y_$1) in z)") simplify (apply-macete-with-minor-premises eliminate-iota-macete) direct-and-antecedent-inference-strategy (backchain "with(f:[ind_2,ind_1],injective_q{f});") (contrapose "with(p:prop,not(p));") (instantiate-universal-antecedent "with(p:prop,z:sets[ind_1], forall(x_$0:ind_1,x_$0 in z implies forall(x_$1:ind_2,p)));" ("f(y_$1)")) (backchain "with(p:prop,forall(x_$3:ind_2,p or p));") insistent-direct-inference beta-reduce-repeatedly (case-split ("x_1 in z" "x_2 in z")) direct-and-antecedent-inference-strategy (backchain "with(g:[ind_1,ind_2],injective_q{g});") (simplify-antecedent "with(i:ind_2,i=i);") simplify (apply-macete-with-minor-premises eliminate-iota-macete) direct-and-antecedent-inference-strategy (instantiate-universal-antecedent "with(z:sets[ind_1],p:prop, forall(x:ind_1,forall(x_$1:ind_2,p) implies x in z));" ("x_2")) (instantiate-universal-antecedent "with(p:prop,forall(x_$0:ind_1,p or p));" ("x_1")) (simplify-antecedent "with(p:prop,not(p));") simplify (apply-macete-with-minor-premises eliminate-iota-macete) direct-and-antecedent-inference-strategy (instantiate-universal-antecedent "with(z:sets[ind_1],p:prop, forall(x:ind_1,forall(x_$1:ind_2,p) implies x in z));" ("x_1")) (instantiate-universal-antecedent "with(p:prop,forall(x_$0:ind_1,p or p));" ("x_2")) (simplify-antecedent "with(p:prop,not(p));") simplify direct-and-antecedent-inference-strategy (cut-with-single-formula "injective_q{inverse{f}}") (backchain "with(f:[ind_2,ind_1],injective_q{inverse{f}});") simplify-insistently (apply-macete-with-minor-premises tr%inverse-is-injective) )))