Package machine-code-straightline: Hoare logic triple support for straightline code

Information

namemachine-code-straightline
version1.0
descriptionHoare logic triple support for straightline code
authorHOL OpenTheory Packager <opentheory-packager@hol-theorem-prover.org>
licenseMIT
checksum4f9f4e876569966d0c36c5decfc29b2bd3bc21ad
requiresbase
hol-base
hol-string
hol-sort
hol-words
hol-integer
machine-code-hoare-logic
machine-code-hoare-triple
arm-model
arm-step
arm-prog
arm-decomp
m0-model
m0-prog
m0-decomp
showData.Bool
Data.List
Data.Option
Data.Pair
Function
HOL4
Number.Natural
Relation

Files

Defined Type Operators

Defined Constants

Theorems

GraphLang.unspecified_pre

GraphLang.arm_STACK_MEMORY = arm_prog.arm_MEMORY

GraphLang.m0_STACK_MEMORY = m0_prog.m0_MEMORY

GraphLang.default_state = λx. GraphLang.VarNone

(λv1. v1) = id

GraphLang.apply_update [] s = s

(x ) x

( b) b

x. straightline.DO_NOTHING x = x

s. GraphLang.SKIP_TAG s GraphLang.unspecified_pre

a. ¬(GraphLang.Jump a = GraphLang.Return)

f. GraphLang.func_body_trans f = snd (GraphLang.func_trans f)

w.
    GraphLang.count_leading_zero_bits w =
    words.n2w (arm.CountLeadingZeroBits w)

Gamma.
    GraphLang.exec_graph Gamma =
    relation.RTC (GraphLang.exec_graph_step Gamma)

s is_tail_call. GraphLang.CALL_TAG s is_tail_call

fs.
    GraphLang.list_func_trans fs =
    GraphLang.graph (map GraphLang.func_trans fs)

nn. GraphLang.Skip nn = GraphLang.Cond nn nn (λx. )

nm f. GraphLang.var_acc nm f = f nm

a mem. GraphLang.READ8 a mem = mem a

a' a. ¬(GraphLang.ARM a = GraphLang.M0 a')

¬(x = y) ¬(y = x)

m a. GraphLang.MemAcc8 m a = GraphLang.READ8 a m

m a. GraphLang.MemAcc32 m a = GraphLang.READ32 a m

jj. (c. jj = GraphLang.Jump c) jj = GraphLang.Return

x x1. GraphLang.find_func x x1 = GraphLang.find_func_tupled (x, x1)

x x1.
    GraphLang.good_stack_tail x x1
    GraphLang.good_stack_tail_tupled (x, x1)

w y. GraphLang.ShiftLeft w y = words.word_lsl w (words.w2n y)

w y. GraphLang.ShiftRight w y = words.word_lsr w (words.w2n y)

w y. GraphLang.SignedShiftRight w y = words.word_asr w (words.w2n y)

Gamma n.
    GraphLang.exec_graph_n Gamma n =
    arithmetic.NRC (GraphLang.exec_graph_step Gamma) n

x x1. GraphLang.find_inst x x1 = GraphLang.find_inst_tupled (x, x1)

arm.Aligned (w, n) arm.Align (w, n) = w

set_sep.STAR set_sep.emp p = p set_sep.STAR p set_sep.emp = p

name entry l. GraphLang.func_name (GraphLang.Func name entry l) = name

GraphLang.list_func_trans fs =
  GraphLang.graph
    (map (λf. (GraphLang.func_name f, GraphLang.func_body_trans f)) fs)

ff. s c l. ff = GraphLang.Func s c l

ii. c f n. ii = GraphLang.Inst c f n

a a'. GraphLang.NextNode a = GraphLang.NextNode a' a = a'

a a'. GraphLang.Jump a = GraphLang.Jump a' a = a'

const x = (λy. x) suc = λn. n + 1

GraphLang.get_assert none = (λx. )
  a. GraphLang.get_assert (some a) = a

loc v0 v1. GraphLang.inst_loc (GraphLang.Inst loc v0 v1) = words.w2n loc

(a. GraphLang.jump_size (GraphLang.Jump a) = 1)
  GraphLang.jump_size GraphLang.Return = 0

code fs.
    GraphLang.funcs_ok code fs
    all (GraphLang.func_ok code (GraphLang.fs_locs fs)) fs

address.ALIGNED w ¬fcp.fcp_index w 0 ¬fcp.fcp_index w 1

words.n2w (arm.CountLeadingZeroBits w) =
  GraphLang.count_leading_zero_bits w
  words.n2w (m0.CountLeadingZeroBits w) =
  GraphLang.count_leading_zero_bits w

nm v f. GraphLang.var_upd nm v f = combin.UPDATE nm v f

cc. (f. cc = GraphLang.ARM f) f. cc = GraphLang.M0 f

xs ys.
    GraphLang.LIST_SUBSET xs ys
    all (λx. bool.IN x (list.LIST_TO_SET ys)) xs

P. (c. P (GraphLang.Jump c)) P GraphLang.Return jj. P jj

a w mem. GraphLang.WRITE8 a w mem = combin.UPDATE a w mem

m a w. GraphLang.MemUpdate8 m a w = GraphLang.WRITE8 a w m

m a w. GraphLang.MemUpdate32 m a w = GraphLang.WRITE32 a w m

all (λn. s1 n = s2 n) GraphLang.all_names
  GraphLang.arm_STATE s1 = GraphLang.arm_STATE s2

all (λn. s1 n = s2 n) GraphLang.all_names
  GraphLang.m0_STATE s1 = GraphLang.m0_STATE s2

(p. GraphLang.jump_ok (GraphLang.Jump p) even (words.w2n p))
  (GraphLang.jump_ok GraphLang.Return )

(j.
     GraphLang.get_jump (GraphLang.Jump j) =
     GraphLang.NextNode (words.w2n j))
  GraphLang.get_jump GraphLang.Return = GraphLang.Ret

gg. l l0 f n. gg = GraphLang.GraphFunction l l0 f n

u.
    GraphLang.upd_ok u
    list.ALL_DISTINCT (map fst u)
    GraphLang.LIST_SUBSET (map fst u) GraphLang.all_names

nn.
    (n. nn = GraphLang.NextNode n) nn = GraphLang.Ret
    nn = GraphLang.Err

set_sep.STAR (if b then x else y) q =
  if b then set_sep.STAR x q else set_sep.STAR y q

t1 = t2 u1 = u2 (t1, u1) = (t2, u2)

x x1 x2.
    GraphLang.LIST_IMPL_INST x x1 x2
    GraphLang.LIST_IMPL_INST_tupled (x, x1, x2)

x x1 x2.
    GraphLang.next_trans x x1 x2 = GraphLang.next_trans_tupled (x, x1, x2)

P. (s c l. P (GraphLang.Func s c l)) ff. P ff

P. (c f n. P (GraphLang.Inst c f n)) ii. P ii

a0 a1 a2.
    GraphLang.inst_size (GraphLang.Inst a0 a1 a2) =
    1 + GraphLang.next_size a2

P. (f. P (GraphLang.ARM f)) (f. P (GraphLang.M0 f)) cc. P cc

(a. GraphLang.code_size (GraphLang.ARM a) = 1)
  a. GraphLang.code_size (GraphLang.M0 a) = 1

xs n ys. list.DROP (length xs + n) (xs @ ys) = list.DROP n ys

P.
    (n. P (GraphLang.NextNode n)) P GraphLang.Ret P GraphLang.Err
    nn. P nn

w1 w2 c.
    GraphLang.word_add_with_carry w1 w2 c =
    fst (words.add_with_carry (w1, w2, c))

vars accs st.
    GraphLang.init_vars vars accs st =
    GraphLang.save_vals vars (map (λi. i st) accs) GraphLang.default_state

a0 a1 a2 f. GraphLang.func_CASE (GraphLang.Func a0 a1 a2) f = f a0 a1 a2

inner outer inner_st.
    GraphLang.return_vars inner outer inner_st =
    GraphLang.save_vals outer
      (map (λv. GraphLang.var_acc v inner_st) inner)

a0 a1 a2 f. GraphLang.inst_CASE (GraphLang.Inst a0 a1 a2) f = f a0 a1 a2

f0 f1.
    fn. (a. fn (GraphLang.Jump a) = f0 a) fn GraphLang.Return = f1

asm.
    prog.SPEC arm_prog.ARM_MODEL
      (set_sep.STAR (arm_prog.arm_PC p)
         (set_sep.cond (GraphLang.SKIP_TAG asm))) pred_set.EMPTY
      (arm_prog.arm_PC (words.word_add p (words.n2w (arithmetic.BIT2 1))))

w1 w2 c.
    GraphLang.carry_out w1 w2 c
    fst (snd (words.add_with_carry (w1, w2, c)))

f. fn. a0 a1 a2. fn (GraphLang.Func a0 a1 a2) = f a0 a1 a2

f. fn. a0 a1 a2. fn (GraphLang.Inst a0 a1 a2) = f a0 a1 a2

GraphLang.IMPL_INST c locs (GraphLang.Inst n (const ) next)
  a. GraphLang.IMPL_INST c locs (GraphLang.Inst n a next)

t l v0 next.
    GraphLang.inst_trans t (GraphLang.Inst l v0 next) =
    GraphLang.next_trans (words.w2n l) t next

P. (l l0 f n. P (GraphLang.GraphFunction l l0 f n)) gg. P gg

upds st.
    GraphLang.upd_vars upds st =
    GraphLang.save_vals (map fst upds)
      (map (pair.UNCURRY (λnm vf. vf st)) upds) st

¬fcp.fcp_index w 0 ¬fcp.fcp_index w 1
  (b address.ALIGNED w address.ALIGNED w)

GraphLang.func_ok code locs f all (GraphLang.func_ok code locs) fs
  all (GraphLang.func_ok code locs) (f :: fs)

b1 b2 b3 b4.
    GraphLang.word32 b1 b2 b3 b4 =
    words.word_concat b1 (words.word_concat b2 (words.word_concat b3 b4))

(a. ¬(GraphLang.NextNode a = GraphLang.Ret))
  (a. ¬(GraphLang.NextNode a = GraphLang.Err))
  ¬(GraphLang.Ret = GraphLang.Err)

fs stack.
    GraphLang.good_stack fs stack
    GraphLang.good_stack_tail fs stack
    GraphLang.next_node_CASE (fst (head stack)) (λn. even n)

(a. GraphLang.next_node_size (GraphLang.NextNode a) = 1 + a)
  GraphLang.next_node_size GraphLang.Ret = 0
  GraphLang.next_node_size GraphLang.Err = 0

vars vals st.
    GraphLang.save_vals vars vals st =
    GraphLang.fold (pair.UNCURRY (λvar val. GraphLang.var_upd var val))
      (list.ZIP (vars, vals)) st

a0 a1 a2.
    GraphLang.func_size (GraphLang.Func a0 a1 a2) =
    1 +
    (list.list_size string.char_size a0 +
     list.list_size GraphLang.inst_size a2)

a0 a1 a2 a3 f.
    GraphLang.graph_function_CASE (GraphLang.GraphFunction a0 a1 a2 a3) f =
    f a0 a1 a2 a3

f0 f1.
    fn. (a. fn (GraphLang.ARM a) = f0 a) a. fn (GraphLang.M0 a) = f1 a

xs n. n length xs ys zs. xs = ys @ zs length ys = n

nm st.
    GraphLang.var_bool nm st
    GraphLang.variable_CASE (GraphLang.var_acc nm st) (λv6. ) (λv7. )
      (λv8. ) (λv9. ) (λv10. ) (λq. q)

nm st.
    GraphLang.var_nat nm st =
    GraphLang.variable_CASE (GraphLang.var_acc nm st) 0 (λn. n) (λv7. 0)
      (λv8. 0) (λv9. 0) (λv10. 0) (λv11. 0)

nm st.
    GraphLang.var_dom nm st =
    GraphLang.variable_CASE (GraphLang.var_acc nm st) pred_set.EMPTY
      (λv6. pred_set.EMPTY) (λv7. pred_set.EMPTY) (λv8. pred_set.EMPTY)
      (λv9. pred_set.EMPTY) (λd. d) (λv11. pred_set.EMPTY)

f.
    fn.
      a0 a1 a2 a3.
        fn (GraphLang.GraphFunction a0 a1 a2 a3) = f a0 a1 a2 a3

words.word_msb (words.n2w n)
  n div arithmetic.BIT2 0 31 mod arithmetic.BIT2 0 = 1

name entry l.
    GraphLang.func_trans (GraphLang.Func name entry l) =
    (name,
     GraphLang.GraphFunction GraphLang.ret_and_all_names
       GraphLang.all_names_with_input
       (GraphLang.graph (GraphLang.list_inst_trans 1 l)) (words.w2n entry))

insts.
    GraphLang.LIST_IMPL_INST code names insts
    list.ALL_DISTINCT (map GraphLang.inst_loc insts)
    even (words.w2n entry)
    GraphLang.func_ok code names (GraphLang.Func name entry insts)

P. P [] (x y xs. P xs P ((x, y) :: xs)) v. P v

prog.SPEC m (set_sep.STAR p (r x)) c q
  pc. pc = x prog.SPEC m (set_sep.STAR p (r pc)) c q

prog.SPEC m (set_sep.STAR pre (res w)) code q
  p. p = w prog.SPEC m (set_sep.STAR pre (res p)) code q

(a f v. GraphLang.jump_CASE (GraphLang.Jump a) f v = f a)
  f v. GraphLang.jump_CASE GraphLang.Return f v = v

P.
    P [] (loc state name rest. P ((loc, state, name) :: rest)) z. P z

(c_post prog.SPEC model (assert p) code (assert post))
  triple.TRIPLE (assert, model) (pre, p) code (pre c_post, post)

t1 = t2 (y1 = y2 u1 = u2) y1 = y2 (t1, u1) = (t2, u2)

(x1 = x2 t1 = t2) u1 = u2 x1 = x2 (t1, u1) = (t2, u2)

f0 f1 f2.
    fn.
      (a. fn (GraphLang.NextNode a) = f0 a) fn GraphLang.Ret = f1
      fn GraphLang.Err = f2

GraphLang.graph [] = const none
  y xs x.
    GraphLang.graph ((x, y) :: xs) =
    combin.UPDATE x (some y) (GraphLang.graph xs)

(k. GraphLang.odd_nums k 0 = [])
  k n.
    GraphLang.odd_nums k (suc n) =
    k :: GraphLang.odd_nums (k + arithmetic.BIT2 0) n

const = (λx y. x)
  (address.ALIGNED x words.word_and x (words.n2w 3) = words.n2w 0)
  list.REV xs [] = reverse xs

GraphLang.IMPL_INST code names (GraphLang.Inst i (const ) next)
  GraphLang.LIST_IMPL_INST code names xs
  GraphLang.LIST_IMPL_INST code names
    (GraphLang.Inst i (const ) next :: xs)

P.
    P []
    (name entry l xs. P xs P (GraphLang.Func name entry l :: xs))
    fs. P fs

