Definition marshal j m args tm targs :=
Build_SM_Injection
(fun _ => false) (fun _ => false)
(fun _ => false) (fun _ => false)
(fun _ => None)
(DomSrc j)
(DomTgt j)
(REACH m (getBlocks args))
(REACH tm (getBlocks targs))
(as_inj j).

(* Specifications: *)
Lemma as_inj_marshal j m args tm targs :
as_inj (marshal j m args tm targs) = as_inj j.
Lemma foreign_of_marshal j m args tm targs :
foreign_of (marshal j m args tm targs)
= restrict (as_inj j) (REACH m (getBlocks args)).
Lemma DomSrc_marshal j m args tm targs :
DomSrc (marshal j m args tm targs) = DomSrc j.
Lemma injsep_marshal' j j' m args tm targs m1 m2 :
sm_inject_separated (marshal j m args tm targs) j' m1 m2 ->
sm_inject_separated j j' m1 m2.
Lemma restrict_as_inj_eq j j' m1 m2 :
SM_wd j ->
SM_wd j' ->
inject_incr (as_inj j) (as_inj j') ->
sm_inject_separated j j' m1 m2 ->
sm_valid j m1 m2 ->
restrict (as_inj j') (DomSrc j) = as_inj j.
Lemma reach_in_exported_src b m args j :
REACH m (getBlocks args) b=true -> REACH m (exportedSrc j args) b=true.