(def-language three-place-predicate
(embedded-language generic-theory-1)
(constants (rel "[ind_1,ind_1,ind_1 -> prop]")
))
(def-theory three-place-predicate-theory
(language three-place-predicate)
(component-theories generic-theory-1)
)
(def-constant rel%closed
"lambda(s:sets[ind_1],forall(x,y,z:ind_1,x in s and y in s and rel(x,y,z)
implies z in s))"
(theory three-place-predicate-theory))
(def-constant rel%closure
"lambda(s:sets[ind_1],iota(t:sets[ind_1],rel%closed(t) and s subseteq t and
forall(u:sets[ind_1], rel%closed(u) and s subseteq u
implies t subseteq u)))"
(theory three-place-predicate-theory))
(def-theorem iota-free-characterization-of-rel%closure
"forall(s,t:sets[ind_1],rel%closure(s)=t iff (s subseteq t and
rel%closed(t) and
forall(u:sets[ind_1],s subseteq u and rel%closed(u)
implies t subseteq u)))"
(theory three-place-predicate-theory)
(proof
(
(unfold-single-defined-constant (0) rel%closure)
direct-and-antecedent-inference-strategy
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 0 0)")
(contrapose "with(p:prop,p);")
(apply-macete-with-minor-premises eliminate-iota-macete)
(contrapose "with(p:prop,p);"))
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 0 1)")
(contrapose "with(t,f:sets[ind_1],f=t);")
(apply-macete-with-minor-premises eliminate-iota-macete)
(contrapose "with(p:prop,not(p));"))
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 0 2 0 0 0)")
(contrapose "with(t,f:sets[ind_1],f=t);")
(apply-macete-with-minor-premises eliminate-iota-macete)
(contrapose "with(p:prop,forsome(x:ind_1,p));")
(antecedent-inference "with(p:prop,p and p);")
simplify)
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 1 0)")
(apply-macete-with-minor-premises eliminate-iota-macete)
direct-and-antecedent-inference-strategy
simplify
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (1 0 0 0 0)")
(apply-macete-with-minor-premises tr%subseteq-antisymmetry)
direct-and-antecedent-inference-strategy
simplify
simplify)))))
(def-constant span
"lambda(s:sets[ind_1],indic{y:ind_1, y in s or forsome(a,b:ind_1, a in s
and b in s and rel(a,b,y))})"
(theory three-place-predicate-theory)
)
(def-translation iterate->three-place-predicate
force-under-quick-load
(source generic-theory-1)
(target three-place-predicate-theory)
(fixed-theories h-o-real-arithmetic)
(sort-pairs (ind_1 "sets[ind_1]")))
(def-transported-symbols iterate
(renamer iterate-renamer)
(translation iterate->three-place-predicate))
(def-overloading iterate
(generic-theory-1 iterate) (three-place-predicate-theory span%iterate))
(def-theorem span-definedness
"total_q{span,[sets[ind_1],sets[ind_1]]}"
(theory three-place-predicate-theory)
(usages d-r-convergence)
(proof
(
(unfold-single-defined-constant-globally span)
simplify
insistent-direct-inference
beta-reduce-repeatedly
)))
(def-theorem span-includes-set
"forall(s:sets[ind_1], s subseteq span(s))"
(theory three-place-predicate-theory)
(proof
(
direct-and-antecedent-inference-strategy
insistent-direct-inference
direct-and-antecedent-inference-strategy
(unfold-single-defined-constant-globally span)
simplify
)))
(def-theorem monotonicity-of-span
"forall(s,t:sets[ind_1], s subseteq t implies span(s) subseteq span(t))"
(theory three-place-predicate-theory)
(proof
(
direct-and-antecedent-inference-strategy
(unfold-single-defined-constant-globally span)
insistent-direct-inference
simplify
direct-and-antecedent-inference-strategy
(simplify-antecedent "with(p:prop,not(p));")
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 0 1 0 0)")
(instantiate-existential ("b" "a"))
simplify
simplify)
)))
(def-theorem rel%closed-iff-fixed-under-span
"forall(s:sets[ind_1],rel%closed(s) iff span(s)=s)"
(theory three-place-predicate-theory)
(proof
(
(apply-macete-with-minor-premises tr%subseteq-antisymmetry)
(apply-macete-with-minor-premises span-includes-set)
unfold-defined-constants
simplify-insistently
direct-and-antecedent-inference-strategy
(block
(script-comment "`direct-and-antecedent-inference-strategy'")
(backchain "with(p:prop,forall(z:ind_1,p));")
auto-instantiate-existential)
(block
(script-comment "`direct-and-antecedent-inference-strategy'")
(backchain "with(p:prop,forall(x:ind_1,p));")
direct-and-antecedent-inference-strategy
auto-instantiate-existential)
)))
(def-theorem strong-monotonicity-of-iterate
"forall(s:sets[ind_1],n,m:zz, 0<=n and n<=m implies
iterate(span,s)(n) subseteq iterate(span,s)(m))"
(theory three-place-predicate-theory)
(proof
(
(induction trivial-integer-inductor ("m"))
simplify
(block
(script-comment "`induction' at (0 0 0 0 0 0 0 1 0 0 0 0 0 0 0)")
(apply-macete-with-minor-premises tr%subseteq-transitivity)
(block
(script-comment "`apply-macete-with-minor-premises' at (0)")
(antecedent-inference "with(p:prop,p implies p);")
(instantiate-existential ("iterate(span,s)(t)"))
(apply-macete-with-minor-premises span-includes-set)
(apply-macete-with-minor-premises tr%iterate-definedness)
simplify-insistently)
(block
(script-comment "`apply-macete-with-minor-premises' at (1)")
(apply-macete-with-minor-premises tr%iterate-definedness)
simplify-insistently)
(block
(script-comment "`apply-macete-with-minor-premises' at (2)")
(apply-macete-with-minor-premises tr%iterate-definedness)
simplify-insistently))
)))
(def-constant union%of%iterates
"lambda(s:sets[ind_1],big_u{lambda(n:zz,iterate(span,s)(n))})"
(theory three-place-predicate-theory))
(def-theorem span-invariance
"forall( s:sets[ind_1],
(span(s) subseteq s)
iff
forall(x,y,z:ind_1, x in s and y in s and
rel(x,y,z) implies z in s))"
(theory three-place-predicate-theory)
(proof
(
direct-and-antecedent-inference-strategy
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 0 0 0 0)")
(incorporate-antecedent "with(s,f:sets[ind_1],f subseteq s);")
(unfold-single-defined-constant (0) span)
insistent-direct-inference
(backchain "with(s,f:sets[ind_1],f subseteq s);")
(apply-macete-with-minor-premises indicator-facts-macete)
beta-reduce-repeatedly
direct-and-antecedent-inference-strategy
auto-instantiate-existential)
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 1)")
(unfold-single-defined-constant (0) span)
simplify-insistently
direct-and-antecedent-inference-strategy
(backchain "with(p:prop,forall(x,y,z:ind_1,p));")
auto-instantiate-existential)
)))
(def-theorem union%of%iterates-closed-under-span
"forall(s:sets[ind_1],span(union%of%iterates(s))=union%of%iterates(s))"
(theory three-place-predicate-theory)
(proof
(
direct-and-antecedent-inference-strategy
(apply-macete-with-minor-premises tr%subseteq-antisymmetry)
direct-and-antecedent-inference-strategy
(move-to-sibling 1)
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (1)")
(apply-macete-with-minor-premises span-includes-set)
(unfold-single-defined-constant (0) union%of%iterates))
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0)")
(apply-macete-with-minor-premises span-invariance)
(block
(script-comment "`apply-macete-with-minor-premises' at (0)")
(unfold-single-defined-constant-globally union%of%iterates)
(apply-macete-with-minor-premises tr%big-union-member)
beta-reduce-repeatedly
direct-and-antecedent-inference-strategy
(cut-with-single-formula "0<=i and 0<=i_$0")
(move-to-sibling 1)
(block
(script-comment "`cut-with-single-formula' at (1)")
(cut-with-single-formula "#(iterate(span,s)(i)) and #( iterate(span,s)(i_$0))")
(block
(script-comment "`cut-with-single-formula' at (0)")
(antecedent-inference "with(p:prop,p and p);")
direct-and-antecedent-inference-strategy
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0)")
(contrapose "with(i:zz,s:sets[ind_1],#(iterate(span,s)(i)));")
(apply-macete-with-minor-premises tr%undefined-for-negative)
simplify)
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (1)")
(contrapose "with(i_$0:zz,s:sets[ind_1],#(iterate(span,s)(i_$0)));")
(apply-macete-with-minor-premises tr%undefined-for-negative)
simplify))
simplify)
(block
(script-comment "`cut-with-single-formula' at (0)")
(cut-with-single-formula "0<=max(i,i_$0)")
(move-to-sibling 1)
simplify
(block
(script-comment "`cut-with-single-formula' at (0)")
(instantiate-existential ("1+max(i,i_$0)"))
(unfold-single-defined-constant (0) span%iterate)
simplify
(unfold-single-defined-constant (0) span)
simplify
beta-reduce-with-minor-premises
(block
(script-comment "`beta-reduce-with-minor-premises' at (0)")
(apply-macete-with-minor-premises indicator-facts-macete)
beta-reduce
direct-and-antecedent-inference-strategy
auto-instantiate-existential
(block
(script-comment "`auto-instantiate-existential' at (0 0)")
(cut-with-single-formula "iterate(span,s)(i_$0) subseteq iterate(span,s)(max(i,i_$0))")
(block
(script-comment "`cut-with-single-formula' at (0)")
(cut-with-single-formula "i_$0<=max(i,i_$0)")
(move-to-sibling 1)
simplify
(backchain "with(f:sets[ind_1],f subseteq f);"))
(block
(script-comment "`cut-with-single-formula' at (1)")
(apply-macete-with-minor-premises strong-monotonicity-of-iterate)
simplify))
(block
(script-comment "`auto-instantiate-existential' at (0 1)")
(cut-with-single-formula "iterate(span,s)(i) subseteq iterate(span,s)(max(i,i_$0))")
(block
(script-comment "`cut-with-single-formula' at (0)")
(cut-with-single-formula "i<=max(i,i_$0)")
(move-to-sibling 1)
simplify
(backchain "with(f:sets[ind_1],f subseteq f);"))
(block
(script-comment "`cut-with-single-formula' at (1)")
(apply-macete-with-minor-premises strong-monotonicity-of-iterate)
simplify)))
(block
(script-comment "`beta-reduce-with-minor-premises' at (1)")
(apply-macete-with-minor-premises tr%iterate-definedness)
simplify-insistently))))
(unfold-single-defined-constant (0) union%of%iterates))
)))
(def-theorem union%of%iterates-includes-s
"forall(s:sets[ind_1],s subseteq union%of%iterates(s))"
(theory three-place-predicate-theory)
(proof
(
unfold-defined-constants
insistent-direct-inference-strategy
(apply-macete-with-minor-premises tr%big-union-member)
(instantiate-existential ("0"))
beta-reduce-insistently
(unfold-single-defined-constant (0) span%iterate)
)))
(def-theorem union%of%iterates-is-rel%closure
"forall(s:sets[ind_1],rel%closure(s)=union%of%iterates(s))"
(theory three-place-predicate-theory)
(proof
(
(apply-macete-with-minor-premises iota-free-characterization-of-rel%closure)
direct-and-antecedent-inference-strategy
(apply-macete-with-minor-premises union%of%iterates-includes-s)
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 1)")
(apply-macete-with-minor-premises rel%closed-iff-fixed-under-span)
(apply-macete-with-minor-premises union%of%iterates-closed-under-span)
simplify
(unfold-single-defined-constant (0) union%of%iterates))
(block
(script-comment "`direct-and-antecedent-inference-strategy'")
(unfold-single-defined-constant (0) union%of%iterates)
insistent-direct-inference
(apply-macete-with-minor-premises tr%big-union-member)
beta-reduce
direct-and-antecedent-inference-strategy
(cut-with-single-formula "forall(i:zz,0<=i implies iterate(span,s)(i) subseteq u)")
(block
(script-comment "`cut-with-single-formula' at (0)")
(cut-with-single-formula "0<=i")
(block
(script-comment "`cut-with-single-formula' at (0)")
(backchain "with(p:prop,forall(i:zz,p));")
auto-instantiate-existential)
(block
(script-comment "`cut-with-single-formula' at (1)")
(cut-with-single-formula "#(iterate(span,s)(i))")
(contrapose "with(f:sets[ind_1],#(f));")
(apply-macete-with-minor-premises tr%undefined-for-negative)
simplify))
(block
(script-comment "`cut-with-single-formula' at (1)")
(induction trivial-integer-inductor ("i"))
(block
(script-comment "`induction' at (0 0)")
beta-reduce
(unfold-single-defined-constant (0) span%iterate))
(block
(script-comment "`induction' at (0 1 0 0 0 0 0 0)")
(incorporate-antecedent "with(u:sets[ind_1],rel%closed(u));")
(apply-macete-with-minor-premises rel%closed-iff-fixed-under-span)
direct-and-antecedent-inference-strategy
(backchain-backwards "with(u,f:sets[ind_1],f=u);")
(apply-macete-with-minor-premises monotonicity-of-span)
(apply-macete-with-minor-premises tr%iterate-definedness)
simplify-insistently)))
)))
(def-theorem rel%closure-exists
"forall(s:sets[ind_1],#(rel%closure(s)))"
(theory three-place-predicate-theory)
(usages transportable-macete)
(proof
(
insistent-direct-inference
(apply-macete-with-minor-premises union%of%iterates-is-rel%closure)
(unfold-single-defined-constant (0) union%of%iterates)
)))