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.Qed.Qed.
Require Import Why3.Memory.Memory.
Require Import x509_parser.S10.S10.
Require Import Why3.Cint.Cint.
Require Import x509_parser.Compound.Compound.
Open Scope Z_scope.
Theorem goal20 (a_2 : addr) (a : addr) (a_1 : addr) (i_2 : Z) (t_1 : Z -> addr) (i_15 : Z) (i_5 : Z) (i_3 : Z) (i_6 : Z) (i_7 : Z) (i_14 : Z) (i_8 : Z) (i_9 : Z) (s_1 : s10) (i_11 : Z) (i_13 : Z) (t_2 : addr -> Z) (i_10 : Z) (t_3 : addr -> addr) (t : Z -> Z) (i_4 : Z) (i_12 : Z) (i : Z) (i_16 : Z) (i_1 : Z) (s : s10) : let x : Z := base a_2 in let x_1 : Z := base a in let x_2 : Z := base a_1 in let a_3 : addr := shift a_2 i_2 in let a_4 : addr := t_1 i_15 in let a_5 : addr := shift a_4 4%Z in let a_6 : addr := shift a_2 (i_2 + i_5) in let x_3 : Z := to_uint16 (i_3 - i_5) in let a_7 : addr := shift a_2 (i_2 + i_5 + i_6) in let a_8 : addr := shift a_2 (i_2 + i_5 + i_6 + i_7) in let a_9 : addr := shift a_2 (i_2 + i_5 + i_6 + i_7 + i_14) in let a_10 : addr := shift a_2 (i_2 + i_5 + i_6 + i_7 + i_8 + i_14) in let a_11 : addr := shift a_2 (i_2 + i_5 + i_6 + i_7 + i_8 + i_9 + i_14) in let x_4 : Z := to_uint16 (x_3 - i_6) in let x_5 : Z := to_uint16 (x_4 - i_7) in let x_6 : Z := to_uint16 (x_5 - i_14) in let x_7 : Z := to_uint16 (x_6 - i_8) in let x_8 : Z := to_uint16 (x_7 - i_9) in let x_9 : Z := i_2 + i_3 in let x_10 : Z := f10_aki_has_keyidentifier s_1 in let x_11 : Z := f10_bc_critical s_1 in let x_12 : Z := f10_crlsign_set s_1 in let x_13 : Z := f10_ca_true s_1 in let x_14 : Z := f10_empty_subject s_1 in let x_15 : Z := f10_has_crldp s_1 in let x_16 : Z := f10_has_name_constraints s_1 in let x_17 : Z := f10_has_ski s_1 in let x_18 : Z := f10_keycertsign_set s_1 in let x_19 : Z := f10_one_crldp_has_all_reasons s_1 in let x_20 : Z := f10_pathlenconstraint_set s_1 in let x_21 : Z := f10_self_signed s_1 in let a_12 : addr := shift a_2 (i_2 + i_5 + i_6 + i_7 + i_8 + i_9 + i_11 + i_14) in ¬ i_3 = 0%Z -> ¬ i_13 = 0%Z -> ¬ a_1 = a -> ¬ Mk_addr 0%Z 0%Z = a_2 -> ¬ x = x_1 -> ¬ x = x_2 -> ¬ a_3 = Mk_addr 0%Z 0%Z -> t_2 a_5 = 1%Z -> ¬ a_6 = Mk_addr 0%Z 0%Z -> ¬ x_3 = 0%Z -> ¬ a_7 = Mk_addr 0%Z 0%Z -> ¬ a_8 = Mk_addr 0%Z 0%Z -> ¬ a_9 = Mk_addr 0%Z 0%Z -> ¬ a_10 = Mk_addr 0%Z 0%Z -> ¬ a_11 = Mk_addr 0%Z 0%Z -> ¬ x_4 = 0%Z -> ¬ x_5 = 0%Z -> ¬ x_6 = 0%Z -> ¬ x_7 = 0%Z -> ¬ x_8 = 0%Z -> 0%Z ≤ i_3 -> i_5 ≤ i_3 -> 0%Z ≤ i_13 -> i_2 ≤ i_13 -> i_3 ≤ i_13 -> x_9 ≤ i_13 -> region x_1 ≤ 0%Z -> region x_2 ≤ 0%Z -> region x ≤ 0%Z -> i_6 ≤ x_3 -> i_7 ≤ x_4 -> i_14 ≤ x_5 -> i_8 ≤ x_6 -> i_9 ≤ x_7 -> i_10 ≤ x_8 -> 2%Z ≤ i_2 -> 2%Z ≤ i_7 -> 2%Z ≤ i_9 -> 2%Z ≤ i_14 -> i_3 ≤ 2147483647%Z + i_5 -> i_5 ≤ 2147483648%Z + i_3 -> x_3 ≤ 2147483647%Z + i_6 -> i_6 ≤ 2147483648%Z + x_3 -> x_4 ≤ 2147483647%Z + i_7 -> i_7 ≤ 2147483648%Z + x_4 -> x_5 ≤ 2147483647%Z + i_14 -> i_14 ≤ 2147483648%Z + x_5 -> x_6 ≤ 2147483647%Z + i_8 -> i_8 ≤ 2147483648%Z + x_6 -> x_7 ≤ 2147483647%Z + i_9 -> i_9 ≤ 2147483648%Z + x_7 -> x_8 ≤ 2147483647%Z + i_10 -> i_10 ≤ 2147483648%Z + x_8 -> framed t_3 -> linked t -> is_uint8 i_15 -> is_uint16 i_2 -> is_uint16 i_3 -> is_uint16 i_4 -> is_uint16 i_5 -> is_uint16 i_6 -> is_uint16 i_7 -> is_uint16 i_8 -> is_uint16 i_9 -> is_uint16 i_10 -> is_uint16 i_12 -> is_uint16 i_13 -> is_uint16 i_14 -> is_sint32 i -> is_sint32 i_16 -> is_sint32 x_10 -> is_sint32 x_11 -> is_sint32 x_12 -> is_sint32 x_13 -> is_sint32 x_14 -> is_sint32 x_15 -> is_sint32 x_16 -> is_sint32 x_17 -> is_sint32 x_18 -> is_sint32 x_19 -> is_sint32 x_20 -> is_sint32 x_21 -> valid_rw t a_1 1%Z -> valid_rd t a_4 8%Z -> valid_rd t a_5 1%Z -> (if decide (i_14 = i_9) then s10'mk i 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z i_1 = s ∧ valid_rd t a_8 i_14 ∧ valid_rd t a_10 i_14 ∧ (if decide (i_16 = 0%Z) then i_1 = 1%Z else i_1 = 0%Z) else s10'mk i 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z 0%Z = s) -> (if decide (to_uint16 (x_8 - i_10) = 0%Z) then s_1 = s else ¬ i_4 = 0%Z ∧ i_11 = i_10 ∧ to_uint16 (i_4 - i_12) = 0%Z ∧ ¬ a_12 = Mk_addr 0%Z 0%Z ∧ to_uint16 (x_8 - i_11) = i_4 ∧ 0%Z < i_12 ∧ i_12 ≤ i_4 ∧ i_4 ≤ 2147483647%Z + i_12 ∧ i_12 ≤ 2147483648%Z + i_4 ∧ (0%Z < i_4 -> valid_rd t a_12 i_4)) -> (0%Z < i_13 -> valid_rd t (shift a_2 0%Z) i_13) -> (0%Z < i_3 -> valid_rd t a_3 i_3) -> (0%Z < x_3 -> valid_rd t a_6 x_3) -> (0%Z < x_4 -> valid_rd t a_7 x_4) -> (0%Z < x_5 -> valid_rd t a_8 x_5) -> (0%Z < x_6 -> valid_rd t a_9 x_6) -> (0%Z < x_7 -> valid_rd t a_10 x_7) -> (0%Z < x_8 -> valid_rd t a_11 x_8) -> i = 0%Z ∨ i = 1%Z -> ¬ x_10 = 0%Z ∨ ¬ x_21 = 0%Z -> ¬ x_13 = 0%Z ∨ x_16 = 0%Z -> x_12 = 0%Z ∨ x_14 = 0%Z -> x_13 = 0%Z ∨ ¬ x_17 = 0%Z -> x_13 = 0%Z ∨ x_15 = 0%Z ∨ ¬ x_19 = 0%Z -> x_18 = 0%Z ∨ ¬ x_11 = 0%Z ∧ ¬ x_13 = 0%Z -> x_20 = 0%Z ∨ ¬ x_13 = 0%Z ∧ ¬ x_18 = 0%Z -> x_9 ≤ 2147483647%Z.
Admitted.
