(def-theorem drop-sequence-lemma
"forall(s:[nn,ind_1], #(s(0)) and f_seq_q{drop{s,1}} implies f_seq_q{s})"
(theory sequences)
(proof
(
direct-and-antecedent-inference-strategy
(cut-with-single-formula "s=cons{s(0),drop{s,1}}")
(block
(script-comment "`cut-with-single-formula' at (0)")
(backchain "with(f,s:[nn,ind_1],s=f);")
(apply-macete-with-minor-premises cons-fseq-biconditional))
(apply-macete-with-minor-premises cons-car-cdr-lemma)
)))
(def-theorem length-of-drop-one
"forall(s:[nn -> ind_1], n:nn,
#(s(0))
implies
(length{s} <=n+1 iff length{drop{s,1}}<=n))"
reverse
(usages transportable-macete)
(theory sequences)
(proof
(
direct-and-antecedent-inference-strategy
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 0 0)")
(apply-macete-with-minor-premises length-of-drop)
(case-split-on-conditionals (0)))
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 0 1)")
(cut-with-single-formula "f_seq_q{s}")
(move-to-sibling 1)
(block
(script-comment "`cut-with-single-formula' at (1)")
(apply-macete-with-minor-premises drop-sequence-lemma)
direct-inference)
(block
(script-comment "`cut-with-single-formula' at (0)")
(contrapose "with(n:nn,n<=n);")
(apply-macete-with-minor-premises length-of-drop)
(cut-with-single-formula "0<length{s}")
simplify
(apply-macete-with-minor-premises meaning-of-length)))
)))
(load-section basic-cardinality)
(def-quasi-constructor collapse
"lambda(f:[nn,ind_1], lambda(n:nn, f (omega%embedding(dom{f})(n))))"
(language sequences)
(fixed-theories h-o-real-arithmetic))
(def-theorem length-of-collapse-lemma
"forall(s:[nn,ind_1],
forall(m:nn, forall(k:nn, m<=k implies not(#(s(k))))
implies
length(collapse{s})<=m))"
(theory sequences)
(usages transportable-macete)
(proof
(
direct-and-antecedent-inference-strategy
(cut-with-single-formula
"forsome(k:nn, k<=m and dom{omega%embedding(dom{s})}=omega(k))")
(move-to-sibling 1)
(block
(script-comment "`cut-with-single-formula' at (1)")
(apply-macete-with-minor-premises dom-of-omega%embedding-at-finite-set)
simplify-insistently
direct-and-antecedent-inference-strategy
(instantiate-universal-antecedent "with(p:prop,forall(k:nn,p));" ("x"))
simplify)
(block
(script-comment "`cut-with-single-formula' at (0)")
(antecedent-inference "with(p:prop,forsome(k:nn,p));")
(incorporate-antecedent "with(p:prop,p and p);")
(unfold-single-defined-constant (0) omega)
(force-substitution "dom{omega%embedding(dom{s})}=indic{m:nn, m<k}"
"forall(p:nn, #(omega%embedding(dom{s})(p)) iff p<k)"
(0))
(move-to-sibling 1)
(block
(script-comment "`force-substitution' at (1)")
(force-substitution "p<k" "p in indic{m:nn, m<k}" (0))
(move-to-sibling 1)
(block
(script-comment "`force-substitution' at (1)")
(apply-macete-with-minor-premises indicator-facts-macete)
beta-reduce-repeatedly)
(block
(script-comment "`force-substitution' at (0)")
direct-inference
(backchain-backwards "with(f:sets[nn],f=f);")
(apply-macete-with-minor-premises tr%domain-membership-iff-defined)))
(block
(script-comment "`force-substitution' at (0)")
direct-and-antecedent-inference-strategy
(cut-with-single-formula "forall(p:nn, #(omega%embedding(dom{s})(p))
iff
omega%embedding(dom{s})(p) in ran{omega%embedding(dom{s})})")
(move-to-sibling 1)
(block
(script-comment "`cut-with-single-formula' at (1)")
(apply-macete-with-minor-premises tr%range-domain-membership)
(apply-macete-with-minor-premises indicator-facts-macete)
beta-reduce-repeatedly)
(block
(script-comment "`cut-with-single-formula' at (0)")
(incorporate-antecedent "with(f:sets[nn],n:nn,forall(p:nn,#(n) iff n in f));")
(apply-macete-with-minor-premises ran-of-omega%embedding)
(force-substitution "#(omega%embedding(dom{s})(p))"
"p<k"
(0))
(move-to-sibling 1)
simplify
(block
(script-comment "`force-substitution' at (0)")
(apply-macete-with-minor-premises tr%domain-membership-iff-defined)
direct-and-antecedent-inference-strategy
(cut-with-single-formula "length{lambda(p:nn, s(omega%embedding(dom{s})(p)))}=k")
simplify
(block
(script-comment "`cut-with-single-formula' at (1)")
(apply-macete-with-minor-premises iota-free-definition-of-length)
(incorporate-antecedent "with(i:ind_1,k:nn,forall(p:nn,p<k iff #(i)));")
(force-substitution "s(omega%embedding(dom{s})(p))"
"collapse{s}(p)"
(0))
simplify-insistently)))))
)))
(def-theorem collapse-of-finite-is-finite-lemma
"forall(s:[nn,ind_1],
forsome(m:nn, forall(k:nn, m<=k implies not(#(s(k)))))
implies
f_seq_q{collapse{s}})"
(theory sequences)
(usages transportable-macete)
(proof
(
direct-and-antecedent-inference-strategy
(cut-with-single-formula "length{collapse{s}}<=m")
(apply-macete-with-minor-premises length-of-collapse-lemma)
)))
(def-quasi-constructor constrict
"lambda(f:[nn,ind_1],a:sets[ind_1],
collapse(lambda(n:nn, if(f(n) in a, f(n), ?ind_1))))"
(language sequences)
(fixed-theories h-o-real-arithmetic))
(def-theorem length-of-constrict-of-finite-sequence
"forall(s:[nn,ind_1],a:sets[ind_1],
f_seq_q{s}
implies
length{constrict{s,a}}<=length{s})"
(theory sequences)
(usages transportable-macete)
(proof
(
(apply-macete-with-minor-premises length-of-collapse-lemma)
beta-reduce-repeatedly
direct-and-antecedent-inference-strategy
(cut-with-single-formula "not(#(s(k)))")
simplify
(block
(script-comment "node added by `cut-with-single-formula' at (1)")
(apply-macete-with-minor-premises meaning-of-length-rev)
simplify)
)))
(def-theorem constrict-of-finite-sequence-is-finite-sequence
"forall(s:[nn,ind_1],a:sets[ind_1], f_seq_q{s} implies f_seq_q{constrict{s,a}})"
(theory sequences)
(usages transportable-macete)
(proof
(
direct-and-antecedent-inference-strategy
(cut-with-single-formula "length{constrict{s,a}}<=length{s}")
(apply-macete-with-minor-premises length-of-constrict-of-finite-sequence)
)))
(def-theorem omega%embedding-id-condition
"forall(s:sets[nn], omega%embedding(s)=id{s} iff (s=sort_to_indic{nn} or
forsome(n:nn, s=omega(n))))"
(theory h-o-real-arithmetic)
(proof
(
direct-inference
(case-split ("f_indic_q{s}"))
(block
(script-comment "`case-split' at (1)")
(apply-macete-with-minor-premises characterization-of-omega-embedding-for-finite-sets)
(apply-macete-with-minor-premises tr%ran-of-id)
(apply-macete-with-minor-premises tr%dom-of-id)
simplify
direct-and-antecedent-inference-strategy
auto-instantiate-existential
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (1 0 0)")
(contrapose "with(s:sets[nn],f_indic_q{s});")
(apply-macete-with-minor-premises subset-of-nn-finite-iff-bounded)
(contrapose "with(p:prop,not(p));")
(antecedent-inference "with(p:prop,forsome(n:nn,p));")
(contrapose "with(f,s:sets[nn],s subseteq f);")
(unfold-single-defined-constant (0) omega)
(apply-macete-with-minor-premises indicator-facts-macete)
beta-reduce-repeatedly
(backchain "with(f,s:sets[nn],s=f);")
(instantiate-existential ("n+1"))
simplify
simplify)
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (1 0 1
0)")
(backchain "with(f,s:sets[nn],s=f);")
(backchain "with(f,s:sets[nn],s=f);")
(apply-macete-with-minor-premises f-card-of-a-finite-cardinal))
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (1 1 0
0 0 0 0)")
(backchain "with(s:sets[nn],s=sort_to_indic{nn});")
(apply-macete-with-minor-premises tr%meaning-of-indic-from-sort-element))
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (1 1 0
0 0 0 1 0)")
(backchain "with(n:nn,s:sets[nn],s=omega(n));")
(incorporate-antecedent "with(l:nn,s:sets[nn],l in s);")
(backchain "with(n:nn,s:sets[nn],s=omega(n));")
(unfold-single-defined-constant-globally omega)
(apply-macete-with-minor-premises indicator-facts-macete)
beta-reduce-repeatedly
simplify))
(block
(script-comment "`case-split' at (2)")
(apply-macete-with-minor-premises characterization-of-omega-embedding-for-infinite-sets)
(apply-macete-with-minor-premises tr%ran-of-id)
(apply-macete-with-minor-premises tr%dom-of-id)
simplify
direct-and-antecedent-inference-strategy
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (1 0 1 0)")
(contrapose "with(p:prop,not(p));")
(backchain "with(f,s:sets[nn],s=f);")
(apply-macete-with-minor-premises finite-cardinal-is-f-indic))
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (1 1 0 0 0 0 0)")
(backchain "with(f,s:sets[nn],s=f);")
(apply-macete-with-minor-premises tr%meaning-of-indic-from-sort-element))
(backchain "with(s:sets[nn],s=sort_to_indic{nn});")))))
(def-theorem collapse-invariance-condition
"forall(s:[nn -> ind_1], (dom{s}=sort_to_indic{nn} or f_seq_q{s}) implies
collapse{s}=s)"
(theory sequences)
(proof
(
direct-and-antecedent-inference-strategy
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 0 0)")
extensionality
simplify
(cut-with-single-formula "omega%embedding(dom{s})=id{dom{s}}")
(move-to-sibling 1)
(block
(script-comment "`cut-with-single-formula' at (1)")
(apply-macete-with-minor-premises omega%embedding-id-condition)
direct-and-antecedent-inference-strategy)
(block
(script-comment "`cut-with-single-formula' at (0)")
(backchain "with(f:[nn,nn],f=f);")
simplify))
(block
(script-comment "`direct-and-antecedent-inference-strategy' at (0 0 1)")
extensionality
simplify
(cut-with-single-formula "omega%embedding(dom{s})=id{dom{s}}")
(move-to-sibling 1)
(block
(script-comment "`cut-with-single-formula' at (1)")
(apply-macete-with-minor-premises omega%embedding-id-condition)
direct-and-antecedent-inference-strategy
(instantiate-existential ("length{s}"))
(unfold-single-defined-constant (0) omega)
(apply-macete-with-minor-premises meaning-of-length))
(block
(script-comment "`cut-with-single-formula' at (0)")
(backchain "with(f:[nn,nn],f=f);")
simplify))
)))