(def-theorem bound%place-totality "forall(sigma:istate,#(bound%place(sigma)))" (theory places) (usages d-r-convergence) (proof ( (unfold-single-defined-constant-globally bound%place) simplify-insistently)))
(def-theorem raise-totality "forall(f:[place,place],sigma:istate,#(raise(sigma,f)))" (theory places) (usages d-r-convergence) (proof ( (unfold-single-defined-constant-globally raise))))
(def-theorem bound%place-abstr-definedness "forall(sigma:istate, p:place, p in bound%place(sigma) iff #(abstr(sigma)(p)))" reverse (theory places) (proof ( (unfold-single-defined-constant-globally bound%place) (unfold-single-defined-constant-globally abstr) (apply-macete-with-minor-premises tr%domain-membership-iff-defined) simplify)))
(def-theorem first%entry-identity-in-set "forall(f:[ind_1->ind_1], s:sets[ind_1], x:ind_1, x in s implies first%entry(f,s,x)=x)" (theory generic-theory-1) (usages transportable-macete) (proof ( (apply-macete-with-minor-premises first%entry-characterization) direct-and-antecedent-inference-strategy (instantiate-existential ("0")) (unfold-single-defined-constant-globally iterate) (block (script-comment "`instantiate-existential' at (0 1 0 0)") (instantiate-theorem undefined-for-negative ("m" "x" "f")) simplify))))
(def-constant a%copy "lambda(gamma_0: [place -> word], f:[place -> place], if(copy%fn(gamma_0, f), copy(gamma_0,f), ?[place -> word]))" (theory places))
(def-constant c%copy%fn "lambda(sigma:istate,f:[place -> place], forall(p:place, p in bound%place (sigma) implies f(p)==default(sigma)(p)))" (theory places))
(def-constant c%copy "lambda(sigma:istate,f:[place,place], if(c%copy%fn(sigma,f), make%istate(gamma(sigma),f), ?istate))" (theory places))
(def-theorem copy-safety "forall(f:[place,place],sigma:istate, #(c%copy(sigma,f)) implies abstr(c%copy(sigma,f)) = a%copy(abstr(sigma),raise(sigma,f)))" (theory places) (proof ( (unfold-single-defined-constant-globally c%copy) (unfold-single-defined-constant-globally c%copy%fn) (unfold-single-defined-constant-globally a%copy) (unfold-single-defined-constant-globally copy%fn) simplify-insistently direct-inference (instantiate-theorem default-modification-lemma ("f" "sigma")) (move-to-ancestor 5) (move-to-descendent (1 0)) (block (script-comment "`instantiate-theorem' at (0 1 0)") (incorporate-antecedent "copy%fn(with(f:[place,word],f),with(f:[place,place],f));") (unfold-single-defined-constant-globally copy%fn) simplify-insistently) (move-to-ancestor 1) direct-and-antecedent-inference-strategy (move-to-ancestor 1) direct-and-antecedent-inference-strategy (move-to-ancestor 4) (block (script-comment "`direct-and-antecedent-inference-strategy' at (0)") (auto-instantiate-universal-antecedent "with(f:[place,place],sigma:istate, forall(p:place, p in bound%place(sigma) implies f(p)==default(sigma)(p)));") (antecedent-inference "with(p:prop,p or p);")) )))
(def-constant lower "lambda(sigma:istate,f:[place,place], lambda(p:place, if (p in bound%place(sigma), default(sigma)(p), f(p))))" (theory places))
(def-theorem raise-lower-composition "forall(f:[place,place],sigma:istate, #(a%copy(abstr(sigma),f)) implies f=raise(sigma, lower(sigma, f)))" (theory places) (proof ( (unfold-single-defined-constant-globally a%copy) (unfold-single-defined-constant-globally lower) (unfold-single-defined-constant-globally copy%fn) simplify simplify-insistently direct-and-antecedent-inference-strategy (unfold-single-defined-constant-globally raise) extensionality simplify direct-and-antecedent-inference-strategy (case-split ("x_0 in bound%place(sigma)")) (block (script-comment "`case-split' at (1)") (apply-macete-with-minor-premises tr%first%entry-identity-in-set) (backchain "with(p:place,w:word,forall(x:place,#(w) implies p=x));") (apply-macete-with-minor-premises rev%bound%place-abstr-definedness)) (block (script-comment "`case-split' at (2)") (apply-macete-with-minor-premises tr%first%entry-equation) simplify (case-split ("#(f(x_0))")) (block (script-comment "`case-split' at (1)") (instantiate-universal-antecedent "with(w:word,p:prop, forall(x_$0:place,forsome(x:place,p) implies #(w)));" ("f(x_0)")) (instantiate-universal-antecedent "with(p:prop,forall(x_$1:place,not(p)));" ("x_0")) (block (script-comment "`instantiate-universal-antecedent' at (0 0 1)") (incorporate-antecedent "with(w:word,#(w));") (apply-macete-with-minor-premises rev%bound%place-abstr-definedness) (apply-macete-with-minor-premises tr%first%entry-identity-in-set))) insistent-direct-and-antecedent-inference-strategy) )))
(def-theorem copy-liveness "forall(f:[place,place],sigma:istate, #(a%copy(abstr(sigma),f)) implies abstr(c%copy(sigma, lower(sigma, f)))= a%copy(abstr(sigma),f))" reverse (theory places) (proof ( (unfold-single-defined-constant-globally a%copy) (unfold-single-defined-constant-globally c%copy) (unfold-single-defined-constant-globally c%copy%fn) (unfold-single-defined-constant-globally lower) (unfold-single-defined-constant-globally copy%fn) simplify-insistently direct-and-antecedent-inference-strategy (force-substitution "f" "raise(sigma, lambda(p:place, if(p in bound%place(sigma), default(sigma)(p), f(p))))" (1)) (block (script-comment "`force-substitution' at (0)") (instantiate-theorem default-modification-lemma ("lambda(p:place, if(p in bound%place(sigma), default(sigma)(p), f(p)))" "sigma")) (move-to-ancestor 1) (contrapose "with(p:prop,not(p));") simplify) (block (script-comment "`force-substitution' at (1)") (cut-with-single-formula "f=raise(sigma,lower(sigma,f))") (block (script-comment "`cut-with-single-formula' at (0)") (incorporate-antecedent "with(f:[place,place],f=f);") (unfold-single-defined-constant-globally lower)) (block (script-comment "`cut-with-single-formula' at (1)") (apply-macete-with-minor-premises raise-lower-composition) (unfold-single-defined-constant-globally a%copy) (unfold-single-defined-constant-globally copy%fn) simplify)) )))
(def-theorem copy-liveness-corollary "forall(f:[place,place],sigma:istate, #(a%copy(abstr(sigma),f)) implies #(c%copy(sigma, lower(sigma, f))))" (theory places) (proof ( direct-and-antecedent-inference-strategy (instantiate-theorem copy-liveness ("f" "sigma")) )))
(def-constant c%redirect%fn "lambda(f:[place -> place],sigma:istate, ran{f} inters dom{gamma(sigma)}=empty_indic{place} and dom{f} inters ran{f}=empty_indic{place} and forall(x:place, x in dom{f} implies default(sigma)(x)=default(sigma)(f(x))))" (theory places))
(def-constant c%redirect "lambda(sigma:istate,f: [place -> place], if(c%redirect%fn(f, sigma), make%istate(gamma(sigma), lambda(x:place, if(x in dom{f}, f(x), default(sigma)(x)))), ?istate))" (theory places))
(def-theorem c%redirect-no-op "forall(f:[place,place],sigma:istate, #(c%redirect(sigma,f)) implies abstr(c%redirect(sigma,f))=abstr(sigma))" (theory places) (proof ( (unfold-single-defined-constant-globally c%redirect) (unfold-single-defined-constant-globally c%redirect%fn) simplify (apply-macete-with-minor-premises tr%rev%domain-membership-iff-defined) (apply-macete-with-minor-premises default-multiplicity-reduction) simplify )))
(def-constant user%eq "lambda(f,g:[place -> word], u:sets[place], restrict(f,u)=restrict(g,u))" (theory places))
(def-constant c%shadow "lambda(sigma:istate, f:[place -> place], if(#(a%copy(abstr(sigma),f)), c%copy(sigma, lower(sigma, f)), ?istate))" (theory places))
(def-constant shadow%set "lambda(sigma:istate, f:[place -> place], dom{f} inters (bound%place(sigma)^^))" (theory places))
(def-theorem c%shadow-no-op "forall(f:[place -> place], v:sets[place], sigma:istate, v disj shadow%set(sigma,f) and #(c%shadow(sigma,f)) implies user%eq(abstr(sigma),abstr(c%shadow(sigma,f)), v))" (theory places) (proof ( (unfold-single-defined-constant-globally user%eq) (unfold-single-defined-constant-globally c%shadow) simplify (apply-macete-with-minor-premises copy-liveness) (unfold-single-defined-constant-globally shadow%set) simplify-insistently direct-and-antecedent-inference-strategy extensionality simplify-insistently direct-and-antecedent-inference-strategy (instantiate-universal-antecedent "with(p:prop,forall(x:place,p));" ("x_0")) (block (script-comment "`instantiate-universal-antecedent' at (0 0 1 0)") (incorporate-antecedent "with(f:[place,word],#(f));") (unfold-single-defined-constant-globally a%copy) simplify (unfold-single-defined-constant-globally copy) simplify direct-and-antecedent-inference-strategy insistent-direct-inference (antecedent-inference "with(p:prop,p or p);") (contrapose "with(p:prop,not(p));") (incorporate-antecedent "copy%fn(with(f:[place,word],f),with(f:[place,place],f));") (unfold-single-defined-constant-globally copy%fn) simplify) (block (script-comment "`instantiate-universal-antecedent' at (0 0 1 1)") (incorporate-antecedent "with(f:[place,word],#(f));") (unfold-single-defined-constant-globally a%copy) simplify (unfold-single-defined-constant-globally copy) direct-and-antecedent-inference-strategy (unfold-single-defined-constant-globally abstr) (incorporate-antecedent "copy%fn(with(f:[place,word],f),with(f:[place,place],f));") (unfold-single-defined-constant-globally copy%fn) simplify direct-and-antecedent-inference-strategy (incorporate-antecedent "with(x_0:place,sigma:istate,x_0 in bound%place(sigma));") (unfold-single-defined-constant-globally bound%place) simplify (incorporate-antecedent "with(p:place,w:word,forall(x:place,#(w) implies p=x));") (unfold-single-defined-constant-globally abstr) simplify) )))
(def-constant c%fill "lambda(sigma:istate, a:sets[place], if(dom{gamma(sigma)} subseteq a, ifill(sigma,a), ?istate))" (theory places))
(def-theorem c%fill-no-op "forall(sigma:istate, a:sets[place], #(c%fill(sigma,a)) implies abstr(sigma)=abstr(c%fill(sigma,a)))" (theory places) (proof ( (unfold-single-defined-constant-globally c%fill) simplify (apply-macete-with-minor-premises ifill-abstraction) simplify)))
(def-theorem bound%place%stability "forall(h:[place,place],x:place,sigma:istate, x in bound%place(sigma) and #(c%copy(sigma,h)) implies x in bound%place(c%copy(sigma,h)))" (theory places) (proof ( direct-and-antecedent-inference-strategy (cut-with-single-formula " bound%place(sigma) subseteq bound%place(c%copy(sigma,h))") simplify (block (script-comment "`cut-with-single-formula' at (1)") (apply-macete-with-minor-premises bound%place%monotonicty) (incorporate-antecedent "with(f:istate,#(f));") (unfold-single-defined-constant-globally c%copy) simplify (unfold-single-defined-constant-globally c%copy%fn) simplify) )))