(def-theorem contains-an-element-implies-non-empty "forall(x:uu, s:sets[uu], x in s implies nonempty_indic_q{s})" (theory indicators) (usages transportable-macete) (proof ( simplify )))
(def-theorem is-singleton-implies-non-empty "forall(a:uu, s:sets[uu], nonempty_indic_q{indic{x:uu, x=a}})" (theory indicators) (usages transportable-macete) (proof ( direct-and-antecedent-inference-strategy (instantiate-existential ("a")) (apply-macete-with-minor-premises meaning-of-indic-from-pred-element) simplify )))
(def-theorem is-pair-implies-non-empty "forall(a,b:uu, s:sets[uu], nonempty_indic_q{indic{x:uu, x=a or x=b}})" (theory indicators) (usages transportable-macete) (proof ( direct-and-antecedent-inference-strategy (instantiate-existential ("a")) (apply-macete-with-minor-premises meaning-of-indic-from-pred-element) simplify )))
(def-theorem is-triple-implies-non-empty "forall(a,b,c:uu, s:sets[uu], nonempty_indic_q{indic{x:uu, x=a or x=b or x=c}})" (theory indicators) (usages transportable-macete) (proof ( direct-and-antecedent-inference-strategy (instantiate-existential ("a")) (apply-macete-with-minor-premises meaning-of-indic-from-pred-element) simplify )))
(def-script empty-set-handler 0 ( (let-macete non-empty-composite-macete (series tr%is-singleton-implies-non-empty tr%is-pair-implies-non-empty tr%is-triple-implies-non-empty)) (if (matches? "with(p:prop, p)" "with(x:points, l:sets[points], x in l)") (auto-instantiate-universal-antecedent "with(l:sets[points],empty_indic_q{l})") (block (contrapose "with(l:sets[points],empty_indic_q{l});") (backchain "with(s:sets[points],p:prop, s=indic{x:points, p})") (apply-macete $non-empty-composite-macete))) ))
(def-script pick-an-element 0 ( (if (matches? "with(p:prop, p)" "with(p:prop, not(forall(x:points, p)))") (block (contrapose "with(p:prop, not(forall(x:points, p)))") insistent-direct-inference (contrapose 0)) (skip)) ))
(def-script indic-handler 0 ( (if (matches? "with(l:sets[points],x:points,x in l)" "with(p:prop, l:sets[points],l=indic{x:points,p})") (block (backchain "with(p:prop, l:sets[points],l=indic{x:points,p})") (apply-macete-with-minor-premises indicator-facts-macete) simplify) (skip))))
(def-script indic-removal 0 ( (if (matches? "with(p:prop,p)" ("with( x:points,p:prop,x in indic{y:points,p})")) (block (contrapose ("with( x:points,p:prop,x in indic{y:points,p})")) (apply-macete-with-minor-premises indicator-facts-macete) beta-reduce (contrapose 0)) (skip))))
(def-script indic-equality 0 ( (if (matches? "with(p:prop,indic{x:points,p}=indic{x:points,p})") (block extensionality simplify direct-and-antecedent-inference-strategy))))
(def-script big-d-with-simplification 0 ( (label-node here) direct-and-antecedent-inference-strategy (label-node there) (jump-to-node here) (for-nodes (unsupported-descendents) simplify) (jump-to-node there)))