(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)
)))