(a a'. GraphLang.ARM a = GraphLang.ARM a' a = a')
  a a'. GraphLang.M0 a = GraphLang.M0 a' a = a'

prog.SPEC arm_prog.ARM_MODEL
    (set_sep.STAR (set_sep.STAR (aPC p) (aR (words.n2w 0) r0))
       (set_sep.cond GraphLang.unspecified_pre)) pred_set.EMPTY
    (set_sep.STAR (aR (words.n2w 0) bool.ARB)
       (aPC (words.word_add p (words.n2w (arithmetic.BIT2 1)))))

list.EL (length xs + n) (reverse xs @ ys) = list.EL n ys
  list.EL (length xs) (reverse xs @ ys) = list.EL 0 ys

GraphLang.fs_locs [] = const none
  xs name l entry.
    GraphLang.fs_locs (GraphLang.Func name entry l :: xs) =
    combin.UPDATE name (some entry) (GraphLang.fs_locs xs)

(a f f1. GraphLang.code_CASE (GraphLang.ARM a) f f1 = f a)
  a f f1. GraphLang.code_CASE (GraphLang.M0 a) f f1 = f1 a

nm st.
    GraphLang.var_word8 nm st =
    GraphLang.variable_CASE (GraphLang.var_acc nm st) (words.n2w 0)
      (λv6. words.n2w 0) (λw. w) (λv8. words.n2w 0) (λv9. words.n2w 0)
      (λv10. words.n2w 0) (λv11. words.n2w 0)

nm st.
    GraphLang.var_word32 nm st =
    GraphLang.variable_CASE (GraphLang.var_acc nm st) (words.n2w 0)
      (λv6. words.n2w 0) (λv7. words.n2w 0) (λw. w) (λv9. words.n2w 0)
      (λv10. words.n2w 0) (λv11. words.n2w 0)

a0 a1 a2 a3.
    GraphLang.graph_function_size (GraphLang.GraphFunction a0 a1 a2 a3) =
    1 +
    (list.list_size (list.list_size string.char_size) a0 +
     (list.list_size (list.list_size string.char_size) a1 + a3))

n xs ys.
    list.EL (length xs) (xs @ ys) = list.EL 0 ys
    list.EL (length xs + n) (xs @ ys) = list.EL n ys

a x p c q.
    (a prog.SPEC x p c q)
    d. pred_set.SUBSET c d a prog.SPEC x p d q

GraphLang.IMPL_INST c locs
    (GraphLang.Inst n (const ) (GraphLang.IF g next1 next2))
  a.
    (s. a s g s) GraphLang.IMPL_INST c locs (GraphLang.Inst n a next1)

(s. GraphLang.apply_update [] s = s)
  y xs x s.
    GraphLang.apply_update ((x, y) :: xs) s =
    combin.UPDATE x (y s) (GraphLang.apply_update xs s)

prog.SPEC m (set_sep.STAR p (f x)) c (set_sep.STAR q (f x))
  v. v = x prog.SPEC m (set_sep.STAR p (f v)) c (set_sep.STAR q (f v))

a mem.
    GraphLang.READ32 a mem =
    GraphLang.word32 (mem (words.word_add a (words.n2w 3)))
      (mem (words.word_add a (words.n2w (arithmetic.BIT2 0))))
      (mem (words.word_add a (words.n2w 1))) (mem a)

(t. GraphLang.list_inst_trans t [] = [])
  t x xs.
    GraphLang.list_inst_trans t (x :: xs) =
    bool.LET (pair.UNCURRY (λt1 ys. ys @ GraphLang.list_inst_trans t1 xs))
      (GraphLang.inst_trans t x)

snd (snd (words.add_with_carry (x, y, c)))
  (words.word_msb x words.word_msb y)
  ¬(words.word_msb x
     words.word_msb
       (if c then words.word_sub x (words.word_1comp y)
        else words.word_add x y))

(f s. GraphLang.fold f [] s = s)
  f x xs s. GraphLang.fold f (x :: xs) s = GraphLang.fold f xs (f x s)

nm st.
    GraphLang.var_mem nm st =
    GraphLang.variable_CASE (GraphLang.var_acc nm st) (λv8. words.n2w 0)
      (λv6 v8. words.n2w 0) (λv7 v8. words.n2w 0) (λv8 v8. words.n2w 0)
      (λm. m) (λv10 v8. words.n2w 0) (λv11 v8. words.n2w 0)

a0 a1 a2 a0' a1' a2'.
    GraphLang.Func a0 a1 a2 = GraphLang.Func a0' a1' a2'
    a0 = a0' a1 = a1' a2 = a2'

a0 a1 a2 a0' a1' a2'.
    GraphLang.Inst a0 a1 a2 = GraphLang.Inst a0' a1' a2'
    a0 = a0' a1 = a1' a2 = a2'

GraphLang.IMPL_INST c locs
    (GraphLang.Inst n (const ) (GraphLang.IF g next1 next2))
  a.
    (s. a s ((¬) g) s)
    GraphLang.IMPL_INST c locs (GraphLang.Inst n a next2)

P.
    (s. P [] s) (x y xs s. P xs s P ((x, y) :: xs) s) v v1. P v v1

(b1 prog.SPEC m p c1 q1) (b2 prog.SPEC m p c2 q2) (¬b1 b2)
  prog.SPEC m p (pred_set.UNION c1 c2) (if b1 then q1 else q2)

(x1 = x2 t1 = t2) (y1 = y2 u1 = u2) (x1, y1) = (x2, y2)
  (t1, u1) = (t2, u2)

GraphLang.funcs_ok (GraphLang.ARM code) fs
  n s1 s2.
    GraphLang.good_stack fs s1 GraphLang.good_stack fs s2
    GraphLang.exec_graph_n (GraphLang.list_func_trans fs) n s1 s2
    prog.SPEC arm_prog.ARM_MODEL (GraphLang.arm_assert_for s1) code
      (GraphLang.arm_assert_for s2)

GraphLang.funcs_ok (GraphLang.M0 code) fs
  n s1 s2.
    GraphLang.good_stack fs s1 GraphLang.good_stack fs s2
    GraphLang.exec_graph_n (GraphLang.list_func_trans fs) n s1 s2
    prog.SPEC m0_prog.M0_MODEL (GraphLang.m0_assert_for s1) code
      (GraphLang.m0_assert_for s2)

GraphLang.func_ok code locs f
  c.
    pair.pair_CASE (code, c)
      (λv2 v3.
         GraphLang.code_CASE v2
           (λc1.
              GraphLang.code_CASE v3 (λc2. pred_set.SUBSET c1 c2)
                (λv11. ))
           (λc1'.
              GraphLang.code_CASE v3 (λv14. )
                (λc2'. pred_set.SUBSET c1' c2')))
    GraphLang.func_ok c locs f

GraphLang.IMPL_INST code locs (GraphLang.Inst pc1 assert1 next1)
  GraphLang.IMPL_INST code locs (GraphLang.Inst pc1 assert2 next2)
  guard.
    GraphLang.IMPL_INST code locs
      (GraphLang.Inst pc1 (λs. if guard s then assert1 s else assert2 s)
         (GraphLang.IF guard next1 next2))

nn.
    (n l. nn = GraphLang.Basic n l)
    (n n0 f. nn = GraphLang.Cond n n0 f)
    n s l l0. nn = GraphLang.Call n s l l0

GraphLang.IMPL_INST code locs (GraphLang.Inst pc1 assert1 next1)
  GraphLang.IMPL_INST code locs (GraphLang.Inst pc1 assert2 next2)
  (s. assert1 s assert2 s)
  guard.
    GraphLang.IMPL_INST code locs
      (GraphLang.Inst pc1 assert1 (GraphLang.IF guard next1 next2))

(nn stf x xs.
     GraphLang.upd_stack nn stf (x :: xs) =
     (nn, stf (fst (snd x)), snd (snd x)) :: xs)
  nn stf. GraphLang.upd_stack nn stf [] = []

GraphLang.graph =
  relation.WFREC
    (select R'. wellFounded R' y x xs. R' xs ((x, y) :: xs))
    (λgraph a.
       list.list_CASE a (id (const none))
         (λv xs.
            pair.pair_CASE v
              (λx y. id (combin.UPDATE x (some y) (graph xs)))))

(n. GraphLang.find_func n [] = none)
  xs name n insts entry.
    GraphLang.find_func n (GraphLang.Func name entry insts :: xs) =
    if n = name then some (GraphLang.Func name entry insts)
    else GraphLang.find_func n xs

(n. GraphLang.find_inst n [] = none)
  xs next n l asrt.
    GraphLang.find_inst n (GraphLang.Inst l asrt next :: xs) =
    if l = n then some (GraphLang.Inst l asrt next)
    else GraphLang.find_inst n xs

P.
    (n l. P (GraphLang.Basic n l))
    (n n0 f. P (GraphLang.Cond n n0 f))
    (n s l l0. P (GraphLang.Call n s l l0)) nn. P nn

M M' f.
    M = M'
    (a0 a1 a2. M' = GraphLang.Func a0 a1 a2 f a0 a1 a2 = f' a0 a1 a2)
    GraphLang.func_CASE M f = GraphLang.func_CASE M' f'

M M' f.
    M = M'
    (a0 a1 a2. M' = GraphLang.Inst a0 a1 a2 f a0 a1 a2 = f' a0 a1 a2)
    GraphLang.inst_CASE M f = GraphLang.inst_CASE M' f'

xs x n ys.
    list.LUPDATE x (length xs) (xs @ ys) = xs @ list.LUPDATE x 0 ys
    list.LUPDATE x (length xs + n) (xs @ ys) = xs @ list.LUPDATE x n ys

nn.
    (f n n0. nn = GraphLang.IF f n n0)
    (o' l j. nn = GraphLang.ASM o' l j)
    o' l s j. nn = GraphLang.CALL o' l s j

w.
    address.ALIGNED w
    arm.Align (w, arithmetic.BIT2 0) = w
    arm.Align (w, arithmetic.BIT2 1) = w
    m0.Align (w, arithmetic.BIT2 0) = w
    m0.Align (w, arithmetic.BIT2 1) = w

GraphLang.var_word32 n (GraphLang.apply_update ((x, y) :: xs) s) =
  if n = x then
    GraphLang.variable_CASE (y s) (words.n2w 0) (λv6. words.n2w 0)
      (λv7. words.n2w 0) (λw. w) (λv9. words.n2w 0) (λv10. words.n2w 0)
      (λv11. words.n2w 0)
  else GraphLang.var_word32 n (GraphLang.apply_update xs s)

P.
    (n. P n [])
    (n name entry insts xs.
       (¬(n = name) P n xs)
       P n (GraphLang.Func name entry insts :: xs)) v v1. P v v1

P.
    (n. P n [])
    (n l asrt next xs.
       (¬(l = n) P n xs) P n (GraphLang.Inst l asrt next :: xs))
    v v1. P v v1

a0 a1 a2 a3 a0' a1' a2' a3'.
    GraphLang.GraphFunction a0 a1 a2 a3 =
    GraphLang.GraphFunction a0' a1' a2' a3'
    a0 = a0' a1 = a1' a2 = a2' a3 = a3'

GraphLang.fs_locs =
  relation.WFREC
    (select R'.
       wellFounded R'
       l entry name xs. R' xs (GraphLang.Func name entry l :: xs))
    (λfs_locs a.
       list.list_CASE a (id (const none))
         (λv xs.
            GraphLang.func_CASE v
              (λname entry l.
                 id (combin.UPDATE name (some entry) (fs_locs xs)))))

bitstring.v2w
    (bitstring.field_insert 31 (arithmetic.BIT2 7)
       (bitstring.field 15 0 (bitstring.w2v w)) (bitstring.w2v v)) =
  words.bit_field_insert 31 (arithmetic.BIT2 7) w v

M M' f v.
    M = M' (a. M' = GraphLang.Jump a f a = f' a)
    (M' = GraphLang.Return v = v')
    GraphLang.jump_CASE M f v = GraphLang.jump_CASE M' f' v'

(a f v v1.
     GraphLang.next_node_CASE (GraphLang.NextNode a) f v v1 = f a)
  (f v v1. GraphLang.next_node_CASE GraphLang.Ret f v v1 = v)
  f v v1. GraphLang.next_node_CASE GraphLang.Err f v v1 = v1

P.
    P GraphLang.VarNone (a. P (GraphLang.VarNat a))
    (a. P (GraphLang.VarWord8 a)) (a. P (GraphLang.VarWord32 a))
    (a. P (GraphLang.VarMem a)) (a. P (GraphLang.VarDom a))
    (a. P (GraphLang.VarBool a)) x. P x

M M' f.
    M = M'
    (a0 a1 a2 a3.
       M' = GraphLang.GraphFunction a0 a1 a2 a3
       f a0 a1 a2 a3 = f' a0 a1 a2 a3)
    GraphLang.graph_function_CASE M f = GraphLang.graph_function_CASE M' f'

P.
    (code names. P code names [])
    (code names i assert next xs.
       P code names xs
       P code names (GraphLang.Inst i assert next :: xs))
    v v1 v2. P v v1 v2

(words.word_sub a
     (words.word_mul (words.n2w (l + n)) (words.n2w (arithmetic.BIT2 1))) =
   words.word_sub r13
     (words.word_mul (words.n2w (arithmetic.BIT2 1)) (words.n2w l)) b)
  address.ALIGNED a address.ALIGNED r13
  n = words.w2n (words.word_sub a r13) div arithmetic.BIT2 1 b

x.
    x = GraphLang.VarNone (n. x = GraphLang.VarNat n)
    (c. x = GraphLang.VarWord8 c) (c. x = GraphLang.VarWord32 c)
    (f. x = GraphLang.VarMem f) (f. x = GraphLang.VarDom f)
    b. x = GraphLang.VarBool b

M M' f f1.
    M = M' (a. M' = GraphLang.ARM a f a = f' a)
    (a. M' = GraphLang.M0 a f1 a = f1' a)
    GraphLang.code_CASE M f f1 = GraphLang.code_CASE M' f' f1'

GraphLang.IMPL_INST c locs
    (GraphLang.Inst n b
       (GraphLang.IF g (GraphLang.ASM x u (GraphLang.Jump j)) next))
  GraphLang.IMPL_INST c locs
    (GraphLang.Inst n (λs. b s g s)
       (GraphLang.ASM x u (GraphLang.Jump j)))
  GraphLang.IMPL_INST c locs (GraphLang.Inst n (λs. b s ¬g s) next)

P.
    (n n0. P n P n0 f. P (GraphLang.IF f n n0))
    (o' l j. P (GraphLang.ASM o' l j))
    (o' l s j. P (GraphLang.CALL o' l s j)) n. P n

(address.ALIGNED (arm.Align (w, arithmetic.BIT2 0))
   ¬fcp.fcp_index w 1)
  (address.ALIGNED (arm.Align (w, arithmetic.BIT2 1)) )
  (address.ALIGNED (m0.Align (w, arithmetic.BIT2 0))
   ¬fcp.fcp_index w 1)
  (address.ALIGNED (m0.Align (w, arithmetic.BIT2 1)) )

(k. GraphLang.odd_nums k 0 = [])
  (k n.
     GraphLang.odd_nums k (bit1 n) =
     k ::
     GraphLang.odd_nums (k + arithmetic.BIT2 0)
       (arithmetic.- (bit1 n) 1))
  k n.
    GraphLang.odd_nums k (arithmetic.BIT2 n) =
    k :: GraphLang.odd_nums (k + arithmetic.BIT2 0) (bit1 n)

(names code. GraphLang.LIST_IMPL_INST code names [] )
  xs next names i code assert.
    GraphLang.LIST_IMPL_INST code names
      (GraphLang.Inst i assert next :: xs)
    GraphLang.IMPL_INST code names (GraphLang.Inst i assert next)
    assert = const GraphLang.LIST_IMPL_INST code names xs

GraphLang.IMPL_INST code locs
    (GraphLang.Inst pc assert
       (GraphLang.IF guard (GraphLang.ASM (some s1) up1 j1)
          (GraphLang.ASM (some s2) up2 j2)))
  GraphLang.IMPL_INST code locs
    (GraphLang.Inst pc assert
       (GraphLang.IF guard
          (GraphLang.ASM (some (λs. guard s s1 s)) up1 j1)
          (GraphLang.ASM (some (λs. ¬guard s s2 s)) up2 j2)))

code names name entry l.
    GraphLang.func_ok code names (GraphLang.Func name entry l)
    list.ALL_DISTINCT (map GraphLang.inst_loc l) even (words.w2n entry)
    i assert next.
      bool.IN (GraphLang.Inst i assert next) (list.LIST_TO_SET l)
      GraphLang.IMPL_INST code names (GraphLang.Inst i assert next)
      assert = const

GraphLang.IMPL_INST c locs
    (GraphLang.Inst n b
       (GraphLang.IF g (GraphLang.ASM pre u1 (GraphLang.Jump w)) next))
  GraphLang.IMPL_INST c locs
    (GraphLang.Inst w g (GraphLang.ASM none [] (GraphLang.Jump j)))
  (s. g s g (GraphLang.apply_update u1 s))
  GraphLang.IMPL_INST c locs
    (GraphLang.Inst n b
       (GraphLang.IF g (GraphLang.ASM pre u1 (GraphLang.Jump j)) next))

M M' f v v1.
    M = M' (a. M' = GraphLang.NextNode a f a = f' a)
    (M' = GraphLang.Ret v = v') (M' = GraphLang.Err v1 = v1')
    GraphLang.next_node_CASE M f v v1 =
    GraphLang.next_node_CASE M' f' v' v1'

f0 f1 f2.
    fn.
      (a0 a1. fn (GraphLang.Basic a0 a1) = f0 a0 a1)
      (a0 a1 a2. fn (GraphLang.Cond a0 a1 a2) = f1 a0 a1 a2)
      a0 a1 a2 a3. fn (GraphLang.Call a0 a1 a2 a3) = f2 a0 a1 a2 a3

GraphLang.IMPL_INST c locs
    (GraphLang.Inst n b
       (GraphLang.IF g next (GraphLang.ASM pre u1 (GraphLang.Jump w))))
  GraphLang.IMPL_INST c locs
    (GraphLang.Inst w ((¬) g)
       (GraphLang.ASM none [] (GraphLang.Jump j)))
  (s. g (GraphLang.apply_update u1 s) g s)
  GraphLang.IMPL_INST c locs
    (GraphLang.Inst n b
       (GraphLang.IF g next (GraphLang.ASM pre u1 (GraphLang.Jump j))))

(p s w. GraphLang.check_jump (GraphLang.Jump p) s w w = p)
  s w.
    GraphLang.check_jump GraphLang.Return s w
    GraphLang.var_word32
      (string.CHR
         (arithmetic.BIT2
            (arithmetic.BIT2
               (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
       string.CHR
         (bit1
            (arithmetic.BIT2
               (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
       string.CHR
         (arithmetic.BIT2
            (bit1
               (arithmetic.BIT2
                  (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) :: [])
      s = w

a w mem.
    GraphLang.WRITE32 a w mem =
    combin.UPDATE a (words.w2w w)
      (combin.UPDATE (words.word_add a (words.n2w 1))
         (words.w2w (words.word_lsr w (arithmetic.BIT2 3)))
         (combin.UPDATE (words.word_add a (words.n2w (arithmetic.BIT2 0)))
            (words.w2w (words.word_lsr w (arithmetic.BIT2 7)))
            (combin.UPDATE (words.word_add a (words.n2w 3))
               (words.w2w
                  (words.word_lsr w
                     (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))))
               mem)))

(GraphLang.IMPL_INST code locs
     (GraphLang.Inst pc assert
        (GraphLang.IF guard (GraphLang.ASM (some (λx. )) up1 j1) next))
   GraphLang.IMPL_INST code locs
     (GraphLang.Inst pc assert
        (GraphLang.IF guard (GraphLang.ASM none up1 j1) next)))
  (GraphLang.IMPL_INST code locs
     (GraphLang.Inst pc assert
        (GraphLang.IF guard next (GraphLang.ASM (some (λx. )) up1 j1)))
   GraphLang.IMPL_INST code locs
     (GraphLang.Inst pc assert
        (GraphLang.IF guard next (GraphLang.ASM none up1 j1))))

GraphLang.find_func_tupled =
  relation.WFREC
    (select R'.
       wellFounded R'
       insts entry xs name n.
         ¬(n = name)
         R' (n, xs) (n, GraphLang.Func name entry insts :: xs))
    (λfind_func_tupled a.
       pair.pair_CASE a
         (λn v1.
            list.list_CASE v1 (id none)
              (λv2 xs.
                 GraphLang.func_CASE v2
                   (λname entry insts.
                      id
                        (if n = name then
                           some (GraphLang.Func name entry insts)
                         else find_func_tupled (n, xs))))))

GraphLang.find_inst_tupled =
  relation.WFREC
    (select R'.
       wellFounded R'
       next asrt xs n l.
         ¬(l = n) R' (n, xs) (n, GraphLang.Inst l asrt next :: xs))
    (λfind_inst_tupled a.
       pair.pair_CASE a
         (λn v1.
            list.list_CASE v1 (id none)
              (λv2 xs.
                 GraphLang.inst_CASE v2
                   (λl asrt next.
                      id
                        (if l = n then some (GraphLang.Inst l asrt next)
                         else find_inst_tupled (n, xs))))))

f0 f1 f2.
    fn.
      (a0 a1 a2.
         fn (GraphLang.IF a0 a1 a2) = f0 a0 a1 a2 (fn a1) (fn a2))
      (a0 a1 a2. fn (GraphLang.ASM a0 a1 a2) = f1 a0 a1 a2)
      a0 a1 a2 a3. fn (GraphLang.CALL a0 a1 a2 a3) = f2 a0 a1 a2 a3

(a2 a1' a1 a0' a0.
     ¬(GraphLang.Basic a0 a1 = GraphLang.Cond a0' a1' a2))
  (a3 a2 a1' a1 a0' a0.
     ¬(GraphLang.Basic a0 a1 = GraphLang.Call a0' a1' a2 a3))
  a3 a2' a2 a1' a1 a0' a0.
    ¬(GraphLang.Cond a0 a1 a2 = GraphLang.Call a0' a1' a2' a3)

s.
    GraphLang.arm_STATE_CPSR s =
    set_sep.STAR
      (set_sep.STAR
         (set_sep.STAR
            (arm_prog.arm_CPSR_N
               (GraphLang.var_bool
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) :: []) s))
            (arm_prog.arm_CPSR_Z
               (GraphLang.var_bool
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) :: []) s)))
         (arm_prog.arm_CPSR_C
            (GraphLang.var_bool
               (string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) :: []) s)))
      (arm_prog.arm_CPSR_V
         (GraphLang.var_bool
            (string.CHR
               (arithmetic.BIT2
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
             []) s))

s.
    GraphLang.m0_STATE_PSR s =
    set_sep.STAR
      (set_sep.STAR
         (set_sep.STAR
            (m0_prog.m0_PSR_N
               (GraphLang.var_bool
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) :: []) s))
            (m0_prog.m0_PSR_Z
               (GraphLang.var_bool
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) :: []) s)))
         (m0_prog.m0_PSR_C
            (GraphLang.var_bool
               (string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) :: []) s)))
      (m0_prog.m0_PSR_V
         (GraphLang.var_bool
            (string.CHR
               (arithmetic.BIT2
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
             []) s))

P.
    (fs. P fs []) (fs x. P fs (x :: []))
    (fs l1 s1 n1 l2 s2 n2 xs.
       P fs ((l2, s2, n2) :: xs)
       P fs ((l1, s1, n1) :: (l2, s2, n2) :: xs)) v v1. P v v1

GraphLang.variable_size GraphLang.VarNone = 0
  (a. GraphLang.variable_size (GraphLang.VarNat a) = 1 + a)
  (a. GraphLang.variable_size (GraphLang.VarWord8 a) = 1)
  (a. GraphLang.variable_size (GraphLang.VarWord32 a) = 1)
  (a. GraphLang.variable_size (GraphLang.VarMem a) = 1)
  (a. GraphLang.variable_size (GraphLang.VarDom a) = 1)
  a.
    GraphLang.variable_size (GraphLang.VarBool a) =
    1 + basicSize.bool_size a

(s u l.
     GraphLang.next_ok (GraphLang.ASM s u l)
     GraphLang.upd_ok u GraphLang.jump_ok l)
  (b n1 n2.
     GraphLang.next_ok (GraphLang.IF b n1 n2)
     GraphLang.next_ok n1 GraphLang.next_ok n2)
  a u n j.
    GraphLang.next_ok (GraphLang.CALL a u n j)
    map fst u = GraphLang.ret_and_all_names GraphLang.jump_ok j
    st. GraphLang.check_ret j st (GraphLang.apply_update u st)

(a2' a2 a1' a1 a0' a0.
     ¬(GraphLang.IF a0 a1 a2 = GraphLang.ASM a0' a1' a2'))
  (a3 a2' a2 a1' a1 a0' a0.
     ¬(GraphLang.IF a0 a1 a2 = GraphLang.CALL a0' a1' a2' a3))
  a3 a2' a2 a1' a1 a0' a0.
    ¬(GraphLang.ASM a0 a1 a2 = GraphLang.CALL a0' a1' a2' a3)

s
    (string.CHR
       (arithmetic.BIT2
          (arithmetic.BIT2
             (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
     string.CHR
       (bit1
          (arithmetic.BIT2
             (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
     string.CHR
       (arithmetic.BIT2
          (bit1
             (arithmetic.BIT2
                (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) :: []) =
  GraphLang.VarWord32 w
  w =
  GraphLang.var_word32
    (string.CHR
       (arithmetic.BIT2
          (arithmetic.BIT2
             (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
     string.CHR
       (bit1
          (arithmetic.BIT2
             (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
     string.CHR
       (arithmetic.BIT2
          (bit1
             (arithmetic.BIT2
                (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) :: []) s

f0 f1 f2 f3 f4 f5 f6.
    fn.
      fn GraphLang.VarNone = f0 (a. fn (GraphLang.VarNat a) = f1 a)
      (a. fn (GraphLang.VarWord8 a) = f2 a)
      (a. fn (GraphLang.VarWord32 a) = f3 a)
      (a. fn (GraphLang.VarMem a) = f4 a)
      (a. fn (GraphLang.VarDom a) = f5 a)
      a. fn (GraphLang.VarBool a) = f6 a

GraphLang.LIST_IMPL_INST_tupled =
  relation.WFREC
    (select R'.
       wellFounded R'
       next assert i xs names code.
         R' (code, names, xs)
           (code, names, GraphLang.Inst i assert next :: xs))
    (λLIST_IMPL_INST_tupled a.
       pair.pair_CASE a
         (λcode v1.
            pair.pair_CASE v1
              (λnames v3.
                 list.list_CASE v3 (id )
                   (λv4 xs.
                      GraphLang.inst_CASE v4
                        (λi assert next.
                           id
                             (GraphLang.IMPL_INST code names
                                (GraphLang.Inst i assert next)
                              assert = const
                              LIST_IMPL_INST_tupled (code, names, xs)))))))

(a0 a1 f f1 f2.
     GraphLang.node_CASE (GraphLang.Basic a0 a1) f f1 f2 = f a0 a1)
  (a0 a1 a2 f f1 f2.
     GraphLang.node_CASE (GraphLang.Cond a0 a1 a2) f f1 f2 = f1 a0 a1 a2)
  a0 a1 a2 a3 f f1 f2.
    GraphLang.node_CASE (GraphLang.Call a0 a1 a2 a3) f f1 f2 =
    f2 a0 a1 a2 a3

code locs n assert next.
    GraphLang.IMPL_INST code locs (GraphLang.Inst n assert next)
    GraphLang.next_ok next even (words.w2n n)
    s t call w.
      assert s GraphLang.exec_next locs next s t w call
      GraphLang.code_CASE code
        (λarm_c.
           prog.SPEC arm_prog.ARM_MODEL
             (set_sep.STAR (GraphLang.arm_STATE s) (arm_prog.arm_PC n))
             arm_c
             (set_sep.STAR (GraphLang.arm_STATE t) (arm_prog.arm_PC w)))
        (λm0_c.
           prog.SPEC m0_prog.M0_MODEL
             (set_sep.STAR (GraphLang.m0_STATE s) (m0_prog.m0_PC n)) m0_c
             (set_sep.STAR (GraphLang.m0_STATE t) (m0_prog.m0_PC w)))

(a0 a1 a2 f f1 f2.
     GraphLang.next_CASE (GraphLang.IF a0 a1 a2) f f1 f2 = f a0 a1 a2)
  (a0 a1 a2 f f1 f2.
     GraphLang.next_CASE (GraphLang.ASM a0 a1 a2) f f1 f2 = f1 a0 a1 a2)
  a0 a1 a2 a3 f f1 f2.
    GraphLang.next_CASE (GraphLang.CALL a0 a1 a2 a3) f f1 f2 =
    f2 a0 a1 a2 a3

(a0 a1.
     GraphLang.node_size (GraphLang.Basic a0 a1) =
     1 +
     (GraphLang.next_node_size a0 +
      list.list_size
        (basicSize.pair_size (list.list_size string.char_size) (λv. 0))
        a1))
  (a0 a1 a2.
     GraphLang.node_size (GraphLang.Cond a0 a1 a2) =
     1 + (GraphLang.next_node_size a0 + GraphLang.next_node_size a1))
  a0 a1 a2 a3.
    GraphLang.node_size (GraphLang.Call a0 a1 a2 a3) =
    1 +
    (GraphLang.next_node_size a0 +
     (list.list_size string.char_size a1 +
      (list.list_size (λv. 0) a2 +
       list.list_size (list.list_size string.char_size) a3)))

(v0 v1 v2 v3 stack.
     GraphLang.exec_node_return v0 v1 (GraphLang.Basic v2 v3) stack =
     pred_set.EMPTY)
  (v4 v5 v6 v7 v8 stack.
     GraphLang.exec_node_return v4 v5 (GraphLang.Cond v6 v7 v8) stack =
     pred_set.EMPTY)
  Gamma st cont fname inputs outputs stack.
    GraphLang.exec_node_return Gamma st
      (GraphLang.Call cont fname inputs outputs) stack =
    option.option_CASE (Gamma fname) pred_set.EMPTY
      (λv.
         GraphLang.graph_function_CASE v
           (λinps outps graph ep.
              pred_set.INSERT
                (GraphLang.upd_stack cont
                   (GraphLang.return_vars outps outputs st) stack)
                pred_set.EMPTY))

(a a'. GraphLang.VarNat a = GraphLang.VarNat a' a = a')
  (a a'. GraphLang.VarWord8 a = GraphLang.VarWord8 a' a = a')
  (a a'. GraphLang.VarWord32 a = GraphLang.VarWord32 a' a = a')
  (a a'. GraphLang.VarMem a = GraphLang.VarMem a' a = a')
  (a a'. GraphLang.VarDom a = GraphLang.VarDom a' a = a')
  a a'. GraphLang.VarBool a = GraphLang.VarBool a' a a'

GraphLang.next_trans_tupled =
  GraphLang.next_trans_tupled_aux
    (select R'.
       wellFounded R'
       (guard n n2 n1 t t1 xs.
          (t1, xs) =
          GraphLang.next_trans_tupled_aux R'
            (t, t + arithmetic.BIT2 1, n1)
          R' (t + arithmetic.BIT2 0, t1, n2)
            (n, t, GraphLang.IF guard n1 n2))
       n2 guard n n1 t.
         R' (t, t + arithmetic.BIT2 1, n1)
           (n, t, GraphLang.IF guard n1 n2))

GraphLang.all_names_with_input =
  GraphLang.all_names @
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
   string.CHR (bit1 (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2
              (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1
           (arithmetic.BIT2
              (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) :: []) :: []

(a0 a1 a2.
     GraphLang.next_size (GraphLang.IF a0 a1 a2) =
     1 + (GraphLang.next_size a1 + GraphLang.next_size a2))
  (a0 a1 a2.
     GraphLang.next_size (GraphLang.ASM a0 a1 a2) =
     1 +
     (basicSize.option_size (λv. 0) a0 +
      (list.list_size
         (basicSize.pair_size (list.list_size string.char_size) (λv. 0))
         a1 + GraphLang.jump_size a2)))
  a0 a1 a2 a3.
    GraphLang.next_size (GraphLang.CALL a0 a1 a2 a3) =
    1 +
    (basicSize.option_size (λv. 0) a0 +
     (list.list_size
        (basicSize.pair_size (list.list_size string.char_size) (λv. 0))
        a1 +
      (list.list_size string.char_size a2 + GraphLang.jump_size a3)))

GraphLang.arm_assert_for [] = set_sep.SEP_F
  GraphLang.arm_assert_for ((loc, state, name) :: rest) =
  set_sep.STAR (GraphLang.arm_STATE state)
    (arm_prog.arm_PC
       (GraphLang.next_node_CASE loc (λn. words.n2w n)
          (GraphLang.var_word32
             (string.CHR
                (arithmetic.BIT2
                   (arithmetic.BIT2
                      (bit1
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2
                         (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (arithmetic.BIT2
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              []) state)
          (GraphLang.var_word32
             (string.CHR
                (arithmetic.BIT2
                   (arithmetic.BIT2
                      (bit1
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2
                         (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (arithmetic.BIT2
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              []) state)))

GraphLang.m0_assert_for [] = set_sep.SEP_F
  GraphLang.m0_assert_for ((loc, state, name) :: rest) =
  set_sep.STAR (GraphLang.m0_STATE state)
    (m0_prog.m0_PC
       (GraphLang.next_node_CASE loc (λn. words.n2w n)
          (GraphLang.var_word32
             (string.CHR
                (arithmetic.BIT2
                   (arithmetic.BIT2
                      (bit1
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2
                         (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (arithmetic.BIT2
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              []) state)
          (GraphLang.var_word32
             (string.CHR
                (arithmetic.BIT2
                   (arithmetic.BIT2
                      (bit1
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2
                         (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (arithmetic.BIT2
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              []) state)))

M M' f f1 f2.
    M = M' (a0 a1. M' = GraphLang.Basic a0 a1 f a0 a1 = f' a0 a1)
    (a0 a1 a2.
       M' = GraphLang.Cond a0 a1 a2 f1 a0 a1 a2 = f1' a0 a1 a2)
    (a0 a1 a2 a3.
       M' = GraphLang.Call a0 a1 a2 a3
       f2 a0 a1 a2 a3 = f2' a0 a1 a2 a3)
    GraphLang.node_CASE M f f1 f2 = GraphLang.node_CASE M' f' f1' f2'

GraphLang.arm_assert_for =
  relation.WFREC (select R'. wellFounded R')
    (λarm_assert_for a.
       list.list_CASE a (id set_sep.SEP_F)
         (λv rest.
            pair.pair_CASE v
              (λloc v3.
                 pair.pair_CASE v3
                   (λstate name.
                      id
                        (set_sep.STAR (GraphLang.arm_STATE state)
                           (arm_prog.arm_PC
                              (GraphLang.next_node_CASE loc
                                 (λn. words.n2w n)
                                 (GraphLang.var_word32
                                    (string.CHR
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2
                                             (bit1
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (bit1
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2
                                                (bit1
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (arithmetic.BIT2
                                          (bit1
                                             (arithmetic.BIT2
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         0)))))) :: [])
                                    state)
                                 (GraphLang.var_word32
                                    (string.CHR
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2
                                             (bit1
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (bit1
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2
                                                (bit1
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (arithmetic.BIT2
                                          (bit1
                                             (arithmetic.BIT2
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         0)))))) :: [])
                                    state))))))))

GraphLang.m0_assert_for =
  relation.WFREC (select R'. wellFounded R')
    (λm0_assert_for a.
       list.list_CASE a (id set_sep.SEP_F)
         (λv rest.
            pair.pair_CASE v
              (λloc v3.
                 pair.pair_CASE v3
                   (λstate name.
                      id
                        (set_sep.STAR (GraphLang.m0_STATE state)
                           (m0_prog.m0_PC
                              (GraphLang.next_node_CASE loc
                                 (λn. words.n2w n)
                                 (GraphLang.var_word32
                                    (string.CHR
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2
                                             (bit1
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (bit1
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2
                                                (bit1
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (arithmetic.BIT2
                                          (bit1
                                             (arithmetic.BIT2
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         0)))))) :: [])
                                    state)
                                 (GraphLang.var_word32
                                    (string.CHR
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2
                                             (bit1
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (bit1
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2
                                                (bit1
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (arithmetic.BIT2
                                          (bit1
                                             (arithmetic.BIT2
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         0)))))) :: [])
                                    state))))))))

M M' f f1 f2.
    M = M'
    (a0 a1 a2. M' = GraphLang.IF a0 a1 a2 f a0 a1 a2 = f' a0 a1 a2)
    (a0 a1 a2. M' = GraphLang.ASM a0 a1 a2 f1 a0 a1 a2 = f1' a0 a1 a2)
    (a0 a1 a2 a3.
       M' = GraphLang.CALL a0 a1 a2 a3
       f2 a0 a1 a2 a3 = f2' a0 a1 a2 a3)
    GraphLang.next_CASE M f f1 f2 = GraphLang.next_CASE M' f' f1' f2'

(a0 a1 a0' a1'.
     GraphLang.Basic a0 a1 = GraphLang.Basic a0' a1'
     a0 = a0' a1 = a1')
  (a0 a1 a2 a0' a1' a2'.
     GraphLang.Cond a0 a1 a2 = GraphLang.Cond a0' a1' a2'
     a0 = a0' a1 = a1' a2 = a2')
  a0 a1 a2 a3 a0' a1' a2' a3'.
    GraphLang.Call a0 a1 a2 a3 = GraphLang.Call a0' a1' a2' a3'
    a0 = a0' a1 = a1' a2 = a2' a3 = a3'

(a0 a1 a2 a0' a1' a2'.
     GraphLang.IF a0 a1 a2 = GraphLang.IF a0' a1' a2'
     a0 = a0' a1 = a1' a2 = a2')
  (a0 a1 a2 a0' a1' a2'.
     GraphLang.ASM a0 a1 a2 = GraphLang.ASM a0' a1' a2'
     a0 = a0' a1 = a1' a2 = a2')
  a0 a1 a2 a3 a0' a1' a2' a3'.
    GraphLang.CALL a0 a1 a2 a3 = GraphLang.CALL a0' a1' a2' a3'
    a0 = a0' a1 = a1' a2 = a2' a3 = a3'

(Gamma st cont upds stack.
     GraphLang.exec_node Gamma st (GraphLang.Basic cont upds) stack =
     pred_set.INSERT
       (GraphLang.upd_stack cont (const (GraphLang.upd_vars upds st))
          stack) pred_set.EMPTY)
  (Gamma st left right cond stack.
     GraphLang.exec_node Gamma st (GraphLang.Cond left right cond) stack =
     pred_set.INSERT
       (GraphLang.upd_stack (if cond st then left else right) id stack)
       pred_set.EMPTY)
  Gamma st cont fname inputs outputs stack.
    GraphLang.exec_node Gamma st (GraphLang.Call cont fname inputs outputs)
      stack =
    option.option_CASE (Gamma fname)
      (pred_set.INSERT (GraphLang.upd_stack GraphLang.Err id stack)
         pred_set.EMPTY)
      (λv.
         GraphLang.graph_function_CASE v
           (λinps outps graph1 ep.
              pred_set.INSERT
                ((GraphLang.NextNode ep,
                  GraphLang.init_vars inps inputs st, fname) :: stack)
                pred_set.EMPTY))

P.
    (n t upd jump. P n t (GraphLang.ASM none upd jump))
    (n t a upd jump. P n t (GraphLang.ASM (some a) upd jump))
    (n t guard n1 n2.
       (t1 xs.
          (t1, xs) = GraphLang.next_trans t (t + arithmetic.BIT2 1) n1
          P (t + arithmetic.BIT2 0) t1 n2)
       P t (t + arithmetic.BIT2 1) n1 P n t (GraphLang.IF guard n1 n2))
    (n t a upd name r. P n t (GraphLang.CALL a upd name r))
    v v1 v2. P v v1 v2

GraphLang.ret_and_all_names =
  ((string.CHR
      (arithmetic.BIT2
         (arithmetic.BIT2
            (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
    string.CHR
      (bit1
         (arithmetic.BIT2
            (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
    string.CHR
      (arithmetic.BIT2
         (bit1
            (arithmetic.BIT2
               (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) :: []) ::
   GraphLang.all_names) @
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
   string.CHR (bit1 (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2
              (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1
           (arithmetic.BIT2
              (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) :: []) :: []

triple.TRIPLE (straightline.arm_assert, arm_prog.ARM_MODEL)
    (pre, p, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13,
     r14, n, z, c, v, mode, dmem, memory, dom_stack, stack) code
    (pre, p, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13,
     r14, n, z, c, v, mode, dmem, memory, dom_stack, stack)

Gamma stack stack'.
    GraphLang.exec_graph_step Gamma stack stack'
    list.list_CASE stack
      (λv2 v3.
         pair.pair_CASE v2
           (λv8 v9.
              pair.pair_CASE v9
                (λst fname.
                   GraphLang.next_node_CASE v8
                     (λnn.
                        option.option_CASE (Gamma fname)
                          (λv.
                             GraphLang.graph_function_CASE v
                               (λv1 v2 graph v4.
                                  option.option_CASE (graph nn)
                                    (stack' =
                                     GraphLang.upd_stack GraphLang.Err id
                                       stack)
                                    (λnode.
                                       bool.IN stack'
                                         (GraphLang.exec_node Gamma st node
                                            stack)))))
                     (list.list_CASE v3
                        (λv21 v22.
                           pair.pair_CASE v21
                             (λv25 v26.
                                pair.pair_CASE v26
                                  (λv29 fname'.
                                     GraphLang.next_node_CASE v25
                                       (λnn'.
                                          option.option_CASE (Gamma fname')
                                            
                                            (λv.
                                               GraphLang.graph_function_CASE
                                                 v
                                                 (λv1 v2 graph v4.
                                                    option.option_CASE
                                                      (graph nn')
                                                      (stack' =
                                                       GraphLang.upd_stack
                                                         GraphLang.Err id
                                                         stack)
                                                      (λnode.
                                                         bool.IN stack'
                                                           (GraphLang.exec_node_return
                                                              Gamma st node
                                                              (tail
                                                                 stack))))))
                                       (stack' =
                                        GraphLang.upd_stack GraphLang.Err
                                          id (tail stack))
                                       (stack' =
                                        GraphLang.upd_stack GraphLang.Err
                                          id (tail stack))))))
                     (list.list_CASE v3
                        (λv35 v36.
                           stack' =
                           GraphLang.upd_stack GraphLang.Err id
                             (tail stack))))))

(p s t.
     GraphLang.check_ret (GraphLang.Jump p) s t
     GraphLang.var_word32
       (string.CHR
          (arithmetic.BIT2
             (arithmetic.BIT2
                (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
        string.CHR
          (bit1
             (arithmetic.BIT2
                (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
        string.CHR
          (arithmetic.BIT2
             (bit1
                (arithmetic.BIT2
                   (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) :: [])
       t = p)
  s t.
    GraphLang.check_ret GraphLang.Return s t
    GraphLang.var_word32
      (string.CHR
         (arithmetic.BIT2
            (arithmetic.BIT2
               (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
       string.CHR
         (bit1
            (arithmetic.BIT2
               (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
       string.CHR
         (arithmetic.BIT2
            (bit1
               (arithmetic.BIT2
                  (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) :: [])
      t =
    GraphLang.var_word32
      (string.CHR
         (arithmetic.BIT2
            (arithmetic.BIT2
               (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
       string.CHR
         (bit1
            (arithmetic.BIT2
               (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
       string.CHR
         (arithmetic.BIT2
            (bit1
               (arithmetic.BIT2
                  (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) :: []) s

words.word_extract 7 0 w = words.w2w w
  words.word_extract 15 (arithmetic.BIT2 3) w =
  words.w2w (words.word_lsr w (arithmetic.BIT2 3))
  words.word_extract (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))
    (arithmetic.BIT2 7) w =
  words.w2w (words.word_lsr w (arithmetic.BIT2 7))
  words.word_extract 31 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))
    w =
  words.w2w
    (words.word_lsr w
       (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))
  words.word_extract 31 0 v = words.w2w v
  words.word_extract 63 (arithmetic.BIT2 15) v =
  words.w2w (words.word_lsr v (arithmetic.BIT2 15))

M M' v f f1 f2 f3 f4 f5.
    M = M' (M' = GraphLang.VarNone v = v')
    (a. M' = GraphLang.VarNat a f a = f' a)
    (a. M' = GraphLang.VarWord8 a f1 a = f1' a)
    (a. M' = GraphLang.VarWord32 a f2 a = f2' a)
    (a. M' = GraphLang.VarMem a f3 a = f3' a)
    (a. M' = GraphLang.VarDom a f4 a = f4' a)
    (a. M' = GraphLang.VarBool a f5 a = f5' a)
    GraphLang.variable_CASE M v f f1 f2 f3 f4 f5 =
    GraphLang.variable_CASE M' v' f' f1' f2' f3' f4' f5'

R'.
    GraphLang.next_trans_tupled_aux R' =
    relation.WFREC R'
      (λnext_trans_tupled a'.
         pair.pair_CASE a'
           (λn v1.
              pair.pair_CASE v1
                (λt v3.
                   GraphLang.next_CASE v3
                     (λguard n1 n2.
                        id
                          (bool.LET
                             (pair.UNCURRY
                                (λt1 xs.
                                   bool.LET
                                     (pair.UNCURRY
                                        (λt2 ys.
                                           (t2,
                                            (((n,
                                               GraphLang.Cond
                                                 (GraphLang.NextNode t)
                                                 (GraphLang.NextNode
                                                    (t +
                                                     arithmetic.BIT2 0))
                                                 guard) :: []) @ xs) @
                                            ys)))
                                     (next_trans_tupled
                                        (t + arithmetic.BIT2 0, t1, n2))))
                             (next_trans_tupled
                                (t, t + arithmetic.BIT2 1, n1))))
                     (λv7 upd jump.
                        option.option_CASE v7
                          (id
                             (t,
                              (n,
                               GraphLang.Basic (GraphLang.get_jump jump)
                                 upd) :: []))
                          (λa.
                             id
                               (t + arithmetic.BIT2 0,
                                (n,
                                 GraphLang.Cond (GraphLang.NextNode t)
                                   GraphLang.Err a) ::
                                (t,
                                 GraphLang.Basic (GraphLang.get_jump jump)
                                   upd) :: [])))
                     (λa'' upd' name r.
                        id
                          (t + arithmetic.BIT2 0,
                           (n,
                            GraphLang.Cond (GraphLang.NextNode t)
                              GraphLang.Err (GraphLang.get_assert a'')) ::
                           (t,
                            GraphLang.Call (GraphLang.get_jump r) name
                              (map snd upd') GraphLang.all_names_ignore) ::
                           [])))))

GraphLang.all_names_ignore =
  GraphLang.all_names @
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
   string.CHR (bit1 (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2
              (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1
           (arithmetic.BIT2
              (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (bit1 (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1 (bit1 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) :: []) ::
  []

(locs guard n1 n2 s t w call.
     GraphLang.exec_next locs (GraphLang.IF guard n1 n2) s t w call
     if guard s then GraphLang.exec_next locs n1 s t w call
     else GraphLang.exec_next locs n2 s t w call)
  (locs assert update jmp s t w call.
     GraphLang.exec_next locs (GraphLang.ASM assert update jmp) s t w
       call
     GraphLang.get_assert assert s GraphLang.apply_update update s = t
     GraphLang.check_jump jmp t w call = none)
  locs assert update name jmp s t w call.
    GraphLang.exec_next locs (GraphLang.CALL assert update name jmp) s t w
      call
    GraphLang.get_assert assert s GraphLang.apply_update update s = t
    ¬(locs name = none)
    GraphLang.check_jump (GraphLang.Jump (option.THE (locs name))) t w
    GraphLang.check_ret jmp s t call = some name

(upd t n jump.
     GraphLang.next_trans n t (GraphLang.ASM none upd jump) =
     (t, (n, GraphLang.Basic (GraphLang.get_jump jump) upd) :: []))
  (upd t n jump a.
     GraphLang.next_trans n t (GraphLang.ASM (some a) upd jump) =
     (t + arithmetic.BIT2 0,
      (n, GraphLang.Cond (GraphLang.NextNode t) GraphLang.Err a) ::
      (t, GraphLang.Basic (GraphLang.get_jump jump) upd) :: []))
  (t n2 n1 n guard.
     GraphLang.next_trans n t (GraphLang.IF guard n1 n2) =
     bool.LET
       (pair.UNCURRY
          (λt1 xs.
             bool.LET
               (pair.UNCURRY
                  (λt2 ys.
                     (t2,
                      (((n,
                         GraphLang.Cond (GraphLang.NextNode t)
                           (GraphLang.NextNode (t + arithmetic.BIT2 0))
                           guard) :: []) @ xs) @ ys)))
               (GraphLang.next_trans (t + arithmetic.BIT2 0) t1 n2)))
       (GraphLang.next_trans t (t + arithmetic.BIT2 1) n1))
  upd t r name n a.
    GraphLang.next_trans n t (GraphLang.CALL a upd name r) =
    (t + arithmetic.BIT2 0,
     (n,
      GraphLang.Cond (GraphLang.NextNode t) GraphLang.Err
        (GraphLang.get_assert a)) ::
     (t,
      GraphLang.Call (GraphLang.get_jump r) name (map snd upd)
        GraphLang.all_names_ignore) :: [])

(v f f1 f2 f3 f4 f5.
     GraphLang.variable_CASE GraphLang.VarNone v f f1 f2 f3 f4 f5 = v)
  (a v f f1 f2 f3 f4 f5.
     GraphLang.variable_CASE (GraphLang.VarNat a) v f f1 f2 f3 f4 f5 =
     f a)
  (a v f f1 f2 f3 f4 f5.
     GraphLang.variable_CASE (GraphLang.VarWord8 a) v f f1 f2 f3 f4 f5 =
     f1 a)
  (a v f f1 f2 f3 f4 f5.
     GraphLang.variable_CASE (GraphLang.VarWord32 a) v f f1 f2 f3 f4 f5 =
     f2 a)
  (a v f f1 f2 f3 f4 f5.
     GraphLang.variable_CASE (GraphLang.VarMem a) v f f1 f2 f3 f4 f5 =
     f3 a)
  (a v f f1 f2 f3 f4 f5.
     GraphLang.variable_CASE (GraphLang.VarDom a) v f f1 f2 f3 f4 f5 =
     f4 a)
  a v f f1 f2 f3 f4 f5.
    GraphLang.variable_CASE (GraphLang.VarBool a) v f f1 f2 f3 f4 f5 = f5 a

GraphLang.var_dom n (combin.UPDATE n1 x s) =
  (if n = n1 then
     GraphLang.variable_CASE x pred_set.EMPTY (λv6. pred_set.EMPTY)
       (λv7. pred_set.EMPTY) (λv8. pred_set.EMPTY) (λv9. pred_set.EMPTY)
       (λd. d) (λv11. pred_set.EMPTY)
   else GraphLang.var_dom n s)
  GraphLang.var_nat n (combin.UPDATE n1 x s) =
  (if n = n1 then
     GraphLang.variable_CASE x 0 (λn. n) (λv7. 0) (λv8. 0) (λv9. 0)
       (λv10. 0) (λv11. 0)
   else GraphLang.var_nat n s)
  GraphLang.var_word8 n (combin.UPDATE n1 x s) =
  (if n = n1 then
     GraphLang.variable_CASE x (words.n2w 0) (λv6. words.n2w 0) (λw. w)
       (λv8. words.n2w 0) (λv9. words.n2w 0) (λv10. words.n2w 0)
       (λv11. words.n2w 0)
   else GraphLang.var_word8 n s)
  GraphLang.var_word32 n (combin.UPDATE n1 x s) =
  (if n = n1 then
     GraphLang.variable_CASE x (words.n2w 0) (λv6. words.n2w 0)
       (λv7. words.n2w 0) (λw. w) (λv9. words.n2w 0) (λv10. words.n2w 0)
       (λv11. words.n2w 0)
   else GraphLang.var_word32 n s)
  GraphLang.var_mem n (combin.UPDATE n1 x s) =
  (if n = n1 then
     GraphLang.variable_CASE x (λv8. words.n2w 0) (λv6 v8. words.n2w 0)
       (λv7 v8. words.n2w 0) (λv8 v8. words.n2w 0) (λm. m)
       (λv10 v8. words.n2w 0) (λv11 v8. words.n2w 0)
   else GraphLang.var_mem n s)
  (GraphLang.var_bool n (combin.UPDATE n1 x s)
   if n = n1 then
     GraphLang.variable_CASE x (λv6. ) (λv7. ) (λv8. ) (λv9. )
       (λv10. ) (λq. q)
   else GraphLang.var_bool n s)

(a. ¬(GraphLang.VarNone = GraphLang.VarNat a))
  (a. ¬(GraphLang.VarNone = GraphLang.VarWord8 a))
  (a. ¬(GraphLang.VarNone = GraphLang.VarWord32 a))
  (a. ¬(GraphLang.VarNone = GraphLang.VarMem a))
  (a. ¬(GraphLang.VarNone = GraphLang.VarDom a))
  (a. ¬(GraphLang.VarNone = GraphLang.VarBool a))
  (a' a. ¬(GraphLang.VarNat a = GraphLang.VarWord8 a'))
  (a' a. ¬(GraphLang.VarNat a = GraphLang.VarWord32 a'))
  (a' a. ¬(GraphLang.VarNat a = GraphLang.VarMem a'))
  (a' a. ¬(GraphLang.VarNat a = GraphLang.VarDom a'))
  (a' a. ¬(GraphLang.VarNat a = GraphLang.VarBool a'))
  (a' a. ¬(GraphLang.VarWord8 a = GraphLang.VarWord32 a'))
  (a' a. ¬(GraphLang.VarWord8 a = GraphLang.VarMem a'))
  (a' a. ¬(GraphLang.VarWord8 a = GraphLang.VarDom a'))
  (a' a. ¬(GraphLang.VarWord8 a = GraphLang.VarBool a'))
  (a' a. ¬(GraphLang.VarWord32 a = GraphLang.VarMem a'))
  (a' a. ¬(GraphLang.VarWord32 a = GraphLang.VarDom a'))
  (a' a. ¬(GraphLang.VarWord32 a = GraphLang.VarBool a'))
  (a' a. ¬(GraphLang.VarMem a = GraphLang.VarDom a'))
  (a' a. ¬(GraphLang.VarMem a = GraphLang.VarBool a'))
  a' a. ¬(GraphLang.VarDom a = GraphLang.VarBool a')

(fs. GraphLang.good_stack_tail fs [] )
  (x fs. GraphLang.good_stack_tail fs (x :: []) )
  xs s2 s1 n2 n1 l2 l1 fs.
    GraphLang.good_stack_tail fs ((l1, s1, n1) :: (l2, s2, n2) :: xs)
    GraphLang.good_stack_tail fs ((l2, s2, n2) :: xs)
    n x1 x2 g x3 ret y1 y2 y3.
      l2 = GraphLang.NextNode n
      GraphLang.list_func_trans fs n2 =
      some (GraphLang.GraphFunction x1 x2 g x3)
      g n = some (GraphLang.Call ret y1 y2 y3)
      GraphLang.next_node_CASE ret
        (λi.
           GraphLang.var_word32
             (string.CHR
                (arithmetic.BIT2
                   (arithmetic.BIT2
                      (bit1
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2
                         (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (arithmetic.BIT2
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              []) s1 = words.n2w i even i)
        (GraphLang.var_word32
           (string.CHR
              (arithmetic.BIT2
                 (arithmetic.BIT2
                    (bit1
                       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
            string.CHR
              (bit1
                 (arithmetic.BIT2
                    (arithmetic.BIT2
                       (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
            string.CHR
              (arithmetic.BIT2
                 (bit1
                    (arithmetic.BIT2
                       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
            []) s1 =
         GraphLang.var_word32
           (string.CHR
              (arithmetic.BIT2
                 (arithmetic.BIT2
                    (bit1
                       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
            string.CHR
              (bit1
                 (arithmetic.BIT2
                    (arithmetic.BIT2
                       (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
            string.CHR
              (arithmetic.BIT2
                 (bit1
                    (arithmetic.BIT2
                       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
            []) s2)

GraphLang.good_stack_tail_tupled =
  relation.WFREC
    (select R'.
       wellFounded R'
       n1 s1 l1 xs n2 s2 l2 fs.
         R' (fs, (l2, s2, n2) :: xs)
           (fs, (l1, s1, n1) :: (l2, s2, n2) :: xs))
    (λgood_stack_tail_tupled a.
       pair.pair_CASE a
         (λfs v1.
            list.list_CASE v1 (id )
              (λx v3.
                 list.list_CASE v3 (id )
                   (λv4 xs.
                      pair.pair_CASE v4
                        (λl2 v7.
                           pair.pair_CASE v7
                             (λs2 n2.
                                pair.pair_CASE x
                                  (λl1 v11.
                                     pair.pair_CASE v11
                                       (λs1 n1.
                                          id
                                            (good_stack_tail_tupled
                                               (fs, (l2, s2, n2) :: xs)
                                             n x1 x2 g x3 ret y1 y2 y3.
                                               l2 = GraphLang.NextNode n
                                               GraphLang.list_func_trans fs
                                                 n2 =
                                               some
                                                 (GraphLang.GraphFunction
                                                    x1 x2 g x3)
                                               g n =
                                               some
                                                 (GraphLang.Call ret y1 y2
                                                    y3)
                                               GraphLang.next_node_CASE ret
                                                 (λi.
                                                    GraphLang.var_word32
                                                      (string.CHR
                                                         (arithmetic.BIT2
                                                            (arithmetic.BIT2
                                                               (bit1
                                                                  (bit1
                                                                     (arithmetic.BIT2
                                                                        (arithmetic.BIT2
                                                                           0)))))) ::
                                                       string.CHR
                                                         (bit1
                                                            (arithmetic.BIT2
                                                               (arithmetic.BIT2
                                                                  (bit1
                                                                     (bit1
                                                                        (arithmetic.BIT2
                                                                           0)))))) ::
                                                       string.CHR
                                                         (arithmetic.BIT2
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  (bit1
                                                                     (arithmetic.BIT2
                                                                        (arithmetic.BIT2
                                                                           0)))))) ::
                                                       []) s1 =
                                                    words.n2w i even i)
                                                 (GraphLang.var_word32
                                                    (string.CHR
                                                       (arithmetic.BIT2
                                                          (arithmetic.BIT2
                                                             (bit1
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         0)))))) ::
                                                     string.CHR
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                (bit1
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         0)))))) ::
                                                     string.CHR
                                                       (arithmetic.BIT2
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         0)))))) ::
                                                     []) s1 =
                                                  GraphLang.var_word32
                                                    (string.CHR
                                                       (arithmetic.BIT2
                                                          (arithmetic.BIT2
                                                             (bit1
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         0)))))) ::
                                                     string.CHR
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                (bit1
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         0)))))) ::
                                                     string.CHR
                                                       (arithmetic.BIT2
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         0)))))) ::
                                                     []) s2) )))))))))

s.
    GraphLang.arm_STATE s =
    set_sep.STAR
      (set_sep.STAR
         (set_sep.STAR
            (set_sep.STAR (GraphLang.arm_STATE_REGS s)
               (GraphLang.arm_STATE_CPSR s))
            (arm_decomp.arm_OK
               (words.w2w
                  (GraphLang.var_word8
                     (string.CHR
                        (bit1
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (arithmetic.BIT2
                                    (bit1 (arithmetic.BIT2 0)))))) ::
                      string.CHR
                        (bit1
                           (bit1
                              (bit1
                                 (bit1
                                    (arithmetic.BIT2
                                       (arithmetic.BIT2 0)))))) ::
                      string.CHR
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2
                                 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                      string.CHR
                        (bit1
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                      []) s))))
         (arm_prog.arm_MEMORY
            (GraphLang.var_dom
               (string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) :: []) s)
            (GraphLang.var_mem
               (string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) :: []) s)))
      (GraphLang.arm_STACK_MEMORY
         (GraphLang.var_dom
            (string.CHR
               (arithmetic.BIT2
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (bit1
                     (bit1
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1 (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (arithmetic.BIT2
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (arithmetic.BIT2
                     (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
             []) s)
         (GraphLang.var_mem
            (string.CHR
               (bit1
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (arithmetic.BIT2
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (arithmetic.BIT2
                     (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
             []) s))

p r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 n z c v mode dmem
    memory dom_stack stack.
    straightline.arm_assert
      (p, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14,
       n, z, c, v, mode, dmem, memory, dom_stack, stack) =
    set_sep.STAR
      (set_sep.STAR
         (set_sep.STAR
            (set_sep.STAR
               (set_sep.STAR
                  (set_sep.STAR
                     (set_sep.STAR
                        (set_sep.STAR
                           (set_sep.STAR
                              (set_sep.STAR
                                 (set_sep.STAR
                                    (set_sep.STAR
                                       (set_sep.STAR
                                          (set_sep.STAR
                                             (set_sep.STAR
                                                (set_sep.STAR
                                                   (set_sep.STAR
                                                      (set_sep.STAR
                                                         (set_sep.STAR
                                                            (set_sep.STAR
                                                               (set_sep.STAR
                                                                  (set_sep.STAR
                                                                     (arm_prog.arm_PC
                                                                        p)
                                                                     (arm_prog.arm_REG
                                                                        (arm_step.R_mode
                                                                           mode
                                                                           (words.n2w
                                                                              0))
                                                                        r0))
                                                                  (arm_prog.arm_REG
                                                                     (arm_step.R_mode
                                                                        mode
                                                                        (words.n2w
                                                                           1))
                                                                     r1))
                                                               (arm_prog.arm_REG
                                                                  (arm_step.R_mode
                                                                     mode
                                                                     (words.n2w
                                                                        (arithmetic.BIT2
                                                                           0)))
                                                                  r2))
                                                            (arm_prog.arm_REG
                                                               (arm_step.R_mode
                                                                  mode
                                                                  (words.n2w
                                                                     3))
                                                               r3))
                                                         (arm_prog.arm_REG
                                                            (arm_step.R_mode
                                                               mode
                                                               (words.n2w
                                                                  (arithmetic.BIT2
                                                                     1)))
                                                            r4))
                                                      (arm_prog.arm_REG
                                                         (arm_step.R_mode
                                                            mode
                                                            (words.n2w
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     0))))
                                                         r5))
                                                   (arm_prog.arm_REG
                                                      (arm_step.R_mode mode
                                                         (words.n2w
                                                            (arithmetic.BIT2
                                                               (arithmetic.BIT2
                                                                  0))))
                                                      r6))
                                                (arm_prog.arm_REG
                                                   (arm_step.R_mode mode
                                                      (words.n2w 7)) r7))
                                             (arm_prog.arm_REG
                                                (arm_step.R_mode mode
                                                   (words.n2w
                                                      (arithmetic.BIT2 3)))
                                                r8))
                                          (arm_prog.arm_REG
                                             (arm_step.R_mode mode
                                                (words.n2w
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         1)))) r9))
                                       (arm_prog.arm_REG
                                          (arm_step.R_mode mode
                                             (words.n2w
                                                (arithmetic.BIT2
                                                   (arithmetic.BIT2 1))))
                                          r10))
                                    (arm_prog.arm_REG
                                       (arm_step.R_mode mode
                                          (words.n2w
                                             (bit1
                                                (bit1
                                                   (arithmetic.BIT2 0)))))
                                       r11))
                                 (arm_prog.arm_REG
                                    (arm_step.R_mode mode
                                       (words.n2w
                                          (arithmetic.BIT2
                                             (bit1 (arithmetic.BIT2 0)))))
                                    r12))
                              (arm_prog.arm_REG
                                 (arm_step.R_mode mode
                                    (words.n2w
                                       (bit1
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2 0))))) r13))
                           (arm_prog.arm_REG
                              (arm_step.R_mode mode
                                 (words.n2w
                                    (arithmetic.BIT2
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2 0))))) r14))
                        (arm_prog.arm_CPSR_N n)) (arm_prog.arm_CPSR_Z z))
                  (arm_prog.arm_CPSR_C c)) (arm_prog.arm_CPSR_V v))
            (arm_decomp.arm_OK mode)) (arm_prog.arm_MEMORY dmem memory))
      (GraphLang.arm_STACK_MEMORY dom_stack stack)

s.
    GraphLang.m0_STATE s =
    set_sep.STAR
      (set_sep.STAR
         (set_sep.STAR
            (set_sep.STAR
               (set_sep.STAR (GraphLang.m0_STATE_REGS s)
                  (GraphLang.m0_STATE_PSR s))
               (m0_prog.m0_CurrentMode m0.Mode_Thread))
            (m0_prog.m0_MEMORY
               (GraphLang.var_dom
                  (string.CHR
                     (arithmetic.BIT2
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) :: []) s)
               (GraphLang.var_mem
                  (string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) :: []) s)))
         (GraphLang.m0_STACK_MEMORY
            (GraphLang.var_dom
               (string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1 (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) :: []) s)
            (GraphLang.var_mem
               (string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) :: []) s)))
      (m0_decomp.m0_COUNT
         (GraphLang.var_nat
            (string.CHR
               (bit1
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (arithmetic.BIT2
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (bit1
                     (bit1
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
             []) s))

s.
    GraphLang.m0_STATE_REGS s =
    set_sep.STAR
      (set_sep.STAR
         (set_sep.STAR
            (set_sep.STAR
               (set_sep.STAR
                  (set_sep.STAR
                     (set_sep.STAR
                        (set_sep.STAR
                           (set_sep.STAR
                              (set_sep.STAR
                                 (set_sep.STAR
                                    (set_sep.STAR
                                       (set_sep.STAR
                                          (set_sep.STAR
                                             (m0_prog.m0_REG m0.RName_0
                                                (GraphLang.var_word32
                                                   (string.CHR
                                                      (arithmetic.BIT2
                                                         (arithmetic.BIT2
                                                            (bit1
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     (arithmetic.BIT2
                                                                        0)))))) ::
                                                    string.CHR
                                                      (arithmetic.BIT2
                                                         (bit1
                                                            (bit1
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     0))))) ::
                                                    []) s))
                                             (m0_prog.m0_REG m0.RName_1
                                                (GraphLang.var_word32
                                                   (string.CHR
                                                      (arithmetic.BIT2
                                                         (arithmetic.BIT2
                                                            (bit1
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     (arithmetic.BIT2
                                                                        0)))))) ::
                                                    string.CHR
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            (bit1
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     0))))) ::
                                                    []) s)))
                                          (m0_prog.m0_REG m0.RName_2
                                             (GraphLang.var_word32
                                                (string.CHR
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         (bit1
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  (arithmetic.BIT2
                                                                     0)))))) ::
                                                 string.CHR
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         (bit1
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  0))))) ::
                                                 []) s)))
                                       (m0_prog.m0_REG m0.RName_3
                                          (GraphLang.var_word32
                                             (string.CHR
                                                (arithmetic.BIT2
                                                   (arithmetic.BIT2
                                                      (bit1
                                                         (bit1
                                                            (arithmetic.BIT2
                                                               (arithmetic.BIT2
                                                                  0)))))) ::
                                              string.CHR
                                                (bit1
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         (bit1
                                                            (arithmetic.BIT2
                                                               0))))) ::
                                              []) s)))
                                    (m0_prog.m0_REG m0.RName_4
                                       (GraphLang.var_word32
                                          (string.CHR
                                             (arithmetic.BIT2
                                                (arithmetic.BIT2
                                                   (bit1
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            (arithmetic.BIT2
                                                               0)))))) ::
                                           string.CHR
                                             (arithmetic.BIT2
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            0))))) :: [])
                                          s)))
                                 (m0_prog.m0_REG m0.RName_5
                                    (GraphLang.var_word32
                                       (string.CHR
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2
                                                (bit1
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         (arithmetic.BIT2
                                                            0)))))) ::
                                        string.CHR
                                          (bit1
                                             (arithmetic.BIT2
                                                (arithmetic.BIT2
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         0))))) :: []) s)))
                              (m0_prog.m0_REG m0.RName_6
                                 (GraphLang.var_word32
                                    (string.CHR
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2
                                             (bit1
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2
                                                (bit1
                                                   (arithmetic.BIT2
                                                      0))))) :: []) s)))
                           (m0_prog.m0_REG m0.RName_7
                              (GraphLang.var_word32
                                 (string.CHR
                                    (arithmetic.BIT2
                                       (arithmetic.BIT2
                                          (bit1
                                             (bit1
                                                (arithmetic.BIT2
                                                   (arithmetic.BIT2
                                                      0)))))) ::
                                  string.CHR
                                    (bit1
                                       (bit1
                                          (bit1
                                             (arithmetic.BIT2
                                                (arithmetic.BIT2 0))))) ::
                                  []) s)))
                        (m0_prog.m0_REG m0.RName_8
                           (GraphLang.var_word32
                              (string.CHR
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2
                                       (bit1
                                          (bit1
                                             (arithmetic.BIT2
                                                (arithmetic.BIT2 0)))))) ::
                               string.CHR
                                 (arithmetic.BIT2
                                    (bit1
                                       (bit1
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2 0))))) :: [])
                              s)))
                     (m0_prog.m0_REG m0.RName_9
                        (GraphLang.var_word32
                           (string.CHR
                              (arithmetic.BIT2
                                 (arithmetic.BIT2
                                    (bit1
                                       (bit1
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2 0)))))) ::
                            string.CHR
                              (bit1
                                 (arithmetic.BIT2
                                    (bit1
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2 0))))) :: [])
                           s)))
                  (m0_prog.m0_REG m0.RName_10
                     (GraphLang.var_word32
                        (string.CHR
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1
                                    (bit1
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2 0)))))) ::
                         string.CHR
                           (bit1
                              (arithmetic.BIT2
                                 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                         string.CHR
                           (arithmetic.BIT2
                              (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                         []) s)))
               (m0_prog.m0_REG m0.RName_11
                  (GraphLang.var_word32
                     (string.CHR
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1
                                 (bit1
                                    (arithmetic.BIT2
                                       (arithmetic.BIT2 0)))))) ::
                      string.CHR
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                      string.CHR
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0))))) :: [])
                     s)))
            (m0_prog.m0_REG m0.RName_12
               (GraphLang.var_word32
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) :: []) s)))
         (m0_prog.m0_REG m0.RName_SP_main
            (GraphLang.var_word32
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
                []) s)))
      (m0_prog.m0_REG m0.RName_LR
         (GraphLang.var_word32
            (string.CHR
               (arithmetic.BIT2
                  (arithmetic.BIT2
                     (bit1
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
             string.CHR
               (arithmetic.BIT2
                  (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
             []) s))

GraphLang.all_names =
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
   []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
   []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) :: []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (bit1 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
   []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) :: []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
   []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
   []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) ::
   []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) :: []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) ::
   []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
   string.CHR (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
   []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
   string.CHR (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
   []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
   string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) :: []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
   string.CHR (bit1 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
   []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) :: []) ::
  (string.CHR
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) :: []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) :: []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (bit1
              (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   []) ::
  (string.CHR
     (bit1 (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   []) ::
  (string.CHR
     (arithmetic.BIT2
        (arithmetic.BIT2
           (arithmetic.BIT2
              (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) :: []) ::
  (string.CHR
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) :: []) ::
  (string.CHR
     (arithmetic.BIT2
        (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) :: []) ::
  (string.CHR
     (bit1
        (bit1
           (arithmetic.BIT2
              (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1
           (arithmetic.BIT2
              (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1 (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1 (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (bit1
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) :: []) ::
  (string.CHR
     (arithmetic.BIT2
        (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR (bit1 (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (bit1
           (arithmetic.BIT2
              (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1
           (arithmetic.BIT2
              (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1 (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1 (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (bit1
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) :: []) ::
  (string.CHR
     (bit1 (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (arithmetic.BIT2
        (bit1
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1 (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
   string.CHR
     (bit1
        (bit1
           (arithmetic.BIT2
              (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) :: []) :: []

(b1 b2 b3 b4.
     words.word_concat b1
       (words.word_concat b2 (words.word_concat b3 b4)) =
     GraphLang.word32 b1 b2 b3 b4)
  ((arm.Aligned (w, arithmetic.BIT2 1)
    words.word_and w (words.n2w 3) = words.n2w 0)
   (m0.Aligned (w, arithmetic.BIT2 1)
    words.word_and w (words.n2w 3) = words.n2w 0))
  ((arm.Aligned (w, arithmetic.BIT2 0)
    words.word_and w (words.n2w 1) = words.n2w 0)
   (m0.Aligned (w, arithmetic.BIT2 0)
    words.word_and w (words.n2w 1) = words.n2w 0))
  (a x.
     (address.ALIGNED (words.n2w 0) )
     (address.ALIGNED (words.n2w (arithmetic.BIT2 (bit1 x))) )
     (address.ALIGNED (words.n2w (bit1 (arithmetic.BIT2 x))) )
     (address.ALIGNED (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 x)))
      ) (address.ALIGNED (words.n2w (bit1 (bit1 (bit1 x)))) )
     (address.ALIGNED (words.n2w (bit1 (bit1 (arithmetic.BIT2 x)))) )
     (address.ALIGNED (words.word_add a (words.n2w 0))
      address.ALIGNED a)
     (address.ALIGNED
        (words.word_add a (words.n2w (arithmetic.BIT2 (bit1 x))))
      address.ALIGNED a)
     (address.ALIGNED
        (words.word_add a (words.n2w (bit1 (arithmetic.BIT2 x))))
      address.ALIGNED (words.word_add a (words.n2w 1)))
     (address.ALIGNED
        (words.word_add a
           (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 x))))
      address.ALIGNED (words.word_add a (words.n2w (arithmetic.BIT2 0))))
     (address.ALIGNED
        (words.word_add a (words.n2w (bit1 (bit1 (bit1 x)))))
      address.ALIGNED (words.word_add a (words.n2w 3)))
     (address.ALIGNED
        (words.word_add a (words.n2w (bit1 (bit1 (arithmetic.BIT2 x)))))
      address.ALIGNED (words.word_add a (words.n2w 3)))
     (address.ALIGNED (words.word_sub a (words.n2w 0))
      address.ALIGNED a)
     (address.ALIGNED
        (words.word_sub a (words.n2w (arithmetic.BIT2 (bit1 x))))
      address.ALIGNED a)
     (address.ALIGNED
        (words.word_sub a (words.n2w (bit1 (arithmetic.BIT2 x))))
      address.ALIGNED (words.word_sub a (words.n2w 1)))
     (address.ALIGNED
        (words.word_sub a
           (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 x))))
      address.ALIGNED (words.word_sub a (words.n2w (arithmetic.BIT2 0))))
     (address.ALIGNED
        (words.word_sub a (words.n2w (bit1 (bit1 (bit1 x)))))
      address.ALIGNED (words.word_sub a (words.n2w 3)))
     (address.ALIGNED
        (words.word_sub a (words.n2w (bit1 (bit1 (arithmetic.BIT2 x)))))
      address.ALIGNED (words.word_sub a (words.n2w 3))))
  (const x y = x suc n = n + 1)
  (words.word_extract 7 0 w = words.w2w w
   words.word_extract 15 (arithmetic.BIT2 3) w =
   words.w2w (words.word_lsr w (arithmetic.BIT2 3))
   words.word_extract (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))
     (arithmetic.BIT2 7) w =
   words.w2w (words.word_lsr w (arithmetic.BIT2 7))
   words.word_extract 31
     (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))) w =
   words.w2w
     (words.word_lsr w
        (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))
   words.word_extract 31 0 v = words.w2w v
   words.word_extract 63 (arithmetic.BIT2 15) v =
   words.w2w (words.word_lsr v (arithmetic.BIT2 15)))
  (h l a.
     words.word_bits h l a =
     if l h then
       words.word_and (words.word_lsr a l)
         (words.word_sub
            (words.word_lsl (words.n2w (arithmetic.BIT2 0))
               (arithmetic.- h l)) (words.n2w 1))
     else words.n2w 0)
  (h l a.
     words.word_extract h l a =
     words.w2w
       (if l h then
          words.word_and (words.word_lsr a l)
            (words.word_sub
               (words.word_lsl (words.n2w (arithmetic.BIT2 0))
                  (arithmetic.- h l)) (words.n2w 1))
        else words.n2w 0))
  (a.
     (words.word_and a (words.n2w 3) = words.n2w 0 address.ALIGNED a)
     (words.word_and (words.n2w 3) a = words.n2w 0 address.ALIGNED a)
     (words.n2w 0 = words.word_and a (words.n2w 3) address.ALIGNED a)
     (words.n2w 0 = words.word_and (words.n2w 3) a address.ALIGNED a)
     (words.w2n a mod arithmetic.BIT2 1 = 0 address.ALIGNED a)
     (0 = words.w2n a mod arithmetic.BIT2 1 address.ALIGNED a))
  (w. words.w2n w = 0 w = words.n2w 0)
  words.word_concat b1 b2 =
  words.word_or (words.word_lsl (words.w2w b1) (arithmetic.BIT2 3))
    (words.w2w b2)
  words.word_concat h1 b2 =
  words.word_or (words.word_lsl (words.w2w h1) (arithmetic.BIT2 3))
    (words.w2w b2)
  words.word_concat b1 h2 =
  words.word_or (words.word_lsl (words.w2w b1) (arithmetic.BIT2 7))
    (words.w2w h2)
  words.word_concat h1 h2 =
  words.word_or (words.word_lsl (words.w2w h1) (arithmetic.BIT2 7))
    (words.w2w h2)

GraphLang.m0_STATE s =
  set_sep.STAR
    (set_sep.STAR
       (set_sep.STAR
          (set_sep.STAR
             (set_sep.STAR
                (set_sep.STAR
                   (set_sep.STAR
                      (set_sep.STAR
                         (set_sep.STAR
                            (set_sep.STAR
                               (set_sep.STAR
                                  (set_sep.STAR
                                     (set_sep.STAR
                                        (set_sep.STAR
                                           (set_sep.STAR
                                              (set_sep.STAR
                                                 (set_sep.STAR
                                                    (set_sep.STAR
                                                       (set_sep.STAR
                                                          (set_sep.STAR
                                                             (set_sep.STAR
                                                                (set_sep.STAR
                                                                   (m0_prog.m0_REG
                                                                      m0.RName_0
                                                                      (GraphLang.var_word32
                                                                         (string.CHR
                                                                            (arithmetic.BIT2
                                                                               (arithmetic.BIT2
                                                                                  (bit1
                                                                                     (bit1
                                                                                        (arithmetic.BIT2
                                                                                           (arithmetic.BIT2
                                                                                              0)))))) ::
                                                                          string.CHR
                                                                            (arithmetic.BIT2
                                                                               (bit1
                                                                                  (bit1
                                                                                     (bit1
                                                                                        (arithmetic.BIT2
                                                                                           0))))) ::
                                                                          [])
                                                                         s))
                                                                   (m0_prog.m0_REG
                                                                      m0.RName_1
                                                                      (GraphLang.var_word32
                                                                         (string.CHR
                                                                            (arithmetic.BIT2
                                                                               (arithmetic.BIT2
                                                                                  (bit1
                                                                                     (bit1
                                                                                        (arithmetic.BIT2
                                                                                           (arithmetic.BIT2
                                                                                              0)))))) ::
                                                                          string.CHR
                                                                            (bit1
                                                                               (arithmetic.BIT2
                                                                                  (bit1
                                                                                     (bit1
                                                                                        (arithmetic.BIT2
                                                                                           0))))) ::
                                                                          [])
                                                                         s)))
                                                                (m0_prog.m0_REG
                                                                   m0.RName_2
                                                                   (GraphLang.var_word32
                                                                      (string.CHR
                                                                         (arithmetic.BIT2
                                                                            (arithmetic.BIT2
                                                                               (bit1
                                                                                  (bit1
                                                                                     (arithmetic.BIT2
                                                                                        (arithmetic.BIT2
                                                                                           0)))))) ::
                                                                       string.CHR
                                                                         (arithmetic.BIT2
                                                                            (arithmetic.BIT2
                                                                               (bit1
                                                                                  (bit1
                                                                                     (arithmetic.BIT2
                                                                                        0))))) ::
                                                                       [])
                                                                      s)))
                                                             (m0_prog.m0_REG
                                                                m0.RName_3
                                                                (GraphLang.var_word32
                                                                   (string.CHR
                                                                      (arithmetic.BIT2
                                                                         (arithmetic.BIT2
                                                                            (bit1
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     (arithmetic.BIT2
                                                                                        0)))))) ::
                                                                    string.CHR
                                                                      (bit1
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     0))))) ::
                                                                    [])
                                                                   s)))
                                                          (m0_prog.m0_REG
                                                             m0.RName_4
                                                             (GraphLang.var_word32
                                                                (string.CHR
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         (bit1
                                                                            (bit1
                                                                               (arithmetic.BIT2
                                                                                  (arithmetic.BIT2
                                                                                     0)))))) ::
                                                                 string.CHR
                                                                   (arithmetic.BIT2
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            (bit1
                                                                               (arithmetic.BIT2
                                                                                  0))))) ::
                                                                 []) s)))
                                                       (m0_prog.m0_REG
                                                          m0.RName_5
                                                          (GraphLang.var_word32
                                                             (string.CHR
                                                                (arithmetic.BIT2
                                                                   (arithmetic.BIT2
                                                                      (bit1
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               (arithmetic.BIT2
                                                                                  0)))))) ::
                                                              string.CHR
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               0))))) ::
                                                              []) s)))
                                                    (m0_prog.m0_REG
                                                       m0.RName_6
                                                       (GraphLang.var_word32
                                                          (string.CHR
                                                             (arithmetic.BIT2
                                                                (arithmetic.BIT2
                                                                   (bit1
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            (arithmetic.BIT2
                                                                               0)))))) ::
                                                           string.CHR
                                                             (arithmetic.BIT2
                                                                (arithmetic.BIT2
                                                                   (arithmetic.BIT2
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            0))))) ::
                                                           []) s)))
                                                 (m0_prog.m0_REG m0.RName_7
                                                    (GraphLang.var_word32
                                                       (string.CHR
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                (bit1
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         (arithmetic.BIT2
                                                                            0)))))) ::
                                                        string.CHR
                                                          (bit1
                                                             (bit1
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         0))))) ::
                                                        []) s)))
                                              (m0_prog.m0_REG m0.RName_8
                                                 (GraphLang.var_word32
                                                    (string.CHR
                                                       (arithmetic.BIT2
                                                          (arithmetic.BIT2
                                                             (bit1
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         0)))))) ::
                                                     string.CHR
                                                       (arithmetic.BIT2
                                                          (bit1
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   (arithmetic.BIT2
                                                                      0))))) ::
                                                     []) s)))
                                           (m0_prog.m0_REG m0.RName_9
                                              (GraphLang.var_word32
                                                 (string.CHR
                                                    (arithmetic.BIT2
                                                       (arithmetic.BIT2
                                                          (bit1
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   (arithmetic.BIT2
                                                                      0)))))) ::
                                                  string.CHR
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                (arithmetic.BIT2
                                                                   0))))) ::
                                                  []) s)))
                                        (m0_prog.m0_REG m0.RName_10
                                           (GraphLang.var_word32
                                              (string.CHR
                                                 (arithmetic.BIT2
                                                    (arithmetic.BIT2
                                                       (bit1
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                (arithmetic.BIT2
                                                                   0)))))) ::
                                               string.CHR
                                                 (bit1
                                                    (arithmetic.BIT2
                                                       (bit1
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                0))))) ::
                                               string.CHR
                                                 (arithmetic.BIT2
                                                    (bit1
                                                       (bit1
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                0))))) ::
                                               []) s)))
                                     (m0_prog.m0_REG m0.RName_11
                                        (GraphLang.var_word32
                                           (string.CHR
                                              (arithmetic.BIT2
                                                 (arithmetic.BIT2
                                                    (bit1
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                0)))))) ::
                                            string.CHR
                                              (bit1
                                                 (arithmetic.BIT2
                                                    (bit1
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             0))))) ::
                                            string.CHR
                                              (bit1
                                                 (arithmetic.BIT2
                                                    (bit1
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             0))))) :: [])
                                           s)))
                                  (m0_prog.m0_REG m0.RName_12
                                     (GraphLang.var_word32
                                        (string.CHR
                                           (arithmetic.BIT2
                                              (arithmetic.BIT2
                                                 (bit1
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          (arithmetic.BIT2
                                                             0)))))) ::
                                         string.CHR
                                           (bit1
                                              (arithmetic.BIT2
                                                 (bit1
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          0))))) ::
                                         string.CHR
                                           (arithmetic.BIT2
                                              (arithmetic.BIT2
                                                 (bit1
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          0))))) :: [])
                                        s)))
                               (m0_prog.m0_REG m0.RName_SP_main
                                  (GraphLang.var_word32
                                     (string.CHR
                                        (arithmetic.BIT2
                                           (arithmetic.BIT2
                                              (bit1
                                                 (bit1
                                                    (arithmetic.BIT2
                                                       (arithmetic.BIT2
                                                          0)))))) ::
                                      string.CHR
                                        (bit1
                                           (arithmetic.BIT2
                                              (bit1
                                                 (bit1
                                                    (arithmetic.BIT2
                                                       0))))) ::
                                      string.CHR
                                        (bit1
                                           (bit1
                                              (arithmetic.BIT2
                                                 (bit1
                                                    (arithmetic.BIT2
                                                       0))))) :: []) s)))
                            (m0_prog.m0_REG m0.RName_LR
                               (GraphLang.var_word32
                                  (string.CHR
                                     (arithmetic.BIT2
                                        (arithmetic.BIT2
                                           (bit1
                                              (bit1
                                                 (arithmetic.BIT2
                                                    (arithmetic.BIT2
                                                       0)))))) ::
                                   string.CHR
                                     (bit1
                                        (arithmetic.BIT2
                                           (bit1
                                              (bit1
                                                 (arithmetic.BIT2 0))))) ::
                                   string.CHR
                                     (arithmetic.BIT2
                                        (bit1
                                           (arithmetic.BIT2
                                              (bit1
                                                 (arithmetic.BIT2 0))))) ::
                                   []) s)))
                         (m0_prog.m0_PSR_N
                            (GraphLang.var_bool
                               (string.CHR
                                  (arithmetic.BIT2
                                     (arithmetic.BIT2
                                        (arithmetic.BIT2
                                           (arithmetic.BIT2
                                              (bit1
                                                 (arithmetic.BIT2
                                                    0)))))) :: []) s)))
                      (m0_prog.m0_PSR_Z
                         (GraphLang.var_bool
                            (string.CHR
                               (arithmetic.BIT2
                                  (arithmetic.BIT2
                                     (bit1
                                        (arithmetic.BIT2
                                           (arithmetic.BIT2
                                              (arithmetic.BIT2 0)))))) ::
                             []) s)))
                   (m0_prog.m0_PSR_C
                      (GraphLang.var_bool
                         (string.CHR
                            (bit1
                               (bit1
                                  (arithmetic.BIT2
                                     (bit1
                                        (bit1 (arithmetic.BIT2 0)))))) ::
                          []) s)))
                (m0_prog.m0_PSR_V
                   (GraphLang.var_bool
                      (string.CHR
                         (arithmetic.BIT2
                            (arithmetic.BIT2
                               (arithmetic.BIT2
                                  (bit1
                                     (arithmetic.BIT2
                                        (arithmetic.BIT2 0)))))) :: [])
                      s))) (m0_prog.m0_CurrentMode m0.Mode_Thread))
          (m0_prog.m0_MEMORY
             (GraphLang.var_dom
                (string.CHR
                   (arithmetic.BIT2
                      (bit1
                         (arithmetic.BIT2
                            (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                 string.CHR
                   (bit1
                      (bit1
                         (bit1
                            (bit1
                               (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                 string.CHR
                   (bit1
                      (arithmetic.BIT2
                         (arithmetic.BIT2
                            (arithmetic.BIT2
                               (bit1 (arithmetic.BIT2 0)))))) :: []) s)
             (GraphLang.var_mem
                (string.CHR
                   (bit1
                      (arithmetic.BIT2
                         (arithmetic.BIT2
                            (arithmetic.BIT2
                               (bit1 (arithmetic.BIT2 0)))))) ::
                 string.CHR
                   (bit1
                      (arithmetic.BIT2
                         (arithmetic.BIT2
                            (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                 string.CHR
                   (bit1
                      (arithmetic.BIT2
                         (arithmetic.BIT2
                            (arithmetic.BIT2
                               (bit1 (arithmetic.BIT2 0)))))) :: []) s)))
       (GraphLang.m0_STACK_MEMORY
          (GraphLang.var_dom
             (string.CHR
                (arithmetic.BIT2
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (bit1
                      (bit1
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2
                         (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1 (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (arithmetic.BIT2
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (arithmetic.BIT2
                      (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (bit1
                      (arithmetic.BIT2
                         (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
              []) s)
          (GraphLang.var_mem
             (string.CHR
                (bit1
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (arithmetic.BIT2
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (arithmetic.BIT2
                      (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (bit1
                      (arithmetic.BIT2
                         (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
              []) s)))
    (m0_decomp.m0_COUNT
       (GraphLang.var_nat
          (string.CHR
             (bit1
                (bit1
                   (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (arithmetic.BIT2
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1
                (bit1
                   (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1
                (bit1
                   (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
           []) s))

s.
    GraphLang.arm_STATE_REGS s =
    set_sep.STAR
      (set_sep.STAR
         (set_sep.STAR
            (set_sep.STAR
               (set_sep.STAR
                  (set_sep.STAR
                     (set_sep.STAR
                        (set_sep.STAR
                           (set_sep.STAR
                              (set_sep.STAR
                                 (set_sep.STAR
                                    (set_sep.STAR
                                       (set_sep.STAR
                                          (set_sep.STAR
                                             (arm_prog.arm_REG
                                                (arm_step.R_mode
                                                   (words.w2w
                                                      (GraphLang.var_word8
                                                         (string.CHR
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  (arithmetic.BIT2
                                                                     (arithmetic.BIT2
                                                                        (bit1
                                                                           (arithmetic.BIT2
                                                                              0)))))) ::
                                                          string.CHR
                                                            (bit1
                                                               (bit1
                                                                  (bit1
                                                                     (bit1
                                                                        (arithmetic.BIT2
                                                                           (arithmetic.BIT2
                                                                              0)))))) ::
                                                          string.CHR
                                                            (arithmetic.BIT2
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     (bit1
                                                                        (bit1
                                                                           (arithmetic.BIT2
                                                                              0)))))) ::
                                                          string.CHR
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  (arithmetic.BIT2
                                                                     (bit1
                                                                        (bit1
                                                                           (arithmetic.BIT2
                                                                              0)))))) ::
                                                          []) s))
                                                   (words.n2w 0))
                                                (GraphLang.var_word32
                                                   (string.CHR
                                                      (arithmetic.BIT2
                                                         (arithmetic.BIT2
                                                            (bit1
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     (arithmetic.BIT2
                                                                        0)))))) ::
                                                    string.CHR
                                                      (arithmetic.BIT2
                                                         (bit1
                                                            (bit1
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     0))))) ::
                                                    []) s))
                                             (arm_prog.arm_REG
                                                (arm_step.R_mode
                                                   (words.w2w
                                                      (GraphLang.var_word8
                                                         (string.CHR
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  (arithmetic.BIT2
                                                                     (arithmetic.BIT2
                                                                        (bit1
                                                                           (arithmetic.BIT2
                                                                              0)))))) ::
                                                          string.CHR
                                                            (bit1
                                                               (bit1
                                                                  (bit1
                                                                     (bit1
                                                                        (arithmetic.BIT2
                                                                           (arithmetic.BIT2
                                                                              0)))))) ::
                                                          string.CHR
                                                            (arithmetic.BIT2
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     (bit1
                                                                        (bit1
                                                                           (arithmetic.BIT2
                                                                              0)))))) ::
                                                          string.CHR
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  (arithmetic.BIT2
                                                                     (bit1
                                                                        (bit1
                                                                           (arithmetic.BIT2
                                                                              0)))))) ::
                                                          []) s))
                                                   (words.n2w 1))
                                                (GraphLang.var_word32
                                                   (string.CHR
                                                      (arithmetic.BIT2
                                                         (arithmetic.BIT2
                                                            (bit1
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     (arithmetic.BIT2
                                                                        0)))))) ::
                                                    string.CHR
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            (bit1
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     0))))) ::
                                                    []) s)))
                                          (arm_prog.arm_REG
                                             (arm_step.R_mode
                                                (words.w2w
                                                   (GraphLang.var_word8
                                                      (string.CHR
                                                         (bit1
                                                            (arithmetic.BIT2
                                                               (arithmetic.BIT2
                                                                  (arithmetic.BIT2
                                                                     (bit1
                                                                        (arithmetic.BIT2
                                                                           0)))))) ::
                                                       string.CHR
                                                         (bit1
                                                            (bit1
                                                               (bit1
                                                                  (bit1
                                                                     (arithmetic.BIT2
                                                                        (arithmetic.BIT2
                                                                           0)))))) ::
                                                       string.CHR
                                                         (arithmetic.BIT2
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  (bit1
                                                                     (bit1
                                                                        (arithmetic.BIT2
                                                                           0)))))) ::
                                                       string.CHR
                                                         (bit1
                                                            (arithmetic.BIT2
                                                               (arithmetic.BIT2
                                                                  (bit1
                                                                     (bit1
                                                                        (arithmetic.BIT2
                                                                           0)))))) ::
                                                       []) s))
                                                (words.n2w
                                                   (arithmetic.BIT2 0)))
                                             (GraphLang.var_word32
                                                (string.CHR
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         (bit1
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  (arithmetic.BIT2
                                                                     0)))))) ::
                                                 string.CHR
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         (bit1
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  0))))) ::
                                                 []) s)))
                                       (arm_prog.arm_REG
                                          (arm_step.R_mode
                                             (words.w2w
                                                (GraphLang.var_word8
                                                   (string.CHR
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            (arithmetic.BIT2
                                                               (arithmetic.BIT2
                                                                  (bit1
                                                                     (arithmetic.BIT2
                                                                        0)))))) ::
                                                    string.CHR
                                                      (bit1
                                                         (bit1
                                                            (bit1
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     (arithmetic.BIT2
                                                                        0)))))) ::
                                                    string.CHR
                                                      (arithmetic.BIT2
                                                         (bit1
                                                            (arithmetic.BIT2
                                                               (bit1
                                                                  (bit1
                                                                     (arithmetic.BIT2
                                                                        0)))))) ::
                                                    string.CHR
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            (arithmetic.BIT2
                                                               (bit1
                                                                  (bit1
                                                                     (arithmetic.BIT2
                                                                        0)))))) ::
                                                    []) s)) (words.n2w 3))
                                          (GraphLang.var_word32
                                             (string.CHR
                                                (arithmetic.BIT2
                                                   (arithmetic.BIT2
                                                      (bit1
                                                         (bit1
                                                            (arithmetic.BIT2
                                                               (arithmetic.BIT2
                                                                  0)))))) ::
                                              string.CHR
                                                (bit1
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         (bit1
                                                            (arithmetic.BIT2
                                                               0))))) ::
                                              []) s)))
                                    (arm_prog.arm_REG
                                       (arm_step.R_mode
                                          (words.w2w
                                             (GraphLang.var_word8
                                                (string.CHR
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         (arithmetic.BIT2
                                                            (arithmetic.BIT2
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     0)))))) ::
                                                 string.CHR
                                                   (bit1
                                                      (bit1
                                                         (bit1
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  (arithmetic.BIT2
                                                                     0)))))) ::
                                                 string.CHR
                                                   (arithmetic.BIT2
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            (bit1
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     0)))))) ::
                                                 string.CHR
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         (arithmetic.BIT2
                                                            (bit1
                                                               (bit1
                                                                  (arithmetic.BIT2
                                                                     0)))))) ::
                                                 []) s))
                                          (words.n2w (arithmetic.BIT2 1)))
                                       (GraphLang.var_word32
                                          (string.CHR
                                             (arithmetic.BIT2
                                                (arithmetic.BIT2
                                                   (bit1
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            (arithmetic.BIT2
                                                               0)))))) ::
                                           string.CHR
                                             (arithmetic.BIT2
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            0))))) :: [])
                                          s)))
                                 (arm_prog.arm_REG
                                    (arm_step.R_mode
                                       (words.w2w
                                          (GraphLang.var_word8
                                             (string.CHR
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         (arithmetic.BIT2
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  0)))))) ::
                                              string.CHR
                                                (bit1
                                                   (bit1
                                                      (bit1
                                                         (bit1
                                                            (arithmetic.BIT2
                                                               (arithmetic.BIT2
                                                                  0)))))) ::
                                              string.CHR
                                                (arithmetic.BIT2
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         (bit1
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  0)))))) ::
                                              string.CHR
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         (bit1
                                                            (bit1
                                                               (arithmetic.BIT2
                                                                  0)))))) ::
                                              []) s))
                                       (words.n2w
                                          (bit1 (arithmetic.BIT2 0))))
                                    (GraphLang.var_word32
                                       (string.CHR
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2
                                                (bit1
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         (arithmetic.BIT2
                                                            0)))))) ::
                                        string.CHR
                                          (bit1
                                             (arithmetic.BIT2
                                                (arithmetic.BIT2
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         0))))) :: []) s)))
                              (arm_prog.arm_REG
                                 (arm_step.R_mode
                                    (words.w2w
                                       (GraphLang.var_word8
                                          (string.CHR
                                             (bit1
                                                (arithmetic.BIT2
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         (bit1
                                                            (arithmetic.BIT2
                                                               0)))))) ::
                                           string.CHR
                                             (bit1
                                                (bit1
                                                   (bit1
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            (arithmetic.BIT2
                                                               0)))))) ::
                                           string.CHR
                                             (arithmetic.BIT2
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (bit1
                                                         (bit1
                                                            (arithmetic.BIT2
                                                               0)))))) ::
                                           string.CHR
                                             (bit1
                                                (arithmetic.BIT2
                                                   (arithmetic.BIT2
                                                      (bit1
                                                         (bit1
                                                            (arithmetic.BIT2
                                                               0)))))) ::
                                           []) s))
                                    (words.n2w
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2 0))))
                                 (GraphLang.var_word32
                                    (string.CHR
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2
                                             (bit1
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2
                                                (bit1
                                                   (arithmetic.BIT2
                                                      0))))) :: []) s)))
                           (arm_prog.arm_REG
                              (arm_step.R_mode
                                 (words.w2w
                                    (GraphLang.var_word8
                                       (string.CHR
                                          (bit1
                                             (arithmetic.BIT2
                                                (arithmetic.BIT2
                                                   (arithmetic.BIT2
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            0)))))) ::
                                        string.CHR
                                          (bit1
                                             (bit1
                                                (bit1
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         (arithmetic.BIT2
                                                            0)))))) ::
                                        string.CHR
                                          (arithmetic.BIT2
                                             (bit1
                                                (arithmetic.BIT2
                                                   (bit1
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            0)))))) ::
                                        string.CHR
                                          (bit1
                                             (arithmetic.BIT2
                                                (arithmetic.BIT2
                                                   (bit1
                                                      (bit1
                                                         (arithmetic.BIT2
                                                            0)))))) :: [])
                                       s)) (words.n2w 7))
                              (GraphLang.var_word32
                                 (string.CHR
                                    (arithmetic.BIT2
                                       (arithmetic.BIT2
                                          (bit1
                                             (bit1
                                                (arithmetic.BIT2
                                                   (arithmetic.BIT2
                                                      0)))))) ::
                                  string.CHR
                                    (bit1
                                       (bit1
                                          (bit1
                                             (arithmetic.BIT2
                                                (arithmetic.BIT2 0))))) ::
                                  []) s)))
                        (arm_prog.arm_REG
                           (arm_step.R_mode
                              (words.w2w
                                 (GraphLang.var_word8
                                    (string.CHR
                                       (bit1
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2
                                                (arithmetic.BIT2
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (bit1
                                          (bit1
                                             (bit1
                                                (bit1
                                                   (arithmetic.BIT2
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (arithmetic.BIT2
                                          (bit1
                                             (arithmetic.BIT2
                                                (bit1
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         0)))))) ::
                                     string.CHR
                                       (bit1
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2
                                                (bit1
                                                   (bit1
                                                      (arithmetic.BIT2
                                                         0)))))) :: []) s))
                              (words.n2w (arithmetic.BIT2 3)))
                           (GraphLang.var_word32
                              (string.CHR
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2
                                       (bit1
                                          (bit1
                                             (arithmetic.BIT2
                                                (arithmetic.BIT2 0)))))) ::
                               string.CHR
                                 (arithmetic.BIT2
                                    (bit1
                                       (bit1
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2 0))))) :: [])
                              s)))
                     (arm_prog.arm_REG
                        (arm_step.R_mode
                           (words.w2w
                              (GraphLang.var_word8
                                 (string.CHR
                                    (bit1
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2
                                                (bit1
                                                   (arithmetic.BIT2
                                                      0)))))) ::
                                  string.CHR
                                    (bit1
                                       (bit1
                                          (bit1
                                             (bit1
                                                (arithmetic.BIT2
                                                   (arithmetic.BIT2
                                                      0)))))) ::
                                  string.CHR
                                    (arithmetic.BIT2
                                       (bit1
                                          (arithmetic.BIT2
                                             (bit1
                                                (bit1
                                                   (arithmetic.BIT2
                                                      0)))))) ::
                                  string.CHR
                                    (bit1
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2
                                             (bit1
                                                (bit1
                                                   (arithmetic.BIT2
                                                      0)))))) :: []) s))
                           (words.n2w (bit1 (arithmetic.BIT2 1))))
                        (GraphLang.var_word32
                           (string.CHR
                              (arithmetic.BIT2
                                 (arithmetic.BIT2
                                    (bit1
                                       (bit1
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2 0)))))) ::
                            string.CHR
                              (bit1
                                 (arithmetic.BIT2
                                    (bit1
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2 0))))) :: [])
                           s)))
                  (arm_prog.arm_REG
                     (arm_step.R_mode
                        (words.w2w
                           (GraphLang.var_word8
                              (string.CHR
                                 (bit1
                                    (arithmetic.BIT2
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2
                                             (bit1
                                                (arithmetic.BIT2 0)))))) ::
                               string.CHR
                                 (bit1
                                    (bit1
                                       (bit1
                                          (bit1
                                             (arithmetic.BIT2
                                                (arithmetic.BIT2 0)))))) ::
                               string.CHR
                                 (arithmetic.BIT2
                                    (bit1
                                       (arithmetic.BIT2
                                          (bit1
                                             (bit1
                                                (arithmetic.BIT2 0)))))) ::
                               string.CHR
                                 (bit1
                                    (arithmetic.BIT2
                                       (arithmetic.BIT2
                                          (bit1
                                             (bit1
                                                (arithmetic.BIT2 0)))))) ::
                               []) s))
                        (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 1))))
                     (GraphLang.var_word32
                        (string.CHR
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1
                                    (bit1
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2 0)))))) ::
                         string.CHR
                           (bit1
                              (arithmetic.BIT2
                                 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                         string.CHR
                           (arithmetic.BIT2
                              (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                         []) s)))
               (arm_prog.arm_REG
                  (arm_step.R_mode
                     (words.w2w
                        (GraphLang.var_word8
                           (string.CHR
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2
                                       (arithmetic.BIT2
                                          (bit1 (arithmetic.BIT2 0)))))) ::
                            string.CHR
                              (bit1
                                 (bit1
                                    (bit1
                                       (bit1
                                          (arithmetic.BIT2
                                             (arithmetic.BIT2 0)))))) ::
                            string.CHR
                              (arithmetic.BIT2
                                 (bit1
                                    (arithmetic.BIT2
                                       (bit1
                                          (bit1 (arithmetic.BIT2 0)))))) ::
                            string.CHR
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2
                                       (bit1
                                          (bit1 (arithmetic.BIT2 0)))))) ::
                            []) s))
                     (words.n2w (bit1 (bit1 (arithmetic.BIT2 0)))))
                  (GraphLang.var_word32
                     (string.CHR
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1
                                 (bit1
                                    (arithmetic.BIT2
                                       (arithmetic.BIT2 0)))))) ::
                      string.CHR
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                      string.CHR
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0))))) :: [])
                     s)))
            (arm_prog.arm_REG
               (arm_step.R_mode
                  (words.w2w
                     (GraphLang.var_word8
                        (string.CHR
                           (bit1
                              (arithmetic.BIT2
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2
                                       (bit1 (arithmetic.BIT2 0)))))) ::
                         string.CHR
                           (bit1
                              (bit1
                                 (bit1
                                    (bit1
                                       (arithmetic.BIT2
                                          (arithmetic.BIT2 0)))))) ::
                         string.CHR
                           (arithmetic.BIT2
                              (bit1
                                 (arithmetic.BIT2
                                    (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                         string.CHR
                           (bit1
                              (arithmetic.BIT2
                                 (arithmetic.BIT2
                                    (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                         []) s))
                  (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
               (GraphLang.var_word32
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) :: []) s)))
         (arm_prog.arm_REG
            (arm_step.R_mode
               (words.w2w
                  (GraphLang.var_word8
                     (string.CHR
                        (bit1
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (arithmetic.BIT2
                                    (bit1 (arithmetic.BIT2 0)))))) ::
                      string.CHR
                        (bit1
                           (bit1
                              (bit1
                                 (bit1
                                    (arithmetic.BIT2
                                       (arithmetic.BIT2 0)))))) ::
                      string.CHR
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2
                                 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                      string.CHR
                        (bit1
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                      []) s))
               (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
            (GraphLang.var_word32
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
                []) s)))
      (arm_prog.arm_REG
         (arm_step.R_mode
            (words.w2w
               (GraphLang.var_word8
                  (string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) :: [])
                  s))
            (words.n2w
               (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
         (GraphLang.var_word32
            (string.CHR
               (arithmetic.BIT2
                  (arithmetic.BIT2
                     (bit1
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
             string.CHR
               (bit1
                  (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
             string.CHR
               (arithmetic.BIT2
                  (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
             []) s))

GraphLang.arm_STATE s =
  set_sep.STAR
    (set_sep.STAR
       (set_sep.STAR
          (set_sep.STAR
             (set_sep.STAR
                (set_sep.STAR
                   (set_sep.STAR
                      (set_sep.STAR
                         (set_sep.STAR
                            (set_sep.STAR
                               (set_sep.STAR
                                  (set_sep.STAR
                                     (set_sep.STAR
                                        (set_sep.STAR
                                           (set_sep.STAR
                                              (set_sep.STAR
                                                 (set_sep.STAR
                                                    (set_sep.STAR
                                                       (set_sep.STAR
                                                          (set_sep.STAR
                                                             (set_sep.STAR
                                                                (arm_prog.arm_REG
                                                                   (arm_step.R_mode
                                                                      (words.w2w
                                                                         (GraphLang.var_word8
                                                                            (string.CHR
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     (arithmetic.BIT2
                                                                                        (arithmetic.BIT2
                                                                                           (bit1
                                                                                              (arithmetic.BIT2
                                                                                                 0)))))) ::
                                                                             string.CHR
                                                                               (bit1
                                                                                  (bit1
                                                                                     (bit1
                                                                                        (bit1
                                                                                           (arithmetic.BIT2
                                                                                              (arithmetic.BIT2
                                                                                                 0)))))) ::
                                                                             string.CHR
                                                                               (arithmetic.BIT2
                                                                                  (bit1
                                                                                     (arithmetic.BIT2
                                                                                        (bit1
                                                                                           (bit1
                                                                                              (arithmetic.BIT2
                                                                                                 0)))))) ::
                                                                             string.CHR
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     (arithmetic.BIT2
                                                                                        (bit1
                                                                                           (bit1
                                                                                              (arithmetic.BIT2
                                                                                                 0)))))) ::
                                                                             [])
                                                                            s))
                                                                      (words.n2w
                                                                         0))
                                                                   (GraphLang.var_word32
                                                                      (string.CHR
                                                                         (arithmetic.BIT2
                                                                            (arithmetic.BIT2
                                                                               (bit1
                                                                                  (bit1
                                                                                     (arithmetic.BIT2
                                                                                        (arithmetic.BIT2
                                                                                           0)))))) ::
                                                                       string.CHR
                                                                         (arithmetic.BIT2
                                                                            (bit1
                                                                               (bit1
                                                                                  (bit1
                                                                                     (arithmetic.BIT2
                                                                                        0))))) ::
                                                                       [])
                                                                      s))
                                                                (arm_prog.arm_REG
                                                                   (arm_step.R_mode
                                                                      (words.w2w
                                                                         (GraphLang.var_word8
                                                                            (string.CHR
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     (arithmetic.BIT2
                                                                                        (arithmetic.BIT2
                                                                                           (bit1
                                                                                              (arithmetic.BIT2
                                                                                                 0)))))) ::
                                                                             string.CHR
                                                                               (bit1
                                                                                  (bit1
                                                                                     (bit1
                                                                                        (bit1
                                                                                           (arithmetic.BIT2
                                                                                              (arithmetic.BIT2
                                                                                                 0)))))) ::
                                                                             string.CHR
                                                                               (arithmetic.BIT2
                                                                                  (bit1
                                                                                     (arithmetic.BIT2
                                                                                        (bit1
                                                                                           (bit1
                                                                                              (arithmetic.BIT2
                                                                                                 0)))))) ::
                                                                             string.CHR
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     (arithmetic.BIT2
                                                                                        (bit1
                                                                                           (bit1
                                                                                              (arithmetic.BIT2
                                                                                                 0)))))) ::
                                                                             [])
                                                                            s))
                                                                      (words.n2w
                                                                         1))
                                                                   (GraphLang.var_word32
                                                                      (string.CHR
                                                                         (arithmetic.BIT2
                                                                            (arithmetic.BIT2
                                                                               (bit1
                                                                                  (bit1
                                                                                     (arithmetic.BIT2
                                                                                        (arithmetic.BIT2
                                                                                           0)))))) ::
                                                                       string.CHR
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               (bit1
                                                                                  (bit1
                                                                                     (arithmetic.BIT2
                                                                                        0))))) ::
                                                                       [])
                                                                      s)))
                                                             (arm_prog.arm_REG
                                                                (arm_step.R_mode
                                                                   (words.w2w
                                                                      (GraphLang.var_word8
                                                                         (string.CHR
                                                                            (bit1
                                                                               (arithmetic.BIT2
                                                                                  (arithmetic.BIT2
                                                                                     (arithmetic.BIT2
                                                                                        (bit1
                                                                                           (arithmetic.BIT2
                                                                                              0)))))) ::
                                                                          string.CHR
                                                                            (bit1
                                                                               (bit1
                                                                                  (bit1
                                                                                     (bit1
                                                                                        (arithmetic.BIT2
                                                                                           (arithmetic.BIT2
                                                                                              0)))))) ::
                                                                          string.CHR
                                                                            (arithmetic.BIT2
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     (bit1
                                                                                        (bit1
                                                                                           (arithmetic.BIT2
                                                                                              0)))))) ::
                                                                          string.CHR
                                                                            (bit1
                                                                               (arithmetic.BIT2
                                                                                  (arithmetic.BIT2
                                                                                     (bit1
                                                                                        (bit1
                                                                                           (arithmetic.BIT2
                                                                                              0)))))) ::
                                                                          [])
                                                                         s))
                                                                   (words.n2w
                                                                      (arithmetic.BIT2
                                                                         0)))
                                                                (GraphLang.var_word32
                                                                   (string.CHR
                                                                      (arithmetic.BIT2
                                                                         (arithmetic.BIT2
                                                                            (bit1
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     (arithmetic.BIT2
                                                                                        0)))))) ::
                                                                    string.CHR
                                                                      (arithmetic.BIT2
                                                                         (arithmetic.BIT2
                                                                            (bit1
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     0))))) ::
                                                                    [])
                                                                   s)))
                                                          (arm_prog.arm_REG
                                                             (arm_step.R_mode
                                                                (words.w2w
                                                                   (GraphLang.var_word8
                                                                      (string.CHR
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               (arithmetic.BIT2
                                                                                  (arithmetic.BIT2
                                                                                     (bit1
                                                                                        (arithmetic.BIT2
                                                                                           0)))))) ::
                                                                       string.CHR
                                                                         (bit1
                                                                            (bit1
                                                                               (bit1
                                                                                  (bit1
                                                                                     (arithmetic.BIT2
                                                                                        (arithmetic.BIT2
                                                                                           0)))))) ::
                                                                       string.CHR
                                                                         (arithmetic.BIT2
                                                                            (bit1
                                                                               (arithmetic.BIT2
                                                                                  (bit1
                                                                                     (bit1
                                                                                        (arithmetic.BIT2
                                                                                           0)))))) ::
                                                                       string.CHR
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               (arithmetic.BIT2
                                                                                  (bit1
                                                                                     (bit1
                                                                                        (arithmetic.BIT2
                                                                                           0)))))) ::
                                                                       [])
                                                                      s))
                                                                (words.n2w
                                                                   3))
                                                             (GraphLang.var_word32
                                                                (string.CHR
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         (bit1
                                                                            (bit1
                                                                               (arithmetic.BIT2
                                                                                  (arithmetic.BIT2
                                                                                     0)))))) ::
                                                                 string.CHR
                                                                   (bit1
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            (bit1
                                                                               (arithmetic.BIT2
                                                                                  0))))) ::
                                                                 []) s)))
                                                       (arm_prog.arm_REG
                                                          (arm_step.R_mode
                                                             (words.w2w
                                                                (GraphLang.var_word8
                                                                   (string.CHR
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            (arithmetic.BIT2
                                                                               (arithmetic.BIT2
                                                                                  (bit1
                                                                                     (arithmetic.BIT2
                                                                                        0)))))) ::
                                                                    string.CHR
                                                                      (bit1
                                                                         (bit1
                                                                            (bit1
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     (arithmetic.BIT2
                                                                                        0)))))) ::
                                                                    string.CHR
                                                                      (arithmetic.BIT2
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               (bit1
                                                                                  (bit1
                                                                                     (arithmetic.BIT2
                                                                                        0)))))) ::
                                                                    string.CHR
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            (arithmetic.BIT2
                                                                               (bit1
                                                                                  (bit1
                                                                                     (arithmetic.BIT2
                                                                                        0)))))) ::
                                                                    []) s))
                                                             (words.n2w
                                                                (arithmetic.BIT2
                                                                   1)))
                                                          (GraphLang.var_word32
                                                             (string.CHR
                                                                (arithmetic.BIT2
                                                                   (arithmetic.BIT2
                                                                      (bit1
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               (arithmetic.BIT2
                                                                                  0)))))) ::
                                                              string.CHR
                                                                (arithmetic.BIT2
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               0))))) ::
                                                              []) s)))
                                                    (arm_prog.arm_REG
                                                       (arm_step.R_mode
                                                          (words.w2w
                                                             (GraphLang.var_word8
                                                                (string.CHR
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         (arithmetic.BIT2
                                                                            (arithmetic.BIT2
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     0)))))) ::
                                                                 string.CHR
                                                                   (bit1
                                                                      (bit1
                                                                         (bit1
                                                                            (bit1
                                                                               (arithmetic.BIT2
                                                                                  (arithmetic.BIT2
                                                                                     0)))))) ::
                                                                 string.CHR
                                                                   (arithmetic.BIT2
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            (bit1
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     0)))))) ::
                                                                 string.CHR
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         (arithmetic.BIT2
                                                                            (bit1
                                                                               (bit1
                                                                                  (arithmetic.BIT2
                                                                                     0)))))) ::
                                                                 []) s))
                                                          (words.n2w
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   0))))
                                                       (GraphLang.var_word32
                                                          (string.CHR
                                                             (arithmetic.BIT2
                                                                (arithmetic.BIT2
                                                                   (bit1
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            (arithmetic.BIT2
                                                                               0)))))) ::
                                                           string.CHR
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   (arithmetic.BIT2
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            0))))) ::
                                                           []) s)))
                                                 (arm_prog.arm_REG
                                                    (arm_step.R_mode
                                                       (words.w2w
                                                          (GraphLang.var_word8
                                                             (string.CHR
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         (arithmetic.BIT2
                                                                            (bit1
                                                                               (arithmetic.BIT2
                                                                                  0)))))) ::
                                                              string.CHR
                                                                (bit1
                                                                   (bit1
                                                                      (bit1
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               (arithmetic.BIT2
                                                                                  0)))))) ::
                                                              string.CHR
                                                                (arithmetic.BIT2
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         (bit1
                                                                            (bit1
                                                                               (arithmetic.BIT2
                                                                                  0)))))) ::
                                                              string.CHR
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         (bit1
                                                                            (bit1
                                                                               (arithmetic.BIT2
                                                                                  0)))))) ::
                                                              []) s))
                                                       (words.n2w
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                0))))
                                                    (GraphLang.var_word32
                                                       (string.CHR
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                (bit1
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         (arithmetic.BIT2
                                                                            0)))))) ::
                                                        string.CHR
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                (arithmetic.BIT2
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         0))))) ::
                                                        []) s)))
                                              (arm_prog.arm_REG
                                                 (arm_step.R_mode
                                                    (words.w2w
                                                       (GraphLang.var_word8
                                                          (string.CHR
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               0)))))) ::
                                                           string.CHR
                                                             (bit1
                                                                (bit1
                                                                   (bit1
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            (arithmetic.BIT2
                                                                               0)))))) ::
                                                           string.CHR
                                                             (arithmetic.BIT2
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      (bit1
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               0)))))) ::
                                                           string.CHR
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   (arithmetic.BIT2
                                                                      (bit1
                                                                         (bit1
                                                                            (arithmetic.BIT2
                                                                               0)))))) ::
                                                           []) s))
                                                    (words.n2w 7))
                                                 (GraphLang.var_word32
                                                    (string.CHR
                                                       (arithmetic.BIT2
                                                          (arithmetic.BIT2
                                                             (bit1
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         0)))))) ::
                                                     string.CHR
                                                       (bit1
                                                          (bit1
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   (arithmetic.BIT2
                                                                      0))))) ::
                                                     []) s)))
                                           (arm_prog.arm_REG
                                              (arm_step.R_mode
                                                 (words.w2w
                                                    (GraphLang.var_word8
                                                       (string.CHR
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                (arithmetic.BIT2
                                                                   (arithmetic.BIT2
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            0)))))) ::
                                                        string.CHR
                                                          (bit1
                                                             (bit1
                                                                (bit1
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         (arithmetic.BIT2
                                                                            0)))))) ::
                                                        string.CHR
                                                          (arithmetic.BIT2
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   (bit1
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            0)))))) ::
                                                        string.CHR
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                (arithmetic.BIT2
                                                                   (bit1
                                                                      (bit1
                                                                         (arithmetic.BIT2
                                                                            0)))))) ::
                                                        []) s))
                                                 (words.n2w
                                                    (arithmetic.BIT2 3)))
                                              (GraphLang.var_word32
                                                 (string.CHR
                                                    (arithmetic.BIT2
                                                       (arithmetic.BIT2
                                                          (bit1
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   (arithmetic.BIT2
                                                                      0)))))) ::
                                                  string.CHR
                                                    (arithmetic.BIT2
                                                       (bit1
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                (arithmetic.BIT2
                                                                   0))))) ::
                                                  []) s)))
                                        (arm_prog.arm_REG
                                           (arm_step.R_mode
                                              (words.w2w
                                                 (GraphLang.var_word8
                                                    (string.CHR
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                (arithmetic.BIT2
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         0)))))) ::
                                                     string.CHR
                                                       (bit1
                                                          (bit1
                                                             (bit1
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      (arithmetic.BIT2
                                                                         0)))))) ::
                                                     string.CHR
                                                       (arithmetic.BIT2
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                (bit1
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         0)))))) ::
                                                     string.CHR
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                (bit1
                                                                   (bit1
                                                                      (arithmetic.BIT2
                                                                         0)))))) ::
                                                     []) s))
                                              (words.n2w
                                                 (bit1
                                                    (arithmetic.BIT2 1))))
                                           (GraphLang.var_word32
                                              (string.CHR
                                                 (arithmetic.BIT2
                                                    (arithmetic.BIT2
                                                       (bit1
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                (arithmetic.BIT2
                                                                   0)))))) ::
                                               string.CHR
                                                 (bit1
                                                    (arithmetic.BIT2
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                0))))) ::
                                               []) s)))
                                     (arm_prog.arm_REG
                                        (arm_step.R_mode
                                           (words.w2w
                                              (GraphLang.var_word8
                                                 (string.CHR
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      0)))))) ::
                                                  string.CHR
                                                    (bit1
                                                       (bit1
                                                          (bit1
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   (arithmetic.BIT2
                                                                      0)))))) ::
                                                  string.CHR
                                                    (arithmetic.BIT2
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             (bit1
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      0)))))) ::
                                                  string.CHR
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          (arithmetic.BIT2
                                                             (bit1
                                                                (bit1
                                                                   (arithmetic.BIT2
                                                                      0)))))) ::
                                                  []) s))
                                           (words.n2w
                                              (arithmetic.BIT2
                                                 (arithmetic.BIT2 1))))
                                        (GraphLang.var_word32
                                           (string.CHR
                                              (arithmetic.BIT2
                                                 (arithmetic.BIT2
                                                    (bit1
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                0)))))) ::
                                            string.CHR
                                              (bit1
                                                 (arithmetic.BIT2
                                                    (bit1
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             0))))) ::
                                            string.CHR
                                              (arithmetic.BIT2
                                                 (bit1
                                                    (bit1
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             0))))) :: [])
                                           s)))
                                  (arm_prog.arm_REG
                                     (arm_step.R_mode
                                        (words.w2w
                                           (GraphLang.var_word8
                                              (string.CHR
                                                 (bit1
                                                    (arithmetic.BIT2
                                                       (arithmetic.BIT2
                                                          (arithmetic.BIT2
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   0)))))) ::
                                               string.CHR
                                                 (bit1
                                                    (bit1
                                                       (bit1
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                (arithmetic.BIT2
                                                                   0)))))) ::
                                               string.CHR
                                                 (arithmetic.BIT2
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          (bit1
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   0)))))) ::
                                               string.CHR
                                                 (bit1
                                                    (arithmetic.BIT2
                                                       (arithmetic.BIT2
                                                          (bit1
                                                             (bit1
                                                                (arithmetic.BIT2
                                                                   0)))))) ::
                                               []) s))
                                        (words.n2w
                                           (bit1
                                              (bit1 (arithmetic.BIT2 0)))))
                                     (GraphLang.var_word32
                                        (string.CHR
                                           (arithmetic.BIT2
                                              (arithmetic.BIT2
                                                 (bit1
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          (arithmetic.BIT2
                                                             0)))))) ::
                                         string.CHR
                                           (bit1
                                              (arithmetic.BIT2
                                                 (bit1
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          0))))) ::
                                         string.CHR
                                           (bit1
                                              (arithmetic.BIT2
                                                 (bit1
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          0))))) :: [])
                                        s)))
                               (arm_prog.arm_REG
                                  (arm_step.R_mode
                                     (words.w2w
                                        (GraphLang.var_word8
                                           (string.CHR
                                              (bit1
                                                 (arithmetic.BIT2
                                                    (arithmetic.BIT2
                                                       (arithmetic.BIT2
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                0)))))) ::
                                            string.CHR
                                              (bit1
                                                 (bit1
                                                    (bit1
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             (arithmetic.BIT2
                                                                0)))))) ::
                                            string.CHR
                                              (arithmetic.BIT2
                                                 (bit1
                                                    (arithmetic.BIT2
                                                       (bit1
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                0)))))) ::
                                            string.CHR
                                              (bit1
                                                 (arithmetic.BIT2
                                                    (arithmetic.BIT2
                                                       (bit1
                                                          (bit1
                                                             (arithmetic.BIT2
                                                                0)))))) ::
                                            []) s))
                                     (words.n2w
                                        (arithmetic.BIT2
                                           (bit1 (arithmetic.BIT2 0)))))
                                  (GraphLang.var_word32
                                     (string.CHR
                                        (arithmetic.BIT2
                                           (arithmetic.BIT2
                                              (bit1
                                                 (bit1
                                                    (arithmetic.BIT2
                                                       (arithmetic.BIT2
                                                          0)))))) ::
                                      string.CHR
                                        (bit1
                                           (arithmetic.BIT2
                                              (bit1
                                                 (bit1
                                                    (arithmetic.BIT2
                                                       0))))) ::
                                      string.CHR
                                        (arithmetic.BIT2
                                           (arithmetic.BIT2
                                              (bit1
                                                 (bit1
                                                    (arithmetic.BIT2
                                                       0))))) :: []) s)))
                            (arm_prog.arm_REG
                               (arm_step.R_mode
                                  (words.w2w
                                     (GraphLang.var_word8
                                        (string.CHR
                                           (bit1
                                              (arithmetic.BIT2
                                                 (arithmetic.BIT2
                                                    (arithmetic.BIT2
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             0)))))) ::
                                         string.CHR
                                           (bit1
                                              (bit1
                                                 (bit1
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          (arithmetic.BIT2
                                                             0)))))) ::
                                         string.CHR
                                           (arithmetic.BIT2
                                              (bit1
                                                 (arithmetic.BIT2
                                                    (bit1
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             0)))))) ::
                                         string.CHR
                                           (bit1
                                              (arithmetic.BIT2
                                                 (arithmetic.BIT2
                                                    (bit1
                                                       (bit1
                                                          (arithmetic.BIT2
                                                             0)))))) :: [])
                                        s))
                                  (words.n2w
                                     (bit1
                                        (arithmetic.BIT2
                                           (arithmetic.BIT2 0)))))
                               (GraphLang.var_word32
                                  (string.CHR
                                     (arithmetic.BIT2
                                        (arithmetic.BIT2
                                           (bit1
                                              (bit1
                                                 (arithmetic.BIT2
                                                    (arithmetic.BIT2
                                                       0)))))) ::
                                   string.CHR
                                     (bit1
                                        (arithmetic.BIT2
                                           (bit1
                                              (bit1
                                                 (arithmetic.BIT2 0))))) ::
                                   string.CHR
                                     (bit1
                                        (bit1
                                           (arithmetic.BIT2
                                              (bit1
                                                 (arithmetic.BIT2 0))))) ::
                                   []) s)))
                         (arm_prog.arm_REG
                            (arm_step.R_mode
                               (words.w2w
                                  (GraphLang.var_word8
                                     (string.CHR
                                        (bit1
                                           (arithmetic.BIT2
                                              (arithmetic.BIT2
                                                 (arithmetic.BIT2
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          0)))))) ::
                                      string.CHR
                                        (bit1
                                           (bit1
                                              (bit1
                                                 (bit1
                                                    (arithmetic.BIT2
                                                       (arithmetic.BIT2
                                                          0)))))) ::
                                      string.CHR
                                        (arithmetic.BIT2
                                           (bit1
                                              (arithmetic.BIT2
                                                 (bit1
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          0)))))) ::
                                      string.CHR
                                        (bit1
                                           (arithmetic.BIT2
                                              (arithmetic.BIT2
                                                 (bit1
                                                    (bit1
                                                       (arithmetic.BIT2
                                                          0)))))) :: [])
                                     s))
                               (words.n2w
                                  (arithmetic.BIT2
                                     (arithmetic.BIT2
                                        (arithmetic.BIT2 0)))))
                            (GraphLang.var_word32
                               (string.CHR
                                  (arithmetic.BIT2
                                     (arithmetic.BIT2
                                        (bit1
                                           (bit1
                                              (arithmetic.BIT2
                                                 (arithmetic.BIT2
                                                    0)))))) ::
                                string.CHR
                                  (bit1
                                     (arithmetic.BIT2
                                        (bit1
                                           (bit1 (arithmetic.BIT2 0))))) ::
                                string.CHR
                                  (arithmetic.BIT2
                                     (bit1
                                        (arithmetic.BIT2
                                           (bit1 (arithmetic.BIT2 0))))) ::
                                []) s)))
                      (arm_prog.arm_CPSR_N
                         (GraphLang.var_bool
                            (string.CHR
                               (arithmetic.BIT2
                                  (arithmetic.BIT2
                                     (arithmetic.BIT2
                                        (arithmetic.BIT2
                                           (bit1
                                              (arithmetic.BIT2 0)))))) ::
                             []) s)))
                   (arm_prog.arm_CPSR_Z
                      (GraphLang.var_bool
                         (string.CHR
                            (arithmetic.BIT2
                               (arithmetic.BIT2
                                  (bit1
                                     (arithmetic.BIT2
                                        (arithmetic.BIT2
                                           (arithmetic.BIT2 0)))))) :: [])
                         s)))
                (arm_prog.arm_CPSR_C
                   (GraphLang.var_bool
                      (string.CHR
                         (bit1
                            (bit1
                               (arithmetic.BIT2
                                  (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                       []) s)))
             (arm_prog.arm_CPSR_V
                (GraphLang.var_bool
                   (string.CHR
                      (arithmetic.BIT2
                         (arithmetic.BIT2
                            (arithmetic.BIT2
                               (bit1
                                  (arithmetic.BIT2
                                     (arithmetic.BIT2 0)))))) :: []) s)))
          (arm_decomp.arm_OK
             (words.w2w
                (GraphLang.var_word8
                   (string.CHR
                      (bit1
                         (arithmetic.BIT2
                            (arithmetic.BIT2
                               (arithmetic.BIT2
                                  (bit1 (arithmetic.BIT2 0)))))) ::
                    string.CHR
                      (bit1
                         (bit1
                            (bit1
                               (bit1
                                  (arithmetic.BIT2
                                     (arithmetic.BIT2 0)))))) ::
                    string.CHR
                      (arithmetic.BIT2
                         (bit1
                            (arithmetic.BIT2
                               (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                    string.CHR
                      (bit1
                         (arithmetic.BIT2
                            (arithmetic.BIT2
                               (bit1 (bit1 (arithmetic.BIT2 0)))))) :: [])
                   s))))
       (arm_prog.arm_MEMORY
          (GraphLang.var_dom
             (string.CHR
                (arithmetic.BIT2
                   (bit1
                      (arithmetic.BIT2
                         (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (bit1
                      (bit1
                         (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2
                         (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
              []) s)
          (GraphLang.var_mem
             (string.CHR
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2
                         (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2
                         (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
              string.CHR
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2
                         (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
              []) s)))
    (GraphLang.arm_STACK_MEMORY
       (GraphLang.var_dom
          (string.CHR
             (arithmetic.BIT2
                (bit1
                   (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1
                (bit1
                   (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1
                (arithmetic.BIT2
                   (arithmetic.BIT2
                      (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1 (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1
                (bit1
                   (arithmetic.BIT2
                      (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (arithmetic.BIT2
                (bit1
                   (arithmetic.BIT2
                      (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1
                (arithmetic.BIT2
                   (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1
                (bit1
                   (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
           []) s)
       (GraphLang.var_mem
          (string.CHR
             (bit1
                (bit1
                   (arithmetic.BIT2
                      (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (arithmetic.BIT2
                (bit1
                   (arithmetic.BIT2
                      (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1
                (arithmetic.BIT2
                   (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1
                (bit1
                   (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
           string.CHR
             (bit1
                (bit1
                   (arithmetic.BIT2
                      (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))) ::
           []) s))

GraphLang.IMPL_INST code locs
    (GraphLang.Inst entry (const )
       (GraphLang.ASM (some (λs. GraphLang.SKIP_TAG str)) []
          (GraphLang.Jump exit)))
  old.
    old = str
    name.
      locs name = some entry
      GraphLang.IMPL_INST code locs
        (GraphLang.Inst entry (const )
           (GraphLang.CALL none
              ((string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                [], (λs. GraphLang.VarWord32 exit)) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                   [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
                [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
                [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
                [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
                [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) ::
                [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0))))) ::
                   [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) ::
                [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0))))) ::
                   [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) ::
                [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0))))) ::
                   [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                   [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
                [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) ::
                [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0))))) :: [])) ::
               (string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (arithmetic.BIT2
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) :: [])) ::
               (string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (bit1
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) :: [])) ::
               (string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) :: [])) ::
               (string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (bit1
                        (bit1
                           (arithmetic.BIT2
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (bit1
                           (arithmetic.BIT2
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1 (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (arithmetic.BIT2
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (bit1
                           (arithmetic.BIT2
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) :: [])) ::
               (string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (bit1
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) :: [],
                GraphLang.var_acc
                  (string.CHR
                     (bit1
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (bit1
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (bit1
                        (bit1
                           (arithmetic.BIT2
                              (arithmetic.BIT2
                                 (bit1 (arithmetic.BIT2 0)))))) :: [])) ::
               (string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                string.CHR
                  (bit1 (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (bit1
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (arithmetic.BIT2
                              (bit1 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (bit1
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (bit1
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                string.CHR
                  (arithmetic.BIT2
                     (bit1
                        (arithmetic.BIT2
                           (bit1
                              (arithmetic.BIT2 (arithmetic.BIT2 0)))))) ::
                [],
                GraphLang.var_acc
                  (string.CHR
                     (arithmetic.BIT2
                        (arithmetic.BIT2
                           (bit1
                              (bit1
                                 (arithmetic.BIT2
                                    (arithmetic.BIT2 0)))))) ::
                   string.CHR
                     (arithmetic.BIT2
                        (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) ::
                   [])) :: []) name (GraphLang.Jump exit)))

words.word_concat (words.w2w w) (words.n2w 0) = words.word_lsl w 1
  words.word_concat (words.w2w w) (words.n2w 0) =
  words.word_lsl w (arithmetic.BIT2 0)
  words.word_asr w (words.w2n (words.w2w v)) =
  GraphLang.SignedShiftRight w (words.word_and v (words.n2w 255))
  words.word_lsr w (words.w2n (words.w2w v)) =
  GraphLang.ShiftRight w (words.word_and v (words.n2w 255))
  words.word_lsl w (words.w2n (words.w2w v)) =
  GraphLang.ShiftLeft w (words.word_and v (words.n2w 255))
  (words.word_slice 31 (arithmetic.BIT2 0) w = w
   words.word_and w (words.n2w 1) = words.n2w 0
   words.word_and w (words.n2w (arithmetic.BIT2 0)) = words.n2w 0)
  (w = words.word_slice 31 (arithmetic.BIT2 0) w
   words.word_and w (words.n2w 1) = words.n2w 0
   words.word_and w (words.n2w (arithmetic.BIT2 0)) = words.n2w 0)
  (words.word_slice 31 1 w = w
   words.word_and w (words.n2w 1) = words.n2w 0)
  (w = words.word_slice 31 1 w
   words.word_and w (words.n2w 1) = words.n2w 0)
  words.word_slice 31 (arithmetic.BIT2 0) w =
  words.word_lsl (words.word_lsr w (arithmetic.BIT2 0))
    (arithmetic.BIT2 0)
  words.word_slice 31 1 w = words.word_lsl (words.word_lsr w 1) 1
  words.word_slice 31 0 w = w
  GraphLang.word_add_with_carry x y z =
  words.word_add (words.word_add x y)
    (if z then words.n2w 1 else words.n2w 0)
  (GraphLang.carry_out x y z
   ¬(words.word_and
        (words.word_add (words.word_add (words.w2w x) (words.w2w y))
           (if z then words.n2w 1 else words.n2w 0))
        (words.n2w (arithmetic.BIT2 2147483647)) = words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w1) (words.w2n (words.w2w w2)))
     (arithmetic.BIT2 15)
   fcp.fcp_index
     (GraphLang.ShiftLeft (words.w2w w1) (words.w2w (words.w2w w2)))
     (arithmetic.BIT2 15))
  (fcp.fcp_index (words.word_lsl (words.w2w w) 0) (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2147483647)) =
      words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w) 1) (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1073741823)) =
      words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w) (arithmetic.BIT2 0))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 536870911)) =
      words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w) 3) (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 268435455)) =
      words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w) (arithmetic.BIT2 1))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 134217727)) =
      words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w) (bit1 (arithmetic.BIT2 0)))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 67108863)) =
      words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w) (arithmetic.BIT2 (arithmetic.BIT2 0)))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 33554431)) =
      words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w) 7) (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 16777215)) =
      words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w) (arithmetic.BIT2 3))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8388607)) =
      words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w) (bit1 (arithmetic.BIT2 1)))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4194303)) =
      words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w) (arithmetic.BIT2 (arithmetic.BIT2 1)))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2097151)) =
      words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w) (bit1 (bit1 (arithmetic.BIT2 0))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1048575)) =
      words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 524287)) =
      words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 262143)) =
      words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 131071)) =
      words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w) 15) (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 65535)) = words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w) (arithmetic.BIT2 7))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 32767)) = words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w) (bit1 (arithmetic.BIT2 3)))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 16383)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w) (arithmetic.BIT2 (arithmetic.BIT2 3)))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8191)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w) (bit1 (bit1 (arithmetic.BIT2 1))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4095)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2047)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1023)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 511)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 255)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 127)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 63)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 31)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 15)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 7)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 3)) = words.n2w 0))
  (fcp.fcp_index
     (words.word_lsl (words.w2w w)
        (arithmetic.BIT2
           (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
     (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1)) = words.n2w 0))
  (fcp.fcp_index (words.word_lsl (words.w2w w) 31) (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 0)) = words.n2w 0))
  (fcp.fcp_index w (arithmetic.- (words.w2n (words.w2w v)) 1)
   words.w2n (words.w2w v) arithmetic.BIT2 15
   words.word_lo (words.word_and v (words.n2w 255))
     (words.n2w (bit1 (arithmetic.BIT2 7)))
   if words.word_and v (words.n2w 255) = words.n2w 0 then fcp.fcp_index w 0
   else
     fcp.fcp_index
       (GraphLang.ShiftRight w
          (words.word_sub (words.word_and v (words.n2w 255))
             (words.n2w 1))) 0)
  (words.w2n (words.w2w v) arithmetic.BIT2 15
   fcp.fcp_index w (arithmetic.- (words.w2n (words.w2w v)) 1)
   (if words.word_and v (words.n2w 255) = words.n2w 0 then
      fcp.fcp_index w 0
    else
      fcp.fcp_index
        (GraphLang.ShiftRight w
           (words.word_sub (words.word_and v (words.n2w 255))
              (words.n2w 1))) 0)
   words.word_lo (words.word_and v (words.n2w 255))
     (words.n2w (bit1 (arithmetic.BIT2 7))))
  (fcp.fcp_index w (words.w2n (words.w2w v))
   words.w2n (words.w2w v) 31
   words.word_lo (words.word_and v (words.n2w 255))
     (words.n2w (arithmetic.BIT2 15))
   fcp.fcp_index
     (GraphLang.ShiftRight w (words.word_and v (words.n2w 255))) 0)
  (words.w2n (words.w2w v) 31
   fcp.fcp_index w (words.w2n (words.w2w v))
   fcp.fcp_index
     (GraphLang.ShiftRight w (words.word_and v (words.n2w 255))) 0
   words.word_lo (words.word_and v (words.n2w 255))
     (words.n2w (arithmetic.BIT2 15)))
  (fcp.fcp_index w 0 ¬(words.word_and w (words.n2w 1) = words.n2w 0))
  (words.word_bit 0 w ¬(words.word_and w (words.n2w 1) = words.n2w 0))
  words.word_lsr w 0 = GraphLang.ShiftRight w (words.n2w 0)
  words.word_asr w 0 = GraphLang.SignedShiftRight w (words.n2w 0)
  words.word_lsl w 0 = GraphLang.ShiftLeft w (words.n2w 0)
  (fcp.fcp_index w 1
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 0)) = words.n2w 0))
  (words.word_bit 1 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 0)) = words.n2w 0))
  words.word_lsr w 1 = GraphLang.ShiftRight w (words.n2w 1)
  words.word_asr w 1 = GraphLang.SignedShiftRight w (words.n2w 1)
  words.word_lsl w 1 = GraphLang.ShiftLeft w (words.n2w 1)
  (fcp.fcp_index w (arithmetic.BIT2 0)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 0) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 0) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 0))
  words.word_asr w (arithmetic.BIT2 0) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 0))
  words.word_lsl w (arithmetic.BIT2 0) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 0))
  (fcp.fcp_index w 3
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 3)) = words.n2w 0))
  (words.word_bit 3 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 3)) = words.n2w 0))
  words.word_lsr w 3 = GraphLang.ShiftRight w (words.n2w 3)
  words.word_asr w 3 = GraphLang.SignedShiftRight w (words.n2w 3)
  words.word_lsl w 3 = GraphLang.ShiftLeft w (words.n2w 3)
  (fcp.fcp_index w (arithmetic.BIT2 1)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 7)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 1) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 7)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 1) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 1))
  words.word_asr w (arithmetic.BIT2 1) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 1))
  words.word_lsl w (arithmetic.BIT2 1) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 1))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 0))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 15)) = words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 0)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 15)) = words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 0)) =
  GraphLang.ShiftRight w (words.n2w (bit1 (arithmetic.BIT2 0)))
  words.word_asr w (bit1 (arithmetic.BIT2 0)) =
  GraphLang.SignedShiftRight w (words.n2w (bit1 (arithmetic.BIT2 0)))
  words.word_lsl w (bit1 (arithmetic.BIT2 0)) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (arithmetic.BIT2 0)))
  (fcp.fcp_index w (arithmetic.BIT2 (arithmetic.BIT2 0))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 31)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 0)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 31)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (arithmetic.BIT2 0)) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 0)))
  words.word_asr w (arithmetic.BIT2 (arithmetic.BIT2 0)) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 0)))
  words.word_lsl w (arithmetic.BIT2 (arithmetic.BIT2 0)) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 0)))
  (fcp.fcp_index w 7
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 63)) = words.n2w 0))
  (words.word_bit 7 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 63)) = words.n2w 0))
  words.word_lsr w 7 = GraphLang.ShiftRight w (words.n2w 7)
  words.word_asr w 7 = GraphLang.SignedShiftRight w (words.n2w 7)
  words.word_lsl w 7 = GraphLang.ShiftLeft w (words.n2w 7)
  (words.word_msb w fcp.fcp_index w 7)
  (fcp.fcp_index w 0 ¬(words.word_and w (words.n2w 1) = words.n2w 0))
  (words.word_bit 0 w ¬(words.word_and w (words.n2w 1) = words.n2w 0))
  words.word_lsr w 0 = GraphLang.ShiftRight w (words.n2w 0)
  words.word_asr w 0 = GraphLang.SignedShiftRight w (words.n2w 0)
  words.word_lsl w 0 = GraphLang.ShiftLeft w (words.n2w 0)
  (fcp.fcp_index w 1
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 0)) = words.n2w 0))
  (words.word_bit 1 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 0)) = words.n2w 0))
  words.word_lsr w 1 = GraphLang.ShiftRight w (words.n2w 1)
  words.word_asr w 1 = GraphLang.SignedShiftRight w (words.n2w 1)
  words.word_lsl w 1 = GraphLang.ShiftLeft w (words.n2w 1)
  (fcp.fcp_index w (arithmetic.BIT2 0)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 0) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 0) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 0))
  words.word_asr w (arithmetic.BIT2 0) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 0))
  words.word_lsl w (arithmetic.BIT2 0) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 0))
  (fcp.fcp_index w 3
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 3)) = words.n2w 0))
  (words.word_bit 3 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 3)) = words.n2w 0))
  words.word_lsr w 3 = GraphLang.ShiftRight w (words.n2w 3)
  words.word_asr w 3 = GraphLang.SignedShiftRight w (words.n2w 3)
  words.word_lsl w 3 = GraphLang.ShiftLeft w (words.n2w 3)
  (fcp.fcp_index w (arithmetic.BIT2 1)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 7)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 1) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 7)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 1) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 1))
  words.word_asr w (arithmetic.BIT2 1) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 1))
  words.word_lsl w (arithmetic.BIT2 1) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 1))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 0))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 15)) = words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 0)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 15)) = words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 0)) =
  GraphLang.ShiftRight w (words.n2w (bit1 (arithmetic.BIT2 0)))
  words.word_asr w (bit1 (arithmetic.BIT2 0)) =
  GraphLang.SignedShiftRight w (words.n2w (bit1 (arithmetic.BIT2 0)))
  words.word_lsl w (bit1 (arithmetic.BIT2 0)) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (arithmetic.BIT2 0)))
  (fcp.fcp_index w (arithmetic.BIT2 (arithmetic.BIT2 0))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 31)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 0)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 31)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (arithmetic.BIT2 0)) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 0)))
  words.word_asr w (arithmetic.BIT2 (arithmetic.BIT2 0)) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 0)))
  words.word_lsl w (arithmetic.BIT2 (arithmetic.BIT2 0)) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 0)))
  (fcp.fcp_index w 7
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 63)) = words.n2w 0))
  (words.word_bit 7 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 63)) = words.n2w 0))
  words.word_lsr w 7 = GraphLang.ShiftRight w (words.n2w 7)
  words.word_asr w 7 = GraphLang.SignedShiftRight w (words.n2w 7)
  words.word_lsl w 7 = GraphLang.ShiftLeft w (words.n2w 7)
  (fcp.fcp_index w (arithmetic.BIT2 3)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 127)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 3) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 127)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 3) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 3))
  words.word_asr w (arithmetic.BIT2 3) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 3))
  words.word_lsl w (arithmetic.BIT2 3) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 3))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 1))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 255)) = words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 1)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 255)) = words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 1)) =
  GraphLang.ShiftRight w (words.n2w (bit1 (arithmetic.BIT2 1)))
  words.word_asr w (bit1 (arithmetic.BIT2 1)) =
  GraphLang.SignedShiftRight w (words.n2w (bit1 (arithmetic.BIT2 1)))
  words.word_lsl w (bit1 (arithmetic.BIT2 1)) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (arithmetic.BIT2 1)))
  (fcp.fcp_index w (arithmetic.BIT2 (arithmetic.BIT2 1))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 511)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 1)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 511)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (arithmetic.BIT2 1)) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 1)))
  words.word_asr w (arithmetic.BIT2 (arithmetic.BIT2 1)) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 1)))
  words.word_lsl w (arithmetic.BIT2 (arithmetic.BIT2 1)) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 1)))
  (fcp.fcp_index w (bit1 (bit1 (arithmetic.BIT2 0)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1023)) = words.n2w 0))
  (words.word_bit (bit1 (bit1 (arithmetic.BIT2 0))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1023)) = words.n2w 0))
  words.word_lsr w (bit1 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.ShiftRight w (words.n2w (bit1 (bit1 (arithmetic.BIT2 0))))
  words.word_asr w (bit1 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 0))))
  words.word_lsl w (bit1 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (bit1 (arithmetic.BIT2 0))))
  (fcp.fcp_index w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2047)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2047)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
  words.word_asr w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
  words.word_lsl w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4095)) = words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4095)) = words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  words.word_asr w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  words.word_lsl w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8191)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))
     w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8191)) = words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  words.word_asr w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  words.word_lsl w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  (fcp.fcp_index w 15
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 16383)) = words.n2w 0))
  (words.word_bit 15 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 16383)) = words.n2w 0))
  words.word_lsr w 15 = GraphLang.ShiftRight w (words.n2w 15)
  words.word_asr w 15 = GraphLang.SignedShiftRight w (words.n2w 15)
  words.word_lsl w 15 = GraphLang.ShiftLeft w (words.n2w 15)
  (words.word_msb w fcp.fcp_index w 15)
  (fcp.fcp_index w 0 ¬(words.word_and w (words.n2w 1) = words.n2w 0))
  (words.word_bit 0 w ¬(words.word_and w (words.n2w 1) = words.n2w 0))
  words.word_lsr w 0 = GraphLang.ShiftRight w (words.n2w 0)
  words.word_asr w 0 = GraphLang.SignedShiftRight w (words.n2w 0)
  words.word_lsl w 0 = GraphLang.ShiftLeft w (words.n2w 0)
  (fcp.fcp_index w 1
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 0)) = words.n2w 0))
  (words.word_bit 1 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 0)) = words.n2w 0))
  words.word_lsr w 1 = GraphLang.ShiftRight w (words.n2w 1)
  words.word_asr w 1 = GraphLang.SignedShiftRight w (words.n2w 1)
  words.word_lsl w 1 = GraphLang.ShiftLeft w (words.n2w 1)
  (fcp.fcp_index w (arithmetic.BIT2 0)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 0) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 0) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 0))
  words.word_asr w (arithmetic.BIT2 0) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 0))
  words.word_lsl w (arithmetic.BIT2 0) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 0))
  (fcp.fcp_index w 3
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 3)) = words.n2w 0))
  (words.word_bit 3 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 3)) = words.n2w 0))
  words.word_lsr w 3 = GraphLang.ShiftRight w (words.n2w 3)
  words.word_asr w 3 = GraphLang.SignedShiftRight w (words.n2w 3)
  words.word_lsl w 3 = GraphLang.ShiftLeft w (words.n2w 3)
  (fcp.fcp_index w (arithmetic.BIT2 1)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 7)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 1) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 7)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 1) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 1))
  words.word_asr w (arithmetic.BIT2 1) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 1))
  words.word_lsl w (arithmetic.BIT2 1) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 1))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 0))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 15)) = words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 0)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 15)) = words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 0)) =
  GraphLang.ShiftRight w (words.n2w (bit1 (arithmetic.BIT2 0)))
  words.word_asr w (bit1 (arithmetic.BIT2 0)) =
  GraphLang.SignedShiftRight w (words.n2w (bit1 (arithmetic.BIT2 0)))
  words.word_lsl w (bit1 (arithmetic.BIT2 0)) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (arithmetic.BIT2 0)))
  (fcp.fcp_index w (arithmetic.BIT2 (arithmetic.BIT2 0))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 31)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 0)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 31)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (arithmetic.BIT2 0)) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 0)))
  words.word_asr w (arithmetic.BIT2 (arithmetic.BIT2 0)) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 0)))
  words.word_lsl w (arithmetic.BIT2 (arithmetic.BIT2 0)) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 0)))
  (fcp.fcp_index w 7
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 63)) = words.n2w 0))
  (words.word_bit 7 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 63)) = words.n2w 0))
  words.word_lsr w 7 = GraphLang.ShiftRight w (words.n2w 7)
  words.word_asr w 7 = GraphLang.SignedShiftRight w (words.n2w 7)
  words.word_lsl w 7 = GraphLang.ShiftLeft w (words.n2w 7)
  (fcp.fcp_index w (arithmetic.BIT2 3)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 127)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 3) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 127)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 3) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 3))
  words.word_asr w (arithmetic.BIT2 3) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 3))
  words.word_lsl w (arithmetic.BIT2 3) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 3))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 1))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 255)) = words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 1)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 255)) = words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 1)) =
  GraphLang.ShiftRight w (words.n2w (bit1 (arithmetic.BIT2 1)))
  words.word_asr w (bit1 (arithmetic.BIT2 1)) =
  GraphLang.SignedShiftRight w (words.n2w (bit1 (arithmetic.BIT2 1)))
  words.word_lsl w (bit1 (arithmetic.BIT2 1)) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (arithmetic.BIT2 1)))
  (fcp.fcp_index w (arithmetic.BIT2 (arithmetic.BIT2 1))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 511)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 1)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 511)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (arithmetic.BIT2 1)) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 1)))
  words.word_asr w (arithmetic.BIT2 (arithmetic.BIT2 1)) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 1)))
  words.word_lsl w (arithmetic.BIT2 (arithmetic.BIT2 1)) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 1)))
  (fcp.fcp_index w (bit1 (bit1 (arithmetic.BIT2 0)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1023)) = words.n2w 0))
  (words.word_bit (bit1 (bit1 (arithmetic.BIT2 0))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1023)) = words.n2w 0))
  words.word_lsr w (bit1 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.ShiftRight w (words.n2w (bit1 (bit1 (arithmetic.BIT2 0))))
  words.word_asr w (bit1 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 0))))
  words.word_lsl w (bit1 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (bit1 (arithmetic.BIT2 0))))
  (fcp.fcp_index w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2047)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2047)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
  words.word_asr w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
  words.word_lsl w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4095)) = words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4095)) = words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  words.word_asr w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  words.word_lsl w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8191)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))
     w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8191)) = words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  words.word_asr w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  words.word_lsl w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  (fcp.fcp_index w 15
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 16383)) = words.n2w 0))
  (words.word_bit 15 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 16383)) = words.n2w 0))
  words.word_lsr w 15 = GraphLang.ShiftRight w (words.n2w 15)
  words.word_asr w 15 = GraphLang.SignedShiftRight w (words.n2w 15)
  words.word_lsl w 15 = GraphLang.ShiftLeft w (words.n2w 15)
  (fcp.fcp_index w (arithmetic.BIT2 7)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 32767)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 7) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 32767)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 7) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 7))
  words.word_asr w (arithmetic.BIT2 7) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 7))
  words.word_lsl w (arithmetic.BIT2 7) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 7))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 3))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 65535)) = words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 3)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 65535)) = words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 3)) =
  GraphLang.ShiftRight w (words.n2w (bit1 (arithmetic.BIT2 3)))
  words.word_asr w (bit1 (arithmetic.BIT2 3)) =
  GraphLang.SignedShiftRight w (words.n2w (bit1 (arithmetic.BIT2 3)))
  words.word_lsl w (bit1 (arithmetic.BIT2 3)) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (arithmetic.BIT2 3)))
  (fcp.fcp_index w (arithmetic.BIT2 (arithmetic.BIT2 3))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 131071)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 3)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 131071)) =
      words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (arithmetic.BIT2 3)) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 3)))
  words.word_asr w (arithmetic.BIT2 (arithmetic.BIT2 3)) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 3)))
  words.word_lsl w (arithmetic.BIT2 (arithmetic.BIT2 3)) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 3)))
  (fcp.fcp_index w (bit1 (bit1 (arithmetic.BIT2 1)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 262143)) =
      words.n2w 0))
  (words.word_bit (bit1 (bit1 (arithmetic.BIT2 1))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 262143)) =
      words.n2w 0))
  words.word_lsr w (bit1 (bit1 (arithmetic.BIT2 1))) =
  GraphLang.ShiftRight w (words.n2w (bit1 (bit1 (arithmetic.BIT2 1))))
  words.word_asr w (bit1 (bit1 (arithmetic.BIT2 1))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 1))))
  words.word_lsl w (bit1 (bit1 (arithmetic.BIT2 1))) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (bit1 (arithmetic.BIT2 1))))
  (fcp.fcp_index w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 524287)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 524287)) =
      words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))))
  words.word_asr w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))))
  words.word_lsl w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1048575)) =
      words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1048575)) =
      words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))))
  words.word_asr w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))))
  words.word_lsl w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2097151)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))
     w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2097151)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))))
  words.word_asr w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))))
  words.word_lsl w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))))
  (fcp.fcp_index w (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4194303)) =
      words.n2w 0))
  (words.word_bit (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4194303)) =
      words.n2w 0))
  words.word_lsr w (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))
  words.word_asr w (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))
  words.word_lsl w (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8388607)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8388607)) =
      words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))
  words.word_asr w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))
  words.word_lsl w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 16777215)) =
      words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 16777215)) =
      words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
  words.word_asr w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
  words.word_lsl w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 33554431)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 33554431)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
  words.word_asr w
    (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
  words.word_lsl w
    (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 67108863)) =
      words.n2w 0))
  (words.word_bit (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 67108863)) =
      words.n2w 0))
  words.word_lsr w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_asr w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_lsl w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 134217727)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 134217727)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_asr w
    (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_lsl w
    (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w
     (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 268435455)) =
      words.n2w 0))
  (words.word_bit
     (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 268435455)) =
      words.n2w 0))
  words.word_lsr w
    (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w
       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_asr w
    (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_lsl w
    (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w
     (arithmetic.BIT2
        (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 536870911)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2
        (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 536870911)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2
       (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_asr w
    (arithmetic.BIT2
       (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_lsl w
    (arithmetic.BIT2
       (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w 31
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1073741823)) =
      words.n2w 0))
  (words.word_bit 31 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1073741823)) =
      words.n2w 0))
  words.word_lsr w 31 = GraphLang.ShiftRight w (words.n2w 31)
  words.word_asr w 31 = GraphLang.SignedShiftRight w (words.n2w 31)
  words.word_lsl w 31 = GraphLang.ShiftLeft w (words.n2w 31)
  (fcp.fcp_index w (arithmetic.BIT2 15)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2147483647)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 15) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2147483647)) =
      words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 15) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 15))
  words.word_asr w (arithmetic.BIT2 15) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 15))
  words.word_lsl w (arithmetic.BIT2 15) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 15))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 7))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4294967295)) =
      words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 7)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4294967295)) =
      words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 7)) =
  GraphLang.ShiftRight w (words.n2w (bit1 (arithmetic.BIT2 7)))
  words.word_asr w (bit1 (arithmetic.BIT2 7)) =
  GraphLang.SignedShiftRight w (words.n2w (bit1 (arithmetic.BIT2 7)))
  words.word_lsl w (bit1 (arithmetic.BIT2 7)) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (arithmetic.BIT2 7)))
  (fcp.fcp_index w (arithmetic.BIT2 (arithmetic.BIT2 7))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8589934591)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 7)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8589934591)) =
      words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (arithmetic.BIT2 7)) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 7)))
  words.word_asr w (arithmetic.BIT2 (arithmetic.BIT2 7)) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 7)))
  words.word_lsl w (arithmetic.BIT2 (arithmetic.BIT2 7)) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 7)))
  (fcp.fcp_index w (bit1 (bit1 (arithmetic.BIT2 3)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 17179869183)) =
      words.n2w 0))
  (words.word_bit (bit1 (bit1 (arithmetic.BIT2 3))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 17179869183)) =
      words.n2w 0))
  words.word_lsr w (bit1 (bit1 (arithmetic.BIT2 3))) =
  GraphLang.ShiftRight w (words.n2w (bit1 (bit1 (arithmetic.BIT2 3))))
  words.word_asr w (bit1 (bit1 (arithmetic.BIT2 3))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 3))))
  words.word_lsl w (bit1 (bit1 (arithmetic.BIT2 3))) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (bit1 (arithmetic.BIT2 3))))
  (fcp.fcp_index w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 3)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 34359738367)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (bit1 (arithmetic.BIT2 3))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 34359738367)) =
      words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 3))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 3))))
  words.word_asr w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 3))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 3))))
  words.word_lsl w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 3))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 3))))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 3)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 68719476735)) =
      words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 (arithmetic.BIT2 3))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 68719476735)) =
      words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 3))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 3))))
  words.word_asr w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 3))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 3))))
  words.word_lsl w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 3))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 3))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 3)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 137438953471)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 3)))
     w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 137438953471)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 3))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 3))))
  words.word_asr w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 3))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 3))))
  words.word_lsl w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 3))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 3))))
  (fcp.fcp_index w (bit1 (bit1 (bit1 (arithmetic.BIT2 1))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 274877906943)) =
      words.n2w 0))
  (words.word_bit (bit1 (bit1 (bit1 (arithmetic.BIT2 1)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 274877906943)) =
      words.n2w 0))
  words.word_lsr w (bit1 (bit1 (bit1 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (bit1 (bit1 (arithmetic.BIT2 1)))))
  words.word_asr w (bit1 (bit1 (bit1 (arithmetic.BIT2 1)))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (bit1 (arithmetic.BIT2 1)))))
  words.word_lsl w (bit1 (bit1 (bit1 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (bit1 (bit1 (arithmetic.BIT2 1)))))
  (fcp.fcp_index w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 1))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 549755813887)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 1)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 549755813887)) =
      words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 1)))))
  words.word_asr w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 1)))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 1)))))
  words.word_lsl w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 1)))))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1099511627775)) =
      words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1099511627775)) =
      words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))))
  words.word_asr w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))))
  words.word_lsl w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2199023255551)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2199023255551)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))))
  words.word_asr w
    (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))))
  words.word_lsl w
    (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))))
  (fcp.fcp_index w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4398046511103)) =
      words.n2w 0))
  (words.word_bit (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4398046511103)) =
      words.n2w 0))
  words.word_lsr w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))))
  words.word_asr w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))))
  words.word_lsl w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8796093022207)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8796093022207)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))))
  words.word_asr w
    (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))))
  words.word_lsl w
    (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))))
  (fcp.fcp_index w
     (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 17592186044415)) =
      words.n2w 0))
  (words.word_bit
     (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 17592186044415)) =
      words.n2w 0))
  words.word_lsr w
    (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftRight w
    (words.n2w
       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))))
  words.word_asr w
    (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))))
  words.word_lsl w
    (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))))
  (fcp.fcp_index w
     (arithmetic.BIT2
        (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 35184372088831)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2
        (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 35184372088831)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2
       (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))))
  words.word_asr w
    (arithmetic.BIT2
       (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))))
  words.word_lsl w
    (arithmetic.BIT2
       (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))))
  (fcp.fcp_index w (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 70368744177663)) =
      words.n2w 0))
  (words.word_bit (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 70368744177663)) =
      words.n2w 0))
  words.word_lsr w (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))))
  words.word_asr w (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))))
  words.word_lsl w (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 140737488355327)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 140737488355327)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))))
  words.word_asr w
    (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2 (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 281474976710655)) =
      words.n2w 0))
  (words.word_bit
     (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 281474976710655)) =
      words.n2w 0))
  words.word_lsr w
    (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))))
  words.word_asr w
    (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (bit1 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (arithmetic.BIT2
        (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 562949953421311)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))
     w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 562949953421311)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))))
  words.word_asr w
    (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (bit1 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1125899906842623)) =
      words.n2w 0))
  (words.word_bit
     (bit1 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1125899906842623)) =
      words.n2w 0))
  words.word_lsr w
    (bit1 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (bit1 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))))
  words.word_asr w
    (bit1 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (bit1 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (bit1 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (bit1 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (arithmetic.BIT2
        (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2251799813685247)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
     w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2251799813685247)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))))
  words.word_asr w
    (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2
          (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (bit1
        (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4503599627370495)) =
      words.n2w 0))
  (words.word_bit
     (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
     w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4503599627370495)) =
      words.n2w 0))
  words.word_lsr w
    (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (bit1
          (arithmetic.BIT2
             (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))))
  words.word_asr w
    (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (bit1
          (arithmetic.BIT2
             (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (bit1
          (arithmetic.BIT2
             (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (arithmetic.BIT2
        (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 9007199254740991)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2
        (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 9007199254740991)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2
       (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2
             (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))))
  words.word_asr w
    (arithmetic.BIT2
       (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2
             (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (arithmetic.BIT2
       (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2
             (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 18014398509481983)) =
      words.n2w 0))
  (words.word_bit
     (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 18014398509481983)) =
      words.n2w 0))
  words.word_lsr w
    (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_asr w
    (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (bit1 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (arithmetic.BIT2
        (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 36028797018963967)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
     w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 36028797018963967)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_asr w
    (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2
          (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (bit1
        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 72057594037927935)) =
      words.n2w 0))
  (words.word_bit
     (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
     w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 72057594037927935)) =
      words.n2w 0))
  words.word_lsr w
    (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (bit1
          (arithmetic.BIT2
             (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_asr w
    (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (bit1
          (arithmetic.BIT2
             (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (bit1
          (arithmetic.BIT2
             (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (arithmetic.BIT2
        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 144115188075855871)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2
        (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 144115188075855871)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2
       (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2
             (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_asr w
    (arithmetic.BIT2
       (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2
             (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (arithmetic.BIT2
       (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2
             (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (bit1
        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 288230376151711743)) =
      words.n2w 0))
  (words.word_bit
     (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
     w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 288230376151711743)) =
      words.n2w 0))
  words.word_lsr w
    (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (bit1
          (bit1
             (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_asr w
    (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (bit1
          (bit1
             (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (bit1
          (bit1
             (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (arithmetic.BIT2
        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 576460752303423487)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2
        (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 576460752303423487)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2
       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (bit1
             (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_asr w
    (arithmetic.BIT2
       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (bit1
             (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (arithmetic.BIT2
       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2
          (bit1
             (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1152921504606846975)) =
      words.n2w 0))
  (words.word_bit
     (bit1
        (arithmetic.BIT2
           (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1152921504606846975)) =
      words.n2w 0))
  words.word_lsr w
    (bit1
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (bit1
          (arithmetic.BIT2
             (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_asr w
    (bit1
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (bit1
          (arithmetic.BIT2
             (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (bit1
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (bit1
          (arithmetic.BIT2
             (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w
     (arithmetic.BIT2
        (arithmetic.BIT2
           (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2305843009213693951)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2
        (arithmetic.BIT2
           (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2305843009213693951)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2
             (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_asr w
    (arithmetic.BIT2
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2
             (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  words.word_lsl w
    (arithmetic.BIT2
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2
             (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))))
  (fcp.fcp_index w 63
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4611686018427387903)) =
      words.n2w 0))
  (words.word_bit 63 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4611686018427387903)) =
      words.n2w 0))
  words.word_lsr w 63 = GraphLang.ShiftRight w (words.n2w 63)
  words.word_asr w 63 = GraphLang.SignedShiftRight w (words.n2w 63)
  words.word_lsl w 63 = GraphLang.ShiftLeft w (words.n2w 63)
  (words.word_msb w fcp.fcp_index w 63)
  words.word_lsl w (words.w2n y) = GraphLang.ShiftLeft w (words.w2w y)
  words.word_lsr w (words.w2n y) = GraphLang.ShiftRight w (words.w2w y)
  words.word_lsl w (words.w2n x) = GraphLang.ShiftLeft w (words.w2w x)
  words.word_lsr w (words.w2n x) = GraphLang.ShiftRight w (words.w2w x)
  words.word_lsl v (words.w2n x) = GraphLang.ShiftLeft v (words.w2w x)
  words.word_lsr v (words.w2n x) = GraphLang.ShiftRight v (words.w2w x)
  (fcp.fcp_index w 0 ¬(words.word_and w (words.n2w 1) = words.n2w 0))
  (words.word_bit 0 w ¬(words.word_and w (words.n2w 1) = words.n2w 0))
  words.word_lsr w 0 = GraphLang.ShiftRight w (words.n2w 0)
  words.word_asr w 0 = GraphLang.SignedShiftRight w (words.n2w 0)
  words.word_lsl w 0 = GraphLang.ShiftLeft w (words.n2w 0)
  (fcp.fcp_index w 1
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 0)) = words.n2w 0))
  (words.word_bit 1 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 0)) = words.n2w 0))
  words.word_lsr w 1 = GraphLang.ShiftRight w (words.n2w 1)
  words.word_asr w 1 = GraphLang.SignedShiftRight w (words.n2w 1)
  words.word_lsl w 1 = GraphLang.ShiftLeft w (words.n2w 1)
  (fcp.fcp_index w (arithmetic.BIT2 0)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 0) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 0) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 0))
  words.word_asr w (arithmetic.BIT2 0) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 0))
  words.word_lsl w (arithmetic.BIT2 0) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 0))
  (fcp.fcp_index w 3
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 3)) = words.n2w 0))
  (words.word_bit 3 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 3)) = words.n2w 0))
  words.word_lsr w 3 = GraphLang.ShiftRight w (words.n2w 3)
  words.word_asr w 3 = GraphLang.SignedShiftRight w (words.n2w 3)
  words.word_lsl w 3 = GraphLang.ShiftLeft w (words.n2w 3)
  (fcp.fcp_index w (arithmetic.BIT2 1)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 7)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 1) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 7)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 1) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 1))
  words.word_asr w (arithmetic.BIT2 1) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 1))
  words.word_lsl w (arithmetic.BIT2 1) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 1))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 0))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 15)) = words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 0)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 15)) = words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 0)) =
  GraphLang.ShiftRight w (words.n2w (bit1 (arithmetic.BIT2 0)))
  words.word_asr w (bit1 (arithmetic.BIT2 0)) =
  GraphLang.SignedShiftRight w (words.n2w (bit1 (arithmetic.BIT2 0)))
  words.word_lsl w (bit1 (arithmetic.BIT2 0)) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (arithmetic.BIT2 0)))
  (fcp.fcp_index w (arithmetic.BIT2 (arithmetic.BIT2 0))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 31)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 0)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 31)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (arithmetic.BIT2 0)) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 0)))
  words.word_asr w (arithmetic.BIT2 (arithmetic.BIT2 0)) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 0)))
  words.word_lsl w (arithmetic.BIT2 (arithmetic.BIT2 0)) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 0)))
  (fcp.fcp_index w 7
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 63)) = words.n2w 0))
  (words.word_bit 7 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 63)) = words.n2w 0))
  words.word_lsr w 7 = GraphLang.ShiftRight w (words.n2w 7)
  words.word_asr w 7 = GraphLang.SignedShiftRight w (words.n2w 7)
  words.word_lsl w 7 = GraphLang.ShiftLeft w (words.n2w 7)
  (fcp.fcp_index w (arithmetic.BIT2 3)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 127)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 3) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 127)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 3) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 3))
  words.word_asr w (arithmetic.BIT2 3) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 3))
  words.word_lsl w (arithmetic.BIT2 3) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 3))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 1))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 255)) = words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 1)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 255)) = words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 1)) =
  GraphLang.ShiftRight w (words.n2w (bit1 (arithmetic.BIT2 1)))
  words.word_asr w (bit1 (arithmetic.BIT2 1)) =
  GraphLang.SignedShiftRight w (words.n2w (bit1 (arithmetic.BIT2 1)))
  words.word_lsl w (bit1 (arithmetic.BIT2 1)) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (arithmetic.BIT2 1)))
  (fcp.fcp_index w (arithmetic.BIT2 (arithmetic.BIT2 1))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 511)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 1)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 511)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (arithmetic.BIT2 1)) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 1)))
  words.word_asr w (arithmetic.BIT2 (arithmetic.BIT2 1)) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 1)))
  words.word_lsl w (arithmetic.BIT2 (arithmetic.BIT2 1)) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 1)))
  (fcp.fcp_index w (bit1 (bit1 (arithmetic.BIT2 0)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1023)) = words.n2w 0))
  (words.word_bit (bit1 (bit1 (arithmetic.BIT2 0))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1023)) = words.n2w 0))
  words.word_lsr w (bit1 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.ShiftRight w (words.n2w (bit1 (bit1 (arithmetic.BIT2 0))))
  words.word_asr w (bit1 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 0))))
  words.word_lsl w (bit1 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (bit1 (arithmetic.BIT2 0))))
  (fcp.fcp_index w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2047)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2047)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
  words.word_asr w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
  words.word_lsl w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4095)) = words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4095)) = words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  words.word_asr w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  words.word_lsl w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8191)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))
     w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8191)) = words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  words.word_asr w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  words.word_lsl w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
  (fcp.fcp_index w 15
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 16383)) = words.n2w 0))
  (words.word_bit 15 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 16383)) = words.n2w 0))
  words.word_lsr w 15 = GraphLang.ShiftRight w (words.n2w 15)
  words.word_asr w 15 = GraphLang.SignedShiftRight w (words.n2w 15)
  words.word_lsl w 15 = GraphLang.ShiftLeft w (words.n2w 15)
  (fcp.fcp_index w (arithmetic.BIT2 7)
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 32767)) = words.n2w 0))
  (words.word_bit (arithmetic.BIT2 7) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 32767)) = words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 7) =
  GraphLang.ShiftRight w (words.n2w (arithmetic.BIT2 7))
  words.word_asr w (arithmetic.BIT2 7) =
  GraphLang.SignedShiftRight w (words.n2w (arithmetic.BIT2 7))
  words.word_lsl w (arithmetic.BIT2 7) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 7))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 3))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 65535)) = words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 3)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 65535)) = words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 3)) =
  GraphLang.ShiftRight w (words.n2w (bit1 (arithmetic.BIT2 3)))
  words.word_asr w (bit1 (arithmetic.BIT2 3)) =
  GraphLang.SignedShiftRight w (words.n2w (bit1 (arithmetic.BIT2 3)))
  words.word_lsl w (bit1 (arithmetic.BIT2 3)) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (arithmetic.BIT2 3)))
  (fcp.fcp_index w (arithmetic.BIT2 (arithmetic.BIT2 3))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 131071)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 3)) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 131071)) =
      words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (arithmetic.BIT2 3)) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 3)))
  words.word_asr w (arithmetic.BIT2 (arithmetic.BIT2 3)) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 3)))
  words.word_lsl w (arithmetic.BIT2 (arithmetic.BIT2 3)) =
  GraphLang.ShiftLeft w (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 3)))
  (fcp.fcp_index w (bit1 (bit1 (arithmetic.BIT2 1)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 262143)) =
      words.n2w 0))
  (words.word_bit (bit1 (bit1 (arithmetic.BIT2 1))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 262143)) =
      words.n2w 0))
  words.word_lsr w (bit1 (bit1 (arithmetic.BIT2 1))) =
  GraphLang.ShiftRight w (words.n2w (bit1 (bit1 (arithmetic.BIT2 1))))
  words.word_asr w (bit1 (bit1 (arithmetic.BIT2 1))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 1))))
  words.word_lsl w (bit1 (bit1 (arithmetic.BIT2 1))) =
  GraphLang.ShiftLeft w (words.n2w (bit1 (bit1 (arithmetic.BIT2 1))))
  (fcp.fcp_index w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 524287)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 524287)) =
      words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))))
  words.word_asr w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))))
  words.word_lsl w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (bit1 (arithmetic.BIT2 1))))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1048575)) =
      words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1048575)) =
      words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))))
  words.word_asr w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))))
  words.word_lsl w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (arithmetic.BIT2 (arithmetic.BIT2 1))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2097151)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1)))
     w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 2097151)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))))
  words.word_asr w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))))
  words.word_lsl w
    (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 1))))
  (fcp.fcp_index w (bit1 (bit1 (bit1 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4194303)) =
      words.n2w 0))
  (words.word_bit (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 4194303)) =
      words.n2w 0))
  words.word_lsr w (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))
  words.word_asr w (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))
  words.word_lsl w (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (bit1 (bit1 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8388607)) =
      words.n2w 0))
  (words.word_bit (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 8388607)) =
      words.n2w 0))
  words.word_lsr w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))
  words.word_asr w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))
  words.word_lsl w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w (arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 16777215)) =
      words.n2w 0))
  (words.word_bit (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 16777215)) =
      words.n2w 0))
  words.word_lsr w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
  words.word_asr w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
  words.word_lsl w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 33554431)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 33554431)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
  words.word_asr w
    (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
  words.word_lsl w
    (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2 (arithmetic.BIT2 (bit1 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 67108863)) =
      words.n2w 0))
  (words.word_bit (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 67108863)) =
      words.n2w 0))
  words.word_lsr w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_asr w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_lsl w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w (bit1 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w
     (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 134217727)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 134217727)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_asr w
    (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_lsl w
    (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2 (bit1 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w
     (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 268435455)) =
      words.n2w 0))
  (words.word_bit
     (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 268435455)) =
      words.n2w 0))
  words.word_lsr w
    (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w
       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_asr w
    (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_lsl w
    (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (bit1 (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w
     (arithmetic.BIT2
        (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0))))
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 536870911)) =
      words.n2w 0))
  (words.word_bit
     (arithmetic.BIT2
        (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 536870911)) =
      words.n2w 0))
  words.word_lsr w
    (arithmetic.BIT2
       (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_asr w
    (arithmetic.BIT2
       (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.SignedShiftRight w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  words.word_lsl w
    (arithmetic.BIT2
       (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))) =
  GraphLang.ShiftLeft w
    (words.n2w
       (arithmetic.BIT2
          (arithmetic.BIT2 (arithmetic.BIT2 (arithmetic.BIT2 0)))))
  (fcp.fcp_index w 31
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1073741823)) =
      words.n2w 0))
  (words.word_bit 31 w
   ¬(words.word_and w (words.n2w (arithmetic.BIT2 1073741823)) =
      words.n2w 0))
  words.word_lsr w 31 = GraphLang.ShiftRight w (words.n2w 31)
  words.word_asr w 31 = GraphLang.SignedShiftRight w (words.n2w 31)
  words.word_lsl w 31 = GraphLang.ShiftLeft w (words.n2w 31)
  (words.word_msb w fcp.fcp_index w 31)
  (m a. GraphLang.READ8 a m = GraphLang.MemAcc8 m a)
  (m a. GraphLang.READ32 a m = GraphLang.MemAcc32 m a)
  (w y. words.word_lsl w (words.w2n y) = GraphLang.ShiftLeft w y)
  (w y. words.word_lsr w (words.w2n y) = GraphLang.ShiftRight w y)
  (m a w. GraphLang.WRITE8 a w m = GraphLang.MemUpdate8 m a w)
  m a w. GraphLang.WRITE32 a w m = GraphLang.MemUpdate32 m a w

