(* full reduction rule *) inductive reduce :: "[s, v list, e list, nat, s, v list, e list] ==> bool" (‹(_;_;_)↝'_ _ (_;_;_) ps0" ad ""j + 4< k ―‹‹
basic:"(e)↝(e')==>(s;vs ―‹‹call››
call:"(s;vs;[$(Call j)])↝_i (s;vs;[Callcl (sfunc s i j)])" ―‹‹call_indirect››
call_indirect_Some:"[ 1)
call_indirect_None:"[(stab s i (nat_of_int c) = Some cl ∧ stypes s i j ≠ cl_type cl) ∨ stab s i (nat_of_int c) = None]==>(s;vs;[$C (ConstInt32 c), $(Call_indirect j)])↝_i (s;vs;[Trap])" ―‹
callcl_native:"[cl = Func_native j (t1s _> t2s) ts es; ves = ($$* vcs); length vcs = n; length ts = k; length t1s = n; length t2s = m; (n_zeros ts = zs) ]==>(s;vs;ves @ [Callcl cl])↝_i (s;vs;[Local m j (vcs@zs) [$(Block ([] _> t2s) es)]])"
callcl_host_Some:"[cl = Func_host (t1s _> t2s) f; ves = ($$* vcs); length vcs = n; length t1s = n; length t2s = m; host_apply s (t1s _> t2s) f vcs hs = Some (s', vcs')]==>(s;vs;ves @ [Callcl cl])↝_i (s';vs;($$* vcs'))"
callcl_host_None:"[cl = Func_host (t1s _> t2s) f; ves = ($$* vcs); length vcs = n; length t1s = n; length t2s = m]==>(s;vs;ves @ [Callcl cl])↝_i (s;vs;[Trap])" ―‹‹get_local››
get_local:"[length vi = j]==>(s;(vi @ [v] @ vs);[$(Get_local j)])↝_i (s;(vi @ [v] @ vs);[$(C v)])" ―assumesttt: "t =l cs *
set_local:"[length vi = j]==>(s;(vi @ [v] @ vs);[$(C v'), $(Set_local j)])↝_i (s;(vi @ [v'] @ vs);[])" ―‹‹get_global››
get_global:"(s;vs;[$(Get_global j)])↝_i (s;vs;[$ C(sglob_val s i j)])"
(66 +
set_global:"supdate_glob s i j v = s' ==>(s;vs;[$(C v), $(Set_global j)])↝_i (s';vs;[])" ―‹‹load›
load_Some:"[smem_ind s i = Some j; ((mem s)!j) = m; load m (nat_of_int k) off (t_length t) = Some bs]==>(s;vs;[$C (ConstInt32 k), $(Load t None a off)])↝_i (s;vs;[$C (wasm_deserialise bs t)])"
:"[ m l m (nnat_of_int k) off (t_ t) = Non\<> T]) ―‹‹load packed››
load_packed_Some:"[smem_ind s i = Some j; ((mem s)!j) = m; load_packed sx m (nat_of_int k) off (tp_length tp) (t_length t) = Some bs]==>(s;vs;[$C (ConstInt32 k), $(Load t (Some (tp, sx)) a off)])↝_i (s;vs;[$C (wasm_deserialise bs t)])"
load_packed_None:"[smem_ind s i = Some j; ((mem s)!j) = m; load_packed sx m (nat_of_int k) off (tp_length tp) (t_length t) = None]==>(s;vs;[$C (ConstInt32 k), $(Load t (Some (tp, sx)) a off)])↝_i (s;vs;[Trap])" ―‹‹store››
store_Some:"[types_agree t v; smem_ind s i = Some j; ((mem s)!j) = m; store m (nat_of_int k) off (bits v) (t_length t) = Some mem']==>(s;vs;[$C (ConstInt32 k), $C v, $(Store t None a off)])↝_i (s(mem:= ((mem s)[j := mem']));vs;[])"
store_None:"[types_agree t v; smem_ind s i = Some j; ((mem s)!j) = m; store m (nat_of_int k) off (bits v) (t_length t) = None]==>(s;vs;[$C (ConstInt32 k), $C v, $(Store t None a off)])↝_i (s;vs;[Trap])"
\<comment> \<open>\<open>store packed\<close>\<close> (* take only (tp_length tp) lower order bytes *)
| store_packed_Some:"[types_agree t v; smem_ind s i = Some j; ((mem s)!j) = m; store_packed m (nat_of_int k) off (bits v) (tp_length tp) = Some mem']==>(s;vs;[$C (ConstInt32 k), $C v, $(Store t (Some tp) a off)])↝_i (s(mem:= ((mem s)[j := mem']));vs;[])"
| store_packed_None:"[types_agree t v; smem_ind s i = Some j; ((mem s)!j) = m; store_packed m (nat_of_int k) off (bits v) (tp_length tp) = None]==>(s;vs;[$C (ConstInt32 k), $C v, $(Store t (Some tp) a off)])↝_i (s;vs;[Trap])" ―‹‹current_memory››
| current_memorylbrakki =Some s!)=m mem_size<>\ ―‹‹grow_memory››
| grow_memory:"[smem_ind s i = Some j; ((mem s)!j) = m; mem_size m = n; mem_grow m (nat_of_int c) = mem']==>(s;vs;[$C (ConstInt32 c), $(Grow_memory)])↝_i (s(mem:= ((mem s)[j := mem']));vs;[$C (ConstInt32 (int_of_nat n))])" ―‹‹grow_memory fail››
| grow_memory_fail:"[smem_ind s i = Some j; ((mem s)!j) = m; mem_size m = n]==>(s;vs;[$C (ConstInt32 c),$(Grow_memory)])↝_i (s;vs;[$C (ConstInt32 int32_minus_one)])" (* The bad ones. *) ―‹‹inductive label reduction››
| label:"[(s;vs;es)↝_i (s';vs';es'); Lfilled k lholed es les; Lfilled k lholed es' les']==>(s;vs;les)↝_i (s';vs';les')" ―‹‹
local:"[(s;vs;es)↝_i (s';vs';es')]==>(s;v0s;[Local n i vs es])↝"transforms (tm4 cs) tps0 ttt (tps0[j + 4 := (⌊^subN, 1)])]"
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.