simps: fixes s :: "v store_v list"   and t1 :: "'b ffi_state"   and op1 :: "op0"   and vs :: "v list" shows "do_app (s, t1) op1 vs = (case (op1, vs) of (Opn op1, []) \<Rightarrow> None | (Opn op1, [Litv (IntLit n1)]) \<Rightarrow> None | (Opn op1, [Litv (IntLit n1), Litv (IntLit n2)]) \<Rightarrow> if (op1 = Divide \<or> op1 = Modulo) \<and> n2 = 0 then Some ((s, t1), Rerr (Rraise (prim_exn ''Div''))) else Some ((s, t1), Rval (Litv (IntLit (opn_lookup op1 n1 n2)))) | (Opn op1, Litv (IntLit n1) # Litv (IntLit n2) # a # x) \<Rightarrow> Map.empty x | (Opn op1, Litv (IntLit n1) # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (Opn op1, Litv (IntLit n1) # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (Opn op1, Litv (IntLit n1) # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (Opn op1, Litv (IntLit n1) # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (Opn op1, Litv (IntLit n1) # Conv option x # lista) \<Rightarrow> Map.empty x | (Opn op1, Litv (IntLit n1) # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (Opn op1, Litv (IntLit n1) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (Opn op1, Litv (IntLit n1) # Loc x # lista) \<Rightarrow> Map.empty x | (Opn op1, Litv (IntLit n1) # Vectorv x # lista) \<Rightarrow> Map.empty x | (Opn op1, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (Opn op1, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (Opn op1, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (Opn op1, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (Opn op1, Conv option x # list) \<Rightarrow> Map.empty x | (Opn op1, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Opn op1, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Opn op1, Loc x # list) \<Rightarrow> Map.empty x | (Opn op1, Vectorv x # list) \<Rightarrow> Map.empty x | (Opb op1, []) \<Rightarrow> None | (Opb op1, [Litv (IntLit n1)]) \<Rightarrow> None | (Opb op1, [Litv (IntLit n1), Litv (IntLit n2)]) \<Rightarrow> Some ((s, t1), Rval (Boolv (opb_lookup op1 n1 n2))) | (Opb op1, Litv (IntLit n1) # Litv (IntLit n2) # a # x) \<Rightarrow> Map.empty x | (Opb op1, Litv (IntLit n1) # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (Opb op1, Litv (IntLit n1) # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (Opb op1, Litv (IntLit n1) # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (Opb op1, Litv (IntLit n1) # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (Opb op1, Litv (IntLit n1) # Conv option x # lista) \<Rightarrow> Map.empty x | (Opb op1, Litv (IntLit n1) # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (Opb op1, Litv (IntLit n1) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (Opb op1, Litv (IntLit n1) # Loc x # lista) \<Rightarrow> Map.empty x | (Opb op1, Litv (IntLit n1) # Vectorv x # lista) \<Rightarrow> Map.empty x | (Opb op1, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (Opb op1, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (Opb op1, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (Opb op1, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (Opb op1, Conv option x # list) \<Rightarrow> Map.empty x | (Opb op1, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Opb op1, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Opb op1, Loc x # list) \<Rightarrow> Map.empty x | (Opb op1, Vectorv x # list) \<Rightarrow> Map.empty x | (Opw W8 op1, []) \<Rightarrow> None | (Opw W8 op1, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (Opw W8 op1, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (Opw W8 op1, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (Opw W8 op1, [Litv (Word8 w1)]) \<Rightarrow> None | (Opw W8 op1, Litv (Word8 w1) # Litv (IntLit xa) # lista) \<Rightarrow> Map.empty xa | (Opw W8 op1, Litv (Word8 w1) # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (Opw W8 op1, Litv (Word8 w1) # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (Opw W8 op1, [Litv (Word8 w1), Litv (Word8 w2)]) \<Rightarrow> Some ((s, t1), Rval (Litv (Word8 (opw8_lookup op1 w1 w2)))) | (Opw W8 op1, Litv (Word8 w1) # Litv (Word8 w2) # a # x) \<Rightarrow> Map.empty x | (Opw W8 op1, Litv (Word8 w1) # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (Opw W8 op1, Litv (Word8 w1) # Conv option x # lista) \<Rightarrow> Map.empty x | (Opw W8 op1, Litv (Word8 w1) # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (Opw W8 op1, Litv (Word8 w1) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (Opw W8 op1, Litv (Word8 w1) # Loc x # lista) \<Rightarrow> Map.empty x | (Opw W8 op1, Litv (Word8 w1) # Vectorv x # lista) \<Rightarrow> Map.empty x | (Opw W8 op1, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (Opw W8 op1, Conv option x # list) \<Rightarrow> Map.empty x | (Opw W8 op1, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Opw W8 op1, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Opw W8 op1, Loc x # list) \<Rightarrow> Map.empty x | (Opw W8 op1, Vectorv x # list) \<Rightarrow> Map.empty x | (Opw W64 op1, []) \<Rightarrow> None | (Opw W64 op1, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (Opw W64 op1, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (Opw W64 op1, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (Opw W64 op1, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (Opw W64 op1, [Litv (Word64 w1)]) \<Rightarrow> None | (Opw W64 op1, Litv (Word64 w1) # Litv (IntLit xa) # lista) \<Rightarrow> Map.empty xa | (Opw W64 op1, Litv (Word64 w1) # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (Opw W64 op1, Litv (Word64 w1) # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (Opw W64 op1, Litv (Word64 w1) # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (Opw W64 op1, [Litv (Word64 w1), Litv (Word64 w2)]) \<Rightarrow> Some ((s, t1), Rval (Litv (Word64 (opw64_lookup op1 w1 w2)))) | (Opw W64 op1, Litv (Word64 w1) # Litv (Word64 w2) # a # x) \<Rightarrow> Map.empty x | (Opw W64 op1, Litv (Word64 w1) # Conv option x # lista) \<Rightarrow> Map.empty x | (Opw W64 op1, Litv (Word64 w1) # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (Opw W64 op1, Litv (Word64 w1) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (Opw W64 op1, Litv (Word64 w1) # Loc x # lista) \<Rightarrow> Map.empty x | (Opw W64 op1, Litv (Word64 w1) # Vectorv x # lista) \<Rightarrow> Map.empty x | (Opw W64 op1, Conv option x # list) \<Rightarrow> Map.empty x | (Opw W64 op1, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Opw W64 op1, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Opw W64 op1, Loc x # list) \<Rightarrow> Map.empty x | (Opw W64 op1, Vectorv x # list) \<Rightarrow> Map.empty x | (Shift W8 op1 n, []) \<Rightarrow> None | (Shift W8 op1 n, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (Shift W8 op1 n, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (Shift W8 op1 n, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (Shift W8 op1 n, [Litv (Word8 w)]) \<Rightarrow> Some ((s, t1), Rval (Litv (Word8 (shift8_lookup op1 w n)))) | (Shift W8 op1 n, Litv (Word8 w) # a # x) \<Rightarrow> Map.empty x | (Shift W8 op1 n, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (Shift W8 op1 n, Conv option x # list) \<Rightarrow> Map.empty x | (Shift W8 op1 n, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Shift W8 op1 n, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Shift W8 op1 n, Loc x # list) \<Rightarrow> Map.empty x | (Shift W8 op1 n, Vectorv x # list) \<Rightarrow> Map.empty x | (Shift W64 op1 n, []) \<Rightarrow> None | (Shift W64 op1 n, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (Shift W64 op1 n, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (Shift W64 op1 n, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (Shift W64 op1 n, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (Shift W64 op1 n, [Litv (Word64 w)]) \<Rightarrow> Some ((s, t1), Rval (Litv (Word64 (shift64_lookup op1 w n)))) | (Shift W64 op1 n, Litv (Word64 w) # a # x) \<Rightarrow> Map.empty x | (Shift W64 op1 n, Conv option x # list) \<Rightarrow> Map.empty x | (Shift W64 op1 n, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Shift W64 op1 n, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Shift W64 op1 n, Loc x # list) \<Rightarrow> Map.empty x | (Shift W64 op1 n, Vectorv x # list) \<Rightarrow> Map.empty x | (Equality, []) \<Rightarrow> None | (Equality, [v1]) \<Rightarrow> None | (Equality, [v1, v2]) \<Rightarrow> case do_eq v1 v2 of Eq_val b \<Rightarrow> Some ((s, t1), Rval (Boolv b)) | Eq_type_error \<Rightarrow> None | (Equality, v1 # v2 # ab # x) \<Rightarrow> Map.empty x | (FP_cmp cmp, []) \<Rightarrow> None | (FP_cmp cmp, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (FP_cmp cmp, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (FP_cmp cmp, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (FP_cmp cmp, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (FP_cmp cmp, [Litv (Word64 w1)]) \<Rightarrow> None | (FP_cmp cmp, Litv (Word64 w1) # Litv (IntLit xa) # lista) \<Rightarrow> Map.empty xa | (FP_cmp cmp, Litv (Word64 w1) # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (FP_cmp cmp, Litv (Word64 w1) # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (FP_cmp cmp, Litv (Word64 w1) # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (FP_cmp cmp, [Litv (Word64 w1), Litv (Word64 w2)]) \<Rightarrow> Some ((s, t1), Rval (Boolv (fp_cmp cmp w1 w2))) | (FP_cmp cmp, Litv (Word64 w1) # Litv (Word64 w2) # a # x) \<Rightarrow> Map.empty x | (FP_cmp cmp, Litv (Word64 w1) # Conv option x # lista) \<Rightarrow> Map.empty x | (FP_cmp cmp, Litv (Word64 w1) # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (FP_cmp cmp, Litv (Word64 w1) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (FP_cmp cmp, Litv (Word64 w1) # Loc x # lista) \<Rightarrow> Map.empty x | (FP_cmp cmp, Litv (Word64 w1) # Vectorv x # lista) \<Rightarrow> Map.empty x | (FP_cmp cmp, Conv option x # list) \<Rightarrow> Map.empty x | (FP_cmp cmp, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (FP_cmp cmp, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (FP_cmp cmp, Loc x # list) \<Rightarrow> Map.empty x | (FP_cmp cmp, Vectorv x # list) \<Rightarrow> Map.empty x | (FP_uop uop, []) \<Rightarrow> None | (FP_uop uop, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (FP_uop uop, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (FP_uop uop, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (FP_uop uop, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (FP_uop uop, [Litv (Word64 w)]) \<Rightarrow> Some ((s, t1), Rval (Litv (Word64 (fp_uop uop w)))) | (FP_uop uop, Litv (Word64 w) # a # x) \<Rightarrow> Map.empty x | (FP_uop uop, Conv option x # list) \<Rightarrow> Map.empty x | (FP_uop uop, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (FP_uop uop, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (FP_uop uop, Loc x # list) \<Rightarrow> Map.empty x | (FP_uop uop, Vectorv x # list) \<Rightarrow> Map.empty x | (FP_bop bop, []) \<Rightarrow> None | (FP_bop bop, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (FP_bop bop, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (FP_bop bop, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (FP_bop bop, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (FP_bop bop, [Litv (Word64 w1)]) \<Rightarrow> None | (FP_bop bop, Litv (Word64 w1) # Litv (IntLit xa) # lista) \<Rightarrow> Map.empty xa | (FP_bop bop, Litv (Word64 w1) # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (FP_bop bop, Litv (Word64 w1) # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (FP_bop bop, Litv (Word64 w1) # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (FP_bop bop, [Litv (Word64 w1), Litv (Word64 w2)]) \<Rightarrow> Some ((s, t1), Rval (Litv (Word64 (fp_bop bop w1 w2)))) | (FP_bop bop, Litv (Word64 w1) # Litv (Word64 w2) # a # x) \<Rightarrow> Map.empty x | (FP_bop bop, Litv (Word64 w1) # Conv option x # lista) \<Rightarrow> Map.empty x | (FP_bop bop, Litv (Word64 w1) # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (FP_bop bop, Litv (Word64 w1) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (FP_bop bop, Litv (Word64 w1) # Loc x # lista) \<Rightarrow> Map.empty x | (FP_bop bop, Litv (Word64 w1) # Vectorv x # lista) \<Rightarrow> Map.empty x | (FP_bop bop, Conv option x # list) \<Rightarrow> Map.empty x | (FP_bop bop, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (FP_bop bop, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (FP_bop bop, Loc x # list) \<Rightarrow> Map.empty x | (FP_bop bop, Vectorv x # list) \<Rightarrow> Map.empty x | (Opapp, b) \<Rightarrow> None | (Opassign, []) \<Rightarrow> None | (Opassign, Litv x # list) \<Rightarrow> Map.empty x | (Opassign, Conv option x # list) \<Rightarrow> Map.empty x | (Opassign, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Opassign, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Opassign, [Loc lnum]) \<Rightarrow> None | (Opassign, [Loc lnum, v2]) \<Rightarrow> case store_assign lnum (Refv v2) s of None \<Rightarrow> None | Some s' \<Rightarrow> Some ((s', t1), Rval (Conv None [])) | (Opassign, Loc lnum # v2 # aa # xa) \<Rightarrow> Map.empty xa | (Opassign, Vectorv x # list) \<Rightarrow> Map.empty x | (Opref, []) \<Rightarrow> None | (Opref, [v2]) \<Rightarrow> let (s', n) = store_alloc (Refv v2) s in Some ((s', t1), Rval (Loc n)) | (Opref, v2 # aa # xa) \<Rightarrow> Map.empty xa | (Opderef, []) \<Rightarrow> None | (Opderef, Litv x # list) \<Rightarrow> Map.empty x | (Opderef, Conv option x # list) \<Rightarrow> Map.empty x | (Opderef, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Opderef, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Opderef, [Loc n]) \<Rightarrow> case store_lookup n s of None \<Rightarrow> None | Some (Refv v2) \<Rightarrow> Some ((s, t1), Rval v2) | Some (W8array xa) \<Rightarrow> Map.empty xa | Some (Varray xa) \<Rightarrow> Map.empty xa | (Opderef, Loc n # a # x) \<Rightarrow> Map.empty x | (Opderef, Vectorv x # list) \<Rightarrow> Map.empty x | (Aw8alloc, []) \<Rightarrow> None | (Aw8alloc, [Litv (IntLit n)]) \<Rightarrow> None | (Aw8alloc, Litv (IntLit n) # Litv (IntLit xa) # lista) \<Rightarrow> Map.empty xa | (Aw8alloc, Litv (IntLit n) # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (Aw8alloc, Litv (IntLit n) # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (Aw8alloc, [Litv (IntLit n), Litv (Word8 w)]) \<Rightarrow> if n < 0 then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else let (s', lnum) = store_alloc (W8array (replicate (nat \<bar>n\<bar>) w)) s in Some ((s', t1), Rval (Loc lnum)) | (Aw8alloc, Litv (IntLit n) # Litv (Word8 w) # a # x) \<Rightarrow> Map.empty x | (Aw8alloc, Litv (IntLit n) # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (Aw8alloc, Litv (IntLit n) # Conv option x # lista) \<Rightarrow> Map.empty x | (Aw8alloc, Litv (IntLit n) # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (Aw8alloc, Litv (IntLit n) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (Aw8alloc, Litv (IntLit n) # Loc x # lista) \<Rightarrow> Map.empty x | (Aw8alloc, Litv (IntLit n) # Vectorv x # lista) \<Rightarrow> Map.empty x | (Aw8alloc, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (Aw8alloc, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (Aw8alloc, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (Aw8alloc, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (Aw8alloc, Conv option x # list) \<Rightarrow> Map.empty x | (Aw8alloc, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Aw8alloc, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Aw8alloc, Loc x # list) \<Rightarrow> Map.empty x | (Aw8alloc, Vectorv x # list) \<Rightarrow> Map.empty x | (Aw8sub, []) \<Rightarrow> None | (Aw8sub, Litv x # list) \<Rightarrow> Map.empty x | (Aw8sub, Conv option x # list) \<Rightarrow> Map.empty x | (Aw8sub, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Aw8sub, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Aw8sub, [Loc lnum]) \<Rightarrow> None | (Aw8sub, [Loc lnum, Litv (IntLit i)]) \<Rightarrow> case store_lookup lnum s of None \<Rightarrow> None | Some (Refv xa) \<Rightarrow> Map.empty xa | Some (W8array ws) \<Rightarrow> if i < 0 then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else let n = nat \<bar>i\<bar> in if length ws \<le> n then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else Some ((s, t1), Rval (Litv (Word8 (ws ! n)))) | Some (Varray xa) \<Rightarrow> Map.empty xa | (Aw8sub, Loc lnum # Litv (IntLit i) # a # x) \<Rightarrow> Map.empty x | (Aw8sub, Loc lnum # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (Aw8sub, Loc lnum # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (Aw8sub, Loc lnum # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (Aw8sub, Loc lnum # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (Aw8sub, Loc lnum # Conv option x # lista) \<Rightarrow> Map.empty x | (Aw8sub, Loc lnum # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (Aw8sub, Loc lnum # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (Aw8sub, Loc lnum # Loc x # lista) \<Rightarrow> Map.empty x | (Aw8sub, Loc lnum # Vectorv x # lista) \<Rightarrow> Map.empty x | (Aw8sub, Vectorv x # list) \<Rightarrow> Map.empty x | (Aw8length, []) \<Rightarrow> None | (Aw8length, Litv x # list) \<Rightarrow> Map.empty x | (Aw8length, Conv option x # list) \<Rightarrow> Map.empty x | (Aw8length, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Aw8length, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Aw8length, [Loc n]) \<Rightarrow> case store_lookup n s of None \<Rightarrow> None | Some (Refv xa) \<Rightarrow> Map.empty xa | Some (W8array ws) \<Rightarrow> Some ((s, t1), Rval (Litv (IntLit (int (length ws))))) | Some (Varray xa) \<Rightarrow> Map.empty xa | (Aw8length, Loc n # a # x) \<Rightarrow> Map.empty x | (Aw8length, Vectorv x # list) \<Rightarrow> Map.empty x | (Aw8update, []) \<Rightarrow> None | (Aw8update, Litv x # list) \<Rightarrow> Map.empty x | (Aw8update, Conv option x # list) \<Rightarrow> Map.empty x | (Aw8update, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Aw8update, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Aw8update, [Loc lnum]) \<Rightarrow> None | (Aw8update, [Loc lnum, Litv (IntLit i)]) \<Rightarrow> None | (Aw8update, Loc lnum # Litv (IntLit i) # Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (Aw8update, Loc lnum # Litv (IntLit i) # Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (Aw8update, Loc lnum # Litv (IntLit i) # Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (Aw8update, [Loc lnum, Litv (IntLit i), Litv (Word8 w)]) \<Rightarrow> case store_lookup lnum s of None \<Rightarrow> None | Some (Refv xa) \<Rightarrow> Map.empty xa | Some (W8array ws) \<Rightarrow> if i < 0 then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else let n = nat \<bar>i\<bar> in if length ws \<le> n then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else case store_assign lnum (W8array (ws[n := w])) s of None \<Rightarrow> None | Some s' \<Rightarrow> Some ((s', t1), Rval (Conv None [])) | Some (Varray xa) \<Rightarrow> Map.empty xa | (Aw8update, Loc lnum # Litv (IntLit i) # Litv (Word8 w) # a # x) \<Rightarrow> Map.empty x | (Aw8update, Loc lnum # Litv (IntLit i) # Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (Aw8update, Loc lnum # Litv (IntLit i) # Conv option x # list) \<Rightarrow> Map.empty x | (Aw8update, Loc lnum # Litv (IntLit i) # Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Aw8update, Loc lnum # Litv (IntLit i) # Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Aw8update, Loc lnum # Litv (IntLit i) # Loc x # list) \<Rightarrow> Map.empty x | (Aw8update, Loc lnum # Litv (IntLit i) # Vectorv x # list) \<Rightarrow> Map.empty x | (Aw8update, Loc lnum # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (Aw8update, Loc lnum # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (Aw8update, Loc lnum # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (Aw8update, Loc lnum # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (Aw8update, Loc lnum # Conv option x # lista) \<Rightarrow> Map.empty x | (Aw8update, Loc lnum # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (Aw8update, Loc lnum # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (Aw8update, Loc lnum # Loc x # lista) \<Rightarrow> Map.empty x | (Aw8update, Loc lnum # Vectorv x # lista) \<Rightarrow> Map.empty x | (Aw8update, Vectorv x # list) \<Rightarrow> Map.empty x | (WordFromInt W8, []) \<Rightarrow> None | (WordFromInt W8, [Litv (IntLit i)]) \<Rightarrow> Some ((s, t1), Rval (Litv (Word8 (word_of_int i)))) | (WordFromInt W8, Litv (IntLit i) # a # x) \<Rightarrow> Map.empty x | (WordFromInt W8, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (WordFromInt W8, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (WordFromInt W8, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (WordFromInt W8, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (WordFromInt W8, Conv option x # list) \<Rightarrow> Map.empty x | (WordFromInt W8, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (WordFromInt W8, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (WordFromInt W8, Loc x # list) \<Rightarrow> Map.empty x | (WordFromInt W8, Vectorv x # list) \<Rightarrow> Map.empty x | (WordFromInt W64, []) \<Rightarrow> None | (WordFromInt W64, [Litv (IntLit i)]) \<Rightarrow> Some ((s, t1), Rval (Litv (Word64 (word_of_int i)))) | (WordFromInt W64, Litv (IntLit i) # a # x) \<Rightarrow> Map.empty x | (WordFromInt W64, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (WordFromInt W64, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (WordFromInt W64, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (WordFromInt W64, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (WordFromInt W64, Conv option x # list) \<Rightarrow> Map.empty x | (WordFromInt W64, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (WordFromInt W64, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (WordFromInt W64, Loc x # list) \<Rightarrow> Map.empty x | (WordFromInt W64, Vectorv x # list) \<Rightarrow> Map.empty x | (WordToInt W8, []) \<Rightarrow> None | (WordToInt W8, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (WordToInt W8, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (WordToInt W8, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (WordToInt W8, [Litv (Word8 w)]) \<Rightarrow> Some ((s, t1), Rval (Litv (IntLit (int (unat w))))) | (WordToInt W8, Litv (Word8 w) # a # x) \<Rightarrow> Map.empty x | (WordToInt W8, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (WordToInt W8, Conv option x # list) \<Rightarrow> Map.empty x | (WordToInt W8, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (WordToInt W8, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (WordToInt W8, Loc x # list) \<Rightarrow> Map.empty x | (WordToInt W8, Vectorv x # list) \<Rightarrow> Map.empty x | (WordToInt W64, []) \<Rightarrow> None | (WordToInt W64, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (WordToInt W64, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (WordToInt W64, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (WordToInt W64, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (WordToInt W64, [Litv (Word64 w)]) \<Rightarrow> Some ((s, t1), Rval (Litv (IntLit (int (unat w))))) | (WordToInt W64, Litv (Word64 w) # a # x) \<Rightarrow> Map.empty x | (WordToInt W64, Conv option x # list) \<Rightarrow> Map.empty x | (WordToInt W64, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (WordToInt W64, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (WordToInt W64, Loc x # list) \<Rightarrow> Map.empty x | (WordToInt W64, Vectorv x # list) \<Rightarrow> Map.empty x | (CopyStrStr, []) \<Rightarrow> None | (CopyStrStr, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (CopyStrStr, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (CopyStrStr, [Litv (StrLit str)]) \<Rightarrow> None | (CopyStrStr, [Litv (StrLit str), Litv (IntLit off)]) \<Rightarrow> None | (CopyStrStr, [Litv (StrLit str), Litv (IntLit off), Litv (IntLit len)]) \<Rightarrow> Some ((s, t1), case copy_array (str, off) len None of None \<Rightarrow> Rerr (Rraise (prim_exn ''Subscript'')) | Some cs \<Rightarrow> Rval (Litv (StrLit cs))) | (CopyStrStr, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # a # x) \<Rightarrow> Map.empty x | (CopyStrStr, Litv (StrLit str) # Litv (IntLit off) # Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (CopyStrStr, Litv (StrLit str) # Litv (IntLit off) # Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (CopyStrStr, Litv (StrLit str) # Litv (IntLit off) # Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (CopyStrStr, Litv (StrLit str) # Litv (IntLit off) # Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (CopyStrStr, Litv (StrLit str) # Litv (IntLit off) # Conv option x # list) \<Rightarrow> Map.empty x | (CopyStrStr, Litv (StrLit str) # Litv (IntLit off) # Closure sem_env listc x # list) \<Rightarrow> Map.empty x | (CopyStrStr, Litv (StrLit str) # Litv (IntLit off) # Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (CopyStrStr, Litv (StrLit str) # Litv (IntLit off) # Loc x # list) \<Rightarrow> Map.empty x | (CopyStrStr, Litv (StrLit str) # Litv (IntLit off) # Vectorv x # list) \<Rightarrow> Map.empty x | (CopyStrStr, Litv (StrLit str) # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (CopyStrStr, Litv (StrLit str) # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (CopyStrStr, Litv (StrLit str) # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (CopyStrStr, Litv (StrLit str) # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (CopyStrStr, Litv (StrLit str) # Conv option x # lista) \<Rightarrow> Map.empty x | (CopyStrStr, Litv (StrLit str) # Closure sem_env listc x # lista) \<Rightarrow> Map.empty x | (CopyStrStr, Litv (StrLit str) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (CopyStrStr, Litv (StrLit str) # Loc x # lista) \<Rightarrow> Map.empty x | (CopyStrStr, Litv (StrLit str) # Vectorv x # lista) \<Rightarrow> Map.empty x | (CopyStrStr, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (CopyStrStr, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (CopyStrStr, Conv option x # list) \<Rightarrow> Map.empty x | (CopyStrStr, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (CopyStrStr, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (CopyStrStr, Loc x # list) \<Rightarrow> Map.empty x | (CopyStrStr, Vectorv x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, []) \<Rightarrow> None | (CopyStrAw8, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (CopyStrAw8, [Litv (StrLit str)]) \<Rightarrow> None | (CopyStrAw8, [Litv (StrLit str), Litv (IntLit off)]) \<Rightarrow> None | (CopyStrAw8, [Litv (StrLit str), Litv (IntLit off), Litv (IntLit len)]) \<Rightarrow> None | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Litv x # lista) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Conv option x # lista) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Closure sem_env listc x # lista) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (CopyStrAw8, [Litv (StrLit str), Litv (IntLit off), Litv (IntLit len), Loc dst]) \<Rightarrow> None | (CopyStrAw8, [Litv (StrLit str), Litv (IntLit off), Litv (IntLit len), Loc dst, Litv (IntLit dstoff)]) \<Rightarrow> case store_lookup dst s of None \<Rightarrow> None | Some (Refv xa) \<Rightarrow> Map.empty xa | Some (W8array ws) \<Rightarrow> case copy_array (str, off) len (Some (ws_to_chars ws, dstoff)) of None \<Rightarrow> Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) | Some cs \<Rightarrow> case store_assign dst (W8array (chars_to_ws cs)) s of None \<Rightarrow> None | Some s' \<Rightarrow> Some ((s', t1), Rval (Conv None [])) | Some (Varray xa) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Litv (IntLit dstoff) # a # x) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Conv option x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Closure sem_env listc x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Loc x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Vectorv x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (IntLit len) # Vectorv x # lista) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Conv option x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Closure sem_env listc x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Loc x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (IntLit off) # Vectorv x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (StrLit str) # Conv option x # lista) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Closure sem_env listc x # lista) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Loc x # lista) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (StrLit str) # Vectorv x # lista) \<Rightarrow> Map.empty x | (CopyStrAw8, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (CopyStrAw8, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (CopyStrAw8, Conv option x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Loc x # list) \<Rightarrow> Map.empty x | (CopyStrAw8, Vectorv x # list) \<Rightarrow> Map.empty x | (CopyAw8Str, []) \<Rightarrow> None | (CopyAw8Str, Litv x # list) \<Rightarrow> Map.empty x | (CopyAw8Str, Conv option x # list) \<Rightarrow> Map.empty x | (CopyAw8Str, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (CopyAw8Str, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (CopyAw8Str, [Loc src]) \<Rightarrow> None | (CopyAw8Str, [Loc src, Litv (IntLit off)]) \<Rightarrow> None | (CopyAw8Str, [Loc src, Litv (IntLit off), Litv (IntLit len)]) \<Rightarrow> case store_lookup src s of None \<Rightarrow> None | Some (Refv xa) \<Rightarrow> Map.empty xa | Some (W8array ws) \<Rightarrow> Some ((s, t1), case copy_array (ws, off) len None of None \<Rightarrow> Rerr (Rraise (prim_exn ''Subscript'')) | Some ws \<Rightarrow> Rval (Litv (StrLit (ws_to_chars ws)))) | Some (Varray xa) \<Rightarrow> Map.empty xa | (CopyAw8Str, Loc src # Litv (IntLit off) # Litv (IntLit len) # a # x) \<Rightarrow> Map.empty x | (CopyAw8Str, Loc src # Litv (IntLit off) # Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (CopyAw8Str, Loc src # Litv (IntLit off) # Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (CopyAw8Str, Loc src # Litv (IntLit off) # Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (CopyAw8Str, Loc src # Litv (IntLit off) # Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (CopyAw8Str, Loc src # Litv (IntLit off) # Conv option x # list) \<Rightarrow> Map.empty x | (CopyAw8Str, Loc src # Litv (IntLit off) # Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (CopyAw8Str, Loc src # Litv (IntLit off) # Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (CopyAw8Str, Loc src # Litv (IntLit off) # Loc x # list) \<Rightarrow> Map.empty x | (CopyAw8Str, Loc src # Litv (IntLit off) # Vectorv x # list) \<Rightarrow> Map.empty x | (CopyAw8Str, Loc src # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (CopyAw8Str, Loc src # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (CopyAw8Str, Loc src # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (CopyAw8Str, Loc src # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (CopyAw8Str, Loc src # Conv option x # lista) \<Rightarrow> Map.empty x | (CopyAw8Str, Loc src # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (CopyAw8Str, Loc src # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (CopyAw8Str, Loc src # Loc x # lista) \<Rightarrow> Map.empty x | (CopyAw8Str, Loc src # Vectorv x # lista) \<Rightarrow> Map.empty x | (CopyAw8Str, Vectorv x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, []) \<Rightarrow> None | (CopyAw8Aw8, Litv x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Conv option x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, [Loc src]) \<Rightarrow> None | (CopyAw8Aw8, [Loc src, Litv (IntLit off)]) \<Rightarrow> None | (CopyAw8Aw8, [Loc src, Litv (IntLit off), Litv (IntLit len)]) \<Rightarrow> None | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Litv x # lista) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Conv option x # lista) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (CopyAw8Aw8, [Loc src, Litv (IntLit off), Litv (IntLit len), Loc dst]) \<Rightarrow> None | (CopyAw8Aw8, [Loc src, Litv (IntLit off), Litv (IntLit len), Loc dst, Litv (IntLit dstoff)]) \<Rightarrow> case (store_lookup src s, store_lookup dst s) of (None, b) \<Rightarrow> None | (Some (Refv xa), b) \<Rightarrow> Map.empty xa | (Some (W8array ws), None) \<Rightarrow> None | (Some (W8array ws), Some (Refv xa)) \<Rightarrow> Map.empty xa | (Some (W8array ws), Some (W8array ds)) \<Rightarrow> case copy_array (ws, off) len (Some (ds, dstoff)) of None \<Rightarrow> Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) | Some ws \<Rightarrow> case store_assign dst (W8array ws) s of None \<Rightarrow> None | Some s' \<Rightarrow> Some ((s', t1), Rval (Conv None [])) | (Some (W8array ws), Some (Varray xa)) \<Rightarrow> Map.empty xa | (Some (Varray xa), b) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Litv (IntLit dstoff) # a # x) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Conv option x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Loc x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Loc dst # Vectorv x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (IntLit len) # Vectorv x # lista) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Conv option x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Loc x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (IntLit off) # Vectorv x # list) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (CopyAw8Aw8, Loc src # Conv option x # lista) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Loc x # lista) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Loc src # Vectorv x # lista) \<Rightarrow> Map.empty x | (CopyAw8Aw8, Vectorv x # list) \<Rightarrow> Map.empty x | (Ord, []) \<Rightarrow> None | (Ord, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (Ord, [Litv (lit.Char c2)]) \<Rightarrow> Some ((s, t1), Rval (Litv (IntLit (int (of_char c2))))) | (Ord, Litv (lit.Char c2) # a # x) \<Rightarrow> Map.empty x | (Ord, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (Ord, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (Ord, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (Ord, Conv option x # list) \<Rightarrow> Map.empty x | (Ord, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Ord, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Ord, Loc x # list) \<Rightarrow> Map.empty x | (Ord, Vectorv x # list) \<Rightarrow> Map.empty x | (Chr, []) \<Rightarrow> None | (Chr, [Litv (IntLit i)]) \<Rightarrow> Some ((s, t1), if i < 0 \<or> 255 < i then Rerr (Rraise (prim_exn ''Chr'')) else Rval (Litv (lit.Char (char_of (nat \<bar>i\<bar>))))) | (Chr, Litv (IntLit i) # a # x) \<Rightarrow> Map.empty x | (Chr, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (Chr, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (Chr, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (Chr, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (Chr, Conv option x # list) \<Rightarrow> Map.empty x | (Chr, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Chr, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Chr, Loc x # list) \<Rightarrow> Map.empty x | (Chr, Vectorv x # list) \<Rightarrow> Map.empty x | (Chopb op1, []) \<Rightarrow> None | (Chopb op1, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (Chopb op1, [Litv (lit.Char c1)]) \<Rightarrow> None | (Chopb op1, Litv (lit.Char c1) # Litv (IntLit xa) # lista) \<Rightarrow> Map.empty xa | (Chopb op1, [Litv (lit.Char c1), Litv (lit.Char c2)]) \<Rightarrow> Some ((s, t1), Rval (Boolv (opb_lookup op1 (int (of_char c1)) (int (of_char c2))))) | (Chopb op1, Litv (lit.Char c1) # Litv (lit.Char c2) # a # x) \<Rightarrow> Map.empty x | (Chopb op1, Litv (lit.Char c1) # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (Chopb op1, Litv (lit.Char c1) # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (Chopb op1, Litv (lit.Char c1) # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (Chopb op1, Litv (lit.Char c1) # Conv option x # lista) \<Rightarrow> Map.empty x | (Chopb op1, Litv (lit.Char c1) # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (Chopb op1, Litv (lit.Char c1) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (Chopb op1, Litv (lit.Char c1) # Loc x # lista) \<Rightarrow> Map.empty x | (Chopb op1, Litv (lit.Char c1) # Vectorv x # lista) \<Rightarrow> Map.empty x | (Chopb op1, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (Chopb op1, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (Chopb op1, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (Chopb op1, Conv option x # list) \<Rightarrow> Map.empty x | (Chopb op1, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Chopb op1, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Chopb op1, Loc x # list) \<Rightarrow> Map.empty x | (Chopb op1, Vectorv x # list) \<Rightarrow> Map.empty x | (Implode, []) \<Rightarrow> None | (Implode, [v2]) \<Rightarrow> case v_to_char_list v2 of None \<Rightarrow> None | Some ls \<Rightarrow> Some ((s, t1), Rval (Litv (StrLit ls))) | (Implode, v2 # aa # xa) \<Rightarrow> Map.empty xa | (Strsub, []) \<Rightarrow> None | (Strsub, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (Strsub, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (Strsub, [Litv (StrLit str)]) \<Rightarrow> None | (Strsub, [Litv (StrLit str), Litv (IntLit i)]) \<Rightarrow> if i < 0 then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else let n = nat \<bar>i\<bar> in if length str \<le> n then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else Some ((s, t1), Rval (Litv (lit.Char (str ! n)))) | (Strsub, Litv (StrLit str) # Litv (IntLit i) # a # x) \<Rightarrow> Map.empty x | (Strsub, Litv (StrLit str) # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (Strsub, Litv (StrLit str) # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (Strsub, Litv (StrLit str) # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (Strsub, Litv (StrLit str) # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (Strsub, Litv (StrLit str) # Conv option x # lista) \<Rightarrow> Map.empty x | (Strsub, Litv (StrLit str) # Closure sem_env listc x # lista) \<Rightarrow> Map.empty x | (Strsub, Litv (StrLit str) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (Strsub, Litv (StrLit str) # Loc x # lista) \<Rightarrow> Map.empty x | (Strsub, Litv (StrLit str) # Vectorv x # lista) \<Rightarrow> Map.empty x | (Strsub, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (Strsub, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (Strsub, Conv option x # list) \<Rightarrow> Map.empty x | (Strsub, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Strsub, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Strsub, Loc x # list) \<Rightarrow> Map.empty x | (Strsub, Vectorv x # list) \<Rightarrow> Map.empty x | (Strlen, []) \<Rightarrow> None | (Strlen, Litv (IntLit xa) # list) \<Rightarrow> Map.empty xa | (Strlen, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (Strlen, [Litv (StrLit str)]) \<Rightarrow> Some ((s, t1), Rval (Litv (IntLit (int (length str))))) | (Strlen, Litv (StrLit str) # a # x) \<Rightarrow> Map.empty x | (Strlen, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (Strlen, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (Strlen, Conv option x # list) \<Rightarrow> Map.empty x | (Strlen, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Strlen, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Strlen, Loc x # list) \<Rightarrow> Map.empty x | (Strlen, Vectorv x # list) \<Rightarrow> Map.empty x | (Strcat, []) \<Rightarrow> None | (Strcat, [v2]) \<Rightarrow> case v_to_list v2 of None \<Rightarrow> None | Some vs \<Rightarrow> case vs_to_string vs of None \<Rightarrow> None | Some str \<Rightarrow> Some ((s, t1), Rval (Litv (StrLit str))) | (Strcat, v2 # aa # xa) \<Rightarrow> Map.empty xa | (VfromList, []) \<Rightarrow> None | (VfromList, [v2]) \<Rightarrow> case v_to_list v2 of None \<Rightarrow> None | Some vs \<Rightarrow> Some ((s, t1), Rval (Vectorv vs)) | (VfromList, v2 # aa # xa) \<Rightarrow> Map.empty xa | (Vsub, []) \<Rightarrow> None | (Vsub, Litv x # list) \<Rightarrow> Map.empty x | (Vsub, Conv option x # list) \<Rightarrow> Map.empty x | (Vsub, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Vsub, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Vsub, Loc x # list) \<Rightarrow> Map.empty x | (Vsub, [Vectorv vs]) \<Rightarrow> None | (Vsub, [Vectorv vs, Litv (IntLit i)]) \<Rightarrow> if i < 0 then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else let n = nat \<bar>i\<bar> in if length vs \<le> n then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else Some ((s, t1), Rval (vs ! n)) | (Vsub, Vectorv vs # Litv (IntLit i) # a # x) \<Rightarrow> Map.empty x | (Vsub, Vectorv vs # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (Vsub, Vectorv vs # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (Vsub, Vectorv vs # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (Vsub, Vectorv vs # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (Vsub, Vectorv vs # Conv option x # lista) \<Rightarrow> Map.empty x | (Vsub, Vectorv vs # Closure sem_env listc x # lista) \<Rightarrow> Map.empty x | (Vsub, Vectorv vs # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (Vsub, Vectorv vs # Loc x # lista) \<Rightarrow> Map.empty x | (Vsub, Vectorv vs # Vectorv x # lista) \<Rightarrow> Map.empty x | (Vlength, []) \<Rightarrow> None | (Vlength, Litv x # list) \<Rightarrow> Map.empty x | (Vlength, Conv option x # list) \<Rightarrow> Map.empty x | (Vlength, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Vlength, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Vlength, Loc x # list) \<Rightarrow> Map.empty x | (Vlength, [Vectorv vs]) \<Rightarrow> Some ((s, t1), Rval (Litv (IntLit (int (length vs))))) | (Vlength, Vectorv vs # a # x) \<Rightarrow> Map.empty x | (Aalloc, []) \<Rightarrow> None | (Aalloc, [Litv (IntLit n)]) \<Rightarrow> None | (Aalloc, [Litv (IntLit n), v2]) \<Rightarrow> if n < 0 then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else let (s', lnum) = store_alloc (Varray (replicate (nat \<bar>n\<bar>) v2)) s in Some ((s', t1), Rval (Loc lnum)) | (Aalloc, Litv (IntLit n) # v2 # aa # xa) \<Rightarrow> Map.empty xa | (Aalloc, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (Aalloc, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (Aalloc, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (Aalloc, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (Aalloc, Conv option x # list) \<Rightarrow> Map.empty x | (Aalloc, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Aalloc, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Aalloc, Loc x # list) \<Rightarrow> Map.empty x | (Aalloc, Vectorv x # list) \<Rightarrow> Map.empty x | (AallocEmpty, []) \<Rightarrow> None | (AallocEmpty, Litv x # list) \<Rightarrow> Map.empty x | (AallocEmpty, [Conv None []]) \<Rightarrow> let (s', lnum) = store_alloc (Varray []) s in Some ((s', t1), Rval (Loc lnum)) | (AallocEmpty, Conv None [] # a # x) \<Rightarrow> Map.empty x | (AallocEmpty, Conv None (a # x) # list) \<Rightarrow> Map.empty x | (AallocEmpty, Conv (Some x) listb # list) \<Rightarrow> Map.empty x | (AallocEmpty, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (AallocEmpty, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (AallocEmpty, Loc x # list) \<Rightarrow> Map.empty x | (AallocEmpty, Vectorv x # list) \<Rightarrow> Map.empty x | (Asub, []) \<Rightarrow> None | (Asub, Litv x # list) \<Rightarrow> Map.empty x | (Asub, Conv option x # list) \<Rightarrow> Map.empty x | (Asub, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Asub, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Asub, [Loc lnum]) \<Rightarrow> None | (Asub, [Loc lnum, Litv (IntLit i)]) \<Rightarrow> case store_lookup lnum s of None \<Rightarrow> None | Some (Refv xa) \<Rightarrow> Map.empty xa | Some (W8array xa) \<Rightarrow> Map.empty xa | Some (Varray vs) \<Rightarrow> if i < 0 then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else let n = nat \<bar>i\<bar> in if length vs \<le> n then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else Some ((s, t1), Rval (vs ! n)) | (Asub, Loc lnum # Litv (IntLit i) # a # x) \<Rightarrow> Map.empty x | (Asub, Loc lnum # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (Asub, Loc lnum # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (Asub, Loc lnum # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (Asub, Loc lnum # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (Asub, Loc lnum # Conv option x # lista) \<Rightarrow> Map.empty x | (Asub, Loc lnum # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (Asub, Loc lnum # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (Asub, Loc lnum # Loc x # lista) \<Rightarrow> Map.empty x | (Asub, Loc lnum # Vectorv x # lista) \<Rightarrow> Map.empty x | (Asub, Vectorv x # list) \<Rightarrow> Map.empty x | (Alength, []) \<Rightarrow> None | (Alength, Litv x # list) \<Rightarrow> Map.empty x | (Alength, Conv option x # list) \<Rightarrow> Map.empty x | (Alength, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Alength, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Alength, [Loc n]) \<Rightarrow> case store_lookup n s of None \<Rightarrow> None | Some (Refv xa) \<Rightarrow> Map.empty xa | Some (W8array xa) \<Rightarrow> Map.empty xa | Some (Varray ws) \<Rightarrow> Some ((s, t1), Rval (Litv (IntLit (int (length ws))))) | (Alength, Loc n # a # x) \<Rightarrow> Map.empty x | (Alength, Vectorv x # list) \<Rightarrow> Map.empty x | (Aupdate, []) \<Rightarrow> None | (Aupdate, Litv x # list) \<Rightarrow> Map.empty x | (Aupdate, Conv option x # list) \<Rightarrow> Map.empty x | (Aupdate, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (Aupdate, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (Aupdate, [Loc lnum]) \<Rightarrow> None | (Aupdate, [Loc lnum, Litv (IntLit i)]) \<Rightarrow> None | (Aupdate, [Loc lnum, Litv (IntLit i), v2]) \<Rightarrow> case store_lookup lnum s of None \<Rightarrow> None | Some (Refv xa) \<Rightarrow> Map.empty xa | Some (W8array xa) \<Rightarrow> Map.empty xa | Some (Varray vs) \<Rightarrow> if i < 0 then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else let n = nat \<bar>i\<bar> in if length vs \<le> n then Some ((s, t1), Rerr (Rraise (prim_exn ''Subscript''))) else case store_assign lnum (Varray (vs[n := v2])) s of None \<Rightarrow> None | Some s' \<Rightarrow> Some ((s', t1), Rval (Conv None [])) | (Aupdate, Loc lnum # Litv (IntLit i) # v2 # aa # xa) \<Rightarrow> Map.empty xa | (Aupdate, Loc lnum # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (Aupdate, Loc lnum # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (Aupdate, Loc lnum # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (Aupdate, Loc lnum # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (Aupdate, Loc lnum # Conv option x # lista) \<Rightarrow> Map.empty x | (Aupdate, Loc lnum # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (Aupdate, Loc lnum # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (Aupdate, Loc lnum # Loc x # lista) \<Rightarrow> Map.empty x | (Aupdate, Loc lnum # Vectorv x # lista) \<Rightarrow> Map.empty x | (Aupdate, Vectorv x # list) \<Rightarrow> Map.empty x | (ConfigGC, []) \<Rightarrow> None | (ConfigGC, [Litv (IntLit i)]) \<Rightarrow> None | (ConfigGC, [Litv (IntLit i), Litv (IntLit j)]) \<Rightarrow> Some ((s, t1), Rval (Conv None [])) | (ConfigGC, Litv (IntLit i) # Litv (IntLit j) # a # x) \<Rightarrow> Map.empty x | (ConfigGC, Litv (IntLit i) # Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (ConfigGC, Litv (IntLit i) # Litv (StrLit xa) # lista) \<Rightarrow> Map.empty xa | (ConfigGC, Litv (IntLit i) # Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (ConfigGC, Litv (IntLit i) # Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (ConfigGC, Litv (IntLit i) # Conv option x # lista) \<Rightarrow> Map.empty x | (ConfigGC, Litv (IntLit i) # Closure sem_env listb x # lista) \<Rightarrow> Map.empty x | (ConfigGC, Litv (IntLit i) # Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (ConfigGC, Litv (IntLit i) # Loc x # lista) \<Rightarrow> Map.empty x | (ConfigGC, Litv (IntLit i) # Vectorv x # lista) \<Rightarrow> Map.empty x | (ConfigGC, Litv (lit.Char xa) # list) \<Rightarrow> Map.empty xa | (ConfigGC, Litv (StrLit xa) # list) \<Rightarrow> Map.empty xa | (ConfigGC, Litv (Word8 xa) # list) \<Rightarrow> Map.empty xa | (ConfigGC, Litv (Word64 xa) # list) \<Rightarrow> Map.empty xa | (ConfigGC, Conv option x # list) \<Rightarrow> Map.empty x | (ConfigGC, Closure sem_env listb x # list) \<Rightarrow> Map.empty x | (ConfigGC, Recclosure sem_env list1 x # list) \<Rightarrow> Map.empty x | (ConfigGC, Loc x # list) \<Rightarrow> Map.empty x | (ConfigGC, Vectorv x # list) \<Rightarrow> Map.empty x | (FFI n, []) \<Rightarrow> None | (FFI n, Litv (IntLit xa) # lista) \<Rightarrow> Map.empty xa | (FFI n, Litv (lit.Char xa) # lista) \<Rightarrow> Map.empty xa | (FFI n, [Litv (StrLit conf)]) \<Rightarrow> None | (FFI n, Litv (StrLit conf) # Litv x # listb) \<Rightarrow> Map.empty x | (FFI n, Litv (StrLit conf) # Conv option x # listb) \<Rightarrow> Map.empty x | (FFI n, Litv (StrLit conf) # Closure sem_env lista x # listb) \<Rightarrow> Map.empty x | (FFI n, Litv (StrLit conf) # Recclosure sem_env list1 x # listb) \<Rightarrow> Map.empty x | (FFI n, [Litv (StrLit conf), Loc lnum]) \<Rightarrow> case store_lookup lnum s of None \<Rightarrow> None | Some (Refv xa) \<Rightarrow> Map.empty xa | Some (W8array ws) \<Rightarrow> case call_FFI t1 n (map (\<lambda>c2. word_of_nat (of_char c2)) conf) ws of (t', ws') \<Rightarrow> case store_assign lnum (W8array ws') s of None \<Rightarrow> None | Some s' \<Rightarrow> Some ((s', t'), Rval (Conv None [])) | Some (Varray xa) \<Rightarrow> Map.empty xa | (FFI n, Litv (StrLit conf) # Loc lnum # a # x) \<Rightarrow> Map.empty x | (FFI n, Litv (StrLit conf) # Vectorv x # listb) \<Rightarrow> Map.empty x | (FFI n, Litv (Word8 xa) # lista) \<Rightarrow> Map.empty xa | (FFI n, Litv (Word64 xa) # lista) \<Rightarrow> Map.empty xa | (FFI n, Conv option x # lista) \<Rightarrow> Map.empty x | (FFI n, Closure sem_env listc x # lista) \<Rightarrow> Map.empty x | (FFI n, Recclosure sem_env list1 x # lista) \<Rightarrow> Map.empty x | (FFI n, Loc x # lista) \<Rightarrow> Map.empty x | (FFI n, Vectorv x # lista) \<Rightarrow> Map.empty x)"