External Type Operators

External Constants

Assumptions

pred_set.FINITE pred_set.UNIV

wellFounded empty

wellFounded (<)

0 = 0

0 < fcp.dimindex bool.the_value

0 < words.dimword bool.the_value

x. x = x

t. t

n. 0 n

m. m m

bool.LET = λf x. f x

pred_set.FINITE pred_set.UNIV pred_set.FINITE pred_set.UNIV

pred_set.FINITE pred_set.UNIV pred_set.FINITE pred_set.UNIV

fcp.dimindex bool.the_value = 1

fcp.dimindex bool.the_value = arithmetic.BIT2 0

arithmetic.DIV2 (bit1 x) = x

words.w2n (words.n2w 0) = 0

list.DROP 0 l = l

¬¬p p

x. ¬bool.IN x pred_set.EMPTY

x. id x = x

t. t ¬t

x. marker.Abbrev x x

n. ¬(n < 0)

n. ¬(n < n)

(¬) = λt. t

() = λP. P ((select) P)

a. x. x = a

t. (x. t) t

t. (x. t) t

t. (λx. t x) = t

() = λP. P = λx.

arithmetic.BIT2 0 = suc 1

words.word_2comp (words.n2w 1) = words.word_T

¬(p q) p

x. ¬(none = some x)

