Theory SM_Visible

section ‹Preparing Partial Order Reduction›
theory SM_Visible
imports "../RefPoint/SM_LTL" Rename_Cfg
begin

  section ‹Visible Part of State›

  locale visible_prog = well_typed_prog +
    fixes is_vis_var :: "ident  bool"
  begin
    abbreviation "vis_vars  Collect is_vis_var"

    definition interp_gs :: "global_state  exp set" where
      "interp_gs gs  sm_props (global_state.variables gs |` vis_vars)"
  
    definition interp_gc :: "global_config  exp set" where
      "interp_gc gc  interp_gs (global_config.state gc)"
    
    sublocale lv: Gen_Scheduler'_linit
      cfgc la_en' la_ex' 
      "{init_gc}" interp_gc .

    lemma lv_accept_conv: "lv.sa.accept w 
       (w'. w=interp_gs o w'  ref_accept prog w')"
      unfolding lih'_accept_eq[symmetric]
      unfolding lih'.sa.accept_def lv.sa.accept_def
      unfolding lih'.sa.is_run_def
      unfolding lv.sa.is_run_def
      apply simp
      unfolding interp_gc_def[abs_def]
      by fastforce

  end
end