Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Sub-expression "(fun
- lemma : M.memEffect m (step_sem_tiered ge e s MCFG r) =
- idM
- (M.memEffect m (step_sem_tiered ge e s MCFG r))
- =>
- reflexive_proper Classes.equiv
- (M.memEffect m (step_sem_tiered ge e s MCFG r))
- (idM (M.memEffect m (step_sem_tiered ge e s MCFG r)))
- lemma
- (M.memEffect m
- (step_sem_tiered ge e s (monomap cfgp MCFG) r))
- (M.memEffect m
- (step_sem_tiered ge e s (monomap cfgp MCFG) r))
- (eq_proper_proxy
- (M.memEffect m
- (step_sem_tiered ge e s (monomap cfgp MCFG) r))))
- matchM
- (eq_ind_r
- (Classes.equiv
- (idM (M.memEffect m (step_sem_tiered ge e s MCFG r))))
- match
- r as i
- return
- (match
- match
- match i with
- | IRDone v => Ret (Event:=IO.IO) v
- | IREnterFunction _ _ =>
- bindM (execInterpreter ge e s MCFG i)
- (fun rnext : InterpreterResult =>
- step_sem_tiered ge e s MCFG rnext)
- | IRReturnFunction _ =>
- bindM (execInterpreter ge e s MCFG i)
- (fun rnext : InterpreterResult =>
- step_sem_tiered ge e s MCFG rnext)
- | IRResumeFunction _ =>
- bindM (execInterpreter ge e s MCFG i)
- (fun rnext : InterpreterResult =>
- step_sem_tiered ge e s MCFG rnext)
- end
- with
- | Ret x => Ret (Event:=IO.IO) (m, x)
- | @Vis _ _ Y io k =>
- match M.mem_step io m with
- | inl _ =>
- Err (Event:=IO.IO) (X:=
- M.memory * dvalue)
- "uninterpretiable IO call "
- | inr (m', v) =>
- Trace.Tau (M.memEffect m' (k v))
- end
- | Trace.Tau x' => Trace.Tau (M.memEffect m x')
- | Err e =>
- Err (Event:=IO.IO) (X:=M.memory * dvalue) e
- end
- with
- | Ret x => Ret x
- | @Vis _ _ Y e k => Vis e k
- | Trace.Tau k => Trace.Tau k
- | Err s => Err s
- end
- ≡ match
- match
- match i with
- | IRDone v => Ret (Event:=IO.IO) v
- | IREnterFunction _ _ =>
- bindM
- (execInterpreter ge e s
- (monomap cfgp MCFG) i)
- (fun rnext : InterpreterResult =>
- step_sem_tiered ge e s
- (monomap cfgp MCFG) rnext)
- | IRReturnFunction _ =>
- bindM
- (execInterpreter ge e s
- (monomap cfgp MCFG) i)
- (fun rnext : InterpreterResult =>
- step_sem_tiered ge e s
- (monomap cfgp MCFG) rnext)
- | IRResumeFunction _ =>
- bindM
- (execInterpreter ge e s
- (monomap cfgp MCFG) i)
- (fun rnext : InterpreterResult =>
- step_sem_tiered ge e s
- (monomap cfgp MCFG) rnext)
- end
- with
- | Ret x => Ret (Event:=IO.IO) (m, x)
- | @Vis _ _ Y io k =>
- match M.mem_step io m with
- | inl _ =>
- Err (Event:=IO.IO)
- (X:=M.memory * dvalue)
- "uninterpretiable IO call "
- | inr (m', v) =>
- Trace.Tau (M.memEffect m' (k v))
- end
- | Trace.Tau x' => Trace.Tau (M.memEffect m x')
- | Err e =>
- Err (Event:=IO.IO) (X:=M.memory * dvalue) e
- end
- with
- | Ret x => Ret x
- | @Vis _ _ Y e k => Vis e k
- | Trace.Tau k => Trace.Tau k
- | Err s => Err s
- end)
- with
- | IRDone v => EquivRet
- | IREnterFunction fnid args =>
- ?X1361@{__:=cfgp; __:=PRESERVE_CFG_EFFECT; __:=CIH;
- __:=ge; __:=e; __:=s; __:=MCFG; __:=fnid;
- __:=args; __:=m}
- | IRReturnFunction fres =>
- match
- fres as f
- return
- (match
- match
- match
- execInterpreter ge e s MCFG
- (IRReturnFunction f)
- with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e s MCFG x)
- | @Vis _ _ Y e0 k =>
- Vis e0
- (fun y : Y =>
- (cofix
- go (s : M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e s
- MCFG x)
- | @Vis _ _ Y0 e k0 =>
- Vis e
- (fun y0 : Y0 => go (k0 y0))
- | Trace.Tau k0 =>
- Trace.Tau (go k0)
- | Err s0 =>
- Err (Event:=IO.IO)
- (X:=dvalue) s0
- end) (k y))
- | Trace.Tau k =>
- Trace.Tau
- ((cofix
- go (s : M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e s
- MCFG x)
- | @Vis _ _ Y e k0 =>
- Vis e
- (fun y : Y => go (k0 y))
- | Trace.Tau k0 =>
- Trace.Tau (go k0)
- | Err s0 =>
- Err (Event:=IO.IO)
- (X:=dvalue) s0
- end) k)
- | Err s => Err (Event:=IO.IO) (X:=dvalue) s
- end
- with
- | Ret x => Ret (Event:=IO.IO) (m, x)
- | @Vis _ _ Y io k =>
- match M.mem_step io m with
- | inl _ =>
- Err (Event:=IO.IO)
- (X:=M.memory * dvalue)
- "uninterpretiable IO call "
- | inr (m', v) =>
- Trace.Tau (M.memEffect m' (k v))
- end
- | Trace.Tau x' =>
- Trace.Tau (M.memEffect m x')
- | Err e =>
- Err (Event:=IO.IO) (X:=
- M.memory * dvalue) e
- end
- with
- | Ret x => Ret x
- | @Vis _ _ Y e k => Vis e k
- | Trace.Tau k => Trace.Tau k
- | Err s => Err s
- end
- ≡ match
- match
- match
- execInterpreter ge e s
- (monomap cfgp MCFG)
- (IRReturnFunction f)
- with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e s
- (monomap cfgp MCFG) x)
- | @Vis _ _ Y e0 k =>
- Vis e0
- (fun y : Y =>
- (cofix
- go (s :
- M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e s
- (monomap cfgp MCFG) x)
- | @Vis _ _ Y0 e k0 =>
- Vis e
- (fun y0 : Y0 => go (k0 y0))
- | Trace.Tau k0 =>
- Trace.Tau (go k0)
- | Err s0 =>
- Err (Event:=IO.IO)
- (X:=dvalue) s0
- end)
- (k y))
- | Trace.Tau k =>
- Trace.Tau
- ((cofix
- go (s :
- M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e s
- (monomap cfgp MCFG) x)
- | @Vis _ _ Y e k0 =>
- Vis e
- (fun y : Y => go (k0 y))
- | Trace.Tau k0 =>
- Trace.Tau (go k0)
- | Err s0 =>
- Err (Event:=IO.IO)
- (X:=dvalue) s0
- end) k)
- | Err s =>
- Err (Event:=IO.IO) (X:=dvalue) s
- end
- with
- | Ret x => Ret (Event:=IO.IO) (m, x)
- | @Vis _ _ Y io k =>
- match M.mem_step io m with
- | inl _ =>
- Err (Event:=IO.IO)
- (X:=M.memory * dvalue)
- "uninterpretiable IO call "
- | inr (m', v) =>
- Trace.Tau (M.memEffect m' (k v))
- end
- | Trace.Tau x' =>
- Trace.Tau (M.memEffect m x')
- | Err e =>
- Err (Event:=IO.IO)
- (X:=M.memory * dvalue) e
- end
- with
- | Ret x => Ret x
- | @Vis _ _ Y e k => Vis e k
- | Trace.Tau k => Trace.Tau k
- | Err s => Err s
- end)
- with
- | FRReturn d =>
- match
- s as l
- return
- (match
- match
- match
- execInterpreter ge e l MCFG
- (IRReturnFunction (FRReturn d))
- with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e l MCFG x)
- | @Vis _ _ Y e0 k =>
- Vis e0
- (fun y : Y =>
- (cofix
- go (s :
- M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e l
- MCFG x)
- | @Vis _ _ Y0 e k0 =>
- Vis e
- (fun y0 : Y0 => go (k0 y0))
- | Trace.Tau k0 =>
- Trace.Tau (go k0)
- | Err s0 =>
- Err (Event:=IO.IO)
- (X:=dvalue) s0
- end)
- (k y))
- | Trace.Tau k =>
- Trace.Tau
- ((cofix
- go (s :
- M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e l
- MCFG x)
- | @Vis _ _ Y e k0 =>
- Vis e
- (fun y : Y => go (k0 y))
- | Trace.Tau k0 =>
- Trace.Tau (go k0)
- | Err s0 =>
- Err (Event:=IO.IO)
- (X:=dvalue) s0
- end) k)
- | Err s =>
- Err (Event:=IO.IO) (X:=dvalue) s
- end
- with
- | Ret x => Ret (Event:=IO.IO) (m, x)
- | @Vis _ _ Y io k =>
- match M.mem_step io m with
- | inl _ =>
- Err (Event:=IO.IO)
- (X:=M.memory * dvalue)
- "uninterpretiable IO call "
- | inr (m', v) =>
- Trace.Tau (M.memEffect m' (k v))
- end
- | Trace.Tau x' =>
- Trace.Tau (M.memEffect m x')
- | Err e =>
- Err (Event:=IO.IO)
- (X:=M.memory * dvalue) e
- end
- with
- | Ret x => Ret x
- | @Vis _ _ Y e k => Vis e k
- | Trace.Tau k => Trace.Tau k
- | Err s => Err s
- end
- ≡ match
- match
- match
- execInterpreter ge e l
- (monomap cfgp MCFG)
- (IRReturnFunction (FRReturn d))
- with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e l
- (monomap cfgp MCFG) x)
- | @Vis _ _ Y e0 k =>
- Vis e0
- (fun y : Y =>
- (cofix
- go
- (s :
- M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e l
- (monomap cfgp MCFG) x)
- | @Vis _ _ Y0 e k0 =>
- Vis e
- (fun y0 : Y0 => go (k0 y0))
- | Trace.Tau k0 =>
- Trace.Tau (go k0)
- | Err s0 =>
- Err (Event:=IO.IO)
- (X:=dvalue) s0
- end)
- (k y))
- | Trace.Tau k =>
- Trace.Tau
- ((cofix
- go
- (s :
- M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e l
- (monomap cfgp MCFG) x)
- | @Vis _ _ Y e k0 =>
- Vis e
- (fun y : Y => go (k0 y))
- | Trace.Tau k0 =>
- Trace.Tau (go k0)
- | Err s0 =>
- Err (Event:=IO.IO)
- (X:=dvalue) s0
- end) k)
- | Err s =>
- Err (Event:=IO.IO) (X:=dvalue) s
- end
- with
- | Ret x => Ret (Event:=IO.IO) (m, x)
- | @Vis _ _ Y io k =>
- match M.mem_step io m with
- | inl _ =>
- Err (Event:=IO.IO)
- (X:=
- M.memory * dvalue)
- "uninterpretiable IO call "
- | inr (m', v) =>
- Trace.Tau
- (M.memEffect m' (k v))
- end
- | Trace.Tau x' =>
- Trace.Tau (M.memEffect m x')
- | Err e =>
- Err (Event:=IO.IO)
- (X:=M.memory * dvalue) e
- end
- with
- | Ret x => Ret x
- | @Vis _ _ Y e k => Vis e k
- | Trace.Tau k => Trace.Tau k
- | Err s => Err s
- end)
- with
- | [] => EquivTau (CIH ge e [] MCFG (IRDone d) m)
- | f :: s0 =>
- ?X1402@{__:=cfgp; __:=PRESERVE_CFG_EFFECT;
- __:=CIH; __:=ge; __:=e; __:=f;
- __:=s0; __:=MCFG; __:=d; __:=m}
- end
- | FRReturnVoid =>
- ?X1391@{__:=cfgp; __:=PRESERVE_CFG_EFFECT;
- __:=CIH; __:=ge; __:=e; __:=s; __:=MCFG;
- __:=m}
- | FRCall f l i p =>
- ?X1392@{__:=cfgp; __:=PRESERVE_CFG_EFFECT;
- __:=CIH; __:=ge; __:=e; __:=s; __:=MCFG;
- __:=f; __:=l; __:=i; __:=p; __:=m}
- | FRCallVoid f l p =>
- ?X1393@{__:=cfgp; __:=PRESERVE_CFG_EFFECT;
- __:=CIH; __:=ge; __:=e; __:=s; __:=MCFG;
- __:=f; __:=l; __:=p; __:=m}
- end
- | IRResumeFunction pc0 =>
- ?X1363@{__:=cfgp; __:=PRESERVE_CFG_EFFECT; __:=CIH;
- __:=ge; __:=e; __:=s; __:=MCFG; __:=pc0;
- __:=m}
- end matchM)" not in guarded form (should be a
- constructor, an abstraction, a match, a cofix or a recursive
- call).
- Recursive definition is:
- "fun (ge : genv) (e : env) (s : stack) (MCFG : mcfg)
- (r : InterpreterResult) (m : M.memory) =>
- (fun
- lemma : M.memEffect m (step_sem_tiered ge e s MCFG r) =
- idM (M.memEffect m (step_sem_tiered ge e s MCFG r)) =>
- reflexive_proper Classes.equiv
- (M.memEffect m (step_sem_tiered ge e s MCFG r))
- (idM (M.memEffect m (step_sem_tiered ge e s MCFG r))) lemma
- (M.memEffect m (step_sem_tiered ge e s (monomap cfgp MCFG) r))
- (M.memEffect m (step_sem_tiered ge e s (monomap cfgp MCFG) r))
- (eq_proper_proxy
- (M.memEffect m (step_sem_tiered ge e s (monomap cfgp MCFG) r))))
- matchM
- (eq_ind_r
- (Classes.equiv (idM (M.memEffect m (step_sem_tiered ge e s MCFG r))))
- match
- r as i
- return
- (match
- match
- match i with
- | IRDone v => Ret (Event:=IO.IO) v
- | IREnterFunction _ _ =>
- bindM (execInterpreter ge e s MCFG i)
- (fun rnext : InterpreterResult =>
- step_sem_tiered ge e s MCFG rnext)
- | IRReturnFunction _ =>
- bindM (execInterpreter ge e s MCFG i)
- (fun rnext : InterpreterResult =>
- step_sem_tiered ge e s MCFG rnext)
- | IRResumeFunction _ =>
- bindM (execInterpreter ge e s MCFG i)
- (fun rnext : InterpreterResult =>
- step_sem_tiered ge e s MCFG rnext)
- end
- with
- | Ret x => Ret (Event:=IO.IO) (m, x)
- | @Vis _ _ Y io k =>
- match M.mem_step io m with
- | inl _ =>
- Err (Event:=IO.IO) (X:=M.memory * dvalue)
- "uninterpretiable IO call "
- | inr (m', v) => Trace.Tau (M.memEffect m' (k v))
- end
- | Trace.Tau x' => Trace.Tau (M.memEffect m x')
- | Err e0 => Err (Event:=IO.IO) (X:=M.memory * dvalue) e0
- end
- with
- | Ret x => Ret x
- | @Vis _ _ Y e0 k => Vis e0 k
- | Trace.Tau k => Trace.Tau k
- | Err s0 => Err s0
- end
- ≡ match
- match
- match i with
- | IRDone v => Ret (Event:=IO.IO) v
- | IREnterFunction _ _ =>
- bindM (execInterpreter ge e s (monomap cfgp MCFG) i)
- (fun rnext : InterpreterResult =>
- step_sem_tiered ge e s (monomap cfgp MCFG) rnext)
- | IRReturnFunction _ =>
- bindM (execInterpreter ge e s (monomap cfgp MCFG) i)
- (fun rnext : InterpreterResult =>
- step_sem_tiered ge e s (monomap cfgp MCFG) rnext)
- | IRResumeFunction _ =>
- bindM (execInterpreter ge e s (monomap cfgp MCFG) i)
- (fun rnext : InterpreterResult =>
- step_sem_tiered ge e s (monomap cfgp MCFG) rnext)
- end
- with
- | Ret x => Ret (Event:=IO.IO) (m, x)
- | @Vis _ _ Y io k =>
- match M.mem_step io m with
- | inl _ =>
- Err (Event:=IO.IO) (X:=M.memory * dvalue)
- "uninterpretiable IO call "
- | inr (m', v) => Trace.Tau (M.memEffect m' (k v))
- end
- | Trace.Tau x' => Trace.Tau (M.memEffect m x')
- | Err e0 => Err (Event:=IO.IO) (X:=M.memory * dvalue) e0
- end
- with
- | Ret x => Ret x
- | @Vis _ _ Y e0 k => Vis e0 k
- | Trace.Tau k => Trace.Tau k
- | Err s0 => Err s0
- end)
- with
- | IRDone v => EquivRet
- | IREnterFunction fnid args =>
- ?X1361@{__:=cfgp; __:=PRESERVE_CFG_EFFECT; __:=CIH; __:=ge; __:=e;
- __:=s; __:=MCFG; __:=fnid; __:=args; __:=m}
- | IRReturnFunction fres =>
- match
- fres as f
- return
- (match
- match
- match
- execInterpreter ge e s MCFG (IRReturnFunction f)
- with
- | Ret x => Trace.Tau (step_sem_tiered ge e s MCFG x)
- | @Vis _ _ Y e0 k =>
- Vis e0
- (fun y : Y =>
- (cofix go (s0 : M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s0 with
- | Ret x =>
- Trace.Tau (step_sem_tiered ge e s MCFG x)
- | @Vis _ _ Y0 e1 k0 =>
- Vis e1 (fun y0 : Y0 => go (k0 y0))
- | Trace.Tau k0 => Trace.Tau (go k0)
- | Err s1 => Err (Event:=IO.IO) (X:=dvalue) s1
- end) (k y))
- | Trace.Tau k =>
- Trace.Tau
- ((cofix go (s0 : M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s0 with
- | Ret x =>
- Trace.Tau (step_sem_tiered ge e s MCFG x)
- | @Vis _ _ Y e0 k0 =>
- Vis e0 (fun y : Y => go (k0 y))
- | Trace.Tau k0 => Trace.Tau (go k0)
- | Err s1 => Err (Event:=IO.IO) (X:=dvalue) s1
- end) k)
- | Err s0 => Err (Event:=IO.IO) (X:=dvalue) s0
- end
- with
- | Ret x => Ret (Event:=IO.IO) (m, x)
- | @Vis _ _ Y io k =>
- match M.mem_step io m with
- | inl _ =>
- Err (Event:=IO.IO) (X:=M.memory * dvalue)
- "uninterpretiable IO call "
- | inr (m', v) => Trace.Tau (M.memEffect m' (k v))
- end
- | Trace.Tau x' => Trace.Tau (M.memEffect m x')
- | Err e0 => Err (Event:=IO.IO) (X:=M.memory * dvalue) e0
- end
- with
- | Ret x => Ret x
- | @Vis _ _ Y e0 k => Vis e0 k
- | Trace.Tau k => Trace.Tau k
- | Err s0 => Err s0
- end
- ≡ match
- match
- match
- execInterpreter ge e s (monomap cfgp MCFG)
- (IRReturnFunction f)
- with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e s (monomap cfgp MCFG) x)
- | @Vis _ _ Y e0 k =>
- Vis e0
- (fun y : Y =>
- (cofix go (s0 : M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s0 with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e s
- (monomap cfgp MCFG) x)
- | @Vis _ _ Y0 e1 k0 =>
- Vis e1 (fun y0 : Y0 => go (k0 y0))
- | Trace.Tau k0 => Trace.Tau (go k0)
- | Err s1 => Err (Event:=IO.IO) (X:=dvalue) s1
- end) (k y))
- | Trace.Tau k =>
- Trace.Tau
- ((cofix go (s0 : M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s0 with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e s
- (monomap cfgp MCFG) x)
- | @Vis _ _ Y e0 k0 =>
- Vis e0 (fun y : Y => go (k0 y))
- | Trace.Tau k0 => Trace.Tau (go k0)
- | Err s1 => Err (Event:=IO.IO) (X:=dvalue) s1
- end) k)
- | Err s0 => Err (Event:=IO.IO) (X:=dvalue) s0
- end
- with
- | Ret x => Ret (Event:=IO.IO) (m, x)
- | @Vis _ _ Y io k =>
- match M.mem_step io m with
- | inl _ =>
- Err (Event:=IO.IO) (X:=M.memory * dvalue)
- "uninterpretiable IO call "
- | inr (m', v) => Trace.Tau (M.memEffect m' (k v))
- end
- | Trace.Tau x' => Trace.Tau (M.memEffect m x')
- | Err e0 => Err (Event:=IO.IO) (X:=M.memory * dvalue) e0
- end
- with
- | Ret x => Ret x
- | @Vis _ _ Y e0 k => Vis e0 k
- | Trace.Tau k => Trace.Tau k
- | Err s0 => Err s0
- end)
- with
- | FRReturn d =>
- match
- s as l
- return
- (match
- match
- match
- execInterpreter ge e l MCFG
- (IRReturnFunction (FRReturn d))
- with
- | Ret x => Trace.Tau (step_sem_tiered ge e l MCFG x)
- | @Vis _ _ Y e0 k =>
- Vis e0
- (fun y : Y =>
- (cofix go (s0 : M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s0 with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e l MCFG x)
- | @Vis _ _ Y0 e1 k0 =>
- Vis e1 (fun y0 : Y0 => go (k0 y0))
- | Trace.Tau k0 => Trace.Tau (go k0)
- | Err s1 =>
- Err (Event:=IO.IO) (X:=dvalue) s1
- end) (k y))
- | Trace.Tau k =>
- Trace.Tau
- ((cofix go (s0 : M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s0 with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e l MCFG x)
- | @Vis _ _ Y e0 k0 =>
- Vis e0 (fun y : Y => go (k0 y))
- | Trace.Tau k0 => Trace.Tau (go k0)
- | Err s1 =>
- Err (Event:=IO.IO) (X:=dvalue) s1
- end) k)
- | Err s0 => Err (Event:=IO.IO) (X:=dvalue) s0
- end
- with
- | Ret x => Ret (Event:=IO.IO) (m, x)
- | @Vis _ _ Y io k =>
- match M.mem_step io m with
- | inl _ =>
- Err (Event:=IO.IO) (X:=
- M.memory * dvalue) "uninterpretiable IO call "
- | inr (m', v) => Trace.Tau (M.memEffect m' (k v))
- end
- | Trace.Tau x' => Trace.Tau (M.memEffect m x')
- | Err e0 => Err (Event:=IO.IO) (X:=M.memory * dvalue) e0
- end
- with
- | Ret x => Ret x
- | @Vis _ _ Y e0 k => Vis e0 k
- | Trace.Tau k => Trace.Tau k
- | Err s0 => Err s0
- end
- ≡ match
- match
- match
- execInterpreter ge e l (monomap cfgp MCFG)
- (IRReturnFunction (FRReturn d))
- with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e l (monomap cfgp MCFG) x)
- | @Vis _ _ Y e0 k =>
- Vis e0
- (fun y : Y =>
- (cofix go (s0 : M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s0 with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e l
- (monomap cfgp MCFG) x)
- | @Vis _ _ Y0 e1 k0 =>
- Vis e1 (fun y0 : Y0 => go (k0 y0))
- | Trace.Tau k0 => Trace.Tau (go k0)
- | Err s1 =>
- Err (Event:=IO.IO) (X:=dvalue) s1
- end) (k y))
- | Trace.Tau k =>
- Trace.Tau
- ((cofix go (s0 : M IO.IO InterpreterResult) :
- M IO.IO dvalue :=
- match s0 with
- | Ret x =>
- Trace.Tau
- (step_sem_tiered ge e l
- (monomap cfgp MCFG) x)
- | @Vis _ _ Y e0 k0 =>
- Vis e0 (fun y : Y => go (k0 y))
- | Trace.Tau k0 => Trace.Tau (go k0)
- | Err s1 =>
- Err (Event:=IO.IO) (X:=dvalue) s1
- end) k)
- | Err s0 => Err (Event:=IO.IO) (X:=dvalue) s0
- end
- with
- | Ret x => Ret (Event:=IO.IO) (m, x)
- | @Vis _ _ Y io k =>
- match M.mem_step io m with
- | inl _ =>
- Err (Event:=IO.IO) (X:=
- M.memory * dvalue)
- "uninterpretiable IO call "
- | inr (m', v) => Trace.Tau (M.memEffect m' (k v))
- end
- | Trace.Tau x' => Trace.Tau (M.memEffect m x')
- | Err e0 =>
- Err (Event:=IO.IO) (X:=M.memory * dvalue) e0
- end
- with
- | Ret x => Ret x
- | @Vis _ _ Y e0 k => Vis e0 k
- | Trace.Tau k => Trace.Tau k
- | Err s0 => Err s0
- end)
- with
- | [] => EquivTau (CIH ge e [] MCFG (IRDone d) m)
- | f :: s0 =>
- ?X1402@{__:=cfgp; __:=PRESERVE_CFG_EFFECT; __:=CIH; __:=ge;
- __:=e; __:=f; __:=s0; __:=MCFG; __:=d; __:=m}
- end
- | FRReturnVoid =>
- ?X1391@{__:=cfgp; __:=PRESERVE_CFG_EFFECT; __:=CIH; __:=ge;
- __:=e; __:=s; __:=MCFG; __:=m}
- | FRCall f l i p =>
- ?X1392@{__:=cfgp; __:=PRESERVE_CFG_EFFECT; __:=CIH; __:=ge;
- __:=e; __:=s; __:=MCFG; __:=f; __:=l; __:=i; __:=p;
- __:=m}
- | FRCallVoid f l p =>
- ?X1393@{__:=cfgp; __:=PRESERVE_CFG_EFFECT; __:=CIH; __:=ge;
- __:=e; __:=s; __:=MCFG; __:=f; __:=l; __:=p; __:=m}
- end
- | IRResumeFunction pc0 =>
- ?X1363@{__:=cfgp; __:=PRESERVE_CFG_EFFECT; __:=CIH; __:=ge; __:=e;
- __:=s; __:=MCFG; __:=pc0; __:=m}
- end matchM)".
Add Comment
Please, Sign In to add comment