x. option.THE (some x) = x

x. x = x

n. ¬(suc n = 0)

n. ¬(suc n 0)

n. even (arithmetic.BIT2 0 * n)

c. arithmetic.- c c = 0

s. pred_set.UNION s s = s

w. words.w2n w < words.dimword bool.the_value

w. bitstring.v2w (bitstring.w2v w) = w

w. words.n2w (words.w2n w) = w

a. words.word_1comp (words.word_1comp a) = a

flip = λf x y. f y x

fcp.dimindex bool.the_value = arithmetic.BIT2 3

¬(p q) ¬q

¬(p q) ¬p

¬(p q) ¬q

A. A ¬A

t. ¬t t

t. (t ) ¬t

n. even n ¬odd n

n. odd n ¬even n

x. numeral.iDUB x = x + x

n. rich_list.COUNT_LIST n = list.GENLIST id n

n. rich_list.COUNT_LIST n = rich_list.COUNT_LIST_AUX n []

q. q div 1 = q

L. reverse L = list.REV L []

l. length (reverse l) = length l

w. words.w2w w = words.n2w (words.w2n w)

w. length (bitstring.w2v w) = fcp.dimindex bool.the_value

x y. const x y = x

m n. m m + n

() = λp q. p q p

fcp.dimindex bool.the_value = arithmetic.BIT2 7

