(def-theorem induction-in-cpos
"forall(s:sets[uu],a:uu,
a in s
and
forall(t:sets[uu],
a in t and t subseteq s and #(prec%sup(t)) implies
prec%sup(t) in s)
and
forall(y,z:uu,
y in s and a prec y and y prec z and not(z=y)
implies
forsome(y_0:uu,
y_0 in s and y_0 prec z and y prec y_0 and not(y=y_0)))
implies
forall(x:uu,a prec x implies x in s))"
(theory complete-partial-order)
(usages transportable-macete)
(proof
(
direct-and-antecedent-inference-strategy
(script-comment "after breaking up the logical structure of the expression, we
have to show that a fixed x belongs to s provided the assumptions
on s hold and a prec s.")
(instantiate-universal-antecedent "with(p:prop,forall(t:sets[uu],p));"
("indic{w:uu, w in s and a prec w and w prec x}"))
(block
(script-comment "contraposition to show antecedent of instantiated assumption holds.")
(contrapose "with(p:prop,not(p));")
simplify-insistently
(apply-macete-with-minor-premises prec-reflexivity)
)
(block
(script-comment "contraposition for a similar reason.")
(contrapose "with(x_$0:uu,f:[uu,prop],x_$0 in pred_to_indic(f));")
simplify-insistently)
(block
(contrapose "with(p:prop,not(p));")
(apply-macete-with-minor-premises prec%sup-defined)
direct-and-antecedent-inference-strategy
(instantiate-existential ("a"))
(unfold-single-defined-constant (0) prec%majorizes)
simplify-insistently
(instantiate-existential ("x")))
(block
(instantiate-universal-antecedent "with(p:prop,forall(y,z:uu,p));"
("prec%sup(indic{w:uu, w in s and a prec w and w prec x})" "x"))
(contrapose "with(p:prop,not(p));")
(apply-macete-with-minor-premises minorizes-property-of-prec%sup)
simplify-insistently
(instantiate-existential ("a"))
(apply-macete-with-minor-premises prec-reflexivity)
(contrapose "with(p:prop,not(p));")
(apply-macete-with-minor-premises lub-property-of-prec%sup)
direct-and-antecedent-inference-strategy
(unfold-single-defined-constant-globally prec%majorizes)
simplify-insistently
simplify
(contrapose "with(p:prop,not(p));")
(apply-macete-with-minor-premises prec-anti-symmetry)
direct-and-antecedent-inference-strategy
(apply-macete-with-minor-premises minorizes-property-of-prec%sup)
direct-and-antecedent-inference-strategy
(instantiate-existential ("y_$0"))
simplify-insistently
(apply-macete-with-minor-premises prec-transitivity)
(instantiate-existential ("prec%sup(indic{w:uu, w in s and a prec w and w prec x})"))
(apply-macete-with-minor-premises minorizes-property-of-prec%sup)
direct-and-antecedent-inference-strategy
simplify-insistently
(instantiate-existential ("a"))
(apply-macete-with-minor-premises prec-reflexivity)
(apply-macete-with-minor-premises prec-reflexivity)
)
)))
(def-theorem induction-principle-for-cpos
"forall(p:[uu,prop],a,b:uu,
a prec b
implies
forall(x:uu,a prec x and x prec b implies p(x))
iff
(p(a)
and
(forall(t:sets[uu],
a in t
and
t subseteq indic{x:uu, a prec x and x prec b and p(x)}
implies
p(prec%sup(t)))
and
forall(y,z:uu,
p(y) and a prec y and y prec z and not(z=y) and z prec b
implies
forsome(y_0:uu,
p(y_0) and y_0 prec z and y prec y_0 and not(y=y_0))))))"
(theory complete-partial-order)
(usages transportable-macete)
(proof
(
direct-and-antecedent-inference-strategy
(backchain "with(p:prop,forall(x:uu,p));")
direct-inference
(apply-macete-with-minor-premises prec-reflexivity)
(cut-with-single-formula "#(prec%sup(t))")
(move-to-sibling 1)
(apply-macete-with-minor-premises prec%sup-defined)
direct-and-antecedent-inference-strategy
(instantiate-existential ("a"))
(instantiate-existential ("b"))
(unfold-single-defined-constant (0) prec%majorizes)
direct-and-antecedent-inference-strategy
(incorporate-antecedent "with(f,t:sets[uu],t subseteq f);")
simplify-insistently
(backchain "forall(x:uu,
with(p:prop,p and p) implies with(p:[uu,prop],p(x)));")
direct-and-antecedent-inference-strategy
(apply-macete-with-minor-premises minorizes-property-of-prec%sup)
direct-inference
(instantiate-existential ("a"))
(apply-macete-with-minor-premises lub-property-of-prec%sup)
direct-and-antecedent-inference-strategy
(unfold-single-defined-constant (0) prec%majorizes)
direct-and-antecedent-inference-strategy
(incorporate-antecedent "with(f,t:sets[uu],t subseteq f);")
simplify-insistently
(instantiate-existential ("z"))
(backchain "with(p:prop,forall(x:uu,p));")
direct-and-antecedent-inference-strategy
(apply-macete-with-minor-premises prec-transitivity)
(instantiate-existential ("y"))
(apply-macete-with-minor-premises prec-reflexivity)
simplify
(script-comment "this ends the proof in one direction.")
(cut-with-single-formula "x in indic{x:uu, a prec x and (x prec b implies p(x))}")
(incorporate-antecedent "with(x:uu,f:sets[uu],x in f);")
simplify-insistently
(apply-macete-with-minor-premises induction-in-cpos)
simplify-insistently
(instantiate-existential ("a"))
(apply-macete-with-minor-premises prec-reflexivity)
(apply-macete-with-minor-premises minorizes-property-of-prec%sup)
direct-inference
(instantiate-existential ("a"))
(backchain "with(p:prop,forall(t:sets[uu],p));")
direct-and-antecedent-inference-strategy
simplify-insistently
direct-and-antecedent-inference-strategy
(apply-macete-with-minor-premises prec-transitivity)
(instantiate-existential ("prec%sup(t_$1)"))
(apply-macete-with-minor-premises minorizes-property-of-prec%sup)
direct-and-antecedent-inference-strategy
(instantiate-existential ("x_$0"))
(apply-macete-with-minor-premises prec-reflexivity)
(backchain "with(p:prop,p and p and p);")
direct-and-antecedent-inference-strategy
(instantiate-universal-antecedent "with(p:prop,forall(y,z:uu,p));"
("y_$3" "z_$1"))
(instantiate-existential ("z_$1"))
(apply-macete-with-minor-premises prec-transitivity)
(instantiate-existential ("y_$3"))
(antecedent-inference-strategy (3))
(contrapose "with(b,y_$3:uu,not(y_$3 prec b));")
(apply-macete-with-minor-premises prec-transitivity)
(instantiate-existential ("z_$1"))
(apply-macete-with-minor-premises prec-reflexivity)
simplify
(instantiate-existential ("z_$1"))
(apply-macete-with-minor-premises prec-transitivity)
(instantiate-existential ("y_$3"))
(apply-macete-with-minor-premises prec-reflexivity)
simplify
(instantiate-existential ("y_0"))
(apply-macete-with-minor-premises prec-transitivity)
(instantiate-existential ("y_$3"))
))
)