(def-constant empty%state
"nil{datagrams}"
(theory datagrams))
(def-theorem states-exist
"forsome(x:[nn,datagrams],f_seq_q{x})"
(theory datagrams)
(proof
(
(instantiate-existential ("empty%state"))
(unfold-single-defined-constant-globally empty%state)
(apply-macete-with-minor-premises tr%nil-is-fseq)
)))
(def-atomic-sort states
"lambda(s:[nn -> datagrams], f_seq_q{s})"
(theory datagrams))
(def-theorem empty_state-is-a-state
"#(empty%state,states)"
(theory datagrams)
(proof
(
(apply-macete-with-minor-premises states-defining-axiom_datagrams)
(unfold-single-defined-constant-globally empty%state)
(apply-macete-with-minor-premises tr%nil-is-fseq)
)))
(def-constant append%to%state
"lambda(s:states, d:datagrams,
append(s,cons(d,empty%state)))"
(theory datagrams))
(def-theorem append_to_state-is-total
"total_q{append%to%state,[states,datagrams -> [nn -> datagrams]]}"
(usages d-r-convergence)
(theory datagrams)
(proof
(
insistent-direct-inference
(unfold-single-defined-constant-globally append%to%state)
)))
(def-theorem append_to_state-is-defined-in-states
"forall(s:states, d:datagrams, #(append%to%state(s,d),states))"
(usages d-r-convergence)
(theory datagrams)
(proof
(
(apply-macete-with-minor-premises states-defining-axiom_datagrams)
beta-reduce-repeatedly
direct-inference
(unfold-single-defined-constant-globally append%to%state)
(unfold-single-defined-constant-globally empty%state)
(apply-macete-with-minor-premises tr%append-is-fseq)
(apply-macete-with-minor-premises tr%cons-to-nil-is-fseq)
(instantiate-theorem states-defining-axiom_datagrams ("s_$0"))
(simplify-antecedent "with(s_$0:states,not(#(s_$0,states)));")
)))
(def-constant state%embedding
"lambda(f:[nn -> nn],s_1,s_2:states,
dom{f} = dom{s_1}
and
forall(m,n:nn, m < n and n < length{s_1} implies f(m) < f(n))
and
forall(n:nn, #(s_1(n)) implies s_1(n) = s_2(f(n))))"
(theory datagrams))