fcp.dimindex bool.the_value =
  arithmetic.BIT2 (bit1 (bit1 (arithmetic.BIT2 0)))

t. t t

t. (t ) (t )

n. arithmetic.DIV2 n = n div arithmetic.BIT2 0

m. suc m = m + 1

n. suc n = 1 + n

a. arithmetic.- (suc a) a = 1

m. arithmetic.- (suc m) 1 = m

x. (fst x, snd x) = x

x y. fst (x, y) = x

x y. snd (x, y) = y

h t. head (h :: t) = h

h t. tail (h :: t) = t

b t. (if b then t else t) = t

n. words.n2w n = fcp.FCP (λi. bit.BIT i n)

a1 a0. ¬([] = a0 :: a1)

P x. P x P ((select) P)

f n. length (list.GENLIST f n) = n

fcp.dimindex bool.the_value = arithmetic.BIT2 15

¬( ) ¬( )

pair.pair_CASE (x, y) f = f x y

n. words.w2n (words.n2w n) = n mod words.dimword bool.the_value

n. arithmetic.BIT2 0 * n = n + n

n. words.n2w (n mod words.dimword bool.the_value) = words.n2w n

l. length l = 0 l = []

x. q r. x = (q, r)

x p c. prog.SPEC x p c p

x y. x = y y = x

