(def-theorem big-union-recursion "forall(f:[index,sets[uu]], i:index, i in dom{f} implies big_u{f} = f(i) union big_u{lambda(k:index, if(not(k=i), f(k),?sets[uu]))})" (theory family-indicators) (usages transportable-macete) (proof ( (apply-macete-with-minor-premises tr%domain-membership-iff-defined) direct-and-antecedent-inference-strategy (apply-macete-with-minor-premises subseteq-antisymmetry) direct-and-antecedent-inference-strategy (block (script-comment "`direct-and-antecedent-inference-strategy' at (0)") insistent-direct-inference (apply-macete-with-minor-premises union-disjunction-conversion) (apply-macete-with-minor-premises big-union-member) beta-reduce-repeatedly direct-and-antecedent-inference-strategy (instantiate-existential ("i_$0")) (cut-with-single-formula "not(i_$0=i)") simplify (block (script-comment "`cut-with-single-formula' at (1)") (contrapose "with(p:prop,not(p));") simplify)) (block (script-comment "`direct-and-antecedent-inference-strategy' at (1)") insistent-direct-inference (apply-macete-with-minor-premises union-disjunction-conversion) (apply-macete-with-minor-premises big-union-member) beta-reduce-repeatedly direct-and-antecedent-inference-strategy auto-instantiate-existential (block (script-comment "`direct-and-antecedent-inference-strategy' at (0 1 0)") (instantiate-existential ("i_$0")) (cut-with-single-formula "not(i_$0=i)") (contrapose "with(x_$0:uu,f:sets[uu],x_$0 in f);") simplify)) )))
(def-theorem union-special-case "forall(f:[index,sets[uu]], j,k:index, dom{f}=indic{i:index, i=j or i=k} implies big_u{f} = f(j) union f(k))" (theory family-indicators) (usages transportable-macete) (proof ( direct-and-antecedent-inference-strategy extensionality simplify direct-and-antecedent-inference-strategy (cut-with-single-formula "i in dom{f}") (move-to-sibling 1) simplify (block (script-comment "node added by `cut-with-single-formula' at (0)") (contrapose "with(i:index,f:sets[index],i in f);") (backchain "with(f:sets[index],f=f);") (apply-macete-with-minor-premises indicator-facts-macete) simplify (contrapose "with(x_0:uu,k:index,f:[index,sets[uu]],not(x_0 in f(k)));") (antecedent-inference "with(p:prop,p implies p);") (simplify-antecedent "with(p:prop,not(p));") simplify) )))