We prove in this module that the composition of strategy is adequate. The proof essentially proceeds by showing that "evaluating and observing", i.e., reduce, is a solution of the same equations as is the composition of strategies.
This argument assumes we can rely on the unicity of such a solution: we prove this fact by proving that these equations are eventually guarded in OGS/CompGuarded.v.
We consider a language abstractly captured as a machine satisfying an appropriate axiomatization.
Context {T C} {CC : context T C} {CL : context_laws T C}. Context {val} {VM : subst_monoid val} {VML : subst_monoid_laws val}. Context {conf} {CM : subst_module val conf} {CML : subst_module_laws val conf}. Context {obs : obs_struct T C} {M : machine val conf obs} {ML : machine_laws val conf obs}. Context {VV : var_assumptions val}.
We define reduce, called "zip-then-eval-then-observe" in the paper.
Definition reduce {Ξ} (x : reduce_t Ξ) : delay (obsβ Ξ) := evalβ (x.(red_act).(ms_conf) ββ [ a_id , bicollapse x.(red_act).(ms_env) x.(red_pas) ]) . Definition reduce' {Ξ} : forall i, reduce_t Ξ -> itree β β (fun _ : T1 => obsβ Ξ) i := fun 'T1_0 => reduce .
Equipped with eventually guarded equations, we are ready to prove the adequacy.
First a technical lemma, rewriting one step of compo, then reduce to a simpler more explicit form.
T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
x: reduce_t Ξ(compo_body x >>= (fun (i : T1) (r : (fun _ : T1 => (reduce_t Ξ + obs β Ξ)%type) i) => match r with | inl y => reduce' i y | inr o => Ret' (o : (fun _ : T1 => obs β Ξ) i) end)) β (eval (ms_conf (red_act x)) >>= (fun (i : T1) (n : (fun _ : T1 => nf obs val (Ξ +βΆ Game.join_pol Game.Act (red_ctx x))) i) => match c_view_cat (nf_var n) with | Vcat_l i0 => Ret' (i0 β nf_obs n) | Vcat_r j => reduce' i {| red_ctx := Game.g_next (j β nf_obs n); red_act := m_strat_resp (red_pas x) (j β nf_obs n); red_pas := ms_env (red_act x);β» nf_args n |} end))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
x: reduce_t Ξ(compo_body x >>= (fun (i : T1) (r : (fun _ : T1 => (reduce_t Ξ + obs β Ξ)%type) i) => match r with | inl y => reduce' i y | inr o => Ret' (o : (fun _ : T1 => obs β Ξ) i) end)) β (eval (ms_conf (red_act x)) >>= (fun (i : T1) (n : (fun _ : T1 => nf obs val (Ξ +βΆ Game.join_pol Game.Act (red_ctx x))) i) => match c_view_cat (nf_var n) with | Vcat_l i0 => Ret' (i0 β nf_obs n) | Vcat_r j => reduce' i {| red_ctx := Game.g_next (j β nf_obs n); red_act := m_strat_resp (red_pas x) (j β nf_obs n); red_pas := ms_env (red_act x);β» nf_args n |} end))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
x: reduce_t Ξ(eval (ms_conf (red_act x)) >>= (fun i : T1 => (fun (i0 : T1) (x1 : obs β Ξ + {m : Game.g_move (red_ctx x) & m_strat_pas Ξ (Game.g_next m)}) => match match x1 with | inl r => inr r | inr e => inl {| red_ctx := Game.g_next (projT1 e); red_act := m_strat_resp (red_pas x) (projT1 e); red_pas := projT2 e |} end with | inl y => reduce' i0 y | inr o => Ret' o end) i β (fun _ : T1 => m_strat_wrap (ms_env (red_act x))) i)) β (eval (ms_conf (red_act x)) >>= (fun (i : T1) (n : nf obs val (Ξ +βΆ Game.join_pol Game.Act (red_ctx x))) => match c_view_cat (nf_var n) with | Vcat_l i0 => Ret' (i0 β nf_obs n) | Vcat_r j => reduce' i {| red_ctx := Game.g_next (j β nf_obs n); red_act := m_strat_resp (red_pas x) (j β nf_obs n); red_pas := ms_env (red_act x);β» nf_args n |} end))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
x: reduce_t Ξdpointwise_relation (fun i : T1 => (eq ==> it_eq (eqα΅’ (fun _ : T1 => obs β Ξ)) (i:=i))%signature) (fun (i : T1) (x0 : nf obs val (Ξ +βΆ Game.join_pol Game.Act (red_ctx x))) => match match m_strat_wrap (ms_env (red_act x)) x0 with | inl r => inr r | inr e => inl {| red_ctx := Game.g_next (projT1 e); red_act := m_strat_resp (red_pas x) (projT1 e); red_pas := projT2 e |} end with | inl y => reduce' i y | inr o => Ret' o end) (fun (i : T1) (n : nf obs val (Ξ +βΆ Game.join_pol Game.Act (red_ctx x))) => match c_view_cat (nf_var n) with | Vcat_l i0 => Ret' (i0 β nf_obs n) | Vcat_r j => reduce' i {| red_ctx := Game.g_next (j β nf_obs n); red_act := m_strat_resp (red_pas x) (j β nf_obs n); red_pas := ms_env (red_act x);β» nf_args n |} end)T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
x: reduce_t Ξ
a: T1
cut_ty: T
i: Ξ +βΆ Game.join_pol Game.Act (red_ctx x) β cut_ty
fill_op: obs cut_ty
fill_args: dom fill_op =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (red_ctx x))match match m_strat_wrap (ms_env (red_act x)) (i β fill_op β¦ fill_args β¦) with | inl r => inr r | inr e => inl {| red_ctx := Game.g_next (projT1 e); red_act := m_strat_resp (red_pas x) (projT1 e); red_pas := projT2 e |} end with | inl y => reduce' a y | inr o => Ret' o end β match c_view_cat (nf_var (i β fill_op β¦ fill_args β¦)) with | Vcat_l i0 => Ret' (i0 β nf_obs (i β fill_op β¦ fill_args β¦)) | Vcat_r j => reduce' a {| red_ctx := Game.g_next (j β nf_obs (i β fill_op β¦ fill_args β¦)); red_act := m_strat_resp (red_pas x) (j β nf_obs (i β fill_op β¦ fill_args β¦)); red_pas := ms_env (red_act x);β» nf_args (i β fill_op β¦ fill_args β¦) |} endnow destruct (c_view_cat i). Qed.T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
x: reduce_t Ξ
a: T1
cut_ty: T
i: Ξ +βΆ Game.join_pol Game.Act (red_ctx x) β cut_ty
fill_op: obs cut_ty
fill_args: dom fill_op =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (red_ctx x))match match match c_view_cat i with | Vcat_l i => inl (i β fill_op) | Vcat_r j => inr ((j β fill_op),' (ms_env (red_act x);β» nf_args (i β fill_op β¦ fill_args β¦))) end with | inl r => inr r | inr e => inl {| red_ctx := red_ctx x βΆβ m_dom (projT1 e); red_act := m_strat_resp (red_pas x) (projT1 e); red_pas := projT2 e |} end with | inl y => reduce' a y | inr o => Ret' o end β match c_view_cat i with | Vcat_l i => Ret' (i β fill_op) | Vcat_r j => reduce' a {| red_ctx := red_ctx x βΆβ dom fill_op; red_act := m_strat_resp (red_pas x) (j β fill_op); red_pas := ms_env (red_act x);β» nf_args (i β fill_op β¦ fill_args β¦) |} end
Next we derive a variant of "evaluation respects substitution", working with partial assignments [ a_id , e ] instead of full assignments.
Definition eval_split_sub {Ξ Ξ} (c : conf (Ξ +βΆ Ξ)) (e : Ξ =[val]> Ξ) : delay (nf obs val Ξ) := eval c >>= fun 'T1_0 n => match c_view_cat (nf_var n) with | Vcat_l i => Ret' (i β nf_obs n β¦ nf_args n β [ v_var, e ] β¦) | Vcat_r j => eval (e _ j β nf_obs n β¦ nf_args n β [ v_var, e ] β¦) end .T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξeval (c ββ [a_id, e]) β eval_split_sub c eT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξeval (c ββ [a_id, e]) β eval_split_sub c eT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξeval (c ββ [a_id, e]) β eval c >>= (fun pat : T1 => let 'T1_0 as x := pat return (nf obs val (Ξ +βΆ Ξ) -> itree β β (fun _ : T1 => nf obs val Ξ) x) in fun n : nf obs val (Ξ +βΆ Ξ) => match c_view_cat (nf_var n) with | Vcat_l i => Ret' (i β nf_obs n β¦ nf_args n β [a_id, e] β¦) | Vcat_r j => eval (e (nf_ty n) j β nf_obs n β¦ nf_args n β [a_id, e] β¦) end)T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξbind_delay' (eval c) (fun n : nf obs val (Ξ +βΆ Ξ) => eval (emb n ββ [a_id, e])) β eval c >>= (fun pat : T1 => let 'T1_0 as x := pat return (nf obs val (Ξ +βΆ Ξ) -> itree β β (fun _ : T1 => nf obs val Ξ) x) in fun n : nf obs val (Ξ +βΆ Ξ) => match c_view_cat (nf_var n) with | Vcat_l i => Ret' (i β nf_obs n β¦ nf_args n β [a_id, e] β¦) | Vcat_r j => eval (e (nf_ty n) j β nf_obs n β¦ nf_args n β [a_id, e] β¦) end)T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξdpointwise_relation (fun i : T1 => (eq ==> it_eq (fun _ : T1 => nf_eq) (i:=i))%signature) (fun pat : T1 => let 'T1_0 as x := pat return (nf obs val (Ξ +βΆ Ξ) -> itree β β (fun _ : T1 => nf obs val Ξ) x) in fun y : nf obs val (Ξ +βΆ Ξ) => eval (emb y ββ [a_id, e])) (fun pat : T1 => let 'T1_0 as x := pat return (nf obs val (Ξ +βΆ Ξ) -> itree β β (fun _ : T1 => nf obs val Ξ) x) in fun n : nf obs val (Ξ +βΆ Ξ) => match c_view_cat (nf_var n) with | Vcat_l i => Ret' (i β nf_obs n β¦ nf_args n β [a_id, e] β¦) | Vcat_r j => eval (e (nf_ty n) j β nf_obs n β¦ nf_args n β [a_id, e] β¦) end)T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξ
cut_ty: T
i: Ξ +βΆ Ξ β cut_ty
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Ξ)it_eq (fun _ : T1 => nf_eq) (eval (a_id i β o β¦ nf_args (i β o β¦ a β¦) β¦ ββ [a_id, e])) match c_view_cat i with | Vcat_l i0 => Ret' (i0 β o β¦ nf_args (i β o β¦ a β¦) β [a_id, e] β¦) | Vcat_r j => eval (e cut_ty j β o β¦ nf_args (i β o β¦ a β¦) β [a_id, e] β¦) endT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξ
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Ξ)
i: Ξ β cut_tyit_eq (fun _ : T1 => nf_eq) (eval (a_id (r_cat_l i) β o β¦ nf_args (r_cat_l i β o β¦ a β¦) β¦ ββ [a_id, e])) (Ret' (i β o β¦ nf_args (r_cat_l i β o β¦ a β¦) β [a_id, e] β¦))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξ
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Ξ)
j: Ξ β cut_tyit_eq (fun _ : T1 => nf_eq) (eval (a_id (r_cat_r j) β o β¦ nf_args (r_cat_r j β o β¦ a β¦) β¦ ββ [a_id, e])) (eval (e cut_ty j β o β¦ nf_args (r_cat_r j β o β¦ a β¦) β [a_id, e] β¦))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξ
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Ξ)
i: Ξ β cut_tyit_eq (fun _ : T1 => nf_eq) (eval (a_id (r_cat_l i) β o β¦ nf_args (r_cat_l i β o β¦ a β¦) β¦ ββ [a_id, e])) (Ret' (i β o β¦ nf_args (r_cat_l i β o β¦ a β¦) β [a_id, e] β¦))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξ
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Ξ)
i: Ξ β cut_tyit_eq (fun _ : T1 => nf_eq) (eval (a_id (r_cat_l i) β o β¦ a β¦ ββ [a_id, e])) (Ret' (i β o β¦ a β [a_id, e] β¦))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξ
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Ξ)
i: Ξ β cut_tyit_eq (fun _ : T1 => nf_eq) (eval (([a_id, e])%asgn cut_ty (r_cat_l i) β o β¦ a β [a_id, e] β¦)) (Ret' (i β o β¦ a β [a_id, e] β¦))now apply (eval_nf_ret (i β o β¦ a β [a_id, e] β¦)).T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξ
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Ξ)
i: Ξ β cut_tyit_eq (fun _ : T1 => nf_eq) (eval (a_id i β o β¦ a β [a_id, e] β¦)) (Ret' (i β o β¦ a β [a_id, e] β¦))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξ
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Ξ)
j: Ξ β cut_tyit_eq (fun _ : T1 => nf_eq) (eval (a_id (r_cat_r j) β o β¦ nf_args (r_cat_r j β o β¦ a β¦) β¦ ββ [a_id, e])) (eval (e cut_ty j β o β¦ nf_args (r_cat_r j β o β¦ a β¦) β [a_id, e] β¦))cbn; now rewrite c_view_cat_simpl_r. Qed.T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf (Ξ +βΆ Ξ)
e: Ξ =[ val ]> Ξ
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Ξ)
j: Ξ β cut_tyit_eq (fun _ : T1 => nf_eq) (eval (([a_id, e])%asgn cut_ty (r_cat_r j) β o β¦ nf_args (r_cat_r j β o β¦ a β¦) β [a_id, e] β¦)) (eval (e cut_ty j β o β¦ nf_args (r_cat_r j β o β¦ a β¦) β [a_id, e] β¦))
Note the use of iter_evg_uniq: the proof of adequacy is proved by unicity of the fixed point, which is made possible by equivalently viewing the fixpoint combinator used to define the composition of strategy as a fixpoint of eventually guarded equations.
T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
a: Game.ogs_ctx
c: m_strat_act Ξ a
e: m_strat_pas Ξ areduce {| red_ctx := a; red_act := c; red_pas := e |} β (c β₯g e)T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
a: Game.ogs_ctx
c: m_strat_act Ξ a
e: m_strat_pas Ξ areduce {| red_ctx := a; red_act := c; red_pas := e |} β (c β₯g e)T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
a: Game.ogs_ctx
c: m_strat_act Ξ a
e: m_strat_pas Ξ aforall (i : T1) (x : reduce_t Ξ), (let 'T1_0 as x0 := i return (reduce_t Ξ -> itree β β (fun _ : T1 => obs β Ξ) x0) in fun u : reduce_t Ξ => reduce u) x β ((let 'T1_0 as x0 := i return (reduce_t Ξ -> itree β β ((fun _ : T1 => reduce_t Ξ) +α΅’ (fun _ : T1 => obs β Ξ)) x0) in fun u : reduce_t Ξ => compo_body u) x >>= (fun (i0 : T1) (r : ((fun _ : T1 => reduce_t Ξ) +α΅’ (fun _ : T1 => obs β Ξ)) i0) => match r with | inl x0 => (let 'T1_0 as x1 := i0 return (reduce_t Ξ -> itree β β (fun _ : T1 => obs β Ξ) x1) in fun u : reduce_t Ξ => reduce u) x0 | inr y => Ret' y end))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctxreduce {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |} β (compo_body {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |} >>= (fun (i : T1) (r : ((fun _ : T1 => reduce_t Ξ) +α΅’ (fun _ : T1 => obs β Ξ)) i) => match r with | inl x => (let 'T1_0 as x0 := i return (reduce_t Ξ -> itree β β (fun _ : T1 => obs β Ξ) x0) in fun u : reduce_t Ξ => reduce u) x | inr y => Ret' y end))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctxreduce {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |} β (eval (ms_conf (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) >>= (fun (i : T1) (n : nf obs val (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))) => match c_view_cat (nf_var n) with | Vcat_l i0 => Ret' (i0 β nf_obs n) | Vcat_r j => reduce' i {| red_ctx := Game.g_next (j β nf_obs n); red_act := m_strat_resp (Strategy.red_pas {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) (j β nf_obs n); red_pas := ms_env (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |});β» nf_args n |} end))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctxthen_to_obs (eval_split_sub (ms_conf (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) (bicollapse (ms_env (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) (Strategy.red_pas {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))) β (eval (ms_conf (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) >>= (fun (i : T1) (n : nf obs val (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))) => match c_view_cat (nf_var n) with | Vcat_l i0 => Ret' (i0 β nf_obs n) | Vcat_r j => reduce' i {| red_ctx := Game.g_next (j β nf_obs n); red_act := m_strat_resp (Strategy.red_pas {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) (j β nf_obs n); red_pas := ms_env (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |});β» nf_args n |} end))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx(eval (ms_conf (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) >>= (fun i : T1 => fmap (fun _ : T1 => nf_to_obs Ξ) i β (fun pat : T1 => let 'T1_0 as x0 := pat return (nf obs val (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) -> itree β β (fun _ : T1 => nf obs val Ξ) x0) in fun n : nf obs val (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) => match c_view_cat (nf_var n) with | Vcat_l i0 => Ret' (i0 β nf_obs n β¦ nf_args n β [a_id, bicollapse (ms_env (red_act {| ...; ...; ... |})) (Strategy.red_pas {| red_ctx := red_ctx; red_act := {| ... |}; red_pas := red_pas |})] β¦) | Vcat_r j => eval (bicollapse (ms_env (red_act {| red_ctx := red_ctx; red_act := {| ...; ... |}; red_pas := red_pas |})) (Strategy.red_pas {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) (nf_ty n) j β nf_obs n β¦ nf_args n β [a_id, bicollapse (ms_env (red_act {| red_ctx := red_ctx; red_act := ...; red_pas := red_pas |})) (Strategy.red_pas {| red_ctx := red_ctx; red_act := {| ...; ... |}; red_pas := red_pas |})] β¦) end) i)) β (eval (ms_conf (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) >>= (fun (i : T1) (n : nf obs val (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))) => match c_view_cat (nf_var n) with | Vcat_l i0 => Ret' (i0 β nf_obs n) | Vcat_r j => reduce' i {| red_ctx := Game.g_next (j β nf_obs n); red_act := m_strat_resp (Strategy.red_pas {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) (j β nf_obs n); red_pas := ms_env (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |});β» nf_args n |} end))T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctxdpointwise_relation (fun i : T1 => (eq ==> it_eq (eqα΅’ (fun _ : T1 => obs β Ξ)) (i:=i))%signature) (fun i : T1 => fmap (fun _ : T1 => nf_to_obs Ξ) i β (let 'T1_0 as x0 := i return (nf obs val (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) -> itree β β (fun _ : T1 => nf obs val Ξ) x0) in fun n : nf obs val (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) => match c_view_cat (nf_var n) with | Vcat_l i0 => Ret' (i0 β nf_obs n β¦ nf_args n β [a_id, bicollapse (ms_env (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) (Strategy.red_pas {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})] β¦) | Vcat_r j => eval (bicollapse (ms_env (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) (Strategy.red_pas {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) (nf_ty n) j β nf_obs n β¦ nf_args n β [a_id, bicollapse (ms_env (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})) (Strategy.red_pas {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |})] β¦) end)) (fun (i : T1) (n : nf obs val (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))) => match c_view_cat (nf_var n) with | Vcat_l i0 => Ret' (i0 β nf_obs n) | Vcat_r j => reduce' i {| red_ctx := Game.g_next (j β nf_obs n); red_act := m_strat_resp (Strategy.red_pas {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) (j β nf_obs n); red_pas := ms_env (red_act {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |});β» nf_args n |} end)T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
i: Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))((fun _ : T1 => nf_to_obs Ξ) <$> match c_view_cat i with | Vcat_l i0 => Ret' (i0 β o β¦ nf_args (i β o β¦ a β¦) β [a_id, bicollapse v red_pas] β¦) | Vcat_r j => eval (bicollapse v red_pas cut_ty j β o β¦ nf_args (i β o β¦ a β¦) β [a_id, bicollapse v red_pas] β¦) end) β match c_view_cat i with | Vcat_l i => Ret' (i β o) | Vcat_r j => reduce {| red_ctx := red_ctx βΆβ dom o; red_act := m_strat_resp red_pas (j β o); red_pas := v;β» nf_args (i β o β¦ a β¦) |} endT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
i: Ξ β cut_ty((fun _ : T1 => nf_to_obs Ξ) <$> match c_view_cat (r_cat_l i) with | Vcat_l i0 => Ret' (i0 β o β¦ nf_args (r_cat_l i β o β¦ a β¦) β [a_id, bicollapse v red_pas] β¦) | Vcat_r j => eval (bicollapse v red_pas cut_ty j β o β¦ nf_args (r_cat_l i β o β¦ a β¦) β [a_id, bicollapse v red_pas] β¦) end) β match c_view_cat (r_cat_l i) with | Vcat_l i => Ret' (i β o) | Vcat_r j => reduce {| red_ctx := red_ctx βΆβ dom o; red_act := m_strat_resp red_pas (j β o); red_pas := v;β» nf_args (r_cat_l i β o β¦ a β¦) |} endT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty((fun _ : T1 => nf_to_obs Ξ) <$> match c_view_cat (r_cat_r j) with | Vcat_l i => Ret' (i β o β¦ nf_args (r_cat_r j β o β¦ a β¦) β [a_id, bicollapse v red_pas] β¦) | Vcat_r j0 => eval (bicollapse v red_pas cut_ty j0 β o β¦ nf_args (r_cat_r j β o β¦ a β¦) β [a_id, bicollapse v red_pas] β¦) end) β match c_view_cat (r_cat_r j) with | Vcat_l i => Ret' (i β o) | Vcat_r j0 => reduce {| red_ctx := red_ctx βΆβ dom o; red_act := m_strat_resp red_pas (j0 β o); red_pas := v;β» nf_args (r_cat_r j β o β¦ a β¦) |} endT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
i: Ξ β cut_ty((fun _ : T1 => nf_to_obs Ξ) <$> match c_view_cat (r_cat_l i) with | Vcat_l i0 => Ret' (i0 β o β¦ nf_args (r_cat_l i β o β¦ a β¦) β [a_id, bicollapse v red_pas] β¦) | Vcat_r j => eval (bicollapse v red_pas cut_ty j β o β¦ nf_args (r_cat_l i β o β¦ a β¦) β [a_id, bicollapse v red_pas] β¦) end) β match c_view_cat (r_cat_l i) with | Vcat_l i => Ret' (i β o) | Vcat_r j => reduce {| red_ctx := red_ctx βΆβ dom o; red_act := m_strat_resp red_pas (j β o); red_pas := v;β» nf_args (r_cat_l i β o β¦ a β¦) |} endapply it_eq_unstep; cbn; do 2 econstructor.T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
i: Ξ β cut_ty((fun _ : T1 => nf_to_obs Ξ) <$> Ret' (i β o β¦ nf_args (r_cat_l i β o β¦ a β¦) β [a_id, bicollapse v red_pas] β¦)) β Ret' (i β o)T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty((fun _ : T1 => nf_to_obs Ξ) <$> match c_view_cat (r_cat_r j) with | Vcat_l i => Ret' (i β o β¦ nf_args (r_cat_r j β o β¦ a β¦) β [a_id, bicollapse v red_pas] β¦) | Vcat_r j0 => eval (bicollapse v red_pas cut_ty j0 β o β¦ nf_args (r_cat_r j β o β¦ a β¦) β [a_id, bicollapse v red_pas] β¦) end) β match c_view_cat (r_cat_r j) with | Vcat_l i => Ret' (i β o) | Vcat_r j0 => reduce {| red_ctx := red_ctx βΆβ dom o; red_act := m_strat_resp red_pas (j0 β o); red_pas := v;β» nf_args (r_cat_r j β o β¦ a β¦) |} endT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ nf_args (r_cat_r j β o β¦ a β¦) β [a_id, bicollapse v red_pas] β¦)) β reduce {| red_ctx := red_ctx βΆβ dom o; red_act := m_strat_resp red_pas (j β o); red_pas := v;β» nf_args (r_cat_r j β o β¦ a β¦) |}T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tybicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])(* AAAAA setoid rewriting!!!! *)T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tybicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1 β [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]) β o β¦ (r_cat_rr α΅£β a_id) β [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]] β¦T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty?y = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1 β [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]) β o β¦ (r_cat_rr α΅£β a_id) β [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]] β¦T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tybicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = ?yT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tyval (Ξ +βΆ Game.join_pol Game.Pas red_ctx) cut_tyT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty(Ξ +βΆ Game.join_pol Game.Pas red_ctx) =[ val ]> ΞT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty?y = (?y0 α΅₯β ?y1) β o β¦ (r_cat_rr α΅£β a_id) β [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]] β¦T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tyββ red_pas cut_ty j = ?y0T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tyr_emb r_cat3_1 β [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]] β‘β ?y1T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tybicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = ?yT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tyr_emb r_cat3_1 β [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]] β‘β ?y1now rewrite r_cat3_1_simpl; eauto.T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tyr_cat3_1 α΅£β [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]] β‘β ?y1T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tyval (Ξ +βΆ Game.join_pol Game.Pas red_ctx) cut_tyT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty?y = (?y0 α΅₯β [a_id, bicollapse v red_pas]) β o β¦ (r_cat_rr α΅£β a_id) β [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]] β¦T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tyββ red_pas cut_ty j = ?y0T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tybicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = ?yT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tybicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β [a_id, bicollapse v red_pas]) β o β¦ (r_cat_rr α΅£β a_id) β [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]] β¦T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tybicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β [a_id, bicollapse v red_pas]) β o β¦ r_cat_rr α΅£β [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]] β¦T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tysubst_monoid_laws valT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tybicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β [a_id, bicollapse v red_pas]) β o β¦ r_cat_r α΅£β (r_cat_r α΅£β [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]) β¦T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tysubst_monoid_laws valT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tybicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β [a_id, bicollapse v red_pas]) β o β¦ a β [a_id, bicollapse v red_pas] β¦T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tysubst_monoid_laws valT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: (@eq β (fun _ : Game.join_pol (Game.p_switch Game.Pas) red_ctx β cut_ty => val Ξ cut_ty)) j ((ββ red_pas β [a_id, bicollapse v red_pas])%asgn cut_ty j) (bicollapse v red_pas cut_ty j)bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β [a_id, bicollapse v red_pas]) β o β¦ a β [a_id, bicollapse v red_pas] β¦T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tysubst_monoid_laws valT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_tysubst_monoid_laws valT, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
H: bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦ = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]
xx:= bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦: conf Ξ((fun _ : T1 => nf_to_obs Ξ) <$> eval (bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦)) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])now rewrite H. Qed.T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ: C
red_ctx: Game.ogs_ctx
u: conf (Ξ +βΆ Game.join_pol Game.Act red_ctx)
v: ogs_env Ξ Game.Act red_ctx
red_pas: m_strat_pas Ξ red_ctx
cut_ty: T
o: obs cut_ty
a: dom o =[ val ]> (Ξ +βΆ Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}))
j: Game.join_pol Game.Act (Strategy.red_ctx {| red_ctx := red_ctx; red_act := {| ms_conf := u; ms_env := v |}; red_pas := red_pas |}) β cut_ty
xx:= bicollapse v red_pas cut_ty j β o β¦ a β [a_id, bicollapse v red_pas] β¦: conf Ξ
H: xx = (ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]]((fun _ : T1 => nf_to_obs Ξ) <$> eval xx) β evalβ ((ββ red_pas cut_ty j α΅₯β r_emb r_cat3_1) β o β¦ r_cat_rr α΅£β a_id β¦ ββ [a_id, [bicollapse v red_pas, a β [a_id, bicollapse v red_pas]]])
Adequacy (Def 6.1) holds.
T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf Ξ
e: Ξ =[ val ]> Ξevalβ (c ββ e) β (inj_init_act Ξ c β₯g inj_init_pas e)T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf Ξ
e: Ξ =[ val ]> Ξevalβ (c ββ e) β (inj_init_act Ξ c β₯g inj_init_pas e)now rewrite <- c_sub_sub, a_ren_r_simpl, a_ren_l_comp, 2 a_cat_proj_r, a_ren_comp, a_cat_proj_l, a_comp_id. Qed. End with_param.T, C: Type
CC: context T C
CL: context_laws T C
val: Famβ T C
VM: subst_monoid val
VML: subst_monoid_laws val
conf: Famβ T C
CM: subst_module val conf
CML: subst_module_laws val conf
obs: obs_struct T C
M: machine val conf obs
ML: machine_laws val conf obs
VV: var_assumptions val
Ξ, Ξ: C
c: conf Ξ
e: Ξ =[ val ]> Ξevalβ (c ββ e) β evalβ ((c ββ r_emb (r_cat_r α΅£β r_cat_r)) ββ [a_id, [!, (e βα΅£ r_cat_l) β [a_id, !]]])