t1 t2. t1 t2 t2 t1

A B. A B B A

m n. m * n = n * m

m n. m + n = n + m

a c. arithmetic.- (a + c) c = a

v w. words.word_add v w = words.word_add w v

a b. words.word_and a b = words.word_and b a

v w. words.word_mul v w = words.word_mul w v

a b. words.word_or a b = words.word_or b a

R f. wellFounded R wellFounded (relation.inv_image R f)

fcp.dimindex bool.the_value = arithmetic.BIT2 31

(¬A ) (A )

n. 0 < n 0 mod n = 0

f g. f g = λx. f (g x)

w.
    words.word_2comp w = words.word_add (words.word_1comp w) (words.n2w 1)

w.
    words.word_2comp w = words.word_mul (words.word_2comp (words.n2w 1)) w

w. words.w2n w = 0 w = words.n2w 0

A B. A B ¬A B

m n. m < n suc m n

m n. ¬(m < n) n m

m. m = 0 n. m = suc n

opt. opt = none x. opt = some x

v w. words.word_sub v w = words.word_add v (words.word_2comp w)

v w. words.word_concat v w = words.w2w (words.word_join v w)

P. (λp. P p) = pair.UNCURRY (λp1 p2. P (p1, p2))

() = λp q. (λf. f p q) = λf. f

