Class MultiSingleParamsTotalMap
  (B0 : BaseParams) (P0 : MultiParams B0) (B1 : BaseParams) :=
  {
    tot_s_map_data : @data B0 -> @data B1 ;
    tot_s_map_input : name -> @input B0 -> @input B1 ;
    tot_s_map_output : @output B0 -> @output B1 ;
    tot_s_map_msg : name -> name -> msg -> @input B1
  }.Class MultiSingleParamsTotalMap
  (B0 : BaseParams) (P0 : MultiParams B0) (B1 : BaseParams) :=
  {
    tot_s_map_data : @data B0 -> @data B1 ;
    tot_s_map_input : name -> @input B0 -> @input B1 ;
    tot_s_map_output : @output B0 -> @output B1 ;
    tot_s_map_msg : name -> name -> msg -> @input B1
  }.Class MultiSingleParamsTotalMap
  (B0 : BaseParams) (P0 : MultiParams B0) (B1 : BaseParams) :=
  {
    tot_s_map_data : @data B0 -> @data B1 ;
    tot_s_map_input : name -> @input B0 -> @input B1 ;
    tot_s_map_output : @output B0 -> @output B1 ;
    tot_s_map_msg : name -> name -> msg -> @input B1
  }.Class MultiSingleParamsTotalMap
  (B0 : BaseParams) (P0 : MultiParams B0) (B1 : BaseParams) :=
  {
    tot_s_map_data : @data B0 -> @data B1 ;
    tot_s_map_input : name -> @input B0 -> @input B1 ;
    tot_s_map_output : @output B0 -> @output B1 ;
    tot_s_map_msg : name -> name -> msg -> @input B1
  }.Class MultiSingleParamsTotalMap
  (B0 : BaseParams) (P0 : MultiParams B0) (B1 : BaseParams) :=
  {
    tot_s_map_data : @data B0 -> @data B1 ;
    tot_s_map_input : name -> @input B0 -> @input B1 ;
    tot_s_map_output : @output B0 -> @output B1 ;
    tot_s_map_msg : name -> name -> msg -> @input B1
  }.Class MultiSingleParamsTotalMapCongruency
  (B0 : BaseParams) (B1 : BaseParams)
  (P0 : MultiParams B0) (P1 : SingleParams B1)
  (M : MultiSingleParamsTotalMap P0 B1) (me : name) : Prop :=
  {
    tot_s_init_handlers_eq : tot_s_map_data (init_handlers me) = init_handler ;
    tot_s_input_handlers_eq : forall inp st out st' ps out' st'',
      input_handlers me inp st = (out, st', ps) ->
      input_handler (tot_s_map_input me inp) (tot_s_map_data st) = (out', st'') ->
      map tot_s_map_output out = out' /\ tot_s_map_data st' = st''
  }.Class MultiSingleParamsTotalMapCongruency
  (B0 : BaseParams) (B1 : BaseParams)
  (P0 : MultiParams B0) (P1 : SingleParams B1)
  (M : MultiSingleParamsTotalMap P0 B1) (me : name) : Prop :=
  {
    tot_s_init_handlers_eq : tot_s_map_data (init_handlers me) = init_handler ;
    tot_s_input_handlers_eq : forall inp st out st' ps out' st'',
      input_handlers me inp st = (out, st', ps) ->
      input_handler (tot_s_map_input me inp) (tot_s_map_data st) = (out', st'') ->
      map tot_s_map_output out = out' /\ tot_s_map_data st' = st''
  }.Class MultiSingleParamsTotalMapCongruency
  (B0 : BaseParams) (B1 : BaseParams)
  (P0 : MultiParams B0) (P1 : SingleParams B1)
  (M : MultiSingleParamsTotalMap P0 B1) (me : name) : Prop :=
  {
    tot_s_init_handlers_eq : tot_s_map_data (init_handlers me) = init_handler ;
    tot_s_input_handlers_eq : forall inp st out st' ps out' st'',
      input_handlers me inp st = (out, st', ps) ->
      input_handler (tot_s_map_input me inp) (tot_s_map_data st) = (out', st'') ->
      map tot_s_map_output out = out' /\ tot_s_map_data st' = st''
  }.Definition step_ordered_failure_tot_s_net_handlers_eq :=
  forall net failed tr src m ms out st' ps out' st'',
  step_ordered_failure_star step_ordered_failure_init (failed, net) tr ->
  onwPackets net src me = m :: ms ->
  ~ In me failed ->
  net_handlers me src m (onwState net me) = (out, st', ps) ->
  input_handler (tot_s_map_msg me src m) (tot_s_map_data (onwState net me)) = (out', st'') ->
  map tot_s_map_output out = out' /\ tot_s_map_data st' = st''.

Theorem step_ordered_failure_tot_one_mapped_simulation_1 : step_ordered_failure_tot_s_net_handlers_eq -> forall net net' failed failed' tr tr', step_ordered_failure_star step_ordered_failure_init (failed, net) tr -> step_ordered_failure (failed, net) (failed', net') tr' -> net.(onwState) me = net'.(onwState) me \/ exists tr'', @step_s _ single (tot_s_map_data (net.(onwState) me)) (tot_s_map_data (net'.(onwState) me)) tr''.