Local Arguments update {_} {_} _ _ _ _ _ : simpl never.
Set Implicit Arguments.
Class LabeledMultiParamsPartialMapCongruency
(B0 : BaseParams) (B1 : BaseParams)
(P0 : LabeledMultiParams B0) (P1 : LabeledMultiParams B1)
(B : BaseParamsPartialMap B0 B1)
(N : MultiParamsNameTotalMap (@unlabeled_multi_params _ P0) (@unlabeled_multi_params _ P1))
(P : MultiParamsMsgPartialMap (@unlabeled_multi_params _ P0) (@unlabeled_multi_params _ P1))
(L : LabeledMultiParamsLabelTotalMap P0 P1) : Prop :=
{
pt_lb_label_silent_fst_snd : tot_map_label label_silent = label_silent ;
pt_lb_net_handlers_some : forall me src m st m' out st' ps lb,
pt_map_msg m = Some m' ->
lb_net_handlers (tot_map_name me) (tot_map_name src) m' (pt_map_data st) = (lb, out, st', ps) ->
lb <> label_silent /\ tot_mapped_lb_net_handlers_label me src m st = lb ;
pt_lb_net_handlers_none : forall me src m st,
pt_map_msg m = None ->
tot_mapped_lb_net_handlers_label me src m st = label_silent ;
pt_lb_input_handlers_some : forall me inp st inp' out st' ps lb,
pt_map_input inp = Some inp' ->
lb_input_handlers (tot_map_name me) inp' (pt_map_data st) = (lb, out, st', ps) ->
lb <> label_silent /\ tot_mapped_lb_input_handlers_label me inp st = lb ;
pt_lb_input_handlers_none : forall me inp st,
pt_map_input inp = None ->
tot_mapped_lb_input_handlers_label me inp st = label_silent
}.
Section PartialMapExecutionSimulations.
Context {base_fst : BaseParams}.
Context {base_snd : BaseParams}.
Context {labeled_multi_fst : LabeledMultiParams base_fst}.
Context {labeled_multi_snd : LabeledMultiParams base_snd}.
Context {base_map : BaseParamsPartialMap base_fst base_snd}.
Context {name_map : MultiParamsNameTotalMap (@unlabeled_multi_params _ labeled_multi_fst) (@unlabeled_multi_params _ labeled_multi_snd)}.
Context {msg_map : MultiParamsMsgPartialMap (@unlabeled_multi_params _ labeled_multi_fst) (@unlabeled_multi_params _ labeled_multi_snd)}.
Context {label_map : LabeledMultiParamsLabelTotalMap labeled_multi_fst labeled_multi_snd}.
Context {name_map_bijective : MultiParamsNameTotalMapBijective name_map}.
Context {multi_map_congr : MultiParamsPartialMapCongruency base_map name_map msg_map}.
Context {multi_map_lb_congr : LabeledMultiParamsPartialMapCongruency base_map name_map msg_map label_map}.
Hypothesis label_eq_dec : forall x y : label, {x = y} + {x <> y}.
Hypothesis tot_map_label_injective :
forall l l', tot_map_label l = tot_map_label l' -> l = l'.
Hypothesis label_tot_mapped :
forall l, exists l', l = tot_map_label l'.
(* lb_step_failure *)

Theorem lb_step_failure_pt_mapped_simulation_1_non_silent :
forall net net' failed failed' lb tr,
tot_map_label lb <> label_silent ->
@lb_step_failure _ labeled_multi_fst (failed, net) lb (failed', net') tr ->
@lb_step_failure _ labeled_multi_snd (List.map tot_map_name failed, pt_map_net net) (tot_map_label lb) (List.map tot_map_name failed', pt_map_net net') (filterMap pt_map_trace_occ tr).