P. ¬(x. P x) x. ¬P x

w.
    words.word_msb w
    fcp.fcp_index w (arithmetic.- (fcp.dimindex bool.the_value) 1)

() = λP. q. (x. P x q) q

(h. P h) p_1 p_2. P (p_1, p_2)

x y. some x = some y x = y

c1 c2. c1 = c2 string.ORD c1 = string.ORD c2

i n. bit.BIT i n bool.IN i (words.BIT_SET 0 n)

h l. words.word_extract h l = words.w2w words.word_bits h l

m n. 0 < n m mod n < n

n k. k < n k mod n = k

m n. ¬(m n) suc n m

n m. suc n suc m n m

l1 l2.
    sorting.PERM l1 l2 (list.ALL_DISTINCT l1 list.ALL_DISTINCT l2)

a b. words.word_lo a b words.w2n a < words.w2n b

v w. words.w2n v = words.w2n w v = w

w. n. w = words.n2w n n < words.dimword bool.the_value

words.dimword bool.the_value = arithmetic.BIT2 127

n. address.ALIGNED (words.n2w n) n mod arithmetic.BIT2 1 = 0

n.
    words.word_msb (words.n2w n)
    bit.BIT (arithmetic.- (fcp.dimindex bool.the_value) 1) n

m. arithmetic.- 0 m = 0 arithmetic.- m 0 = m

f g x. (f g) x = f (g x)

f. id f = f f id = f

m n. even (m + n) even m even n

m n. words.word_add (words.n2w m) (words.n2w n) = words.n2w (m + n)

m n. words.word_mul (words.n2w m) (words.n2w n) = words.n2w (m * n)

n w. n = length w bitstring.fixwidth n w = w

l1 l2. length (l1 @ l2) = length l1 + length l2

v m. bitstring.shiftr v m = list.TAKE (arithmetic.- (length v) m) v

R f. relation.inv_image R f = λx y. R (f x) (f y)

x y.
    address.ALIGNED x address.ALIGNED y
    address.ALIGNED (words.word_sub x y)

fcp.dimindex bool.the_value =
  if pred_set.FINITE pred_set.UNIV then
    arithmetic.BIT2 0 * fcp.dimindex bool.the_value
  else 1

n.
    words.word_2comp (words.n2w n) =
    words.n2w
      (arithmetic.- (words.dimword bool.the_value)
         (n mod words.dimword bool.the_value))

i. i < fcp.dimindex bool.the_value fcp.fcp_index (fcp.FCP g) i = g i

l. l = [] h t. l = h :: t

f g. f = g x. f x = g x

f v. (x. x = v f x) f v

P a. (x. x = a P x) P a

P t. (x. x = t P x) () P

f x y. pair.UNCURRY f (x, y) = f x y

x. address.ALIGNED x words.word_and x (words.n2w 3) = words.n2w 0

() = λt1 t2. t. (t1 t) (t2 t) t

t1 t2. (t1 t2) (t2 t1) (t1 t2)

m n. m = n m n n m

b n. bit.BIT b n bit.BITS b b n = 1

m n. odd (m + n) ¬(odd m odd n)

a n.
    words.word_lsl a n =
    words.word_mul (words.n2w (arithmetic.BIT2 0 n)) a

w n. arm.Aligned (w, n) w = arm.Align (w, n)

w n. m0.Aligned (w, n) w = m0.Align (w, n)

(p ¬q) (p q) (¬q ¬p)

list.LIST_TO_SET [] = pred_set.EMPTY
  list.LIST_TO_SET (h :: t) = pred_set.INSERT h (list.LIST_TO_SET t)

list.GENLIST f 0 = [] list.GENLIST f n = list.GENLIST_AUX f n []

¬(¬A B) A ¬B

Q P. (x. P x Q) (x. P x) Q

P Q. P (x. Q x) x. P Q x

P Q. P (x. Q x) x. P Q x

P Q. (x. P x Q) (x. P x) Q

P Q. (x. P x) Q x. P x Q

w m.
    words.w2n (words.word_lsr w m) = words.w2n w div arithmetic.BIT2 0 m

w n. arm.Align (w, n) = words.n2w (n * (words.w2n w div n))

w n. m0.Align (w, n) = words.n2w (n * (words.w2n w div n))

f v.
    words.word_modify f (bitstring.v2w v) =
    bitstring.v2w
      (bitstring.modify f
         (bitstring.fixwidth (fcp.dimindex bool.the_value) v))

list.EL 0 = head list.EL (suc n) (l :: ls) = list.EL n ls

¬(A B) (A ) ¬B

(x y) (z w) x z y w

(x y) (z w) x z y w

x l2 l1. sorting.PERM (x :: l1) (x :: l2) sorting.PERM l1 l2

t1 t2 t3. t1 t2 t3 (t1 t2) t3

t1 t2 t3. t1 t2 t3 t1 t2 t3

A B C. A B C (A B) C

b c d. b (c d) (b c) d

m n p. m * (n * p) = m * n * p

m n p. m + (n + p) = m + n + p

m n p. arithmetic.- (arithmetic.- m n) p = arithmetic.- m (n + p)

m n p. m + p = n + p m = n

m n p. m + p < n + p m < n

m n p. m + n m + p n p

m n p. m < n n < p m < p

m n p. m n n p m p

n. 1 n = 1 n 1 = n

l1 l2 l3. l1 @ l2 @ l3 = (l1 @ l2) @ l3

A B C. sorting.PERM (A @ B) C sorting.PERM (B @ A) C

P l. all P l e. bool.IN e (list.LIST_TO_SET l) P e

f g l. map f (map g l) = map (f g) l

v w x.
    words.word_add v (words.word_add w x) =
    words.word_add (words.word_add v w) x

v w x.
    words.word_mul v (words.word_mul w x) =
    words.word_mul (words.word_mul v w) x

v w x.
    words.word_sub v (words.word_add w x) =
    words.word_sub (words.word_sub v w) x

a b c.
    words.word_and (words.word_and a b) c =
    words.word_and a (words.word_and b c)

v w x. words.word_sub v w = words.word_sub x w v = x

v w.
    words.word_and v w =
    fcp.FCP (λi. fcp.fcp_index v i fcp.fcp_index w i)

v w.
    words.word_or v w = fcp.FCP (λi. fcp.fcp_index v i fcp.fcp_index w i)

p q r.
    set_sep.STAR p (set_sep.STAR q r) = set_sep.STAR (set_sep.STAR p q) r

(x. P x Q x) (x. P x) x. Q x

t1 t2. (if then t1 else t2) = t1 (if then t1 else t2) = t2

t1 t2. (t1 t2) t1 t2 ¬t1 ¬t2

n m. arithmetic.- n m = if m < n then numeral.iSUB n m else 0

x y. 0 < y (x mod y = x x < y)

n i.
    i < fcp.dimindex bool.the_value
    (fcp.fcp_index (words.n2w n) i bit.BIT i n)

m n. m + n = 0 m = 0 n = 0

n. all P (list.GENLIST f n) i. i < n P (f i)

l x. ¬(l = x :: l) ¬(x :: l = l)

fcp.dimindex bool.the_value =
  if pred_set.FINITE pred_set.UNIV then
    arithmetic.BIT2 0 * fcp.dimindex bool.the_value + 1
  else 1

fcp.dimindex bool.the_value =
  if pred_set.FINITE pred_set.UNIV pred_set.FINITE pred_set.UNIV then
    fcp.dimindex bool.the_value + fcp.dimindex bool.the_value
  else 1

length [] = 0 h t. length (h :: t) = suc (length t)

(w. words.word_add w (words.n2w 0) = w)
  w. words.word_add (words.n2w 0) w = w

P. P 0 (n. P n P (suc n)) n. P n

w.
    arm.HighestSetBit w =
    if w = words.n2w 0 then integer.int_neg (integer.int_of_num 1)
    else integer_word.w2i (words.word_log2 w)

w.
    m0.HighestSetBit w =
    if w = words.n2w 0 then integer.int_neg (integer.int_of_num 1)
    else integer_word.w2i (words.word_log2 w)

w.
    arm.CountLeadingZeroBits w =
    integer.Num
      (integer.int_sub
         (integer.int_sub
            (integer.int_of_num (words.word_len (words.n2w 0)))
            (integer.int_of_num 1)) (arm.HighestSetBit w))

w.
    m0.CountLeadingZeroBits w =
    integer.Num
      (integer.int_sub
         (integer.int_sub
            (integer.int_of_num (words.word_len (words.n2w 0)))
            (integer.int_of_num 1)) (m0.HighestSetBit w))

(t. ¬¬t t) (¬ ) (¬ )

e f. fn. fn none = e x. fn (some x) = f x

m n. ¬(m = n) suc m n suc n m

w.
    bitstring.w2v w =
    list.GENLIST
      (λi.
         fcp.fcp_index w
           (arithmetic.- (arithmetic.- (fcp.dimindex bool.the_value) 1) i))
      (fcp.dimindex bool.the_value)

(s t. pred_set.SUBSET s (pred_set.UNION s t))
  s t. pred_set.SUBSET s (pred_set.UNION t s)

x y s. bool.IN x (pred_set.INSERT y s) x = y bool.IN x s

A B C. A B C (A B) (A C)

A B C. B C A (B A) (C A)

m n p. m n suc p * m suc p * n

m n p. p * (m + n) = p * m + p * n

h l v.
    bitstring.field h l v =
    bitstring.fixwidth (arithmetic.- (suc h) l) (bitstring.shiftr v l)

n r. r < n q. (q * n + r) mod n = r

n. 0 < n n div n = 1 n mod n = 0

L1 L2. sorting.PERM L1 L2 x. filter ((=) x) L1 = filter ((=) x) L2

l1 l2.
    sorting.PERM l1 l2
    x. bool.IN x (list.LIST_TO_SET l1) bool.IN x (list.LIST_TO_SET l2)

f l1 l2. map f (l1 @ l2) = map f l1 @ map f l2

P l1 l2. all P (l1 @ l2) all P l1 all P l2

v w x.
    words.word_mul (words.word_add v w) x =
    words.word_add (words.word_mul v x) (words.word_mul w x)

m n.
    words.n2w m = words.n2w n
    m mod words.dimword bool.the_value = n mod words.dimword bool.the_value

a b.
    words.word_lo (words.n2w a) (words.n2w b)
    a mod words.dimword bool.the_value < b mod words.dimword bool.the_value

b w.
    words.word_bit b w
    b arithmetic.- (fcp.dimindex bool.the_value) 1 fcp.fcp_index w b

f b x y. f (if b then x else y) = if b then f x else f y

f R y z. R y z relation.RESTRICT f R z y = f y

P. (n. (m. m < n P m) P n) n. P n

x y.
    words.word_lo x y
    ¬blast.BCARRY (fcp.dimindex bool.the_value) (fcp.fcp_index x)
        ((¬) fcp.fcp_index y)

x y c. blast.bcarry x y c x y (x y) c

P Q. (x. P x Q x) (x. P x) x. Q x

P Q. (x. P x Q x) (x. P x) x. Q x

e f. fn. fn 0 = e n. fn (suc n) = f n (fn n)

f a b c. combin.UPDATE a b f c = if a = c then b else f c

P. P [] (t. P t h. P (h :: t)) l. P l

