(def-theorem netstates-exist 
    "forsome(x:[hosts,states],total_q{x,[hosts,states]})"
    (theory routed-networks)
    (proof 
      (
        (instantiate-existential ("lambda(h:hosts, nil{datagrams})"))
        (block 
            (script-comment "`instantiate-existential' at (0)")
            insistent-direct-inference
            beta-reduce-repeatedly)
        (block 
            (script-comment "`instantiate-existential' at (1)")
            sort-definedness
            simplify)
        )))


(def-atomic-sort netstates 
    "lambda(n:[hosts -> states], total_q{n,[hosts -> states]})"
    (theory routed-networks))


(def-constant append%to%netstate 
    "lambda(n:netstates, h:hosts, d:datagrams, 
          lambda(h_1:hosts, if(h_1 = h, append%to%state(n(h_1),d), n(h_1))))"
    (theory routed-networks))


(def-theorem append_to_netstate-is-total 
    "total_q{append%to%netstate, 
                      [netstates, hosts, datagrams -> [hosts -> [nn -> datagrams]]]}"
    (usages d-r-convergence)
    (theory routed-networks)
    (proof
      (
        insistent-direct-inference
        (unfold-single-defined-constant-globally append%to%netstate)
        )))


(def-theorem append_to_netstate-is-defined-in-netstates 
    "forall(n:netstates, h:hosts, d:datagrams,
          #(append%to%netstate(n,h,d),netstates))"
    (usages d-r-convergence)
    (theory routed-networks)
    (proof
      (
        direct-inference
        (apply-macete-with-minor-premises 
          netstates-defining-axiom_routed-networks)
        (cut-with-single-formula 
          "#(append%to%netstate(n,h,d),[hosts,states])")
        (block 
            (script-comment "`cut-with-single-formula' at (0)")
            beta-reduce-repeatedly
            insistent-direct-inference
            (unfold-single-defined-constant-globally append%to%netstate)
            (raise-conditional (0))
            simplify
            (instantiate-theorem 
              netstates-defining-axiom_routed-networks ("n")))
        (block 
            (script-comment "`cut-with-single-formula' at (1)")
            (unfold-single-defined-constant-globally append%to%netstate)
            sort-definedness
            direct-inference
            (case-split ("xx_0=h"))
            (block 
	(script-comment "`case-split' at (1)")
	simplify
	(apply-macete-with-minor-premises 
	  append_to_state-is-defined-in-states))
            simplify)
        )))