Proof using.
intros.
invc H.
- repeat rewrite revert_state_defn. simpl. rewrite app_nil_r.
simpl in *.
find_apply_lem_hyp PB_net_defn.
intuition; subst.
+ rewrite update_nop. constructor.
+ rewrite update_nop. constructor.
+ break_exists. intuition; break_let.
* intuition. subst.
rewrite <- app_nil_r. econstructor; constructor. repeat find_rewrite.
rewrite update_eq by auto. auto.
* break_exists. intuition. subst. simpl in *.
rewrite <- app_nil_r. econstructor; constructor. repeat find_rewrite.
rewrite update_eq by auto. auto.
+ repeat find_rewrite.
rewrite update_diff by auto. constructor.
- repeat rewrite revert_state_defn. simpl in *.
find_apply_lem_hyp PB_input_handler_defn.
intuition; subst.
+ rewrite update_eq by auto. repeat find_rewrite. constructor.
+ rewrite update_nop. constructor.
+ rewrite update_diff by auto. constructor.
Qed.

(* Specifications: *)
Lemma revert_trace_app :
forall tr1 tr2,
revert_trace (tr1 ++ tr2) = revert_trace tr1 ++ revert_trace tr2.