(t1 t2. (if then t1 else t2) = t1)
  t1 t2. (if then t1 else t2) = t2

x y z. 0 < z (y div z < x y < x * z)

m n p. arithmetic.- m n < p m < n + p 0 < p

m n p. m * n < m * p 0 < m n < p

v w.
    words.word_join v w =
    bool.LET
      (bool.LET
         (λcv cw.
            words.word_or (words.word_lsl cv (fcp.dimindex bool.the_value))
              cw) (words.w2w v)) (words.w2w w)

words.dimword bool.the_value = arithmetic.BIT2 32767

arithmetic.DIV2 0 = 0 (n. arithmetic.DIV2 (bit1 n) = n)
  n. arithmetic.DIV2 (arithmetic.BIT2 n) = suc n

e l1 l2.
    bool.IN e (list.LIST_TO_SET (l1 @ l2))
    bool.IN e (list.LIST_TO_SET l1) bool.IN e (list.LIST_TO_SET l2)

x y.
    x = y
    i.
      i < fcp.dimindex bool.the_value
      fcp.fcp_index x i = fcp.fcp_index y i

w n.
    words.word_lsr w n =
    fcp.FCP
      (λi. i + n < fcp.dimindex bool.the_value fcp.fcp_index w (i + n))

(l. rich_list.COUNT_LIST_AUX 0 l = l)
  n l.
    rich_list.COUNT_LIST_AUX (suc n) l =
    rich_list.COUNT_LIST_AUX n (n :: l)

x y a b. (x, y) = (a, b) x = a y = b

a0 a1 a0' a1'. a0 :: a1 = a0' :: a1' a0 = a0' a1 = a1'

L1 L2 L3 L4.
    sorting.PERM L1 L3 sorting.PERM L2 L4
    sorting.PERM (L1 @ L2) (L3 @ L4)

w i.
    i < fcp.dimindex bool.the_value
    (fcp.fcp_index (words.w2w w) i
     i < fcp.dimindex bool.the_value fcp.fcp_index w i)

Fn. f. c i r. f (ind_type.CONSTR c i r) = Fn c i r (λn. f (r n))

(list.ALL_DISTINCT [] )
  h t.
    list.ALL_DISTINCT (h :: t)
    ¬bool.IN h (list.LIST_TO_SET t) list.ALL_DISTINCT t

n.
    numeral.iDUB (bit1 n) = arithmetic.BIT2 (numeral.iDUB n)
    numeral.iDUB (arithmetic.BIT2 n) = arithmetic.BIT2 (bit1 n)
    numeral.iDUB 0 = 0

l1 n.
    length l1 n
    l2. list.EL n (l1 @ l2) = list.EL (arithmetic.- n (length l1)) l2

n m.
    words.word_sub (words.n2w n) (words.n2w m) =
    if n < m then words.word_2comp (words.n2w (arithmetic.- m n))
    else words.n2w (arithmetic.- n m)

l f x.
    bool.IN x (list.LIST_TO_SET (map f l))
    y. x = f y bool.IN y (list.LIST_TO_SET l)

(p q r) (p q) (p ¬r) (¬q r ¬p)

(p q r) (p ¬q) (p ¬r) (q r ¬p)

min 0 x = 0 min x 0 = 0 min x y = if x < y then x else y

f0 f1. fn. fn [] = f0 a0 a1. fn (a0 :: a1) = f1 a0 a1 (fn a1)

b v.
    bitstring.testbit b v
    bool.LET (λn. b < n list.EL (arithmetic.- (arithmetic.- n 1) b) v)
      (length v)

w n.
    words.word_lsl w n =
    fcp.FCP
      (λi.
         i < fcp.dimindex bool.the_value n i
         fcp.fcp_index w (arithmetic.- i n))

R. wellFounded R P. (x. (y. R y x P y) P x) x. P x

x p c q.
    prog.SPEC x p c q c'. pred_set.SUBSET c c' prog.SPEC x p c' q

(a f. ind_type.FCONS a f 0 = a)
  a f n. ind_type.FCONS a f (suc n) = f n

(v f. option.option_CASE none v f = v)
  x v f. option.option_CASE (some x) v f = f x

x x' y y'. (x x') (x' (y y')) (x y x' y')

n k r. (q. k = q * n + r r < n) k mod n = r

(p q r) (p ¬q ¬r) (q ¬p) (r ¬p)

suc 0 = 1 (n. suc (bit1 n) = arithmetic.BIT2 n)
  n. suc (arithmetic.BIT2 n) = bit1 (suc n)

(l. [] @ l = l) l1 l2 h. (h :: l1) @ l2 = h :: l1 @ l2

(sorting.PERM L (x :: []) L = x :: [])
  (sorting.PERM (x :: []) L L = x :: [])

h l n.
    bit.BITS h l n =
    n div arithmetic.BIT2 0 l mod
    arithmetic.BIT2 0 arithmetic.- (suc h) l

n.
    string.ORD (string.CHR n) =
    if n < arithmetic.BIT2 127 then n
    else combin.FAIL string.ORD > 255 (string.CHR n)

x p c q g.
    prog.SPEC x (set_sep.STAR p (set_sep.cond g)) c q
    g prog.SPEC x p c q

P (arithmetic.- a b) d. (b = a + d P 0) (a = b + d P d)

A B. (¬(A B) ¬A ¬B) (¬(A B) ¬A ¬B)

h l s.
    bitstring.field_insert h l s =
    bitstring.modify
      (λi. cond (l i i h) (bitstring.testbit (arithmetic.- i l) s))

h l a.
    words.bit_field_insert h l a =
    words.word_modify
      (λi. cond (l i i h) (fcp.fcp_index a (arithmetic.- i l)))

n. 0 < n k. k = (k div n) * n + k mod n k mod n < n

M R f.
    f = relation.WFREC R M wellFounded R
    x. f x = M (relation.RESTRICT f R x) x

(f. map f [] = []) f h t. map f (h :: t) = f h :: map f t

(P. all P [] ) P h t. all P (h :: t) P h all P t

list.EL (bit1 n) (l :: ls) = list.EL (prim_rec.PRE (bit1 n)) ls
  list.EL (arithmetic.BIT2 n) (l :: ls) = list.EL (bit1 n) ls

n.
    (even n m. n = arithmetic.BIT2 0 * m)
    (odd n m. n = suc (arithmetic.BIT2 0 * m))

n v.
    bitstring.fixwidth n v =
    bool.LET
      (λl.
         if l < n then bitstring.extend (arithmetic.- n l) v
         else list.DROP (arithmetic.- l n) v) (length v)

n.
    even 0 even (arithmetic.BIT2 n) ¬even (bit1 n) ¬odd 0
    ¬odd (arithmetic.BIT2 n) odd (bit1 n)

l1 l2.
    list.ALL_DISTINCT (l1 @ l2)
    list.ALL_DISTINCT l1 list.ALL_DISTINCT l2
    e. bool.IN e (list.LIST_TO_SET l1) ¬bool.IN e (list.LIST_TO_SET l2)

h l.
    words.word_bits h l =
    λw.
      fcp.FCP
        (λi.
           i + l min h (arithmetic.- (fcp.dimindex bool.the_value) 1)
           fcp.fcp_index w (i + l))

h l.
    words.word_slice h l =
    λw.
      fcp.FCP
        (λi.
           l i
           i min h (arithmetic.- (fcp.dimindex bool.the_value) 1)
           fcp.fcp_index w i)

bool.TYPE_DEFINITION =
  λP rep.
    (x' x''. rep x' = rep x'' x' = x'') x. P x x'. x = rep x'

(v f. list.list_CASE [] v f = v)
  a0 a1 v f. list.list_CASE (a0 :: a1) v f = f a0 a1

t. (( t) t) ((t ) t) (( t) ¬t) ((t ) ¬t)

P.
    (rep. bool.TYPE_DEFINITION P rep)
    rep abs. (a. abs (rep a) = a) r. P r rep (abs r) = r

(f. list.list_size f [] = 0)
  f a0 a1. list.list_size f (a0 :: a1) = 1 + (f a0 + list.list_size f a1)

f a b c d.
    ¬(a = b)
    combin.UPDATE a c (combin.UPDATE b d f) =
    combin.UPDATE b d (combin.UPDATE a c f)

(f l. list.GENLIST_AUX f 0 l = l)
  f n l. list.GENLIST_AUX f (suc n) l = list.GENLIST_AUX f n (f n :: l)

x p c1 m c2 q.
    prog.SPEC x p c1 m prog.SPEC x m c2 q
    prog.SPEC x p (pred_set.UNION c1 c2) q

(x. bool.IN x (list.LIST_TO_SET []) )
  x h t.
    bool.IN x (list.LIST_TO_SET (h :: t))
    x = h bool.IN x (list.LIST_TO_SET t)

f g M N. M = N (x. x = N f x = g x) bool.LET f M = bool.LET g N

numeral.texp_help 0 acc = arithmetic.BIT2 acc
  numeral.texp_help (bit1 n) acc =
  numeral.texp_help (prim_rec.PRE (bit1 n)) (bit1 acc)
  numeral.texp_help (arithmetic.BIT2 n) acc =
  numeral.texp_help (bit1 n) (bit1 acc)

(P. filter P [] = [])
  P h t. filter P (h :: t) = if P h then h :: filter P t else filter P t

numeral.exactlog 0 = 0 (n. numeral.exactlog (bit1 n) = 0)
  n.
    numeral.exactlog (arithmetic.BIT2 n) =
    bool.LET (λx. if x = 0 then 0 else bit1 x) (numeral.onecount n 0)

(x. numeral.onecount 0 x = x)
  (n x. numeral.onecount (bit1 n) x = numeral.onecount n (suc x))
  n x. numeral.onecount (arithmetic.BIT2 n) x = 0

list.ZIP ([], []) = []
  x1 l1 x2 l2.
    list.ZIP (x1 :: l1, x2 :: l2) = (x1, x2) :: list.ZIP (l1, l2)

arithmetic.BIT2 0 0 = 1
  arithmetic.BIT2 0 bit1 n =
  numeral.texp_help (prim_rec.PRE (bit1 n)) 0
  arithmetic.BIT2 0 arithmetic.BIT2 n = numeral.texp_help (bit1 n) 0

t. ( t t) (t t) ( t ) (t ) (t t t)

t. ( t ) (t ) ( t t) (t t) (t t t)

h l a.
    words.word_bits h l a =
    if l h then
      words.word_and (words.word_lsr a l)
        (words.word_sub
           (words.word_lsl (words.n2w (arithmetic.BIT2 0))
              (arithmetic.- h l)) (words.n2w 1))
    else words.n2w 0

assert model pre code post.
    triple.TRIPLE (assert, model) pre code post
    fst post
    fst pre prog.SPEC model (assert (snd pre)) code (assert (snd post))

n i.
    words.BIT_SET i n =
    if n = 0 then pred_set.EMPTY
    else if odd n then
      pred_set.INSERT i (words.BIT_SET (suc i) (n div arithmetic.BIT2 0))
    else words.BIT_SET (suc i) (n div arithmetic.BIT2 0)

0 + m = m m + 0 = m suc m + n = suc (m + n) m + suc n = suc (m + n)

(n. list.DROP n [] = [])
  n x xs.
    list.DROP n (x :: xs) =
    if n = 0 then x :: xs else list.DROP (arithmetic.- n 1) xs

(m n.
     words.word_mul (words.n2w m) (words.word_2comp (words.n2w n)) =
     words.word_2comp (words.n2w (m * n)))
  m n.
    words.word_mul (words.word_2comp (words.n2w m))
      (words.word_2comp (words.n2w n)) = words.n2w (m * n)

t. ( t t) (t ) ( t ) (t t ) (t ¬t)

h l a.
    words.word_extract h l a =
    words.w2w
      (if l h then
         words.word_and (words.word_lsr a l)
           (words.word_sub
              (words.word_lsl (words.n2w (arithmetic.BIT2 0))
                 (arithmetic.- h l)) (words.n2w 1))
       else words.n2w 0)

(l1 l2 l3. l1 @ l2 = l1 @ l3 l2 = l3)
  l1 l2 l3. l2 @ l1 = l3 @ l1 l2 = l3

(l1 l2. [] = l1 @ l2 l1 = [] l2 = [])
  l1 l2. l1 @ l2 = [] l1 = [] l2 = []

a.
    words.word_and words.word_T a = a words.word_and a words.word_T = a
    words.word_and (words.n2w 0) a = words.n2w 0
    words.word_and a (words.n2w 0) = words.n2w 0 words.word_and a a = a

P Q x x' y y'.
    (P Q) (Q x = x') (¬Q y = y')
    (if P then x else y) = if Q then x' else y'

(p q r) (p q r) (p ¬r ¬q) (q ¬r ¬p) (r ¬q ¬p)

(x y c. blast.BCARRY 0 x y c c)
  i x y c.
    blast.BCARRY (suc i) x y c
    blast.bcarry (x i) (y i) (blast.BCARRY i x y c)

r r'.
    r < arithmetic.BIT2 127 r' < arithmetic.BIT2 127
    (string.CHR r = string.CHR r' r = r')

words.dimword bool.the_value = arithmetic.BIT2 2147483647

(a. words.word_lsl a 0 = a) (a. words.word_asr a 0 = a)
  (a. words.word_lsr a 0 = a) (a. words.word_rol a 0 = a)
  a. words.word_ror a 0 = a

(R x y. arithmetic.NRC R 0 x y x = y)
  R n x y.
    arithmetic.NRC R (suc n) x y z. R x z arithmetic.NRC R n z y

f g.
    (n. g (suc n) = f n (suc n))
    (n. g (bit1 n) = f (arithmetic.- (bit1 n) 1) (bit1 n))
    n. g (arithmetic.BIT2 n) = f (bit1 n) (arithmetic.BIT2 n)

n m.
    numeral.internal_mult 0 n = 0 numeral.internal_mult n 0 = 0
    numeral.internal_mult (bit1 n) m =
    numeral.iZ (numeral.iDUB (numeral.internal_mult n m) + m)
    numeral.internal_mult (arithmetic.BIT2 n) m =
    numeral.iDUB (numeral.iZ (numeral.internal_mult n m + m))

(m n.
     words.word_add (words.word_2comp (words.n2w m))
       (words.word_2comp (words.n2w n)) =
     words.word_2comp (words.n2w (m + n)))
  m n.
    words.word_add (words.n2w m) (words.word_2comp (words.n2w n)) =
    if n m then words.n2w (arithmetic.- m n)
    else words.word_2comp (words.n2w (arithmetic.- n m))

prim_rec.PRE 0 = 0 prim_rec.PRE 1 = 0
  (n.
     prim_rec.PRE (bit1 (bit1 n)) =
     arithmetic.BIT2 (prim_rec.PRE (bit1 n)))
  (n.
     prim_rec.PRE (bit1 (arithmetic.BIT2 n)) = arithmetic.BIT2 (bit1 n))
  n. prim_rec.PRE (arithmetic.BIT2 n) = bit1 n

P Q.
    (Q (x. P x) x. Q P x) ((x. P x) Q x. P x Q)
    (Q (x. P x) x. Q P x)

P Q.
    ((x. P x) Q x. P x Q) ((x. P x) Q x. P x Q)
    (Q (x. P x) x. Q P x)

(bit1 x * y = z y = z div bit1 x z mod bit1 x = 0)
  (arithmetic.BIT2 x * y = z
   y = z div arithmetic.BIT2 x z mod arithmetic.BIT2 x = 0)

(p if q then r else s)
  (p q ¬s) (p ¬r ¬q) (p ¬r ¬s) (¬q r ¬p)
  (q s ¬p)

(e n. list.LUPDATE e n [] = [])
  (e x l. list.LUPDATE e 0 (x :: l) = e :: l)
  e n x l. list.LUPDATE e (suc n) (x :: l) = x :: list.LUPDATE e n l

m n.
    0 * m = 0 m * 0 = 0 1 * m = m m * 1 = m suc m * n = m * n + n
    m * suc n = m + m * n

x y carry_in.
    words.add_with_carry (x, y, carry_in) =
    bool.LET
      (λunsigned_sum.
         bool.LET
           (λresult.
              bool.LET
                (bool.LET
                   (λcarry_out overflow. (result, carry_out, overflow))
                   (¬(words.w2n result = unsigned_sum)))
                ((words.word_msb x words.word_msb y)
                 ¬(words.word_msb x words.word_msb result)))
           (words.n2w unsigned_sum))
      (words.w2n x + words.w2n y + if carry_in then 1 else 0)

(f l. list.GENLIST_AUX f 0 l = l)
  (f n l.
     list.GENLIST_AUX f (bit1 n) l =
     list.GENLIST_AUX f (arithmetic.- (bit1 n) 1)
       (f (arithmetic.- (bit1 n) 1) :: l))
  f n l.
    list.GENLIST_AUX f (arithmetic.BIT2 n) l =
    list.GENLIST_AUX f (bit1 n) (f (bit1 n) :: l)

(l. list.DROP 0 l = l) (n. list.DROP (bit1 n) [] = [])
  (n. list.DROP (arithmetic.BIT2 n) [] = [])
  (n h t.
     list.DROP (bit1 n) (h :: t) = list.DROP (arithmetic.- (bit1 n) 1) t)
  n h t. list.DROP (arithmetic.BIT2 n) (h :: t) = list.DROP (bit1 n) t

v w.
    words.word_mul (words.n2w 0) v = words.n2w 0
    words.word_mul v (words.n2w 0) = words.n2w 0
    words.word_mul (words.n2w 1) v = v
    words.word_mul v (words.n2w 1) = v
    words.word_mul (words.word_add v (words.n2w 1)) w =
    words.word_add (words.word_mul v w) w
    words.word_mul v (words.word_add w (words.n2w 1)) =
    words.word_add v (words.word_mul v w)

n m.
    (0 n ) (bit1 n 0 ) (arithmetic.BIT2 n 0 )
    (bit1 n bit1 m n m) (bit1 n arithmetic.BIT2 m n m)
    (arithmetic.BIT2 n bit1 m ¬(m n))
    (arithmetic.BIT2 n arithmetic.BIT2 m n m)

n m.
    (0 < bit1 n ) (0 < arithmetic.BIT2 n ) (n < 0 )
    (bit1 n < bit1 m n < m)
    (arithmetic.BIT2 n < arithmetic.BIT2 m n < m)
    (bit1 n < arithmetic.BIT2 m ¬(m < n))
    (arithmetic.BIT2 n < bit1 m n < m)

(l. list.TAKE 0 l = []) (n. list.TAKE (bit1 n) [] = [])
  (n. list.TAKE (arithmetic.BIT2 n) [] = [])
  (n h t.
     list.TAKE (bit1 n) (h :: t) =
     h :: list.TAKE (arithmetic.- (bit1 n) 1) t)
  n h t.
    list.TAKE (arithmetic.BIT2 n) (h :: t) = h :: list.TAKE (bit1 n) t

n m.
    (0 = bit1 n ) (bit1 n = 0 ) (0 = arithmetic.BIT2 n )
    (arithmetic.BIT2 n = 0 ) (bit1 n = arithmetic.BIT2 m )
    (arithmetic.BIT2 n = bit1 m ) (bit1 n = bit1 m n = m)
    (arithmetic.BIT2 n = arithmetic.BIT2 m n = m)

words.dimword bool.the_value = arithmetic.BIT2 9223372036854775807

a.
    (words.word_and a (words.n2w 3) = words.n2w 0 address.ALIGNED a)
    (words.word_and (words.n2w 3) a = words.n2w 0 address.ALIGNED a)
    (words.n2w 0 = words.word_and a (words.n2w 3) address.ALIGNED a)
    (words.n2w 0 = words.word_and (words.n2w 3) a address.ALIGNED a)
    (words.w2n a mod arithmetic.BIT2 1 = 0 address.ALIGNED a)
    (0 = words.w2n a mod arithmetic.BIT2 1 address.ALIGNED a)

0 * n = 0 n * 0 = 0
  bit1 x * bit1 y = numeral.internal_mult (bit1 x) (bit1 y)
  bit1 x * arithmetic.BIT2 y =
  bool.LET
    (λn.
       if odd n then
         numeral.texp_help (arithmetic.DIV2 n) (prim_rec.PRE (bit1 x))
       else numeral.internal_mult (bit1 x) (arithmetic.BIT2 y))
    (numeral.exactlog (arithmetic.BIT2 y))
  arithmetic.BIT2 x * bit1 y =
  bool.LET
    (λm.
       if odd m then
         numeral.texp_help (arithmetic.DIV2 m) (prim_rec.PRE (bit1 y))
       else numeral.internal_mult (arithmetic.BIT2 x) (bit1 y))
    (numeral.exactlog (arithmetic.BIT2 x))
  arithmetic.BIT2 x * arithmetic.BIT2 y =
  bool.LET
    (λm.
       bool.LET
         (λn.
            if odd m then
              numeral.texp_help (arithmetic.DIV2 m)
                (prim_rec.PRE (arithmetic.BIT2 y))
            else if odd n then
              numeral.texp_help (arithmetic.DIV2 n)
                (prim_rec.PRE (arithmetic.BIT2 x))
            else
              numeral.internal_mult (arithmetic.BIT2 x)
                (arithmetic.BIT2 y))
         (numeral.exactlog (arithmetic.BIT2 y)))
    (numeral.exactlog (arithmetic.BIT2 x))

b n m.
    numeral.iSUB b 0 x = 0 numeral.iSUB n 0 = n
    numeral.iSUB (bit1 n) 0 = numeral.iDUB n
    numeral.iSUB (bit1 n) (bit1 m) = numeral.iDUB (numeral.iSUB n m)
    numeral.iSUB (bit1 n) (bit1 m) = bit1 (numeral.iSUB n m)
    numeral.iSUB (bit1 n) (arithmetic.BIT2 m) =
    bit1 (numeral.iSUB n m)
    numeral.iSUB (bit1 n) (arithmetic.BIT2 m) =
    numeral.iDUB (numeral.iSUB n m)
    numeral.iSUB (arithmetic.BIT2 n) 0 = bit1 n
    numeral.iSUB (arithmetic.BIT2 n) (bit1 m) =
    bit1 (numeral.iSUB n m)
    numeral.iSUB (arithmetic.BIT2 n) (bit1 m) =
    numeral.iDUB (numeral.iSUB n m)
    numeral.iSUB (arithmetic.BIT2 n) (arithmetic.BIT2 m) =
    numeral.iDUB (numeral.iSUB n m)
    numeral.iSUB (arithmetic.BIT2 n) (arithmetic.BIT2 m) =
    bit1 (numeral.iSUB n m)

p q t c c'.
    set_sep.STAR (set_sep.SEP_EXISTS (λv. p v)) q =
    set_sep.SEP_EXISTS (λv. set_sep.STAR (p v) q)
    set_sep.STAR q (set_sep.SEP_EXISTS (λv. p v)) =
    set_sep.SEP_EXISTS (λv. set_sep.STAR q (p v))
    set_sep.SEP_DISJ (set_sep.SEP_EXISTS (λv. p v)) q =
    set_sep.SEP_EXISTS (λv. set_sep.SEP_DISJ (p v) q)
    set_sep.SEP_DISJ q (set_sep.SEP_EXISTS (λv. p v)) =
    set_sep.SEP_EXISTS (λv. set_sep.SEP_DISJ q (p v))
    set_sep.SEP_EXISTS (λv. q) = q
    set_sep.SEP_EXISTS (λv. set_sep.STAR (p v) (set_sep.cond (v = x))) =
    p x set_sep.SEP_DISJ q set_sep.SEP_F = q
    set_sep.SEP_DISJ set_sep.SEP_F q = q
    set_sep.STAR set_sep.SEP_F q = set_sep.SEP_F
    set_sep.STAR q set_sep.SEP_F = set_sep.SEP_F
    set_sep.SEP_DISJ r r = r
    set_sep.STAR q (set_sep.SEP_DISJ r t) =
    set_sep.SEP_DISJ (set_sep.STAR q r) (set_sep.STAR q t)
    set_sep.STAR (set_sep.SEP_DISJ r t) q =
    set_sep.SEP_DISJ (set_sep.STAR r q) (set_sep.STAR t q)
    set_sep.SEP_DISJ (set_sep.cond c) (set_sep.cond c') =
    set_sep.cond (c c')
    set_sep.STAR (set_sep.cond c) (set_sep.cond c') =
    set_sep.cond (c c') set_sep.cond = set_sep.emp
    set_sep.cond = set_sep.SEP_F set_sep.STAR set_sep.emp q = q
    set_sep.STAR q set_sep.emp = q

n m.
    numeral.iZ (0 + n) = n numeral.iZ (n + 0) = n
    numeral.iZ (bit1 n + bit1 m) = arithmetic.BIT2 (numeral.iZ (n + m))
    numeral.iZ (bit1 n + arithmetic.BIT2 m) = bit1 (suc (n + m))
    numeral.iZ (arithmetic.BIT2 n + bit1 m) = bit1 (suc (n + m))
    numeral.iZ (arithmetic.BIT2 n + arithmetic.BIT2 m) =
    arithmetic.BIT2 (suc (n + m)) suc (0 + n) = suc n
    suc (n + 0) = suc n suc (bit1 n + bit1 m) = bit1 (suc (n + m))
    suc (bit1 n + arithmetic.BIT2 m) = arithmetic.BIT2 (suc (n + m))
    suc (arithmetic.BIT2 n + bit1 m) = arithmetic.BIT2 (suc (n + m))
    suc (arithmetic.BIT2 n + arithmetic.BIT2 m) =
    bit1 (numeral.iiSUC (n + m))
    numeral.iiSUC (0 + n) = numeral.iiSUC n
    numeral.iiSUC (n + 0) = numeral.iiSUC n
    numeral.iiSUC (bit1 n + bit1 m) = arithmetic.BIT2 (suc (n + m))
    numeral.iiSUC (bit1 n + arithmetic.BIT2 m) =
    bit1 (numeral.iiSUC (n + m))
    numeral.iiSUC (arithmetic.BIT2 n + bit1 m) =
    bit1 (numeral.iiSUC (n + m))
    numeral.iiSUC (arithmetic.BIT2 n + arithmetic.BIT2 m) =
    arithmetic.BIT2 (numeral.iiSUC (n + m))

a x.
    (address.ALIGNED (words.n2w 0) )
    (address.ALIGNED (words.n2w (arithmetic.BIT2 (bit1 x))) )
    (address.ALIGNED (words.n2w (bit1 (arithmetic.BIT2 x))) )
    (address.ALIGNED (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 x)))
     ) (address.ALIGNED (words.n2w (bit1 (bit1 (bit1 x)))) )
    (address.ALIGNED (words.n2w (bit1 (bit1 (arithmetic.BIT2 x)))) )
    (address.ALIGNED (words.word_add a (words.n2w 0))
     address.ALIGNED a)
    (address.ALIGNED
       (words.word_add a (words.n2w (arithmetic.BIT2 (bit1 x))))
     address.ALIGNED a)
    (address.ALIGNED
       (words.word_add a (words.n2w (bit1 (arithmetic.BIT2 x))))
     address.ALIGNED (words.word_add a (words.n2w 1)))
    (address.ALIGNED
       (words.word_add a
          (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 x))))
     address.ALIGNED (words.word_add a (words.n2w (arithmetic.BIT2 0))))
    (address.ALIGNED
       (words.word_add a (words.n2w (bit1 (bit1 (bit1 x)))))
     address.ALIGNED (words.word_add a (words.n2w 3)))
    (address.ALIGNED
       (words.word_add a (words.n2w (bit1 (bit1 (arithmetic.BIT2 x)))))
     address.ALIGNED (words.word_add a (words.n2w 3)))
    (address.ALIGNED (words.word_sub a (words.n2w 0))
     address.ALIGNED a)
    (address.ALIGNED
       (words.word_sub a (words.n2w (arithmetic.BIT2 (bit1 x))))
     address.ALIGNED a)
    (address.ALIGNED
       (words.word_sub a (words.n2w (bit1 (arithmetic.BIT2 x))))
     address.ALIGNED (words.word_sub a (words.n2w 1)))
    (address.ALIGNED
       (words.word_sub a
          (words.n2w (arithmetic.BIT2 (arithmetic.BIT2 x))))
     address.ALIGNED (words.word_sub a (words.n2w (arithmetic.BIT2 0))))
    (address.ALIGNED
       (words.word_sub a (words.n2w (bit1 (bit1 (bit1 x)))))
     address.ALIGNED (words.word_sub a (words.n2w 3)))
    (address.ALIGNED
       (words.word_sub a (words.n2w (bit1 (bit1 (arithmetic.BIT2 x)))))
     address.ALIGNED (words.word_sub a (words.n2w 3)))

(n. 0 + n = n) (n. n + 0 = n) (n m. n + m = numeral.iZ (n + m))
  (n. 0 * n = 0) (n. n * 0 = 0) (n m. n * m = n * m)
  (n. arithmetic.- 0 n = 0) (n. arithmetic.- n 0 = n)
  (n m. arithmetic.- n m = arithmetic.- n m) (n. 0 bit1 n = 0)
  (n. 0 arithmetic.BIT2 n = 0) (n. n 0 = 1)
  (n m. n m = n m) suc 0 = 1 (n. suc n = suc n)
  prim_rec.PRE 0 = 0 (n. prim_rec.PRE n = prim_rec.PRE n)
  (n. n = 0 n = 0) (n. 0 = n n = 0) (n m. n = m n = m)
  (n. n < 0 ) (n. 0 < n 0 < n) (n m. n < m n < m)
  (n. 0 > n ) (n. n > 0 0 < n) (n m. n > m m < n)
  (n. 0 n ) (n. n 0 n 0) (n m. n m n m)
  (n. n 0 ) (n. 0 n n = 0) (n m. n m m n)
  (n. odd n odd n) (n. even n even n) ¬odd 0 even 0