From Stdlib Require Import Strings.String.
From Stdlib Require Import String Ascii.
From Stdlib Require Arith.
From stdpp Require Import base.
From stdpp Require Import fin_maps.
From stdpp Require Import gmap.
From stdpp Require Import base gmultiset.
From Stdlib Require Classical.
From Stdlib Require Import ZArith.
From stdpp.bitvector Require Import definitions tactics.
From Stdlib Require Import Sorting.Sorted.
From Stdlib Require Import Reals.Rbasic_fun.
From Stdlib Require Import Reals.Abstract.ConstructiveAbs.
From Stdlib Require Import Reals.Rdefinitions.
From stdpp Require Import list_relations.
From stdpp Require Import list_numbers.
From stdpp Require Import functions.
From Stdlib Require Import ClassicalEpsilon.
From stdpp Require Import base decidable.
From Stdlib Require Import ZArith.Zeuclid.
From Stdlib Require Import ZArith.Znumtheory.
From stdpp Require Import propset.
From Stdlib Require Import Reals.
Require Import Why3.Base.
Require Import Why3.why3.Ref.Ref.
Require Import Why3.map.Const.
Require Import Why3.map.MapEq.
Require Import Why3.mach.int.Unsigned.
Require Import Why3.mach.c.C.
Require Import multiprecision.lemmas.Lemmas.
Require Import multiprecision.types.Config.
Require Import multiprecision.types.Types.
Require Import multiprecision.types.Int32Eq.
Require Import multiprecision.types.UInt64Eq.
Require Import multiprecision.util.Util.
Require Import multiprecision.ptralias.Alias.
Require Import multiprecision.util.UtilOld.
Require Import multiprecision.compare.Compare.
Require Import multiprecision.div.Div.
Require Import multiprecision.add.Add.
Require Import multiprecision.add.AddOld.
Require Import multiprecision.sub.SubOld.
Require Import multiprecision.logical.LogicalUtil.
Require Import multiprecision.logical.LogicalOld.
Require Import multiprecision.mul.Mul.
Require Import multiprecision.mpz.Z.
Require Import multiprecision.mpz.Zutil.
Open Scope Z_scope.
Lemma wmpz_tdiv_qr'vc (mpz : mpz_memo) (num : mpz_ptr) (den : mpz_ptr) (quot : mpz_ptr) (rem : mpz_ptr) (fact0 : 0%Z < alloc mpz num) (fact1 : 0%Z < alloc mpz den) (fact2 : 0%Z < alloc mpz quot) (fact3 : 0%Z < alloc mpz rem) (fact4 : readers mpz num = 0%Z) (fact5 : readers mpz den = 0%Z) (fact6 : readers mpz quot = 0%Z) (fact7 : readers mpz rem = 0%Z) (fact8 : ¬ quot = rem) (fact9 : ¬ value_of den mpz = 0%Z) (fact10 : abs_size mpz num ≤ 2147483647%Z - 1%Z) : - 2%Z < readers mpz num ∧ (∀(ns : bv 32%N), bv_signed ns = sgn mpz num * abs_size mpz num -> - 2%Z < readers mpz den ∧ (∀(ds : bv 32%N), bv_signed ds = sgn mpz den * abs_size mpz den -> - 2147483648%Z < bv_signed ns ∧ (∀(nl : bv 32%N), bv_signed nl = Z.abs (bv_signed ns) -> - 2147483648%Z < bv_signed ds ∧ (∀(o1 : bv 32%N), bv_signed o1 = Z.abs (bv_signed ds) -> int'32_in_bounds (bv_signed nl - bv_signed o1) ∧ (∀(o2 : bv 32%N), bv_signed o2 = bv_signed nl - bv_signed o1 -> int'32_in_bounds (bv_signed o2 + 1%Z) ∧ (∀(o3 : bv 32%N), bv_signed o3 = bv_signed o2 + 1%Z -> (if decide (bv_signed o3 ≤ 0%Z) then mpz_eq num rem = (num = rem) -> (if decide (¬ mpz_eq num rem) then 0%Z ≤ readers mpz num ∧ (∀(mpz1 : mpz_memo), abs_value_of mpz1 = abs_value_of mpz ∧ alloc mpz1 = alloc mpz ∧ abs_size mpz1 = abs_size mpz ∧ sgn mpz1 = sgn mpz ∧ zones mpz1 = zones mpz -> (∀(np : C.ptr (bv 64%N)), readers mpz1 num = readers mpz num + 1%Z ∧ (∀(y : mpz_ptr), ¬ num = y -> readers mpz1 y = readers mpz y) ∧ value np (abs_size mpz1 num) = abs_value_of mpz1 num ∧ plength np = alloc mpz1 num ∧ offset np = 0%Z ∧ min np = 0%Z ∧ C.max np = plength np ∧ zone1 np = zones mpz1 num -> (readers mpz1 rem = 0%Z ∧ 1%Z ≤ alloc mpz1 rem) ∧ (∀(mpz2 : mpz_memo), sgn mpz2 = sgn mpz1 -> (∀(rp : C.ptr (bv 64%N)), (∀(y : mpz_ptr), ¬ y = rem -> mpz_unchanged y mpz2 mpz1) ∧ readers mpz2 rem = - 1%Z ∧ abs_value_of mpz2 rem = value rp (abs_size mpz2 rem) ∧ zones mpz2 rem = zone1 rp ∧ offset rp = 0%Z ∧ plength rp = alloc mpz2 rem ∧ min rp = 0%Z ∧ C.max rp = plength rp ∧ writable rp = true ∧ abs_size mpz2 rem = abs_size mpz1 rem ∧ value rp (abs_size mpz1 rem) = abs_value_of mpz1 rem ∧ (if decide (alloc mpz1 rem < bv_signed o1) then alloc mpz2 rem = bv_signed o1 else alloc mpz2 rem = alloc mpz1 rem) -> (valid np (bv_signed nl) ∧ valid rp (bv_signed nl) ∧ writable rp = true) ∧ (∀(rp1 : C.ptr (bv 64%N)) (np1 : C.ptr (bv 64%N)), offset rp1 = offset rp ∧ writable rp1 = writable rp ∧ zone1 rp1 = zone1 rp -> offset np1 = offset np ∧ writable np1 = writable np ∧ zone1 np1 = zone1 np -> map_eq_sub_shift (pelts rp1) (pelts np) (offset rp1) (offset np) (bv_signed nl) ∧ (∀(j : Z), j < offset rp1 ∨ offset rp1 + bv_signed nl ≤ j -> pelts rp1 j = pelts rp j) ∧ (∀(j : Z), pelts np1 j = pelts np j) ∧ (min np1 = min np ∧ C.max np1 = C.max np ∧ plength np1 = plength np) ∧ min rp1 = min rp ∧ C.max rp1 = C.max rp ∧ plength rp1 = plength rp -> (zones mpz2 rem = zone1 rp1 ∧ readers mpz2 rem = - 1%Z ∧ offset rp1 = 0%Z ∧ min rp1 = 0%Z ∧ C.max rp1 = plength rp1 ∧ Z.abs (bv_signed ns) ≤ plength rp1 ∧ plength rp1 = alloc mpz2 rem ∧ (¬ bv_signed ns = 0%Z -> Z.pow (18446744073709551615%Z + 1%Z) (Z.abs (bv_signed ns) - 1%Z) ≤ value rp1 (Z.abs (bv_signed ns)))) ∧ (∀(mpz3 : mpz_memo), alloc mpz3 = alloc mpz2 ∧ readers mpz3 = readers mpz2 ∧ zones mpz3 = zones mpz2 -> (∀(y : mpz_ptr), ¬ y = rem -> mpz_unchanged y mpz3 mpz2) ∧ (sgn mpz3 rem = 1%Z) = (0%Z ≤ bv_signed ns) ∧ (sgn mpz3 rem = - 1%Z) = (bv_signed ns < 0%Z) ∧ abs_size mpz3 rem = Z.abs (bv_signed ns) ∧ abs_value_of mpz3 rem = value rp1 (Z.abs (bv_signed ns)) -> mpz_unchanged num mpz3 mpz1 ∧ (readers mpz3 num = readers mpz1 num ∧ (- 2%Z < readers mpz3 num -> abs_value_of mpz3 num = abs_value_of mpz1 num ∧ alloc mpz3 num = alloc mpz1 num ∧ abs_size mpz3 num = abs_size mpz1 num ∧ sgn mpz3 num = sgn mpz1 num ∧ readers mpz3 num = readers mpz1 num ∧ zones mpz3 num = zones mpz1 num) -> (zones mpz3 num = zone1 np1 ∧ 1%Z ≤ readers mpz3 num ∧ min np1 = 0%Z ∧ C.max np1 = plength np1) ∧ (∀(mpz4 : mpz_memo), abs_value_of mpz4 = abs_value_of mpz3 ∧ alloc mpz4 = alloc mpz3 ∧ abs_size mpz4 = abs_size mpz3 ∧ sgn mpz4 = sgn mpz3 ∧ zones mpz4 = zones mpz3 -> readers mpz4 num = readers mpz3 num - 1%Z ∧ (∀(y : mpz_ptr), ¬ y = num -> readers mpz4 y = readers mpz3 y) -> mpz_unchanged num mpz4 mpz ∧ (readers mpz4 num = readers mpz num ∧ (- 2%Z < readers mpz4 num -> abs_value_of mpz4 num = abs_value_of mpz num ∧ alloc mpz4 num = alloc mpz num ∧ abs_size mpz4 num = abs_size mpz num ∧ sgn mpz4 num = sgn mpz num ∧ readers mpz4 num = readers mpz num ∧ zones mpz4 num = zones mpz num) -> (zones mpz4 rem = zone1 rp1 ∧ readers mpz4 rem = - 1%Z ∧ min rp1 = 0%Z ∧ C.max rp1 = plength rp1 ∧ abs_value_of mpz4 rem = value rp1 (abs_size mpz4 rem)) ∧ (∀(mpz5 : mpz_memo), abs_value_of mpz5 = abs_value_of mpz4 ∧ alloc mpz5 = alloc mpz4 ∧ abs_size mpz5 = abs_size mpz4 ∧ sgn mpz5 = sgn mpz4 ∧ zones mpz5 = zones mpz4 -> readers mpz5 rem = 0%Z ∧ (∀(y : mpz_ptr), ¬ y = rem -> readers mpz5 y = readers mpz4 y) -> mpz_eq num quot = (num = quot) -> (¬ mpz_eq num quot -> mpz_unchanged quot mpz5 mpz) ∧ ((¬ mpz_eq num quot -> readers mpz5 quot = readers mpz quot ∧ (- 2%Z < readers mpz5 quot -> abs_value_of mpz5 quot = abs_value_of mpz quot ∧ alloc mpz5 quot = alloc mpz quot ∧ abs_size mpz5 quot = abs_size mpz quot ∧ sgn mpz5 quot = sgn mpz quot ∧ readers mpz5 quot = readers mpz quot ∧ zones mpz5 quot = zones mpz quot)) -> (- 1%Z ≤ readers mpz5 quot ∧ readers mpz5 quot ≤ 0%Z) ∧ (∀(mpz6 : mpz_memo), alloc mpz6 = alloc mpz5 ∧ sgn mpz6 = sgn mpz5 ∧ readers mpz6 = readers mpz5 ∧ zones mpz6 = zones mpz5 -> (∀(y : mpz_ptr), ¬ y = quot -> mpz_unchanged y mpz6 mpz5) ∧ abs_size mpz6 quot = 0%Z ∧ abs_value_of mpz6 quot = 0%Z -> mpz_unchanged rem mpz6 mpz5 ∧ (readers mpz6 rem = readers mpz5 rem ∧ (- 2%Z < readers mpz6 rem -> abs_value_of mpz6 rem = abs_value_of mpz5 rem ∧ alloc mpz6 rem = alloc mpz5 rem ∧ abs_size mpz6 rem = abs_size mpz5 rem ∧ sgn mpz6 rem = sgn mpz5 rem ∧ readers mpz6 rem = readers mpz5 rem ∧ zones mpz6 rem = zones mpz5 rem) -> value_of quot mpz6 * value_of den mpz + value_of rem mpz6 = value_of num mpz ∧ (0%Z ≤ abs_value_of mpz6 rem ∧ abs_value_of mpz6 rem < abs_value_of mpz den) ∧ (∀(x : mpz_ptr), ¬ x = quot -> ¬ x = rem -> mpz_unchanged x mpz6 mpz) ∧ readers mpz6 num = 0%Z ∧ readers mpz6 den = 0%Z ∧ readers mpz6 quot = 0%Z ∧ readers mpz6 rem = 0%Z))))))))))))) else (- 1%Z ≤ readers mpz quot ∧ readers mpz quot ≤ 0%Z) ∧ (∀(mpz1 : mpz_memo), alloc mpz1 = alloc mpz ∧ sgn mpz1 = sgn mpz ∧ readers mpz1 = readers mpz ∧ zones mpz1 = zones mpz -> (∀(y : mpz_ptr), ¬ y = quot -> mpz_unchanged y mpz1 mpz) ∧ abs_size mpz1 quot = 0%Z ∧ abs_value_of mpz1 quot = 0%Z -> mpz_unchanged rem mpz1 mpz ∧ (readers mpz1 rem = readers mpz rem ∧ (- 2%Z < readers mpz1 rem -> abs_value_of mpz1 rem = abs_value_of mpz rem ∧ alloc mpz1 rem = alloc mpz rem ∧ abs_size mpz1 rem = abs_size mpz rem ∧ sgn mpz1 rem = sgn mpz rem ∧ readers mpz1 rem = readers mpz rem ∧ zones mpz1 rem = zones mpz rem) -> value_of quot mpz1 * value_of den mpz + value_of rem mpz1 = value_of num mpz ∧ (0%Z ≤ abs_value_of mpz1 rem ∧ abs_value_of mpz1 rem < abs_value_of mpz den) ∧ (∀(x : mpz_ptr), ¬ x = quot -> ¬ x = rem -> mpz_unchanged x mpz1 mpz) ∧ readers mpz1 num = 0%Z ∧ readers mpz1 den = 0%Z ∧ readers mpz1 quot = 0%Z ∧ readers mpz1 rem = 0%Z))) else mpz_eq den rem = (den = rem) -> (∀(o4 : bool), (if decide (mpz_eq den rem) then o4 = true else o4 = (if decide (mpz_eq den quot) then true else false) ∧ (o4 = true) = (den = quot)) -> (if decide (o4 = true) then 0%Z ≤ readers mpz den ∧ (∀(mpz1 : mpz_memo), abs_value_of mpz1 = abs_value_of mpz ∧ alloc mpz1 = alloc mpz ∧ abs_size mpz1 = abs_size mpz ∧ sgn mpz1 = sgn mpz ∧ zones mpz1 = zones mpz -> (∀(dp : C.ptr (bv 64%N)), readers mpz1 den = readers mpz den + 1%Z ∧ (∀(y : mpz_ptr), ¬ den = y -> readers mpz1 y = readers mpz y) ∧ value dp (abs_size mpz1 den) = abs_value_of mpz1 den ∧ plength dp = alloc mpz1 den ∧ offset dp = 0%Z ∧ min dp = 0%Z ∧ C.max dp = plength dp ∧ zone1 dp = zones mpz1 den -> (∀(mpz2 : mpz_memo) (memd : mpz_mem), Zutil.ok memd = true ∧ readers mpz2 (Zutil.ptr memd) = 0%Z ∧ alloc mpz2 (Zutil.ptr memd) = 0%Z ∧ abs_size mpz2 (Zutil.ptr memd) = 0%Z ∧ readers mpz1 (Zutil.ptr memd) = - 2%Z ∧ (∀(x : mpz_ptr), ¬ x = Zutil.ptr memd -> mpz_unchanged x mpz2 mpz1) -> 0%Z ≤ bv_signed o1 ∧ (∀(o5 : bv 32%N), bv_unsigned o5 = bv_signed o1 -> 0%Z ≤ bv_unsigned o5 ∧ (∀(tdp : C.ptr (bv 64%N)), plength tdp = bv_unsigned o5 ∧ offset tdp = 0%Z ∧ min tdp = 0%Z ∧ C.max tdp = bv_unsigned o5 ∧ writable tdp = true -> (abs_size mpz2 (Zutil.ptr memd) ≤ bv_signed o1 ∧ - 1%Z ≤ readers mpz2 (Zutil.ptr memd) ∧ readers mpz2 (Zutil.ptr memd) ≤ 0%Z) ∧ (∀(mpz3 : mpz_memo), abs_value_of mpz3 = abs_value_of mpz2 ∧ abs_size mpz3 = abs_size mpz2 ∧ sgn mpz3 = sgn mpz2 ∧ readers mpz3 = readers mpz2 ∧ zones mpz3 = zones mpz2 -> (∀(y : mpz_ptr), ¬ y = Zutil.ptr memd -> mpz_unchanged y mpz3 mpz2) ∧ alloc mpz3 (Zutil.ptr memd) = bv_signed o1 -> (valid dp (bv_signed o1) ∧ valid tdp (bv_signed o1) ∧ writable tdp = true) ∧ (∀(tdp1 : C.ptr (bv 64%N)) (dp1 : C.ptr (bv 64%N)), offset tdp1 = offset tdp ∧ writable tdp1 = writable tdp ∧ zone1 tdp1 = zone1 tdp -> offset dp1 = offset dp ∧ writable dp1 = writable dp ∧ zone1 dp1 = zone1 dp -> map_eq_sub_shift (pelts tdp1) (pelts dp) (offset tdp1) (offset dp) (bv_signed o1) ∧ (∀(j : Z), j < offset tdp1 ∨ offset tdp1 + bv_signed o1 ≤ j -> pelts tdp1 j = pelts tdp j) ∧ (∀(j : Z), pelts dp1 j = pelts dp j) ∧ (min dp1 = min dp ∧ C.max dp1 = C.max dp ∧ plength dp1 = plength dp) ∧ min tdp1 = min tdp ∧ C.max tdp1 = C.max tdp ∧ plength tdp1 = plength tdp -> (offset tdp1 = 0%Z ∧ writable tdp1 = true ∧ min tdp1 = 0%Z ∧ C.max tdp1 = plength tdp1 ∧ plength tdp1 = alloc mpz3 (Zutil.ptr memd) ∧ (readers mpz3 (Zutil.ptr memd) = 0%Z ∨ readers mpz3 (Zutil.ptr memd) = - 1%Z)) ∧ (∀(mpz4 : mpz_memo), alloc mpz4 = alloc mpz3 ∧ abs_size mpz4 = abs_size mpz3 ∧ sgn mpz4 = sgn mpz3 -> (∀(y : mpz_ptr), ¬ y = Zutil.ptr memd -> mpz_unchanged y mpz4 mpz3) ∧ abs_value_of mpz4 (Zutil.ptr memd) = value tdp1 (abs_size mpz4 (Zutil.ptr memd)) ∧ readers mpz4 (Zutil.ptr memd) = - 1%Z ∧ zones mpz4 (Zutil.ptr memd) = zone1 tdp1 -> (zones mpz4 (Zutil.ptr memd) = zone1 tdp1 ∧ readers mpz4 (Zutil.ptr memd) = - 1%Z ∧ offset tdp1 = 0%Z ∧ min tdp1 = 0%Z ∧ C.max tdp1 = plength tdp1 ∧ Z.abs (bv_signed ds) ≤ plength tdp1 ∧ plength tdp1 = alloc mpz4 (Zutil.ptr memd) ∧ (¬ bv_signed ds = 0%Z -> Z.pow (18446744073709551615%Z + 1%Z) (Z.abs (bv_signed ds) - 1%Z) ≤ value tdp1 (Z.abs (bv_signed ds)))) ∧ (∀(mpz5 : mpz_memo), alloc mpz5 = alloc mpz4 ∧ readers mpz5 = readers mpz4 ∧ zones mpz5 = zones mpz4 -> (∀(y : mpz_ptr), ¬ y = Zutil.ptr memd -> mpz_unchanged y mpz5 mpz4) ∧ (sgn mpz5 (Zutil.ptr memd) = 1%Z) = (0%Z ≤ bv_signed ds) ∧ (sgn mpz5 (Zutil.ptr memd) = - 1%Z) = (bv_signed ds < 0%Z) ∧ abs_size mpz5 (Zutil.ptr memd) = Z.abs (bv_signed ds) ∧ abs_value_of mpz5 (Zutil.ptr memd) = value tdp1 (Z.abs (bv_signed ds)) -> (zones mpz5 (Zutil.ptr memd) = zone1 tdp1 ∧ readers mpz5 (Zutil.ptr memd) = - 1%Z ∧ min tdp1 = 0%Z ∧ C.max tdp1 = plength tdp1 ∧ abs_value_of mpz5 (Zutil.ptr memd) = value tdp1 (abs_size mpz5 (Zutil.ptr memd))) ∧ (∀(mpz6 : mpz_memo), abs_value_of mpz6 = abs_value_of mpz5 ∧ alloc mpz6 = alloc mpz5 ∧ abs_size mpz6 = abs_size mpz5 ∧ sgn mpz6 = sgn mpz5 ∧ zones mpz6 = zones mpz5 -> readers mpz6 (Zutil.ptr memd) = 0%Z ∧ (∀(y : mpz_ptr), ¬ y = Zutil.ptr memd -> readers mpz6 y = readers mpz5 y) -> mpz_unchanged den mpz6 mpz1 ∧ (readers mpz6 den = readers mpz1 den ∧ (- 2%Z < readers mpz6 den -> abs_value_of mpz6 den = abs_value_of mpz1 den ∧ alloc mpz6 den = alloc mpz1 den ∧ abs_size mpz6 den = abs_size mpz1 den ∧ sgn mpz6 den = sgn mpz1 den ∧ readers mpz6 den = readers mpz1 den ∧ zones mpz6 den = zones mpz1 den) -> (zones mpz6 den = zone1 dp1 ∧ 1%Z ≤ readers mpz6 den ∧ min dp1 = 0%Z ∧ C.max dp1 = plength dp1) ∧ (∀(mpz7 : mpz_memo), abs_value_of mpz7 = abs_value_of mpz6 ∧ alloc mpz7 = alloc mpz6 ∧ abs_size mpz7 = abs_size mpz6 ∧ sgn mpz7 = sgn mpz6 ∧ zones mpz7 = zones mpz6 -> readers mpz7 den = readers mpz6 den - 1%Z ∧ (∀(y : mpz_ptr), ¬ y = den -> readers mpz7 y = readers mpz6 y) -> mpz_unchanged den mpz7 mpz ∧ (readers mpz7 den = readers mpz den ∧ (- 2%Z < readers mpz7 den -> abs_value_of mpz7 den = abs_value_of mpz den ∧ alloc mpz7 den = alloc mpz den ∧ abs_size mpz7 den = abs_size mpz den ∧ sgn mpz7 den = sgn mpz den ∧ readers mpz7 den = readers mpz den ∧ zones mpz7 den = zones mpz den) -> mpz_unchanged num mpz7 mpz ∧ (readers mpz7 num = readers mpz num ∧ (- 2%Z < readers mpz7 num -> abs_value_of mpz7 num = abs_value_of mpz num ∧ alloc mpz7 num = alloc mpz num ∧ abs_size mpz7 num = abs_size mpz num ∧ sgn mpz7 num = sgn mpz num ∧ readers mpz7 num = readers mpz num ∧ zones mpz7 num = zones mpz num) -> mpz_unchanged rem mpz7 mpz ∧ (readers mpz7 rem = readers mpz rem ∧ (- 2%Z < readers mpz7 rem -> abs_value_of mpz7 rem = abs_value_of mpz rem ∧ alloc mpz7 rem = alloc mpz rem ∧ abs_size mpz7 rem = abs_size mpz rem ∧ sgn mpz7 rem = sgn mpz rem ∧ readers mpz7 rem = readers mpz rem ∧ zones mpz7 rem = zones mpz rem) -> mpz_unchanged quot mpz7 mpz ∧ (readers mpz7 quot = readers mpz quot ∧ (- 2%Z < readers mpz7 quot -> abs_value_of mpz7 quot = abs_value_of mpz quot ∧ alloc mpz7 quot = alloc mpz quot ∧ abs_size mpz7 quot = abs_size mpz quot ∧ sgn mpz7 quot = sgn mpz quot ∧ readers mpz7 quot = readers mpz quot ∧ zones mpz7 quot = zones mpz quot) -> mpz_eq num rem = (num = rem) -> (∀(o6 : bool), (if decide (mpz_eq num rem) then o6 = true else o6 = (if decide (mpz_eq num quot) then true else false) ∧ (o6 = true) = (num = quot)) -> (if decide (o6 = true) then 0%Z ≤ readers mpz7 num ∧ (∀(mpz8 : mpz_memo), abs_value_of mpz8 = abs_value_of mpz7 ∧ alloc mpz8 = alloc mpz7 ∧ abs_size mpz8 = abs_size mpz7 ∧ sgn mpz8 = sgn mpz7 ∧ zones mpz8 = zones mpz7 -> (∀(np : C.ptr (bv 64%N)), readers mpz8 num = readers mpz7 num + 1%Z ∧ (∀(y : mpz_ptr), ¬ num = y -> readers mpz8 y = readers mpz7 y) ∧ value np (abs_size mpz8 num) = abs_value_of mpz8 num ∧ plength np = alloc mpz8 num ∧ offset np = 0%Z ∧ min np = 0%Z ∧ C.max np = plength np ∧ zone1 np = zones mpz8 num -> (∀(mpz9 : mpz_memo) (memn : mpz_mem), Zutil.ok memn = true ∧ readers mpz9 (Zutil.ptr memn) = 0%Z ∧ alloc mpz9 (Zutil.ptr memn) = 0%Z ∧ abs_size mpz9 (Zutil.ptr memn) = 0%Z ∧ readers mpz8 (Zutil.ptr memn) = - 2%Z ∧ (∀(x : mpz_ptr), ¬ x = Zutil.ptr memn -> mpz_unchanged x mpz9 mpz8) -> 0%Z ≤ bv_signed nl ∧ (∀(o7 : bv 32%N), bv_unsigned o7 = bv_signed nl -> 0%Z ≤ bv_unsigned o7 ∧ (∀(tnp : C.ptr (bv 64%N)), plength tnp = bv_unsigned o7 ∧ offset tnp = 0%Z ∧ min tnp = 0%Z ∧ C.max tnp = bv_unsigned o7 ∧ writable tnp = true -> (abs_size mpz9 (Zutil.ptr memn) ≤ bv_signed nl ∧ - 1%Z ≤ readers mpz9 (Zutil.ptr memn) ∧ readers mpz9 (Zutil.ptr memn) ≤ 0%Z) ∧ (∀(mpz10 : mpz_memo), abs_value_of mpz10 = abs_value_of mpz9 ∧ abs_size mpz10 = abs_size mpz9 ∧ sgn mpz10 = sgn mpz9 ∧ readers mpz10 = readers mpz9 ∧ zones mpz10 = zones mpz9 -> (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> mpz_unchanged y mpz10 mpz9) ∧ alloc mpz10 (Zutil.ptr memn) = bv_signed nl -> (valid np (bv_signed nl) ∧ valid tnp (bv_signed nl) ∧ writable tnp = true) ∧ (∀(tnp1 : C.ptr (bv 64%N)) (np1 : C.ptr (bv 64%N)), offset tnp1 = offset tnp ∧ writable tnp1 = writable tnp ∧ zone1 tnp1 = zone1 tnp -> offset np1 = offset np ∧ writable np1 = writable np ∧ zone1 np1 = zone1 np -> map_eq_sub_shift (pelts tnp1) (pelts np) (offset tnp1) (offset np) (bv_signed nl) ∧ (∀(j : Z), j < offset tnp1 ∨ offset tnp1 + bv_signed nl ≤ j -> pelts tnp1 j = pelts tnp j) ∧ (∀(j : Z), pelts np1 j = pelts np j) ∧ (min np1 = min np ∧ C.max np1 = C.max np ∧ plength np1 = plength np) ∧ min tnp1 = min tnp ∧ C.max tnp1 = C.max tnp ∧ plength tnp1 = plength tnp -> (offset tnp1 = 0%Z ∧ writable tnp1 = true ∧ min tnp1 = 0%Z ∧ C.max tnp1 = plength tnp1 ∧ plength tnp1 = alloc mpz10 (Zutil.ptr memn) ∧ (readers mpz10 (Zutil.ptr memn) = 0%Z ∨ readers mpz10 (Zutil.ptr memn) = - 1%Z)) ∧ (∀(mpz11 : mpz_memo), alloc mpz11 = alloc mpz10 ∧ abs_size mpz11 = abs_size mpz10 ∧ sgn mpz11 = sgn mpz10 -> (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> mpz_unchanged y mpz11 mpz10) ∧ abs_value_of mpz11 (Zutil.ptr memn) = value tnp1 (abs_size mpz11 (Zutil.ptr memn)) ∧ readers mpz11 (Zutil.ptr memn) = - 1%Z ∧ zones mpz11 (Zutil.ptr memn) = zone1 tnp1 -> (zones mpz11 (Zutil.ptr memn) = zone1 tnp1 ∧ readers mpz11 (Zutil.ptr memn) = - 1%Z ∧ offset tnp1 = 0%Z ∧ min tnp1 = 0%Z ∧ C.max tnp1 = plength tnp1 ∧ Z.abs (bv_signed ns) ≤ plength tnp1 ∧ plength tnp1 = alloc mpz11 (Zutil.ptr memn) ∧ (¬ bv_signed ns = 0%Z -> Z.pow (18446744073709551615%Z + 1%Z) (Z.abs (bv_signed ns) - 1%Z) ≤ value tnp1 (Z.abs (bv_signed ns)))) ∧ (∀(mpz12 : mpz_memo), alloc mpz12 = alloc mpz11 ∧ readers mpz12 = readers mpz11 ∧ zones mpz12 = zones mpz11 -> (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> mpz_unchanged y mpz12 mpz11) ∧ (sgn mpz12 (Zutil.ptr memn) = 1%Z) = (0%Z ≤ bv_signed ns) ∧ (sgn mpz12 (Zutil.ptr memn) = - 1%Z) = (bv_signed ns < 0%Z) ∧ abs_size mpz12 (Zutil.ptr memn) = Z.abs (bv_signed ns) ∧ abs_value_of mpz12 (Zutil.ptr memn) = value tnp1 (Z.abs (bv_signed ns)) -> (zones mpz12 (Zutil.ptr memn) = zone1 tnp1 ∧ readers mpz12 (Zutil.ptr memn) = - 1%Z ∧ min tnp1 = 0%Z ∧ C.max tnp1 = plength tnp1 ∧ abs_value_of mpz12 (Zutil.ptr memn) = value tnp1 (abs_size mpz12 (Zutil.ptr memn))) ∧ (∀(mpz13 : mpz_memo), abs_value_of mpz13 = abs_value_of mpz12 ∧ alloc mpz13 = alloc mpz12 ∧ abs_size mpz13 = abs_size mpz12 ∧ sgn mpz13 = sgn mpz12 ∧ zones mpz13 = zones mpz12 -> readers mpz13 (Zutil.ptr memn) = 0%Z ∧ (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> readers mpz13 y = readers mpz12 y) -> mpz_unchanged num mpz13 mpz8 ∧ (readers mpz13 num = readers mpz8 num ∧ (- 2%Z < readers mpz13 num -> abs_value_of mpz13 num = abs_value_of mpz8 num ∧ alloc mpz13 num = alloc mpz8 num ∧ abs_size mpz13 num = abs_size mpz8 num ∧ sgn mpz13 num = sgn mpz8 num ∧ readers mpz13 num = readers mpz8 num ∧ zones mpz13 num = zones mpz8 num) -> (zones mpz13 num = zone1 np1 ∧ 1%Z ≤ readers mpz13 num ∧ min np1 = 0%Z ∧ C.max np1 = plength np1) ∧ (∀(mpz14 : mpz_memo), abs_value_of mpz14 = abs_value_of mpz13 ∧ alloc mpz14 = alloc mpz13 ∧ abs_size mpz14 = abs_size mpz13 ∧ sgn mpz14 = sgn mpz13 ∧ zones mpz14 = zones mpz13 -> readers mpz14 num = readers mpz13 num - 1%Z ∧ (∀(y : mpz_ptr), ¬ y = num -> readers mpz14 y = readers mpz13 y) -> mpz_unchanged num mpz14 mpz7 ∧ (readers mpz14 num = readers mpz7 num ∧ (- 2%Z < readers mpz14 num -> abs_value_of mpz14 num = abs_value_of mpz7 num ∧ alloc mpz14 num = alloc mpz7 num ∧ abs_size mpz14 num = abs_size mpz7 num ∧ sgn mpz14 num = sgn mpz7 num ∧ readers mpz14 num = readers mpz7 num ∧ zones mpz14 num = zones mpz7 num) -> mpz_unchanged den mpz14 mpz7 ∧ (readers mpz14 den = readers mpz7 den ∧ (- 2%Z < readers mpz14 den -> abs_value_of mpz14 den = abs_value_of mpz7 den ∧ alloc mpz14 den = alloc mpz7 den ∧ abs_size mpz14 den = abs_size mpz7 den ∧ sgn mpz14 den = sgn mpz7 den ∧ readers mpz14 den = readers mpz7 den ∧ zones mpz14 den = zones mpz7 den) -> mpz_unchanged rem mpz14 mpz7 ∧ (readers mpz14 rem = readers mpz7 rem ∧ (- 2%Z < readers mpz14 rem -> abs_value_of mpz14 rem = abs_value_of mpz7 rem ∧ alloc mpz14 rem = alloc mpz7 rem ∧ abs_size mpz14 rem = abs_size mpz7 rem ∧ sgn mpz14 rem = sgn mpz7 rem ∧ readers mpz14 rem = readers mpz7 rem ∧ zones mpz14 rem = zones mpz7 rem) -> mpz_unchanged quot mpz14 mpz7 ∧ (readers mpz14 quot = readers mpz7 quot ∧ (- 2%Z < readers mpz14 quot -> abs_value_of mpz14 quot = abs_value_of mpz7 quot ∧ alloc mpz14 quot = alloc mpz7 quot ∧ abs_size mpz14 quot = abs_size mpz7 quot ∧ sgn mpz14 quot = sgn mpz7 quot ∧ readers mpz14 quot = readers mpz7 quot ∧ zones mpz14 quot = zones mpz7 quot) -> mpz_unchanged (Zutil.ptr memd) mpz14 mpz7 ∧ (readers mpz14 (Zutil.ptr memd) = readers mpz7 (Zutil.ptr memd) ∧ (- 2%Z < readers mpz14 (Zutil.ptr memd) -> abs_value_of mpz14 (Zutil.ptr memd) = abs_value_of mpz7 (Zutil.ptr memd) ∧ alloc mpz14 (Zutil.ptr memd) = alloc mpz7 (Zutil.ptr memd) ∧ abs_size mpz14 (Zutil.ptr memd) = abs_size mpz7 (Zutil.ptr memd) ∧ sgn mpz14 (Zutil.ptr memd) = sgn mpz7 (Zutil.ptr memd) ∧ readers mpz14 (Zutil.ptr memd) = readers mpz7 (Zutil.ptr memd) ∧ zones mpz14 (Zutil.ptr memd) = zones mpz7 (Zutil.ptr memd)) -> (readers mpz14 quot = 0%Z ∧ 1%Z ≤ alloc mpz14 quot) ∧ (∀(mpz15 : mpz_memo), sgn mpz15 = sgn mpz14 -> (∀(qp : C.ptr (bv 64%N)), (∀(y : mpz_ptr), ¬ y = quot -> mpz_unchanged y mpz15 mpz14) ∧ readers mpz15 quot = - 1%Z ∧ abs_value_of mpz15 quot = value qp (abs_size mpz15 quot) ∧ zones mpz15 quot = zone1 qp ∧ offset qp = 0%Z ∧ plength qp = alloc mpz15 quot ∧ min qp = 0%Z ∧ C.max qp = plength qp ∧ writable qp = true ∧ abs_size mpz15 quot = abs_size mpz14 quot ∧ value qp (abs_size mpz14 quot) = abs_value_of mpz14 quot ∧ (if decide (alloc mpz14 quot < bv_signed o3) then alloc mpz15 quot = bv_signed o3 else alloc mpz15 quot = alloc mpz14 quot) -> mpz_unchanged rem mpz15 mpz14 ∧ (readers mpz15 rem = readers mpz14 rem ∧ (- 2%Z < readers mpz15 rem -> abs_value_of mpz15 rem = abs_value_of mpz14 rem ∧ alloc mpz15 rem = alloc mpz14 rem ∧ abs_size mpz15 rem = abs_size mpz14 rem ∧ sgn mpz15 rem = sgn mpz14 rem ∧ readers mpz15 rem = readers mpz14 rem ∧ zones mpz15 rem = zones mpz14 rem) -> (readers mpz15 rem = 0%Z ∧ 1%Z ≤ alloc mpz15 rem) ∧ (∀(mpz16 : mpz_memo), sgn mpz16 = sgn mpz15 -> (∀(rp : C.ptr (bv 64%N)), (∀(y : mpz_ptr), ¬ y = rem -> mpz_unchanged y mpz16 mpz15) ∧ readers mpz16 rem = - 1%Z ∧ abs_value_of mpz16 rem = value rp (abs_size mpz16 rem) ∧ zones mpz16 rem = zone1 rp ∧ offset rp = 0%Z ∧ plength rp = alloc mpz16 rem ∧ min rp = 0%Z ∧ C.max rp = plength rp ∧ writable rp = true ∧ abs_size mpz16 rem = abs_size mpz15 rem ∧ value rp (abs_size mpz15 rem) = abs_value_of mpz15 rem ∧ (if decide (alloc mpz15 rem < bv_signed o1) then alloc mpz16 rem = bv_signed o1 else alloc mpz16 rem = alloc mpz15 rem) -> mpz_unchanged (Zutil.ptr memn) mpz16 mpz14 ∧ (readers mpz16 (Zutil.ptr memn) = readers mpz14 (Zutil.ptr memn) ∧ (- 2%Z < readers mpz16 (Zutil.ptr memn) -> abs_value_of mpz16 (Zutil.ptr memn) = abs_value_of mpz14 (Zutil.ptr memn) ∧ alloc mpz16 (Zutil.ptr memn) = alloc mpz14 (Zutil.ptr memn) ∧ abs_size mpz16 (Zutil.ptr memn) = abs_size mpz14 (Zutil.ptr memn) ∧ sgn mpz16 (Zutil.ptr memn) = sgn mpz14 (Zutil.ptr memn) ∧ readers mpz16 (Zutil.ptr memn) = readers mpz14 (Zutil.ptr memn) ∧ zones mpz16 (Zutil.ptr memn) = zones mpz14 (Zutil.ptr memn)) -> mpz_unchanged (Zutil.ptr memd) mpz16 mpz14 ∧ (readers mpz16 (Zutil.ptr memd) = readers mpz14 (Zutil.ptr memd) ∧ (- 2%Z < readers mpz16 (Zutil.ptr memd) -> abs_value_of mpz16 (Zutil.ptr memd) = abs_value_of mpz14 (Zutil.ptr memd) ∧ alloc mpz16 (Zutil.ptr memd) = alloc mpz14 (Zutil.ptr memd) ∧ abs_size mpz16 (Zutil.ptr memd) = abs_size mpz14 (Zutil.ptr memd) ∧ sgn mpz16 (Zutil.ptr memd) = sgn mpz14 (Zutil.ptr memd) ∧ readers mpz16 (Zutil.ptr memd) = readers mpz14 (Zutil.ptr memd) ∧ zones mpz16 (Zutil.ptr memd) = zones mpz14 (Zutil.ptr memd)) -> 0%Z ≤ readers mpz16 (Zutil.ptr memn) ∧ (∀(mpz17 : mpz_memo), abs_value_of mpz17 = abs_value_of mpz16 ∧ alloc mpz17 = alloc mpz16 ∧ abs_size mpz17 = abs_size mpz16 ∧ sgn mpz17 = sgn mpz16 ∧ zones mpz17 = zones mpz16 -> (∀(np2 : C.ptr (bv 64%N)), readers mpz17 (Zutil.ptr memn) = readers mpz16 (Zutil.ptr memn) + 1%Z ∧ (∀(y : mpz_ptr), ¬ Zutil.ptr memn = y -> readers mpz17 y = readers mpz16 y) ∧ value np2 (abs_size mpz17 (Zutil.ptr memn)) = abs_value_of mpz17 (Zutil.ptr memn) ∧ plength np2 = alloc mpz17 (Zutil.ptr memn) ∧ offset np2 = 0%Z ∧ min np2 = 0%Z ∧ C.max np2 = plength np2 ∧ zone1 np2 = zones mpz17 (Zutil.ptr memn) -> 0%Z ≤ readers mpz17 (Zutil.ptr memd) ∧ (∀(mpz18 : mpz_memo), abs_value_of mpz18 = abs_value_of mpz17 ∧ alloc mpz18 = alloc mpz17 ∧ abs_size mpz18 = abs_size mpz17 ∧ sgn mpz18 = sgn mpz17 ∧ zones mpz18 = zones mpz17 -> (∀(dp2 : C.ptr (bv 64%N)), readers mpz18 (Zutil.ptr memd) = readers mpz17 (Zutil.ptr memd) + 1%Z ∧ (∀(y : mpz_ptr), ¬ Zutil.ptr memd = y -> readers mpz18 y = readers mpz17 y) ∧ value dp2 (abs_size mpz18 (Zutil.ptr memd)) = abs_value_of mpz18 (Zutil.ptr memd) ∧ plength dp2 = alloc mpz18 (Zutil.ptr memd) ∧ offset dp2 = 0%Z ∧ min dp2 = 0%Z ∧ C.max dp2 = plength dp2 ∧ zone1 dp2 = zones mpz18 (Zutil.ptr memd) -> ((1%Z ≤ bv_signed o1 ∧ bv_signed o1 ≤ bv_signed nl ∧ bv_signed nl ≤ 2147483647%Z - 1%Z) ∧ valid np2 (bv_signed nl) ∧ valid dp2 (bv_signed o1) ∧ valid qp (bv_signed nl - bv_signed o1 + 1%Z) ∧ valid rp (bv_signed o1) ∧ (writable qp = true ∧ writable rp = true) ∧ 0%Z < bv_unsigned (pelts dp2 (offset dp2 + bv_signed o1 - 1%Z))) ∧ (∀(rp1 : C.ptr (bv 64%N)) (qp1 : C.ptr (bv 64%N)), length (data rp1) = length (data rp) ∧ offset rp1 = offset rp ∧ min rp1 = min rp ∧ C.max rp1 = C.max rp ∧ writable rp1 = writable rp ∧ zone1 rp1 = zone1 rp -> length (data qp1) = length (data qp) ∧ offset qp1 = offset qp ∧ min qp1 = min qp ∧ C.max qp1 = C.max qp ∧ writable qp1 = writable qp ∧ zone1 qp1 = zone1 qp -> value np2 (bv_signed nl) = value qp1 (bv_signed nl - bv_signed o1 + 1%Z) * value dp2 (bv_signed o1) + value rp1 (bv_signed o1) ∧ value rp1 (bv_signed o1) < value dp2 (bv_signed o1) -> int'32_in_bounds (bv_signed o3 - 1%Z) ∧ (∀(o8 : bv 32%N), bv_signed o8 = bv_signed o3 - 1%Z -> (min qp1 ≤ offset qp1 + bv_signed o8 ∧ offset qp1 + bv_signed o8 < C.max qp1) ∧ (let qh : bv 64%N := pelts qp1 (offset qp1 + bv_signed o8) in ∀(o9 : bool), (bv_unsigned qh = bv_unsigned (0%bv : bv 64%N) -> o9 = true) ∧ (o9 = true -> qh = (0%bv : bv 64%N)) -> (∀(o10 : bv 32%N), (if decide (o9 = true) then o10 = (1%bv : bv 32%N) else o10 = (0%bv : bv 32%N)) -> int'32_in_bounds (bv_signed o3 - bv_signed o10) ∧ (∀(o11 : bv 32%N), bv_signed o11 = bv_signed o3 - bv_signed o10 -> (0%Z ≤ bv_signed o1 ∧ valid rp1 (bv_signed o1)) ∧ (∀(dl : bv 32%N), (0%Z ≤ bv_signed dl ∧ bv_signed dl ≤ bv_signed o1) ∧ value rp1 (bv_signed dl) = value rp1 (bv_signed o1) ∧ (bv_signed dl = 0%Z ∨ 0%Z < bv_unsigned (pelts rp1 (offset rp1 + bv_signed dl - 1%Z))) ∧ (bv_signed dl = 0%Z ∨ Z.pow (18446744073709551615%Z + 1%Z) (bv_signed dl - 1%Z) ≤ value rp1 (bv_signed dl)) -> (∀(o12 : bv 32%N), (bv_signed ns = 0%Z -> o12 = ds) ∧ (bv_signed ds = 0%Z -> o12 = ns) ∧ (0%Z ≤ bv_signed ns ∧ 0%Z ≤ bv_signed ds ∨ bv_signed ns < 0%Z ∧ bv_signed ds < 0%Z -> 0%Z ≤ bv_signed o12) ∧ (bv_signed ns < 0%Z ∧ 0%Z ≤ bv_signed ds ∨ 0%Z ≤ bv_signed ns ∧ bv_signed ds < 0%Z -> bv_signed o12 < 0%Z) -> (¬ 0%Z ≤ bv_signed o12 -> int'32_in_bounds (- bv_signed o11)) ∧ (∀(qs : bv 32%N), (if decide (0%Z ≤ bv_signed o12) then qs = o11 else bv_signed qs = - bv_signed o11) -> (¬ 0%Z ≤ bv_signed ns -> int'32_in_bounds (- bv_signed dl)) ∧ (∀(rs : bv 32%N), (if decide (0%Z ≤ bv_signed ns) then rs = dl else bv_signed rs = - bv_signed dl) -> mpz_unchanged quot mpz18 mpz15 ∧ (readers mpz18 quot = readers mpz15 quot ∧ (- 2%Z < readers mpz18 quot -> abs_value_of mpz18 quot = abs_value_of mpz15 quot ∧ alloc mpz18 quot = alloc mpz15 quot ∧ abs_size mpz18 quot = abs_size mpz15 quot ∧ sgn mpz18 quot = sgn mpz15 quot ∧ readers mpz18 quot = readers mpz15 quot ∧ zones mpz18 quot = zones mpz15 quot) -> (zones mpz18 quot = zone1 qp1 ∧ readers mpz18 quot = - 1%Z ∧ offset qp1 = 0%Z ∧ min qp1 = 0%Z ∧ C.max qp1 = plength qp1 ∧ Z.abs (bv_signed qs) ≤ plength qp1 ∧ plength qp1 = alloc mpz18 quot ∧ (¬ bv_signed qs = 0%Z -> Z.pow (18446744073709551615%Z + 1%Z) (Z.abs (bv_signed qs) - 1%Z) ≤ value qp1 (Z.abs (bv_signed qs)))) ∧ (∀(mpz19 : mpz_memo), alloc mpz19 = alloc mpz18 ∧ readers mpz19 = readers mpz18 ∧ zones mpz19 = zones mpz18 -> (∀(y : mpz_ptr), ¬ y = quot -> mpz_unchanged y mpz19 mpz18) ∧ (sgn mpz19 quot = 1%Z) = (0%Z ≤ bv_signed qs) ∧ (sgn mpz19 quot = - 1%Z) = (bv_signed qs < 0%Z) ∧ abs_size mpz19 quot = Z.abs (bv_signed qs) ∧ abs_value_of mpz19 quot = value qp1 (Z.abs (bv_signed qs)) -> (zones mpz19 rem = zone1 rp1 ∧ readers mpz19 rem = - 1%Z ∧ offset rp1 = 0%Z ∧ min rp1 = 0%Z ∧ C.max rp1 = plength rp1 ∧ Z.abs (bv_signed rs) ≤ plength rp1 ∧ plength rp1 = alloc mpz19 rem ∧ (¬ bv_signed rs = 0%Z -> Z.pow (18446744073709551615%Z + 1%Z) (Z.abs (bv_signed rs) - 1%Z) ≤ value rp1 (Z.abs (bv_signed rs)))) ∧ (∀(mpz20 : mpz_memo), alloc mpz20 = alloc mpz19 ∧ readers mpz20 = readers mpz19 ∧ zones mpz20 = zones mpz19 -> (∀(y : mpz_ptr), ¬ y = rem -> mpz_unchanged y mpz20 mpz19) ∧ (sgn mpz20 rem = 1%Z) = (0%Z ≤ bv_signed rs) ∧ (sgn mpz20 rem = - 1%Z) = (bv_signed rs < 0%Z) ∧ abs_size mpz20 rem = Z.abs (bv_signed rs) ∧ abs_value_of mpz20 rem = value rp1 (Z.abs (bv_signed rs)) -> mpz_unchanged quot mpz20 mpz19 ∧ (readers mpz20 quot = readers mpz19 quot ∧ (- 2%Z < readers mpz20 quot -> abs_value_of mpz20 quot = abs_value_of mpz19 quot ∧ alloc mpz20 quot = alloc mpz19 quot ∧ abs_size mpz20 quot = abs_size mpz19 quot ∧ sgn mpz20 quot = sgn mpz19 quot ∧ readers mpz20 quot = readers mpz19 quot ∧ zones mpz20 quot = zones mpz19 quot) -> (zones mpz20 rem = zone1 rp1 ∧ readers mpz20 rem = - 1%Z ∧ min rp1 = 0%Z ∧ C.max rp1 = plength rp1 ∧ abs_value_of mpz20 rem = value rp1 (abs_size mpz20 rem)) ∧ (∀(mpz21 : mpz_memo), abs_value_of mpz21 = abs_value_of mpz20 ∧ alloc mpz21 = alloc mpz20 ∧ abs_size mpz21 = abs_size mpz20 ∧ sgn mpz21 = sgn mpz20 ∧ zones mpz21 = zones mpz20 -> readers mpz21 rem = 0%Z ∧ (∀(y : mpz_ptr), ¬ y = rem -> readers mpz21 y = readers mpz20 y) -> (zones mpz21 quot = zone1 qp1 ∧ readers mpz21 quot = - 1%Z ∧ min qp1 = 0%Z ∧ C.max qp1 = plength qp1 ∧ abs_value_of mpz21 quot = value qp1 (abs_size mpz21 quot)) ∧ (∀(mpz22 : mpz_memo), abs_value_of mpz22 = abs_value_of mpz21 ∧ alloc mpz22 = alloc mpz21 ∧ abs_size mpz22 = abs_size mpz21 ∧ sgn mpz22 = sgn mpz21 ∧ zones mpz22 = zones mpz21 -> readers mpz22 quot = 0%Z ∧ (∀(y : mpz_ptr), ¬ y = quot -> readers mpz22 y = readers mpz21 y) -> mpz_unchanged (Zutil.ptr memn) mpz22 mpz18 ∧ (readers mpz22 (Zutil.ptr memn) = readers mpz18 (Zutil.ptr memn) ∧ (- 2%Z < readers mpz22 (Zutil.ptr memn) -> abs_value_of mpz22 (Zutil.ptr memn) = abs_value_of mpz18 (Zutil.ptr memn) ∧ alloc mpz22 (Zutil.ptr memn) = alloc mpz18 (Zutil.ptr memn) ∧ abs_size mpz22 (Zutil.ptr memn) = abs_size mpz18 (Zutil.ptr memn) ∧ sgn mpz22 (Zutil.ptr memn) = sgn mpz18 (Zutil.ptr memn) ∧ readers mpz22 (Zutil.ptr memn) = readers mpz18 (Zutil.ptr memn) ∧ zones mpz22 (Zutil.ptr memn) = zones mpz18 (Zutil.ptr memn)) -> mpz_unchanged (Zutil.ptr memd) mpz22 mpz18 ∧ (readers mpz22 (Zutil.ptr memd) = readers mpz18 (Zutil.ptr memd) ∧ (- 2%Z < readers mpz22 (Zutil.ptr memd) -> abs_value_of mpz22 (Zutil.ptr memd) = abs_value_of mpz18 (Zutil.ptr memd) ∧ alloc mpz22 (Zutil.ptr memd) = alloc mpz18 (Zutil.ptr memd) ∧ abs_size mpz22 (Zutil.ptr memd) = abs_size mpz18 (Zutil.ptr memd) ∧ sgn mpz22 (Zutil.ptr memd) = sgn mpz18 (Zutil.ptr memd) ∧ readers mpz22 (Zutil.ptr memd) = readers mpz18 (Zutil.ptr memd) ∧ zones mpz22 (Zutil.ptr memd) = zones mpz18 (Zutil.ptr memd)) -> (zones mpz22 (Zutil.ptr memn) = zone1 np2 ∧ 1%Z ≤ readers mpz22 (Zutil.ptr memn) ∧ min np2 = 0%Z ∧ C.max np2 = plength np2) ∧ (∀(mpz23 : mpz_memo), abs_value_of mpz23 = abs_value_of mpz22 ∧ alloc mpz23 = alloc mpz22 ∧ abs_size mpz23 = abs_size mpz22 ∧ sgn mpz23 = sgn mpz22 ∧ zones mpz23 = zones mpz22 -> readers mpz23 (Zutil.ptr memn) = readers mpz22 (Zutil.ptr memn) - 1%Z ∧ (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> readers mpz23 y = readers mpz22 y) -> (zones mpz23 (Zutil.ptr memd) = zone1 dp2 ∧ 1%Z ≤ readers mpz23 (Zutil.ptr memd) ∧ min dp2 = 0%Z ∧ C.max dp2 = plength dp2) ∧ (∀(mpz24 : mpz_memo), abs_value_of mpz24 = abs_value_of mpz23 ∧ alloc mpz24 = alloc mpz23 ∧ abs_size mpz24 = abs_size mpz23 ∧ sgn mpz24 = sgn mpz23 ∧ zones mpz24 = zones mpz23 -> readers mpz24 (Zutil.ptr memd) = readers mpz23 (Zutil.ptr memd) - 1%Z ∧ (∀(y : mpz_ptr), ¬ y = Zutil.ptr memd -> readers mpz24 y = readers mpz23 y) -> mpz_unchanged (Zutil.ptr memd) mpz24 mpz14 ∧ (readers mpz24 (Zutil.ptr memd) = readers mpz14 (Zutil.ptr memd) ∧ (- 2%Z < readers mpz24 (Zutil.ptr memd) -> abs_value_of mpz24 (Zutil.ptr memd) = abs_value_of mpz14 (Zutil.ptr memd) ∧ alloc mpz24 (Zutil.ptr memd) = alloc mpz14 (Zutil.ptr memd) ∧ abs_size mpz24 (Zutil.ptr memd) = abs_size mpz14 (Zutil.ptr memd) ∧ sgn mpz24 (Zutil.ptr memd) = sgn mpz14 (Zutil.ptr memd) ∧ readers mpz24 (Zutil.ptr memd) = readers mpz14 (Zutil.ptr memd) ∧ zones mpz24 (Zutil.ptr memd) = zones mpz14 (Zutil.ptr memd)) -> mpz_unchanged (Zutil.ptr memn) mpz24 mpz14 ∧ (readers mpz24 (Zutil.ptr memn) = readers mpz14 (Zutil.ptr memn) ∧ (- 2%Z < readers mpz24 (Zutil.ptr memn) -> abs_value_of mpz24 (Zutil.ptr memn) = abs_value_of mpz14 (Zutil.ptr memn) ∧ alloc mpz24 (Zutil.ptr memn) = alloc mpz14 (Zutil.ptr memn) ∧ abs_size mpz24 (Zutil.ptr memn) = abs_size mpz14 (Zutil.ptr memn) ∧ sgn mpz24 (Zutil.ptr memn) = sgn mpz14 (Zutil.ptr memn) ∧ readers mpz24 (Zutil.ptr memn) = readers mpz14 (Zutil.ptr memn) ∧ zones mpz24 (Zutil.ptr memn) = zones mpz14 (Zutil.ptr memn)) -> (if decide True then (Zutil.ok memd = true ∧ - 1%Z ≤ readers mpz24 (Zutil.ptr memd) ∧ readers mpz24 (Zutil.ptr memd) ≤ 0%Z) ∧ (∀(mpz25 : mpz_memo), readers mpz25 (Zutil.ptr memd) = - 2%Z ∧ (∀(y : mpz_ptr), ¬ y = Zutil.ptr memd -> mpz_unchanged y mpz25 mpz24) -> (if decide True then (Zutil.ok memn = true ∧ - 1%Z ≤ readers mpz25 (Zutil.ptr memn) ∧ readers mpz25 (Zutil.ptr memn) ≤ 0%Z) ∧ (∀(mpz26 : mpz_memo), readers mpz26 (Zutil.ptr memn) = - 2%Z ∧ (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> mpz_unchanged y mpz26 mpz25) -> mpz_unchanged quot mpz26 mpz22 ∧ (readers mpz26 quot = readers mpz22 quot ∧ (- 2%Z < readers mpz26 quot -> abs_value_of mpz26 quot = abs_value_of mpz22 quot ∧ alloc mpz26 quot = alloc mpz22 quot ∧ abs_size mpz26 quot = abs_size mpz22 quot ∧ sgn mpz26 quot = sgn mpz22 quot ∧ readers mpz26 quot = readers mpz22 quot ∧ zones mpz26 quot = zones mpz22 quot) -> mpz_unchanged rem mpz26 mpz22 ∧ (readers mpz26 rem = readers mpz22 rem ∧ (- 2%Z < readers mpz26 rem -> abs_value_of mpz26 rem = abs_value_of mpz22 rem ∧ alloc mpz26 rem = alloc mpz22 rem ∧ abs_size mpz26 rem = abs_size mpz22 rem ∧ sgn mpz26 rem = sgn mpz22 rem ∧ readers mpz26 rem = readers mpz22 rem ∧ zones mpz26 rem = zones mpz22 rem) -> value_of quot mpz26 * value_of den mpz + value_of rem mpz26 = value_of num mpz ∧ (0%Z ≤ abs_value_of mpz26 rem ∧ abs_value_of mpz26 rem < abs_value_of mpz den) ∧ (∀(x : mpz_ptr), ¬ x = quot -> ¬ x = rem -> mpz_unchanged x mpz26 mpz) ∧ readers mpz26 num = 0%Z ∧ readers mpz26 den = 0%Z ∧ readers mpz26 quot = 0%Z ∧ readers mpz26 rem = 0%Z))) else mpz_unchanged quot mpz25 mpz22 ∧ (readers mpz25 quot = readers mpz22 quot ∧ (- 2%Z < readers mpz25 quot -> abs_value_of mpz25 quot = abs_value_of mpz22 quot ∧ alloc mpz25 quot = alloc mpz22 quot ∧ abs_size mpz25 quot = abs_size mpz22 quot ∧ sgn mpz25 quot = sgn mpz22 quot ∧ readers mpz25 quot = readers mpz22 quot ∧ zones mpz25 quot = zones mpz22 quot) -> mpz_unchanged rem mpz25 mpz22 ∧ (readers mpz25 rem = readers mpz22 rem ∧ (- 2%Z < readers mpz25 rem -> abs_value_of mpz25 rem = abs_value_of mpz22 rem ∧ alloc mpz25 rem = alloc mpz22 rem ∧ abs_size mpz25 rem = abs_size mpz22 rem ∧ sgn mpz25 rem = sgn mpz22 rem ∧ readers mpz25 rem = readers mpz22 rem ∧ zones mpz25 rem = zones mpz22 rem) -> value_of quot mpz25 * value_of den mpz + value_of rem mpz25 = value_of num mpz ∧ (0%Z ≤ abs_value_of mpz25 rem ∧ abs_value_of mpz25 rem < abs_value_of mpz den) ∧ (∀(x : mpz_ptr), ¬ x = quot -> ¬ x = rem -> mpz_unchanged x mpz25 mpz) ∧ readers mpz25 num = 0%Z ∧ readers mpz25 den = 0%Z ∧ readers mpz25 quot = 0%Z ∧ readers mpz25 rem = 0%Z)))) else if decide True then (Zutil.ok memn = true ∧ - 1%Z ≤ readers mpz24 (Zutil.ptr memn) ∧ readers mpz24 (Zutil.ptr memn) ≤ 0%Z) ∧ (∀(mpz25 : mpz_memo), readers mpz25 (Zutil.ptr memn) = - 2%Z ∧ (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> mpz_unchanged y mpz25 mpz24) -> mpz_unchanged quot mpz25 mpz22 ∧ (readers mpz25 quot = readers mpz22 quot ∧ (- 2%Z < readers mpz25 quot -> abs_value_of mpz25 quot = abs_value_of mpz22 quot ∧ alloc mpz25 quot = alloc mpz22 quot ∧ abs_size mpz25 quot = abs_size mpz22 quot ∧ sgn mpz25 quot = sgn mpz22 quot ∧ readers mpz25 quot = readers mpz22 quot ∧ zones mpz25 quot = zones mpz22 quot) -> mpz_unchanged rem mpz25 mpz22 ∧ (readers mpz25 rem = readers mpz22 rem ∧ (- 2%Z < readers mpz25 rem -> abs_value_of mpz25 rem = abs_value_of mpz22 rem ∧ alloc mpz25 rem = alloc mpz22 rem ∧ abs_size mpz25 rem = abs_size mpz22 rem ∧ sgn mpz25 rem = sgn mpz22 rem ∧ readers mpz25 rem = readers mpz22 rem ∧ zones mpz25 rem = zones mpz22 rem) -> value_of quot mpz25 * value_of den mpz + value_of rem mpz25 = value_of num mpz ∧ (0%Z ≤ abs_value_of mpz25 rem ∧ abs_value_of mpz25 rem < abs_value_of mpz den) ∧ (∀(x : mpz_ptr), ¬ x = quot -> ¬ x = rem -> mpz_unchanged x mpz25 mpz) ∧ readers mpz25 num = 0%Z ∧ readers mpz25 den = 0%Z ∧ readers mpz25 quot = 0%Z ∧ readers mpz25 rem = 0%Z))) else mpz_unchanged quot mpz24 mpz22 ∧ (readers mpz24 quot = readers mpz22 quot ∧ (- 2%Z < readers mpz24 quot -> abs_value_of mpz24 quot = abs_value_of mpz22 quot ∧ alloc mpz24 quot = alloc mpz22 quot ∧ abs_size mpz24 quot = abs_size mpz22 quot ∧ sgn mpz24 quot = sgn mpz22 quot ∧ readers mpz24 quot = readers mpz22 quot ∧ zones mpz24 quot = zones mpz22 quot) -> mpz_unchanged rem mpz24 mpz22 ∧ (readers mpz24 rem = readers mpz22 rem ∧ (- 2%Z < readers mpz24 rem -> abs_value_of mpz24 rem = abs_value_of mpz22 rem ∧ alloc mpz24 rem = alloc mpz22 rem ∧ abs_size mpz24 rem = abs_size mpz22 rem ∧ sgn mpz24 rem = sgn mpz22 rem ∧ readers mpz24 rem = readers mpz22 rem ∧ zones mpz24 rem = zones mpz22 rem) -> value_of quot mpz24 * value_of den mpz + value_of rem mpz24 = value_of num mpz ∧ (0%Z ≤ abs_value_of mpz24 rem ∧ abs_value_of mpz24 rem < abs_value_of mpz den) ∧ (∀(x : mpz_ptr), ¬ x = quot -> ¬ x = rem -> mpz_unchanged x mpz24 mpz) ∧ readers mpz24 num = 0%Z ∧ readers mpz24 den = 0%Z ∧ readers mpz24 quot = 0%Z ∧ readers mpz24 rem = 0%Z)))))))))))))))))))))))))))))))))))))))))))))))))))) else (readers mpz7 quot = 0%Z ∧ 1%Z ≤ alloc mpz7 quot) ∧ (∀(mpz8 : mpz_memo), sgn mpz8 = sgn mpz7 -> (∀(qp : C.ptr (bv 64%N)), (∀(y : mpz_ptr), ¬ y = quot -> mpz_unchanged y mpz8 mpz7) ∧ readers mpz8 quot = - 1%Z ∧ abs_value_of mpz8 quot = value qp (abs_size mpz8 quot) ∧ zones mpz8 quot = zone1 qp ∧ offset qp = 0%Z ∧ plength qp = alloc mpz8 quot ∧ min qp = 0%Z ∧ C.max qp = plength qp ∧ writable qp = true ∧ abs_size mpz8 quot = abs_size mpz7 quot ∧ value qp (abs_size mpz7 quot) = abs_value_of mpz7 quot ∧ (if decide (alloc mpz7 quot < bv_signed o3) then alloc mpz8 quot = bv_signed o3 else alloc mpz8 quot = alloc mpz7 quot) -> mpz_unchanged rem mpz8 mpz7 ∧ (readers mpz8 rem = readers mpz7 rem ∧ (- 2%Z < readers mpz8 rem -> abs_value_of mpz8 rem = abs_value_of mpz7 rem ∧ alloc mpz8 rem = alloc mpz7 rem ∧ abs_size mpz8 rem = abs_size mpz7 rem ∧ sgn mpz8 rem = sgn mpz7 rem ∧ readers mpz8 rem = readers mpz7 rem ∧ zones mpz8 rem = zones mpz7 rem) -> (readers mpz8 rem = 0%Z ∧ 1%Z ≤ alloc mpz8 rem) ∧ (∀(mpz9 : mpz_memo), sgn mpz9 = sgn mpz8 -> (∀(rp : C.ptr (bv 64%N)), (∀(y : mpz_ptr), ¬ y = rem -> mpz_unchanged y mpz9 mpz8) ∧ readers mpz9 rem = - 1%Z ∧ abs_value_of mpz9 rem = value rp (abs_size mpz9 rem) ∧ zones mpz9 rem = zone1 rp ∧ offset rp = 0%Z ∧ plength rp = alloc mpz9 rem ∧ min rp = 0%Z ∧ C.max rp = plength rp ∧ writable rp = true ∧ abs_size mpz9 rem = abs_size mpz8 rem ∧ value rp (abs_size mpz8 rem) = abs_value_of mpz8 rem ∧ (if decide (alloc mpz8 rem < bv_signed o1) then alloc mpz9 rem = bv_signed o1 else alloc mpz9 rem = alloc mpz8 rem) -> mpz_unchanged num mpz9 mpz7 ∧ (readers mpz9 num = readers mpz7 num ∧ (- 2%Z < readers mpz9 num -> abs_value_of mpz9 num = abs_value_of mpz7 num ∧ alloc mpz9 num = alloc mpz7 num ∧ abs_size mpz9 num = abs_size mpz7 num ∧ sgn mpz9 num = sgn mpz7 num ∧ readers mpz9 num = readers mpz7 num ∧ zones mpz9 num = zones mpz7 num) -> mpz_unchanged (Zutil.ptr memd) mpz9 mpz7 ∧ (readers mpz9 (Zutil.ptr memd) = readers mpz7 (Zutil.ptr memd) ∧ (- 2%Z < readers mpz9 (Zutil.ptr memd) -> abs_value_of mpz9 (Zutil.ptr memd) = abs_value_of mpz7 (Zutil.ptr memd) ∧ alloc mpz9 (Zutil.ptr memd) = alloc mpz7 (Zutil.ptr memd) ∧ abs_size mpz9 (Zutil.ptr memd) = abs_size mpz7 (Zutil.ptr memd) ∧ sgn mpz9 (Zutil.ptr memd) = sgn mpz7 (Zutil.ptr memd) ∧ readers mpz9 (Zutil.ptr memd) = readers mpz7 (Zutil.ptr memd) ∧ zones mpz9 (Zutil.ptr memd) = zones mpz7 (Zutil.ptr memd)) -> 0%Z ≤ readers mpz9 num ∧ (∀(mpz10 : mpz_memo), abs_value_of mpz10 = abs_value_of mpz9 ∧ alloc mpz10 = alloc mpz9 ∧ abs_size mpz10 = abs_size mpz9 ∧ sgn mpz10 = sgn mpz9 ∧ zones mpz10 = zones mpz9 -> (∀(np : C.ptr (bv 64%N)), readers mpz10 num = readers mpz9 num + 1%Z ∧ (∀(y : mpz_ptr), ¬ num = y -> readers mpz10 y = readers mpz9 y) ∧ value np (abs_size mpz10 num) = abs_value_of mpz10 num ∧ plength np = alloc mpz10 num ∧ offset np = 0%Z ∧ min np = 0%Z ∧ C.max np = plength np ∧ zone1 np = zones mpz10 num -> 0%Z ≤ readers mpz10 (Zutil.ptr memd) ∧ (∀(mpz11 : mpz_memo), abs_value_of mpz11 = abs_value_of mpz10 ∧ alloc mpz11 = alloc mpz10 ∧ abs_size mpz11 = abs_size mpz10 ∧ sgn mpz11 = sgn mpz10 ∧ zones mpz11 = zones mpz10 -> (∀(dp2 : C.ptr (bv 64%N)), readers mpz11 (Zutil.ptr memd) = readers mpz10 (Zutil.ptr memd) + 1%Z ∧ (∀(y : mpz_ptr), ¬ Zutil.ptr memd = y -> readers mpz11 y = readers mpz10 y) ∧ value dp2 (abs_size mpz11 (Zutil.ptr memd)) = abs_value_of mpz11 (Zutil.ptr memd) ∧ plength dp2 = alloc mpz11 (Zutil.ptr memd) ∧ offset dp2 = 0%Z ∧ min dp2 = 0%Z ∧ C.max dp2 = plength dp2 ∧ zone1 dp2 = zones mpz11 (Zutil.ptr memd) -> ((1%Z ≤ bv_signed o1 ∧ bv_signed o1 ≤ bv_signed nl ∧ bv_signed nl ≤ 2147483647%Z - 1%Z) ∧ valid np (bv_signed nl) ∧ valid dp2 (bv_signed o1) ∧ valid qp (bv_signed nl - bv_signed o1 + 1%Z) ∧ valid rp (bv_signed o1) ∧ (writable qp = true ∧ writable rp = true) ∧ 0%Z < bv_unsigned (pelts dp2 (offset dp2 + bv_signed o1 - 1%Z))) ∧ (∀(rp1 : C.ptr (bv 64%N)) (qp1 : C.ptr (bv 64%N)), length (data rp1) = length (data rp) ∧ offset rp1 = offset rp ∧ min rp1 = min rp ∧ C.max rp1 = C.max rp ∧ writable rp1 = writable rp ∧ zone1 rp1 = zone1 rp -> length (data qp1) = length (data qp) ∧ offset qp1 = offset qp ∧ min qp1 = min qp ∧ C.max qp1 = C.max qp ∧ writable qp1 = writable qp ∧ zone1 qp1 = zone1 qp -> value np (bv_signed nl) = value qp1 (bv_signed nl - bv_signed o1 + 1%Z) * value dp2 (bv_signed o1) + value rp1 (bv_signed o1) ∧ value rp1 (bv_signed o1) < value dp2 (bv_signed o1) -> int'32_in_bounds (bv_signed o3 - 1%Z) ∧ (∀(o7 : bv 32%N), bv_signed o7 = bv_signed o3 - 1%Z -> (min qp1 ≤ offset qp1 + bv_signed o7 ∧ offset qp1 + bv_signed o7 < C.max qp1) ∧ (let qh : bv 64%N := pelts qp1 (offset qp1 + bv_signed o7) in ∀(o8 : bool), (bv_unsigned qh = bv_unsigned (0%bv : bv 64%N) -> o8 = true) ∧ (o8 = true -> qh = (0%bv : bv 64%N)) -> (∀(o9 : bv 32%N), (if decide (o8 = true) then o9 = (1%bv : bv 32%N) else o9 = (0%bv : bv 32%N)) -> int'32_in_bounds (bv_signed o3 - bv_signed o9) ∧ (∀(o10 : bv 32%N), bv_signed o10 = bv_signed o3 - bv_signed o9 -> (0%Z ≤ bv_signed o1 ∧ valid rp1 (bv_signed o1)) ∧ (∀(dl : bv 32%N), (0%Z ≤ bv_signed dl ∧ bv_signed dl ≤ bv_signed o1) ∧ value rp1 (bv_signed dl) = value rp1 (bv_signed o1) ∧ (bv_signed dl = 0%Z ∨ 0%Z < bv_unsigned (pelts rp1 (offset rp1 + bv_signed dl - 1%Z))) ∧ (bv_signed dl = 0%Z ∨ Z.pow (18446744073709551615%Z + 1%Z) (bv_signed dl - 1%Z) ≤ value rp1 (bv_signed dl)) -> (∀(o11 : bv 32%N), (bv_signed ns = 0%Z -> o11 = ds) ∧ (bv_signed ds = 0%Z -> o11 = ns) ∧ (0%Z ≤ bv_signed ns ∧ 0%Z ≤ bv_signed ds ∨ bv_signed ns < 0%Z ∧ bv_signed ds < 0%Z -> 0%Z ≤ bv_signed o11) ∧ (bv_signed ns < 0%Z ∧ 0%Z ≤ bv_signed ds ∨ 0%Z ≤ bv_signed ns ∧ bv_signed ds < 0%Z -> bv_signed o11 < 0%Z) -> (¬ 0%Z ≤ bv_signed o11 -> int'32_in_bounds (- bv_signed o10)) ∧ (∀(qs : bv 32%N), (if decide (0%Z ≤ bv_signed o11) then qs = o10 else bv_signed qs = - bv_signed o10) -> (¬ 0%Z ≤ bv_signed ns -> int'32_in_bounds (- bv_signed dl)) ∧ (∀(rs : bv 32%N), (if decide (0%Z ≤ bv_signed ns) then rs = dl else bv_signed rs = - bv_signed dl) -> mpz_unchanged quot mpz11 mpz8 ∧ (readers mpz11 quot = readers mpz8 quot ∧ (- 2%Z < readers mpz11 quot -> abs_value_of mpz11 quot = abs_value_of mpz8 quot ∧ alloc mpz11 quot = alloc mpz8 quot ∧ abs_size mpz11 quot = abs_size mpz8 quot ∧ sgn mpz11 quot = sgn mpz8 quot ∧ readers mpz11 quot = readers mpz8 quot ∧ zones mpz11 quot = zones mpz8 quot) -> (zones mpz11 quot = zone1 qp1 ∧ readers mpz11 quot = - 1%Z ∧ offset qp1 = 0%Z ∧ min qp1 = 0%Z ∧ C.max qp1 = plength qp1 ∧ Z.abs (bv_signed qs) ≤ plength qp1 ∧ plength qp1 = alloc mpz11 quot ∧ (¬ bv_signed qs = 0%Z -> Z.pow (18446744073709551615%Z + 1%Z) (Z.abs (bv_signed qs) - 1%Z) ≤ value qp1 (Z.abs (bv_signed qs)))) ∧ (∀(mpz12 : mpz_memo), alloc mpz12 = alloc mpz11 ∧ readers mpz12 = readers mpz11 ∧ zones mpz12 = zones mpz11 -> (∀(y : mpz_ptr), ¬ y = quot -> mpz_unchanged y mpz12 mpz11) ∧ (sgn mpz12 quot = 1%Z) = (0%Z ≤ bv_signed qs) ∧ (sgn mpz12 quot = - 1%Z) = (bv_signed qs < 0%Z) ∧ abs_size mpz12 quot = Z.abs (bv_signed qs) ∧ abs_value_of mpz12 quot = value qp1 (Z.abs (bv_signed qs)) -> (zones mpz12 rem = zone1 rp1 ∧ readers mpz12 rem = - 1%Z ∧ offset rp1 = 0%Z ∧ min rp1 = 0%Z ∧ C.max rp1 = plength rp1 ∧ Z.abs (bv_signed rs) ≤ plength rp1 ∧ plength rp1 = alloc mpz12 rem ∧ (¬ bv_signed rs = 0%Z -> Z.pow (18446744073709551615%Z + 1%Z) (Z.abs (bv_signed rs) - 1%Z) ≤ value rp1 (Z.abs (bv_signed rs)))) ∧ (∀(mpz13 : mpz_memo), alloc mpz13 = alloc mpz12 ∧ readers mpz13 = readers mpz12 ∧ zones mpz13 = zones mpz12 -> (∀(y : mpz_ptr), ¬ y = rem -> mpz_unchanged y mpz13 mpz12) ∧ (sgn mpz13 rem = 1%Z) = (0%Z ≤ bv_signed rs) ∧ (sgn mpz13 rem = - 1%Z) = (bv_signed rs < 0%Z) ∧ abs_size mpz13 rem = Z.abs (bv_signed rs) ∧ abs_value_of mpz13 rem = value rp1 (Z.abs (bv_signed rs)) -> mpz_unchanged quot mpz13 mpz12 ∧ (readers mpz13 quot = readers mpz12 quot ∧ (- 2%Z < readers mpz13 quot -> abs_value_of mpz13 quot = abs_value_of mpz12 quot ∧ alloc mpz13 quot = alloc mpz12 quot ∧ abs_size mpz13 quot = abs_size mpz12 quot ∧ sgn mpz13 quot = sgn mpz12 quot ∧ readers mpz13 quot = readers mpz12 quot ∧ zones mpz13 quot = zones mpz12 quot) -> (zones mpz13 rem = zone1 rp1 ∧ readers mpz13 rem = - 1%Z ∧ min rp1 = 0%Z ∧ C.max rp1 = plength rp1 ∧ abs_value_of mpz13 rem = value rp1 (abs_size mpz13 rem)) ∧ (∀(mpz14 : mpz_memo), abs_value_of mpz14 = abs_value_of mpz13 ∧ alloc mpz14 = alloc mpz13 ∧ abs_size mpz14 = abs_size mpz13 ∧ sgn mpz14 = sgn mpz13 ∧ zones mpz14 = zones mpz13 -> readers mpz14 rem = 0%Z ∧ (∀(y : mpz_ptr), ¬ y = rem -> readers mpz14 y = readers mpz13 y) -> (zones mpz14 quot = zone1 qp1 ∧ readers mpz14 quot = - 1%Z ∧ min qp1 = 0%Z ∧ C.max qp1 = plength qp1 ∧ abs_value_of mpz14 quot = value qp1 (abs_size mpz14 quot)) ∧ (∀(mpz15 : mpz_memo), abs_value_of mpz15 = abs_value_of mpz14 ∧ alloc mpz15 = alloc mpz14 ∧ abs_size mpz15 = abs_size mpz14 ∧ sgn mpz15 = sgn mpz14 ∧ zones mpz15 = zones mpz14 -> readers mpz15 quot = 0%Z ∧ (∀(y : mpz_ptr), ¬ y = quot -> readers mpz15 y = readers mpz14 y) -> mpz_unchanged num mpz15 mpz11 ∧ (readers mpz15 num = readers mpz11 num ∧ (- 2%Z < readers mpz15 num -> abs_value_of mpz15 num = abs_value_of mpz11 num ∧ alloc mpz15 num = alloc mpz11 num ∧ abs_size mpz15 num = abs_size mpz11 num ∧ sgn mpz15 num = sgn mpz11 num ∧ readers mpz15 num = readers mpz11 num ∧ zones mpz15 num = zones mpz11 num) -> mpz_unchanged (Zutil.ptr memd) mpz15 mpz11 ∧ (readers mpz15 (Zutil.ptr memd) = readers mpz11 (Zutil.ptr memd) ∧ (- 2%Z < readers mpz15 (Zutil.ptr memd) -> abs_value_of mpz15 (Zutil.ptr memd) = abs_value_of mpz11 (Zutil.ptr memd) ∧ alloc mpz15 (Zutil.ptr memd) = alloc mpz11 (Zutil.ptr memd) ∧ abs_size mpz15 (Zutil.ptr memd) = abs_size mpz11 (Zutil.ptr memd) ∧ sgn mpz15 (Zutil.ptr memd) = sgn mpz11 (Zutil.ptr memd) ∧ readers mpz15 (Zutil.ptr memd) = readers mpz11 (Zutil.ptr memd) ∧ zones mpz15 (Zutil.ptr memd) = zones mpz11 (Zutil.ptr memd)) -> (zones mpz15 num = zone1 np ∧ 1%Z ≤ readers mpz15 num ∧ min np = 0%Z ∧ C.max np = plength np) ∧ (∀(mpz16 : mpz_memo), abs_value_of mpz16 = abs_value_of mpz15 ∧ alloc mpz16 = alloc mpz15 ∧ abs_size mpz16 = abs_size mpz15 ∧ sgn mpz16 = sgn mpz15 ∧ zones mpz16 = zones mpz15 -> readers mpz16 num = readers mpz15 num - 1%Z ∧ (∀(y : mpz_ptr), ¬ y = num -> readers mpz16 y = readers mpz15 y) -> (zones mpz16 (Zutil.ptr memd) = zone1 dp2 ∧ 1%Z ≤ readers mpz16 (Zutil.ptr memd) ∧ min dp2 = 0%Z ∧ C.max dp2 = plength dp2) ∧ (∀(mpz17 : mpz_memo), abs_value_of mpz17 = abs_value_of mpz16 ∧ alloc mpz17 = alloc mpz16 ∧ abs_size mpz17 = abs_size mpz16 ∧ sgn mpz17 = sgn mpz16 ∧ zones mpz17 = zones mpz16 -> readers mpz17 (Zutil.ptr memd) = readers mpz16 (Zutil.ptr memd) - 1%Z ∧ (∀(y : mpz_ptr), ¬ y = Zutil.ptr memd -> readers mpz17 y = readers mpz16 y) -> mpz_unchanged (Zutil.ptr memd) mpz17 mpz7 ∧ (readers mpz17 (Zutil.ptr memd) = readers mpz7 (Zutil.ptr memd) ∧ (- 2%Z < readers mpz17 (Zutil.ptr memd) -> abs_value_of mpz17 (Zutil.ptr memd) = abs_value_of mpz7 (Zutil.ptr memd) ∧ alloc mpz17 (Zutil.ptr memd) = alloc mpz7 (Zutil.ptr memd) ∧ abs_size mpz17 (Zutil.ptr memd) = abs_size mpz7 (Zutil.ptr memd) ∧ sgn mpz17 (Zutil.ptr memd) = sgn mpz7 (Zutil.ptr memd) ∧ readers mpz17 (Zutil.ptr memd) = readers mpz7 (Zutil.ptr memd) ∧ zones mpz17 (Zutil.ptr memd) = zones mpz7 (Zutil.ptr memd)) -> mpz_unchanged num mpz17 mpz7 ∧ (readers mpz17 num = readers mpz7 num ∧ (- 2%Z < readers mpz17 num -> abs_value_of mpz17 num = abs_value_of mpz7 num ∧ alloc mpz17 num = alloc mpz7 num ∧ abs_size mpz17 num = abs_size mpz7 num ∧ sgn mpz17 num = sgn mpz7 num ∧ readers mpz17 num = readers mpz7 num ∧ zones mpz17 num = zones mpz7 num) -> (if decide True then (Zutil.ok memd = true ∧ - 1%Z ≤ readers mpz17 (Zutil.ptr memd) ∧ readers mpz17 (Zutil.ptr memd) ≤ 0%Z) ∧ (∀(mpz18 : mpz_memo), readers mpz18 (Zutil.ptr memd) = - 2%Z ∧ (∀(y : mpz_ptr), ¬ y = Zutil.ptr memd -> mpz_unchanged y mpz18 mpz17) -> mpz_unchanged quot mpz18 mpz15 ∧ (readers mpz18 quot = readers mpz15 quot ∧ (- 2%Z < readers mpz18 quot -> abs_value_of mpz18 quot = abs_value_of mpz15 quot ∧ alloc mpz18 quot = alloc mpz15 quot ∧ abs_size mpz18 quot = abs_size mpz15 quot ∧ sgn mpz18 quot = sgn mpz15 quot ∧ readers mpz18 quot = readers mpz15 quot ∧ zones mpz18 quot = zones mpz15 quot) -> mpz_unchanged rem mpz18 mpz15 ∧ (readers mpz18 rem = readers mpz15 rem ∧ (- 2%Z < readers mpz18 rem -> abs_value_of mpz18 rem = abs_value_of mpz15 rem ∧ alloc mpz18 rem = alloc mpz15 rem ∧ abs_size mpz18 rem = abs_size mpz15 rem ∧ sgn mpz18 rem = sgn mpz15 rem ∧ readers mpz18 rem = readers mpz15 rem ∧ zones mpz18 rem = zones mpz15 rem) -> value_of quot mpz18 * value_of den mpz + value_of rem mpz18 = value_of num mpz ∧ (0%Z ≤ abs_value_of mpz18 rem ∧ abs_value_of mpz18 rem < abs_value_of mpz den) ∧ (∀(x : mpz_ptr), ¬ x = quot -> ¬ x = rem -> mpz_unchanged x mpz18 mpz) ∧ readers mpz18 num = 0%Z ∧ readers mpz18 den = 0%Z ∧ readers mpz18 quot = 0%Z ∧ readers mpz18 rem = 0%Z))) else mpz_unchanged quot mpz17 mpz15 ∧ (readers mpz17 quot = readers mpz15 quot ∧ (- 2%Z < readers mpz17 quot -> abs_value_of mpz17 quot = abs_value_of mpz15 quot ∧ alloc mpz17 quot = alloc mpz15 quot ∧ abs_size mpz17 quot = abs_size mpz15 quot ∧ sgn mpz17 quot = sgn mpz15 quot ∧ readers mpz17 quot = readers mpz15 quot ∧ zones mpz17 quot = zones mpz15 quot) -> mpz_unchanged rem mpz17 mpz15 ∧ (readers mpz17 rem = readers mpz15 rem ∧ (- 2%Z < readers mpz17 rem -> abs_value_of mpz17 rem = abs_value_of mpz15 rem ∧ alloc mpz17 rem = alloc mpz15 rem ∧ abs_size mpz17 rem = abs_size mpz15 rem ∧ sgn mpz17 rem = sgn mpz15 rem ∧ readers mpz17 rem = readers mpz15 rem ∧ zones mpz17 rem = zones mpz15 rem) -> value_of quot mpz17 * value_of den mpz + value_of rem mpz17 = value_of num mpz ∧ (0%Z ≤ abs_value_of mpz17 rem ∧ abs_value_of mpz17 rem < abs_value_of mpz den) ∧ (∀(x : mpz_ptr), ¬ x = quot -> ¬ x = rem -> mpz_unchanged x mpz17 mpz) ∧ readers mpz17 num = 0%Z ∧ readers mpz17 den = 0%Z ∧ readers mpz17 quot = 0%Z ∧ readers mpz17 rem = 0%Z))))))))))))))))))))))))))))))))))))))))))))))))))))) else mpz_eq num rem = (num = rem) -> (∀(o5 : bool), (if decide (mpz_eq num rem) then o5 = true else o5 = (if decide (mpz_eq num quot) then true else false) ∧ (o5 = true) = (num = quot)) -> (if decide (o5 = true) then 0%Z ≤ readers mpz num ∧ (∀(mpz1 : mpz_memo), abs_value_of mpz1 = abs_value_of mpz ∧ alloc mpz1 = alloc mpz ∧ abs_size mpz1 = abs_size mpz ∧ sgn mpz1 = sgn mpz ∧ zones mpz1 = zones mpz -> (∀(np : C.ptr (bv 64%N)), readers mpz1 num = readers mpz num + 1%Z ∧ (∀(y : mpz_ptr), ¬ num = y -> readers mpz1 y = readers mpz y) ∧ value np (abs_size mpz1 num) = abs_value_of mpz1 num ∧ plength np = alloc mpz1 num ∧ offset np = 0%Z ∧ min np = 0%Z ∧ C.max np = plength np ∧ zone1 np = zones mpz1 num -> (∀(mpz2 : mpz_memo) (memn : mpz_mem), Zutil.ok memn = true ∧ readers mpz2 (Zutil.ptr memn) = 0%Z ∧ alloc mpz2 (Zutil.ptr memn) = 0%Z ∧ abs_size mpz2 (Zutil.ptr memn) = 0%Z ∧ readers mpz1 (Zutil.ptr memn) = - 2%Z ∧ (∀(x : mpz_ptr), ¬ x = Zutil.ptr memn -> mpz_unchanged x mpz2 mpz1) -> 0%Z ≤ bv_signed nl ∧ (∀(o6 : bv 32%N), bv_unsigned o6 = bv_signed nl -> 0%Z ≤ bv_unsigned o6 ∧ (∀(tnp : C.ptr (bv 64%N)), plength tnp = bv_unsigned o6 ∧ offset tnp = 0%Z ∧ min tnp = 0%Z ∧ C.max tnp = bv_unsigned o6 ∧ writable tnp = true -> (abs_size mpz2 (Zutil.ptr memn) ≤ bv_signed nl ∧ - 1%Z ≤ readers mpz2 (Zutil.ptr memn) ∧ readers mpz2 (Zutil.ptr memn) ≤ 0%Z) ∧ (∀(mpz3 : mpz_memo), abs_value_of mpz3 = abs_value_of mpz2 ∧ abs_size mpz3 = abs_size mpz2 ∧ sgn mpz3 = sgn mpz2 ∧ readers mpz3 = readers mpz2 ∧ zones mpz3 = zones mpz2 -> (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> mpz_unchanged y mpz3 mpz2) ∧ alloc mpz3 (Zutil.ptr memn) = bv_signed nl -> (valid np (bv_signed nl) ∧ valid tnp (bv_signed nl) ∧ writable tnp = true) ∧ (∀(tnp1 : C.ptr (bv 64%N)) (np1 : C.ptr (bv 64%N)), offset tnp1 = offset tnp ∧ writable tnp1 = writable tnp ∧ zone1 tnp1 = zone1 tnp -> offset np1 = offset np ∧ writable np1 = writable np ∧ zone1 np1 = zone1 np -> map_eq_sub_shift (pelts tnp1) (pelts np) (offset tnp1) (offset np) (bv_signed nl) ∧ (∀(j : Z), j < offset tnp1 ∨ offset tnp1 + bv_signed nl ≤ j -> pelts tnp1 j = pelts tnp j) ∧ (∀(j : Z), pelts np1 j = pelts np j) ∧ (min np1 = min np ∧ C.max np1 = C.max np ∧ plength np1 = plength np) ∧ min tnp1 = min tnp ∧ C.max tnp1 = C.max tnp ∧ plength tnp1 = plength tnp -> (offset tnp1 = 0%Z ∧ writable tnp1 = true ∧ min tnp1 = 0%Z ∧ C.max tnp1 = plength tnp1 ∧ plength tnp1 = alloc mpz3 (Zutil.ptr memn) ∧ (readers mpz3 (Zutil.ptr memn) = 0%Z ∨ readers mpz3 (Zutil.ptr memn) = - 1%Z)) ∧ (∀(mpz4 : mpz_memo), alloc mpz4 = alloc mpz3 ∧ abs_size mpz4 = abs_size mpz3 ∧ sgn mpz4 = sgn mpz3 -> (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> mpz_unchanged y mpz4 mpz3) ∧ abs_value_of mpz4 (Zutil.ptr memn) = value tnp1 (abs_size mpz4 (Zutil.ptr memn)) ∧ readers mpz4 (Zutil.ptr memn) = - 1%Z ∧ zones mpz4 (Zutil.ptr memn) = zone1 tnp1 -> (zones mpz4 (Zutil.ptr memn) = zone1 tnp1 ∧ readers mpz4 (Zutil.ptr memn) = - 1%Z ∧ offset tnp1 = 0%Z ∧ min tnp1 = 0%Z ∧ C.max tnp1 = plength tnp1 ∧ Z.abs (bv_signed ns) ≤ plength tnp1 ∧ plength tnp1 = alloc mpz4 (Zutil.ptr memn) ∧ (¬ bv_signed ns = 0%Z -> Z.pow (18446744073709551615%Z + 1%Z) (Z.abs (bv_signed ns) - 1%Z) ≤ value tnp1 (Z.abs (bv_signed ns)))) ∧ (∀(mpz5 : mpz_memo), alloc mpz5 = alloc mpz4 ∧ readers mpz5 = readers mpz4 ∧ zones mpz5 = zones mpz4 -> (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> mpz_unchanged y mpz5 mpz4) ∧ (sgn mpz5 (Zutil.ptr memn) = 1%Z) = (0%Z ≤ bv_signed ns) ∧ (sgn mpz5 (Zutil.ptr memn) = - 1%Z) = (bv_signed ns < 0%Z) ∧ abs_size mpz5 (Zutil.ptr memn) = Z.abs (bv_signed ns) ∧ abs_value_of mpz5 (Zutil.ptr memn) = value tnp1 (Z.abs (bv_signed ns)) -> (zones mpz5 (Zutil.ptr memn) = zone1 tnp1 ∧ readers mpz5 (Zutil.ptr memn) = - 1%Z ∧ min tnp1 = 0%Z ∧ C.max tnp1 = plength tnp1 ∧ abs_value_of mpz5 (Zutil.ptr memn) = value tnp1 (abs_size mpz5 (Zutil.ptr memn))) ∧ (∀(mpz6 : mpz_memo), abs_value_of mpz6 = abs_value_of mpz5 ∧ alloc mpz6 = alloc mpz5 ∧ abs_size mpz6 = abs_size mpz5 ∧ sgn mpz6 = sgn mpz5 ∧ zones mpz6 = zones mpz5 -> readers mpz6 (Zutil.ptr memn) = 0%Z ∧ (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> readers mpz6 y = readers mpz5 y) -> mpz_unchanged num mpz6 mpz1 ∧ (readers mpz6 num = readers mpz1 num ∧ (- 2%Z < readers mpz6 num -> abs_value_of mpz6 num = abs_value_of mpz1 num ∧ alloc mpz6 num = alloc mpz1 num ∧ abs_size mpz6 num = abs_size mpz1 num ∧ sgn mpz6 num = sgn mpz1 num ∧ readers mpz6 num = readers mpz1 num ∧ zones mpz6 num = zones mpz1 num) -> (zones mpz6 num = zone1 np1 ∧ 1%Z ≤ readers mpz6 num ∧ min np1 = 0%Z ∧ C.max np1 = plength np1) ∧ (∀(mpz7 : mpz_memo), abs_value_of mpz7 = abs_value_of mpz6 ∧ alloc mpz7 = alloc mpz6 ∧ abs_size mpz7 = abs_size mpz6 ∧ sgn mpz7 = sgn mpz6 ∧ zones mpz7 = zones mpz6 -> readers mpz7 num = readers mpz6 num - 1%Z ∧ (∀(y : mpz_ptr), ¬ y = num -> readers mpz7 y = readers mpz6 y) -> mpz_unchanged num mpz7 mpz ∧ (readers mpz7 num = readers mpz num ∧ (- 2%Z < readers mpz7 num -> abs_value_of mpz7 num = abs_value_of mpz num ∧ alloc mpz7 num = alloc mpz num ∧ abs_size mpz7 num = abs_size mpz num ∧ sgn mpz7 num = sgn mpz num ∧ readers mpz7 num = readers mpz num ∧ zones mpz7 num = zones mpz num) -> mpz_unchanged den mpz7 mpz ∧ (readers mpz7 den = readers mpz den ∧ (- 2%Z < readers mpz7 den -> abs_value_of mpz7 den = abs_value_of mpz den ∧ alloc mpz7 den = alloc mpz den ∧ abs_size mpz7 den = abs_size mpz den ∧ sgn mpz7 den = sgn mpz den ∧ readers mpz7 den = readers mpz den ∧ zones mpz7 den = zones mpz den) -> mpz_unchanged rem mpz7 mpz ∧ (readers mpz7 rem = readers mpz rem ∧ (- 2%Z < readers mpz7 rem -> abs_value_of mpz7 rem = abs_value_of mpz rem ∧ alloc mpz7 rem = alloc mpz rem ∧ abs_size mpz7 rem = abs_size mpz rem ∧ sgn mpz7 rem = sgn mpz rem ∧ readers mpz7 rem = readers mpz rem ∧ zones mpz7 rem = zones mpz rem) -> mpz_unchanged quot mpz7 mpz ∧ (readers mpz7 quot = readers mpz quot ∧ (- 2%Z < readers mpz7 quot -> abs_value_of mpz7 quot = abs_value_of mpz quot ∧ alloc mpz7 quot = alloc mpz quot ∧ abs_size mpz7 quot = abs_size mpz quot ∧ sgn mpz7 quot = sgn mpz quot ∧ readers mpz7 quot = readers mpz quot ∧ zones mpz7 quot = zones mpz quot) -> mpz_unchanged den mpz7 mpz ∧ (readers mpz7 den = readers mpz den ∧ (- 2%Z < readers mpz7 den -> abs_value_of mpz7 den = abs_value_of mpz den ∧ alloc mpz7 den = alloc mpz den ∧ abs_size mpz7 den = abs_size mpz den ∧ sgn mpz7 den = sgn mpz den ∧ readers mpz7 den = readers mpz den ∧ zones mpz7 den = zones mpz den) -> (readers mpz7 quot = 0%Z ∧ 1%Z ≤ alloc mpz7 quot) ∧ (∀(mpz8 : mpz_memo), sgn mpz8 = sgn mpz7 -> (∀(qp : C.ptr (bv 64%N)), (∀(y : mpz_ptr), ¬ y = quot -> mpz_unchanged y mpz8 mpz7) ∧ readers mpz8 quot = - 1%Z ∧ abs_value_of mpz8 quot = value qp (abs_size mpz8 quot) ∧ zones mpz8 quot = zone1 qp ∧ offset qp = 0%Z ∧ plength qp = alloc mpz8 quot ∧ min qp = 0%Z ∧ C.max qp = plength qp ∧ writable qp = true ∧ abs_size mpz8 quot = abs_size mpz7 quot ∧ value qp (abs_size mpz7 quot) = abs_value_of mpz7 quot ∧ (if decide (alloc mpz7 quot < bv_signed o3) then alloc mpz8 quot = bv_signed o3 else alloc mpz8 quot = alloc mpz7 quot) -> mpz_unchanged rem mpz8 mpz7 ∧ (readers mpz8 rem = readers mpz7 rem ∧ (- 2%Z < readers mpz8 rem -> abs_value_of mpz8 rem = abs_value_of mpz7 rem ∧ alloc mpz8 rem = alloc mpz7 rem ∧ abs_size mpz8 rem = abs_size mpz7 rem ∧ sgn mpz8 rem = sgn mpz7 rem ∧ readers mpz8 rem = readers mpz7 rem ∧ zones mpz8 rem = zones mpz7 rem) -> (readers mpz8 rem = 0%Z ∧ 1%Z ≤ alloc mpz8 rem) ∧ (∀(mpz9 : mpz_memo), sgn mpz9 = sgn mpz8 -> (∀(rp : C.ptr (bv 64%N)), (∀(y : mpz_ptr), ¬ y = rem -> mpz_unchanged y mpz9 mpz8) ∧ readers mpz9 rem = - 1%Z ∧ abs_value_of mpz9 rem = value rp (abs_size mpz9 rem) ∧ zones mpz9 rem = zone1 rp ∧ offset rp = 0%Z ∧ plength rp = alloc mpz9 rem ∧ min rp = 0%Z ∧ C.max rp = plength rp ∧ writable rp = true ∧ abs_size mpz9 rem = abs_size mpz8 rem ∧ value rp (abs_size mpz8 rem) = abs_value_of mpz8 rem ∧ (if decide (alloc mpz8 rem < bv_signed o1) then alloc mpz9 rem = bv_signed o1 else alloc mpz9 rem = alloc mpz8 rem) -> mpz_unchanged (Zutil.ptr memn) mpz9 mpz7 ∧ (readers mpz9 (Zutil.ptr memn) = readers mpz7 (Zutil.ptr memn) ∧ (- 2%Z < readers mpz9 (Zutil.ptr memn) -> abs_value_of mpz9 (Zutil.ptr memn) = abs_value_of mpz7 (Zutil.ptr memn) ∧ alloc mpz9 (Zutil.ptr memn) = alloc mpz7 (Zutil.ptr memn) ∧ abs_size mpz9 (Zutil.ptr memn) = abs_size mpz7 (Zutil.ptr memn) ∧ sgn mpz9 (Zutil.ptr memn) = sgn mpz7 (Zutil.ptr memn) ∧ readers mpz9 (Zutil.ptr memn) = readers mpz7 (Zutil.ptr memn) ∧ zones mpz9 (Zutil.ptr memn) = zones mpz7 (Zutil.ptr memn)) -> mpz_unchanged den mpz9 mpz7 ∧ (readers mpz9 den = readers mpz7 den ∧ (- 2%Z < readers mpz9 den -> abs_value_of mpz9 den = abs_value_of mpz7 den ∧ alloc mpz9 den = alloc mpz7 den ∧ abs_size mpz9 den = abs_size mpz7 den ∧ sgn mpz9 den = sgn mpz7 den ∧ readers mpz9 den = readers mpz7 den ∧ zones mpz9 den = zones mpz7 den) -> 0%Z ≤ readers mpz9 (Zutil.ptr memn) ∧ (∀(mpz10 : mpz_memo), abs_value_of mpz10 = abs_value_of mpz9 ∧ alloc mpz10 = alloc mpz9 ∧ abs_size mpz10 = abs_size mpz9 ∧ sgn mpz10 = sgn mpz9 ∧ zones mpz10 = zones mpz9 -> (∀(np2 : C.ptr (bv 64%N)), readers mpz10 (Zutil.ptr memn) = readers mpz9 (Zutil.ptr memn) + 1%Z ∧ (∀(y : mpz_ptr), ¬ Zutil.ptr memn = y -> readers mpz10 y = readers mpz9 y) ∧ value np2 (abs_size mpz10 (Zutil.ptr memn)) = abs_value_of mpz10 (Zutil.ptr memn) ∧ plength np2 = alloc mpz10 (Zutil.ptr memn) ∧ offset np2 = 0%Z ∧ min np2 = 0%Z ∧ C.max np2 = plength np2 ∧ zone1 np2 = zones mpz10 (Zutil.ptr memn) -> 0%Z ≤ readers mpz10 den ∧ (∀(mpz11 : mpz_memo), abs_value_of mpz11 = abs_value_of mpz10 ∧ alloc mpz11 = alloc mpz10 ∧ abs_size mpz11 = abs_size mpz10 ∧ sgn mpz11 = sgn mpz10 ∧ zones mpz11 = zones mpz10 -> (∀(dp : C.ptr (bv 64%N)), readers mpz11 den = readers mpz10 den + 1%Z ∧ (∀(y : mpz_ptr), ¬ den = y -> readers mpz11 y = readers mpz10 y) ∧ value dp (abs_size mpz11 den) = abs_value_of mpz11 den ∧ plength dp = alloc mpz11 den ∧ offset dp = 0%Z ∧ min dp = 0%Z ∧ C.max dp = plength dp ∧ zone1 dp = zones mpz11 den -> ((1%Z ≤ bv_signed o1 ∧ bv_signed o1 ≤ bv_signed nl ∧ bv_signed nl ≤ 2147483647%Z - 1%Z) ∧ valid np2 (bv_signed nl) ∧ valid dp (bv_signed o1) ∧ valid qp (bv_signed nl - bv_signed o1 + 1%Z) ∧ valid rp (bv_signed o1) ∧ (writable qp = true ∧ writable rp = true) ∧ 0%Z < bv_unsigned (pelts dp (offset dp + bv_signed o1 - 1%Z))) ∧ (∀(rp1 : C.ptr (bv 64%N)) (qp1 : C.ptr (bv 64%N)), length (data rp1) = length (data rp) ∧ offset rp1 = offset rp ∧ min rp1 = min rp ∧ C.max rp1 = C.max rp ∧ writable rp1 = writable rp ∧ zone1 rp1 = zone1 rp -> length (data qp1) = length (data qp) ∧ offset qp1 = offset qp ∧ min qp1 = min qp ∧ C.max qp1 = C.max qp ∧ writable qp1 = writable qp ∧ zone1 qp1 = zone1 qp -> value np2 (bv_signed nl) = value qp1 (bv_signed nl - bv_signed o1 + 1%Z) * value dp (bv_signed o1) + value rp1 (bv_signed o1) ∧ value rp1 (bv_signed o1) < value dp (bv_signed o1) -> int'32_in_bounds (bv_signed o3 - 1%Z) ∧ (∀(o7 : bv 32%N), bv_signed o7 = bv_signed o3 - 1%Z -> (min qp1 ≤ offset qp1 + bv_signed o7 ∧ offset qp1 + bv_signed o7 < C.max qp1) ∧ (let qh : bv 64%N := pelts qp1 (offset qp1 + bv_signed o7) in ∀(o8 : bool), (bv_unsigned qh = bv_unsigned (0%bv : bv 64%N) -> o8 = true) ∧ (o8 = true -> qh = (0%bv : bv 64%N)) -> (∀(o9 : bv 32%N), (if decide (o8 = true) then o9 = (1%bv : bv 32%N) else o9 = (0%bv : bv 32%N)) -> int'32_in_bounds (bv_signed o3 - bv_signed o9) ∧ (∀(o10 : bv 32%N), bv_signed o10 = bv_signed o3 - bv_signed o9 -> (0%Z ≤ bv_signed o1 ∧ valid rp1 (bv_signed o1)) ∧ (∀(dl : bv 32%N), (0%Z ≤ bv_signed dl ∧ bv_signed dl ≤ bv_signed o1) ∧ value rp1 (bv_signed dl) = value rp1 (bv_signed o1) ∧ (bv_signed dl = 0%Z ∨ 0%Z < bv_unsigned (pelts rp1 (offset rp1 + bv_signed dl - 1%Z))) ∧ (bv_signed dl = 0%Z ∨ Z.pow (18446744073709551615%Z + 1%Z) (bv_signed dl - 1%Z) ≤ value rp1 (bv_signed dl)) -> (∀(o11 : bv 32%N), (bv_signed ns = 0%Z -> o11 = ds) ∧ (bv_signed ds = 0%Z -> o11 = ns) ∧ (0%Z ≤ bv_signed ns ∧ 0%Z ≤ bv_signed ds ∨ bv_signed ns < 0%Z ∧ bv_signed ds < 0%Z -> 0%Z ≤ bv_signed o11) ∧ (bv_signed ns < 0%Z ∧ 0%Z ≤ bv_signed ds ∨ 0%Z ≤ bv_signed ns ∧ bv_signed ds < 0%Z -> bv_signed o11 < 0%Z) -> (¬ 0%Z ≤ bv_signed o11 -> int'32_in_bounds (- bv_signed o10)) ∧ (∀(qs : bv 32%N), (if decide (0%Z ≤ bv_signed o11) then qs = o10 else bv_signed qs = - bv_signed o10) -> (¬ 0%Z ≤ bv_signed ns -> int'32_in_bounds (- bv_signed dl)) ∧ (∀(rs : bv 32%N), (if decide (0%Z ≤ bv_signed ns) then rs = dl else bv_signed rs = - bv_signed dl) -> mpz_unchanged quot mpz11 mpz8 ∧ (readers mpz11 quot = readers mpz8 quot ∧ (- 2%Z < readers mpz11 quot -> abs_value_of mpz11 quot = abs_value_of mpz8 quot ∧ alloc mpz11 quot = alloc mpz8 quot ∧ abs_size mpz11 quot = abs_size mpz8 quot ∧ sgn mpz11 quot = sgn mpz8 quot ∧ readers mpz11 quot = readers mpz8 quot ∧ zones mpz11 quot = zones mpz8 quot) -> (zones mpz11 quot = zone1 qp1 ∧ readers mpz11 quot = - 1%Z ∧ offset qp1 = 0%Z ∧ min qp1 = 0%Z ∧ C.max qp1 = plength qp1 ∧ Z.abs (bv_signed qs) ≤ plength qp1 ∧ plength qp1 = alloc mpz11 quot ∧ (¬ bv_signed qs = 0%Z -> Z.pow (18446744073709551615%Z + 1%Z) (Z.abs (bv_signed qs) - 1%Z) ≤ value qp1 (Z.abs (bv_signed qs)))) ∧ (∀(mpz12 : mpz_memo), alloc mpz12 = alloc mpz11 ∧ readers mpz12 = readers mpz11 ∧ zones mpz12 = zones mpz11 -> (∀(y : mpz_ptr), ¬ y = quot -> mpz_unchanged y mpz12 mpz11) ∧ (sgn mpz12 quot = 1%Z) = (0%Z ≤ bv_signed qs) ∧ (sgn mpz12 quot = - 1%Z) = (bv_signed qs < 0%Z) ∧ abs_size mpz12 quot = Z.abs (bv_signed qs) ∧ abs_value_of mpz12 quot = value qp1 (Z.abs (bv_signed qs)) -> (zones mpz12 rem = zone1 rp1 ∧ readers mpz12 rem = - 1%Z ∧ offset rp1 = 0%Z ∧ min rp1 = 0%Z ∧ C.max rp1 = plength rp1 ∧ Z.abs (bv_signed rs) ≤ plength rp1 ∧ plength rp1 = alloc mpz12 rem ∧ (¬ bv_signed rs = 0%Z -> Z.pow (18446744073709551615%Z + 1%Z) (Z.abs (bv_signed rs) - 1%Z) ≤ value rp1 (Z.abs (bv_signed rs)))) ∧ (∀(mpz13 : mpz_memo), alloc mpz13 = alloc mpz12 ∧ readers mpz13 = readers mpz12 ∧ zones mpz13 = zones mpz12 -> (∀(y : mpz_ptr), ¬ y = rem -> mpz_unchanged y mpz13 mpz12) ∧ (sgn mpz13 rem = 1%Z) = (0%Z ≤ bv_signed rs) ∧ (sgn mpz13 rem = - 1%Z) = (bv_signed rs < 0%Z) ∧ abs_size mpz13 rem = Z.abs (bv_signed rs) ∧ abs_value_of mpz13 rem = value rp1 (Z.abs (bv_signed rs)) -> mpz_unchanged quot mpz13 mpz12 ∧ (readers mpz13 quot = readers mpz12 quot ∧ (- 2%Z < readers mpz13 quot -> abs_value_of mpz13 quot = abs_value_of mpz12 quot ∧ alloc mpz13 quot = alloc mpz12 quot ∧ abs_size mpz13 quot = abs_size mpz12 quot ∧ sgn mpz13 quot = sgn mpz12 quot ∧ readers mpz13 quot = readers mpz12 quot ∧ zones mpz13 quot = zones mpz12 quot) -> (zones mpz13 rem = zone1 rp1 ∧ readers mpz13 rem = - 1%Z ∧ min rp1 = 0%Z ∧ C.max rp1 = plength rp1 ∧ abs_value_of mpz13 rem = value rp1 (abs_size mpz13 rem)) ∧ (∀(mpz14 : mpz_memo), abs_value_of mpz14 = abs_value_of mpz13 ∧ alloc mpz14 = alloc mpz13 ∧ abs_size mpz14 = abs_size mpz13 ∧ sgn mpz14 = sgn mpz13 ∧ zones mpz14 = zones mpz13 -> readers mpz14 rem = 0%Z ∧ (∀(y : mpz_ptr), ¬ y = rem -> readers mpz14 y = readers mpz13 y) -> (zones mpz14 quot = zone1 qp1 ∧ readers mpz14 quot = - 1%Z ∧ min qp1 = 0%Z ∧ C.max qp1 = plength qp1 ∧ abs_value_of mpz14 quot = value qp1 (abs_size mpz14 quot)) ∧ (∀(mpz15 : mpz_memo), abs_value_of mpz15 = abs_value_of mpz14 ∧ alloc mpz15 = alloc mpz14 ∧ abs_size mpz15 = abs_size mpz14 ∧ sgn mpz15 = sgn mpz14 ∧ zones mpz15 = zones mpz14 -> readers mpz15 quot = 0%Z ∧ (∀(y : mpz_ptr), ¬ y = quot -> readers mpz15 y = readers mpz14 y) -> mpz_unchanged (Zutil.ptr memn) mpz15 mpz11 ∧ (readers mpz15 (Zutil.ptr memn) = readers mpz11 (Zutil.ptr memn) ∧ (- 2%Z < readers mpz15 (Zutil.ptr memn) -> abs_value_of mpz15 (Zutil.ptr memn) = abs_value_of mpz11 (Zutil.ptr memn) ∧ alloc mpz15 (Zutil.ptr memn) = alloc mpz11 (Zutil.ptr memn) ∧ abs_size mpz15 (Zutil.ptr memn) = abs_size mpz11 (Zutil.ptr memn) ∧ sgn mpz15 (Zutil.ptr memn) = sgn mpz11 (Zutil.ptr memn) ∧ readers mpz15 (Zutil.ptr memn) = readers mpz11 (Zutil.ptr memn) ∧ zones mpz15 (Zutil.ptr memn) = zones mpz11 (Zutil.ptr memn)) -> mpz_unchanged den mpz15 mpz11 ∧ (readers mpz15 den = readers mpz11 den ∧ (- 2%Z < readers mpz15 den -> abs_value_of mpz15 den = abs_value_of mpz11 den ∧ alloc mpz15 den = alloc mpz11 den ∧ abs_size mpz15 den = abs_size mpz11 den ∧ sgn mpz15 den = sgn mpz11 den ∧ readers mpz15 den = readers mpz11 den ∧ zones mpz15 den = zones mpz11 den) -> (zones mpz15 (Zutil.ptr memn) = zone1 np2 ∧ 1%Z ≤ readers mpz15 (Zutil.ptr memn) ∧ min np2 = 0%Z ∧ C.max np2 = plength np2) ∧ (∀(mpz16 : mpz_memo), abs_value_of mpz16 = abs_value_of mpz15 ∧ alloc mpz16 = alloc mpz15 ∧ abs_size mpz16 = abs_size mpz15 ∧ sgn mpz16 = sgn mpz15 ∧ zones mpz16 = zones mpz15 -> readers mpz16 (Zutil.ptr memn) = readers mpz15 (Zutil.ptr memn) - 1%Z ∧ (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> readers mpz16 y = readers mpz15 y) -> (zones mpz16 den = zone1 dp ∧ 1%Z ≤ readers mpz16 den ∧ min dp = 0%Z ∧ C.max dp = plength dp) ∧ (∀(mpz17 : mpz_memo), abs_value_of mpz17 = abs_value_of mpz16 ∧ alloc mpz17 = alloc mpz16 ∧ abs_size mpz17 = abs_size mpz16 ∧ sgn mpz17 = sgn mpz16 ∧ zones mpz17 = zones mpz16 -> readers mpz17 den = readers mpz16 den - 1%Z ∧ (∀(y : mpz_ptr), ¬ y = den -> readers mpz17 y = readers mpz16 y) -> mpz_unchanged den mpz17 mpz7 ∧ (readers mpz17 den = readers mpz7 den ∧ (- 2%Z < readers mpz17 den -> abs_value_of mpz17 den = abs_value_of mpz7 den ∧ alloc mpz17 den = alloc mpz7 den ∧ abs_size mpz17 den = abs_size mpz7 den ∧ sgn mpz17 den = sgn mpz7 den ∧ readers mpz17 den = readers mpz7 den ∧ zones mpz17 den = zones mpz7 den) -> mpz_unchanged (Zutil.ptr memn) mpz17 mpz7 ∧ (readers mpz17 (Zutil.ptr memn) = readers mpz7 (Zutil.ptr memn) ∧ (- 2%Z < readers mpz17 (Zutil.ptr memn) -> abs_value_of mpz17 (Zutil.ptr memn) = abs_value_of mpz7 (Zutil.ptr memn) ∧ alloc mpz17 (Zutil.ptr memn) = alloc mpz7 (Zutil.ptr memn) ∧ abs_size mpz17 (Zutil.ptr memn) = abs_size mpz7 (Zutil.ptr memn) ∧ sgn mpz17 (Zutil.ptr memn) = sgn mpz7 (Zutil.ptr memn) ∧ readers mpz17 (Zutil.ptr memn) = readers mpz7 (Zutil.ptr memn) ∧ zones mpz17 (Zutil.ptr memn) = zones mpz7 (Zutil.ptr memn)) -> (if decide True then (Zutil.ok memn = true ∧ - 1%Z ≤ readers mpz17 (Zutil.ptr memn) ∧ readers mpz17 (Zutil.ptr memn) ≤ 0%Z) ∧ (∀(mpz18 : mpz_memo), readers mpz18 (Zutil.ptr memn) = - 2%Z ∧ (∀(y : mpz_ptr), ¬ y = Zutil.ptr memn -> mpz_unchanged y mpz18 mpz17) -> mpz_unchanged quot mpz18 mpz15 ∧ (readers mpz18 quot = readers mpz15 quot ∧ (- 2%Z < readers mpz18 quot -> abs_value_of mpz18 quot = abs_value_of mpz15 quot ∧ alloc mpz18 quot = alloc mpz15 quot ∧ abs_size mpz18 quot = abs_size mpz15 quot ∧ sgn mpz18 quot = sgn mpz15 quot ∧ readers mpz18 quot = readers mpz15 quot ∧ zones mpz18 quot = zones mpz15 quot) -> mpz_unchanged rem mpz18 mpz15 ∧ (readers mpz18 rem = readers mpz15 rem ∧ (- 2%Z < readers mpz18 rem -> abs_value_of mpz18 rem = abs_value_of mpz15 rem ∧ alloc mpz18 rem = alloc mpz15 rem ∧ abs_size mpz18 rem = abs_size mpz15 rem ∧ sgn mpz18 rem = sgn mpz15 rem ∧ readers mpz18 rem = readers mpz15 rem ∧ zones mpz18 rem = zones mpz15 rem) -> value_of quot mpz18 * value_of den mpz + value_of rem mpz18 = value_of num mpz ∧ (0%Z ≤ abs_value_of mpz18 rem ∧ abs_value_of mpz18 rem < abs_value_of mpz den) ∧ (∀(x : mpz_ptr), ¬ x = quot -> ¬ x = rem -> mpz_unchanged x mpz18 mpz) ∧ readers mpz18 num = 0%Z ∧ readers mpz18 den = 0%Z ∧ readers mpz18 quot = 0%Z ∧ readers mpz18 rem = 0%Z))) else mpz_unchanged quot mpz17 mpz15 ∧ (readers mpz17 quot = readers mpz15 quot ∧ (- 2%Z < readers mpz17 quot -> abs_value_of mpz17 quot = abs_value_of mpz15 quot ∧ alloc mpz17 quot = alloc mpz15 quot ∧ abs_size mpz17 quot = abs_size mpz15 quot ∧ sgn mpz17 quot = sgn mpz15 quot ∧ readers mpz17 quot = readers mpz15 quot ∧ zones mpz17 quot = zones mpz15 quot) -> mpz_unchanged rem mpz17 mpz15 ∧ (readers mpz17 rem = readers mpz15 rem ∧ (- 2%Z < readers mpz17 rem -> abs_value_of mpz17 rem = abs_value_of mpz15 rem ∧ alloc mpz17 rem = alloc mpz15 rem ∧ abs_size mpz17 rem = abs_size mpz15 rem ∧ sgn mpz17 rem = sgn mpz15 rem ∧ readers mpz17 rem = readers mpz15 rem ∧ zones mpz17 rem = zones mpz15 rem) -> value_of quot mpz17 * value_of den mpz + value_of rem mpz17 = value_of num mpz ∧ (0%Z ≤ abs_value_of mpz17 rem ∧ abs_value_of mpz17 rem < abs_value_of mpz den) ∧ (∀(x : mpz_ptr), ¬ x = quot -> ¬ x = rem -> mpz_unchanged x mpz17 mpz) ∧ readers mpz17 num = 0%Z ∧ readers mpz17 den = 0%Z ∧ readers mpz17 quot = 0%Z ∧ readers mpz17 rem = 0%Z)))))))))))))))))))))))))))))))))))))))))))))))))))) else (readers mpz quot = 0%Z ∧ 1%Z ≤ alloc mpz quot) ∧ (∀(mpz1 : mpz_memo), sgn mpz1 = sgn mpz -> (∀(qp : C.ptr (bv 64%N)), (∀(y : mpz_ptr), ¬ y = quot -> mpz_unchanged y mpz1 mpz) ∧ readers mpz1 quot = - 1%Z ∧ abs_value_of mpz1 quot = value qp (abs_size mpz1 quot) ∧ zones mpz1 quot = zone1 qp ∧ offset qp = 0%Z ∧ plength qp = alloc mpz1 quot ∧ min qp = 0%Z ∧ C.max qp = plength qp ∧ writable qp = true ∧ abs_size mpz1 quot = abs_size mpz quot ∧ value qp (abs_size mpz quot) = abs_value_of mpz quot ∧ (if decide (alloc mpz quot < bv_signed o3) then alloc mpz1 quot = bv_signed o3 else alloc mpz1 quot = alloc mpz quot) -> mpz_unchanged rem mpz1 mpz ∧ (readers mpz1 rem = readers mpz rem ∧ (- 2%Z < readers mpz1 rem -> abs_value_of mpz1 rem = abs_value_of mpz rem ∧ alloc mpz1 rem = alloc mpz rem ∧ abs_size mpz1 rem = abs_size mpz rem ∧ sgn mpz1 rem = sgn mpz rem ∧ readers mpz1 rem = readers mpz rem ∧ zones mpz1 rem = zones mpz rem) -> (readers mpz1 rem = 0%Z ∧ 1%Z ≤ alloc mpz1 rem) ∧ (∀(mpz2 : mpz_memo), sgn mpz2 = sgn mpz1 -> (∀(rp : C.ptr (bv 64%N)), (∀(y : mpz_ptr), ¬ y = rem -> mpz_unchanged y mpz2 mpz1) ∧ readers mpz2 rem = - 1%Z ∧ abs_value_of mpz2 rem = value rp (abs_size mpz2 rem) ∧ zones mpz2 rem = zone1 rp ∧ offset rp = 0%Z ∧ plength rp = alloc mpz2 rem ∧ min rp = 0%Z ∧ C.max rp = plength rp ∧ writable rp = true ∧ abs_size mpz2 rem = abs_size mpz1 rem ∧ value rp (abs_size mpz1 rem) = abs_value_of mpz1 rem ∧ (if decide (alloc mpz1 rem < bv_signed o1) then alloc mpz2 rem = bv_signed o1 else alloc mpz2 rem = alloc mpz1 rem) -> mpz_unchanged num mpz2 mpz ∧ (readers mpz2 num = readers mpz num ∧ (- 2%Z < readers mpz2 num -> abs_value_of mpz2 num = abs_value_of mpz num ∧ alloc mpz2 num = alloc mpz num ∧ abs_size mpz2 num = abs_size mpz num ∧ sgn mpz2 num = sgn mpz num ∧ readers mpz2 num = readers mpz num ∧ zones mpz2 num = zones mpz num) -> mpz_unchanged den mpz2 mpz ∧ (readers mpz2 den = readers mpz den ∧ (- 2%Z < readers mpz2 den -> abs_value_of mpz2 den = abs_value_of mpz den ∧ alloc mpz2 den = alloc mpz den ∧ abs_size mpz2 den = abs_size mpz den ∧ sgn mpz2 den = sgn mpz den ∧ readers mpz2 den = readers mpz den ∧ zones mpz2 den = zones mpz den) -> 0%Z ≤ readers mpz2 num ∧ (∀(mpz3 : mpz_memo), abs_value_of mpz3 = abs_value_of mpz2 ∧ alloc mpz3 = alloc mpz2 ∧ abs_size mpz3 = abs_size mpz2 ∧ sgn mpz3 = sgn mpz2 ∧ zones mpz3 = zones mpz2 -> (∀(np : C.ptr (bv 64%N)), readers mpz3 num = readers mpz2 num + 1%Z ∧ (∀(y : mpz_ptr), ¬ num = y -> readers mpz3 y = readers mpz2 y) ∧ value np (abs_size mpz3 num) = abs_value_of mpz3 num ∧ plength np = alloc mpz3 num ∧ offset np = 0%Z ∧ min np = 0%Z ∧ C.max np = plength np ∧ zone1 np = zones mpz3 num -> 0%Z ≤ readers mpz3 den ∧ (∀(mpz4 : mpz_memo), abs_value_of mpz4 = abs_value_of mpz3 ∧ alloc mpz4 = alloc mpz3 ∧ abs_size mpz4 = abs_size mpz3 ∧ sgn mpz4 = sgn mpz3 ∧ zones mpz4 = zones mpz3 -> (∀(dp : C.ptr (bv 64%N)), readers mpz4 den = readers mpz3 den + 1%Z ∧ (∀(y : mpz_ptr), ¬ den = y -> readers mpz4 y = readers mpz3 y) ∧ value dp (abs_size mpz4 den) = abs_value_of mpz4 den ∧ plength dp = alloc mpz4 den ∧ offset dp = 0%Z ∧ min dp = 0%Z ∧ C.max dp = plength dp ∧ zone1 dp = zones mpz4 den -> ((1%Z ≤ bv_signed o1 ∧ bv_signed o1 ≤ bv_signed nl ∧ bv_signed nl ≤ 2147483647%Z - 1%Z) ∧ valid np (bv_signed nl) ∧ valid dp (bv_signed o1) ∧ valid qp (bv_signed nl - bv_signed o1 + 1%Z) ∧ valid rp (bv_signed o1) ∧ (writable qp = true ∧ writable rp = true) ∧ 0%Z < bv_unsigned (pelts dp (offset dp + bv_signed o1 - 1%Z))) ∧ (∀(rp1 : C.ptr (bv 64%N)) (qp1 : C.ptr (bv 64%N)), length (data rp1) = length (data rp) ∧ offset rp1 = offset rp ∧ min rp1 = min rp ∧ C.max rp1 = C.max rp ∧ writable rp1 = writable rp ∧ zone1 rp1 = zone1 rp -> length (data qp1) = length (data qp) ∧ offset qp1 = offset qp ∧ min qp1 = min qp ∧ C.max qp1 = C.max qp ∧ writable qp1 = writable qp ∧ zone1 qp1 = zone1 qp -> value np (bv_signed nl) = value qp1 (bv_signed nl - bv_signed o1 + 1%Z) * value dp (bv_signed o1) + value rp1 (bv_signed o1) ∧ value rp1 (bv_signed o1) < value dp (bv_signed o1) -> int'32_in_bounds (bv_signed o3 - 1%Z) ∧ (∀(o6 : bv 32%N), bv_signed o6 = bv_signed o3 - 1%Z -> (min qp1 ≤ offset qp1 + bv_signed o6 ∧ offset qp1 + bv_signed o6 < C.max qp1) ∧ (let qh : bv 64%N := pelts qp1 (offset qp1 + bv_signed o6) in ∀(o7 : bool), (bv_unsigned qh = bv_unsigned (0%bv : bv 64%N) -> o7 = true) ∧ (o7 = true -> qh = (0%bv : bv 64%N)) -> (∀(o8 : bv 32%N), (if decide (o7 = true) then o8 = (1%bv : bv 32%N) else o8 = (0%bv : bv 32%N)) -> int'32_in_bounds (bv_signed o3 - bv_signed o8) ∧ (∀(o9 : bv 32%N), bv_signed o9 = bv_signed o3 - bv_signed o8 -> (0%Z ≤ bv_signed o1 ∧ valid rp1 (bv_signed o1)) ∧ (∀(dl : bv 32%N), (0%Z ≤ bv_signed dl ∧ bv_signed dl ≤ bv_signed o1) ∧ value rp1 (bv_signed dl) = value rp1 (bv_signed o1) ∧ (bv_signed dl = 0%Z ∨ 0%Z < bv_unsigned (pelts rp1 (offset rp1 + bv_signed dl - 1%Z))) ∧ (bv_signed dl = 0%Z ∨ Z.pow (18446744073709551615%Z + 1%Z) (bv_signed dl - 1%Z) ≤ value rp1 (bv_signed dl)) -> (∀(o10 : bv 32%N), (bv_signed ns = 0%Z -> o10 = ds) ∧ (bv_signed ds = 0%Z -> o10 = ns) ∧ (0%Z ≤ bv_signed ns ∧ 0%Z ≤ bv_signed ds ∨ bv_signed ns < 0%Z ∧ bv_signed ds < 0%Z -> 0%Z ≤ bv_signed o10) ∧ (bv_signed ns < 0%Z ∧ 0%Z ≤ bv_signed ds ∨ 0%Z ≤ bv_signed ns ∧ bv_signed ds < 0%Z -> bv_signed o10 < 0%Z) -> (¬ 0%Z ≤ bv_signed o10 -> int'32_in_bounds (- bv_signed o9)) ∧ (∀(qs : bv 32%N), (if decide (0%Z ≤ bv_signed o10) then qs = o9 else bv_signed qs = - bv_signed o9) -> (¬ 0%Z ≤ bv_signed ns -> int'32_in_bounds (- bv_signed dl)) ∧ (∀(rs : bv 32%N), (if decide (0%Z ≤ bv_signed ns) then rs = dl else bv_signed rs = - bv_signed dl) -> mpz_unchanged quot mpz4 mpz1 ∧ (readers mpz4 quot = readers mpz1 quot ∧ (- 2%Z < readers mpz4 quot -> abs_value_of mpz4 quot = abs_value_of mpz1 quot ∧ alloc mpz4 quot = alloc mpz1 quot ∧ abs_size mpz4 quot = abs_size mpz1 quot ∧ sgn mpz4 quot = sgn mpz1 quot ∧ readers mpz4 quot = readers mpz1 quot ∧ zones mpz4 quot = zones mpz1 quot) -> (zones mpz4 quot = zone1 qp1 ∧ readers mpz4 quot = - 1%Z ∧ offset qp1 = 0%Z ∧ min qp1 = 0%Z ∧ C.max qp1 = plength qp1 ∧ Z.abs (bv_signed qs) ≤ plength qp1 ∧ plength qp1 = alloc mpz4 quot ∧ (¬ bv_signed qs = 0%Z -> Z.pow (18446744073709551615%Z + 1%Z) (Z.abs (bv_signed qs) - 1%Z) ≤ value qp1 (Z.abs (bv_signed qs)))) ∧ (∀(mpz5 : mpz_memo), alloc mpz5 = alloc mpz4 ∧ readers mpz5 = readers mpz4 ∧ zones mpz5 = zones mpz4 -> (∀(y : mpz_ptr), ¬ y = quot -> mpz_unchanged y mpz5 mpz4) ∧ (sgn mpz5 quot = 1%Z) = (0%Z ≤ bv_signed qs) ∧ (sgn mpz5 quot = - 1%Z) = (bv_signed qs < 0%Z) ∧ abs_size mpz5 quot = Z.abs (bv_signed qs) ∧ abs_value_of mpz5 quot = value qp1 (Z.abs (bv_signed qs)) -> (zones mpz5 rem = zone1 rp1 ∧ readers mpz5 rem = - 1%Z ∧ offset rp1 = 0%Z ∧ min rp1 = 0%Z ∧ C.max rp1 = plength rp1 ∧ Z.abs (bv_signed rs) ≤ plength rp1 ∧ plength rp1 = alloc mpz5 rem ∧ (¬ bv_signed rs = 0%Z -> Z.pow (18446744073709551615%Z + 1%Z) (Z.abs (bv_signed rs) - 1%Z) ≤ value rp1 (Z.abs (bv_signed rs)))) ∧ (∀(mpz6 : mpz_memo), alloc mpz6 = alloc mpz5 ∧ readers mpz6 = readers mpz5 ∧ zones mpz6 = zones mpz5 -> (∀(y : mpz_ptr), ¬ y = rem -> mpz_unchanged y mpz6 mpz5) ∧ (sgn mpz6 rem = 1%Z) = (0%Z ≤ bv_signed rs) ∧ (sgn mpz6 rem = - 1%Z) = (bv_signed rs < 0%Z) ∧ abs_size mpz6 rem = Z.abs (bv_signed rs) ∧ abs_value_of mpz6 rem = value rp1 (Z.abs (bv_signed rs)) -> mpz_unchanged quot mpz6 mpz5 ∧ (readers mpz6 quot = readers mpz5 quot ∧ (- 2%Z < readers mpz6 quot -> abs_value_of mpz6 quot = abs_value_of mpz5 quot ∧ alloc mpz6 quot = alloc mpz5 quot ∧ abs_size mpz6 quot = abs_size mpz5 quot ∧ sgn mpz6 quot = sgn mpz5 quot ∧ readers mpz6 quot = readers mpz5 quot ∧ zones mpz6 quot = zones mpz5 quot) -> (zones mpz6 rem = zone1 rp1 ∧ readers mpz6 rem = - 1%Z ∧ min rp1 = 0%Z ∧ C.max rp1 = plength rp1 ∧ abs_value_of mpz6 rem = value rp1 (abs_size mpz6 rem)) ∧ (∀(mpz7 : mpz_memo), abs_value_of mpz7 = abs_value_of mpz6 ∧ alloc mpz7 = alloc mpz6 ∧ abs_size mpz7 = abs_size mpz6 ∧ sgn mpz7 = sgn mpz6 ∧ zones mpz7 = zones mpz6 -> readers mpz7 rem = 0%Z ∧ (∀(y : mpz_ptr), ¬ y = rem -> readers mpz7 y = readers mpz6 y) -> (zones mpz7 quot = zone1 qp1 ∧ readers mpz7 quot = - 1%Z ∧ min qp1 = 0%Z ∧ C.max qp1 = plength qp1 ∧ abs_value_of mpz7 quot = value qp1 (abs_size mpz7 quot)) ∧ (∀(mpz8 : mpz_memo), abs_value_of mpz8 = abs_value_of mpz7 ∧ alloc mpz8 = alloc mpz7 ∧ abs_size mpz8 = abs_size mpz7 ∧ sgn mpz8 = sgn mpz7 ∧ zones mpz8 = zones mpz7 -> readers mpz8 quot = 0%Z ∧ (∀(y : mpz_ptr), ¬ y = quot -> readers mpz8 y = readers mpz7 y) -> mpz_unchanged num mpz8 mpz4 ∧ (readers mpz8 num = readers mpz4 num ∧ (- 2%Z < readers mpz8 num -> abs_value_of mpz8 num = abs_value_of mpz4 num ∧ alloc mpz8 num = alloc mpz4 num ∧ abs_size mpz8 num = abs_size mpz4 num ∧ sgn mpz8 num = sgn mpz4 num ∧ readers mpz8 num = readers mpz4 num ∧ zones mpz8 num = zones mpz4 num) -> mpz_unchanged den mpz8 mpz4 ∧ (readers mpz8 den = readers mpz4 den ∧ (- 2%Z < readers mpz8 den -> abs_value_of mpz8 den = abs_value_of mpz4 den ∧ alloc mpz8 den = alloc mpz4 den ∧ abs_size mpz8 den = abs_size mpz4 den ∧ sgn mpz8 den = sgn mpz4 den ∧ readers mpz8 den = readers mpz4 den ∧ zones mpz8 den = zones mpz4 den) -> (zones mpz8 num = zone1 np ∧ 1%Z ≤ readers mpz8 num ∧ min np = 0%Z ∧ C.max np = plength np) ∧ (∀(mpz9 : mpz_memo), abs_value_of mpz9 = abs_value_of mpz8 ∧ alloc mpz9 = alloc mpz8 ∧ abs_size mpz9 = abs_size mpz8 ∧ sgn mpz9 = sgn mpz8 ∧ zones mpz9 = zones mpz8 -> readers mpz9 num = readers mpz8 num - 1%Z ∧ (∀(y : mpz_ptr), ¬ y = num -> readers mpz9 y = readers mpz8 y) -> (zones mpz9 den = zone1 dp ∧ 1%Z ≤ readers mpz9 den ∧ min dp = 0%Z ∧ C.max dp = plength dp) ∧ (∀(mpz10 : mpz_memo), abs_value_of mpz10 = abs_value_of mpz9 ∧ alloc mpz10 = alloc mpz9 ∧ abs_size mpz10 = abs_size mpz9 ∧ sgn mpz10 = sgn mpz9 ∧ zones mpz10 = zones mpz9 -> readers mpz10 den = readers mpz9 den - 1%Z ∧ (∀(y : mpz_ptr), ¬ y = den -> readers mpz10 y = readers mpz9 y) -> mpz_unchanged den mpz10 mpz ∧ (readers mpz10 den = readers mpz den ∧ (- 2%Z < readers mpz10 den -> abs_value_of mpz10 den = abs_value_of mpz den ∧ alloc mpz10 den = alloc mpz den ∧ abs_size mpz10 den = abs_size mpz den ∧ sgn mpz10 den = sgn mpz den ∧ readers mpz10 den = readers mpz den ∧ zones mpz10 den = zones mpz den) -> mpz_unchanged num mpz10 mpz ∧ (readers mpz10 num = readers mpz num ∧ (- 2%Z < readers mpz10 num -> abs_value_of mpz10 num = abs_value_of mpz num ∧ alloc mpz10 num = alloc mpz num ∧ abs_size mpz10 num = abs_size mpz num ∧ sgn mpz10 num = sgn mpz num ∧ readers mpz10 num = readers mpz num ∧ zones mpz10 num = zones mpz num) -> mpz_unchanged quot mpz10 mpz8 ∧ (readers mpz10 quot = readers mpz8 quot ∧ (- 2%Z < readers mpz10 quot -> abs_value_of mpz10 quot = abs_value_of mpz8 quot ∧ alloc mpz10 quot = alloc mpz8 quot ∧ abs_size mpz10 quot = abs_size mpz8 quot ∧ sgn mpz10 quot = sgn mpz8 quot ∧ readers mpz10 quot = readers mpz8 quot ∧ zones mpz10 quot = zones mpz8 quot) -> mpz_unchanged rem mpz10 mpz8 ∧ (readers mpz10 rem = readers mpz8 rem ∧ (- 2%Z < readers mpz10 rem -> abs_value_of mpz10 rem = abs_value_of mpz8 rem ∧ alloc mpz10 rem = alloc mpz8 rem ∧ abs_size mpz10 rem = abs_size mpz8 rem ∧ sgn mpz10 rem = sgn mpz8 rem ∧ readers mpz10 rem = readers mpz8 rem ∧ zones mpz10 rem = zones mpz8 rem) -> value_of quot mpz10 * value_of den mpz + value_of rem mpz10 = value_of num mpz ∧ (0%Z ≤ abs_value_of mpz10 rem ∧ abs_value_of mpz10 rem < abs_value_of mpz den) ∧ (∀(x : mpz_ptr), ¬ x = quot -> ¬ x = rem -> mpz_unchanged x mpz10 mpz) ∧ readers mpz10 num = 0%Z ∧ readers mpz10 den = 0%Z ∧ readers mpz10 quot = 0%Z ∧ readers mpz10 rem = 0%Z))))))))))))))))))))))))))))))))))))))))))))).
Admitted.
