Library gen_lemmas

Require Import mathlib.
Require Import os_mutex.
Require Import OSMutex_common.
Open Scope code_scope.

Definition gen_mbox_pend_part0 := forall (
 i : int32
)(
  H1 : Int.unsigned i <= 65535
)(
   : val
)(
  v´0 : val
)(
  v´1 : list vallist
)(
  v´2 : list vallist
)(
  v´3 : list vallist
)(
  v´4 : list EventData
)(
  v´5 : list EventCtr
)(
  v´6 : vallist
)(
  v´7 : val
)(
  v´8 : val
)(
  v´9 : list vallist
)(
  v´10 : vallist
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : val
)(
  v´14 : EcbMod.map
)(
  v´15 : TcbMod.map
)(
  v´16 : int32
)(
  v´17 : addrval
)(
  v´18 : addrval
)(
  v´19 : val
)(
  v´20 : list vallist
)(
  v´23 : list EventCtr
)(
  v´24 : list EventCtr
)(
  v´25 : list EventData
)(
  v´26 : list EventData
)(
  v´28 : vallist
)(
  v´29 : val
)(
  v´31 : list vallist
)(
  v´33 : list vallist
)(
  v´36 : EcbMod.map
)(
  v´37 : TcbMod.map
)(
  v´40 : val
)(
  v´44 : val
)(
  v´45 : EcbMod.map
)(
  v´46 : EcbMod.map
)(
  v´47 : EcbMod.map
)(
  w : waitset
)(
  v´49 : addrval
)(
  H4 : ECBList_P v´44 Vnull v´24 v´26 v´46 v´37
)(
  H17 : EcbMod.join v´45 v´47 v´36
)(
  H13 : length v´23 = length v´25
)(
  H16 : isptr v´44
)(
  H10 : val_inj
          (if Int.eq ($ 1) ($ 0)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
        val_inj
          (if Int.eq ($ 1) ($ 0)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vnull
)(
  v´21 : addrval
)(
  v´27 : block
)(
  x3 : val
)(
  i2 : int32
)(
  H23 : Int.unsigned i2 <= 65535
)(
  H25 : isptr v´44
)(
  H3 : ECBList_P v´40 (Vptr (v´27, Int.zero)) v´23 v´25 v´45 v´37
)(
  H2 : Vptr (v´27, Int.zero) = Vnull \/
       (exists p, Vptr (v´27, Int.zero) = Vptr p)
)(
  H : val_inj (Some ( Vint32 Int.zero)) = Vint32 Int.zero \/
      val_inj (Some ( Vint32 Int.zero)) = Vnull
)(
  H15 : id_addrval´ (Vptr (v´27, Int.zero)) OSEventTbl OS_EVENT = Some v´21
)(
  v´22 : val
)(
  v´38 : val
)(
  v´41 : TcbMod.map
)(
  v´50 : TcbMod.map
)(
  v´51 : val
)(
  v´52 : block
)(
  H28 : v´29 <> Vnull
)(
  H29 : TcbMod.join v´41 v´50 v´37
)(
  H27 : Vptr (v´52, Int.zero) <> Vnull
)(
  x8 : val
)(
  x9 : val
)(
  H34 : isptr x9
)(
  H35 : isptr x8
)(
  i9 : int32
)(
  H36 : Int.unsigned i9 <= 65535
)(
  i8 : int32
)(
  H37 : Int.unsigned i8 <= 255
)(
  i7 : int32
)(
  H38 : Int.unsigned i7 <= 255
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 255
)(
  H33 : isptr v´22
)(
  H14 : isptr v´51
)(
  H8 : RH_TCBList_ECBList_P v´36 v´37 (v´52, Int.zero)
)(
  H9 : RH_CurTCB (v´52, Int.zero) v´37
)(
  H21 : Int.unsigned ($ OS_EVENT_TYPE_MBOX) <= 255
)(
  Heqb : false = Int.eq i7 ($ OS_IDLE_PRIO)
)(
  H11 : val_inj (Some ( Vint32 Int.zero)) = Vint32 Int.zero \/
        val_inj (Some ( Vint32 Int.zero)) = Vnull
)(
  H48 : Int.eq i8 ($ OS_STAT_RDY) = true
)(
  H49 : Int.eq i9 ($ 0) = true
)(
  H5 : TcbMod.get v´50 (v´52, Int.zero) = Some (i7, rdy, x8)
)(
  H50 : isr_is_prop empisr nil
)(
  v´30 : option val
)(
  v´39 : vallist
)(
  v´43 : int32
)(
  v´54 : vallist
)(
  v´58 : int32
)(
  v´61 : int32
)(
  v´62 : int32
)(
  v´63 : int32
)(
  v´64 : int32
)(
  v´65 : int32
)(
  v´66 : int32
)(
  H30 : TCBList_P v´29 v´31 v´39 v´41
)(
  H26 : array_type_vallist_match Int8u v´39
)(
  H46 : length v´39 = OS_RDY_TBL_SIZE
)(
  H45 : prio_in_tbl ($ OS_IDLE_PRIO) v´39
)(
  H43 : Int.unsigned v´43 <= 255
)(
  H44 : RL_Tbl_Grp_P v´39 (Vint32 v´43)
)(
  H55 : nth_val ∘(Int.unsigned v´61) v´39 = Some (Vint32 v´64)
)(
  H57 : nth_val ∘(Int.unsigned v´61) v´54 = Some (Vint32 v´65)
)(
  H12 : array_type_vallist_match Int8u v´54
)(
  H20 : length v´54 = OS_EVENT_TBL_SIZE
)(
  H41 : Int.unsigned v´62 <= 255
)(
  H40 : Int.unsigned v´61 <= 255
)(
  H42 : Int.unsigned v´63 <= 255
)(
  H31 : TCBList_P (Vptr (v´52, Int.zero))
          ((v´51
            :: v´22
               :: x9
                  :: x8
                     :: Vint32 i9
                        :: Vint32 i8
                           :: Vint32 i7
                              :: Vint32 i6
                                 :: Vint32 v´61
                                    :: Vint32 v´62 :: Vint32 v´63 :: nil)
           :: v´33) v´39 v´50
)(
  H22 : Int.unsigned v´66 <= 255
)(
  H19 : RL_Tbl_Grp_P v´54 (Vint32 v´66)
)(
  H24 : isptr Vnull
)(
  H47 : RH_ECB_P (absmbox Vnull, w)
)(
  H7 : EcbMod.joinsig (v´27, Int.zero) (absmbox Vnull, w) v´46 v´47
)(
  H32 : RH_ECB_P (absmbox Vnull, w)
)(
  H18 : val_inj (notint (val_inj (val_eq Vnull Vnull))) = Vint32 Int.zero \/
        val_inj (notint (val_inj (val_eq Vnull Vnull))) = Vnull
)(
  H0 : ECBList_P v´40 Vnull
         (v´23 ++
          ((V$OS_EVENT_TYPE_MBOX
            :: Vint32 v´66 :: Vint32 i2 :: Vnull :: x3 :: v´44 :: nil, v´54)
           :: nil) ++ v´24) (v´25 ++ (DMbox Vnull :: nil) ++ v´26) v´36 v´37
)(
  H6 : R_ECB_ETbl_P (v´27, Int.zero)
         (V$OS_EVENT_TYPE_MBOX
          :: Vint32 v´66 :: Vint32 i2 :: Vnull :: x3 :: v´44 :: nil, v´54)
         v´37)
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV message @ (Void) |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (message, (Void) ) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{ <||
     isched;;
     (mbox_pend_timeout_err (|Vptr (v´27, Int.zero) :: Vint32 i :: nil|)
      ?? mbox_pend_block_get_succ
         (|Vptr (v´27, Int.zero) :: Vint32 i :: nil|)) ||> **
     HECBList
       (EcbMod.set v´36 (v´27, Int.zero)
          (absmbox Vnull, (v´52, Int.zero) :: w)) **
     HTCBList
       (TcbMod.set v´37 (v´52, Int.zero)
          (i7, wait (os_stat_mbox (v´27, Int.zero)) i, Vnull)) **
     HTime v´16 **
     HCurTCB (v´52, Int.zero) **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSTCBCur @ OS_TCB |-> Vptr (v´52, Int.zero) **
     node (Vptr (v´52, Int.zero))
       (v´51
        :: v´22
           :: Vptr (v´27, Int.zero)
              :: Vnull
                 :: Vint32 i
                    :: V$OS_STAT_MBOX
                       :: Vint32 i7
                          :: Vint32 i6
                             :: Vint32 v´61
                                :: Vint32 v´62 :: Vint32 v´63 :: nil) OS_TCB **
     AOSRdyTblGrp
       (update_nth_val ∘(Int.unsigned v´61) v´39 (Vint32 (v´64&Int.not v´62)))
       (Vint32 v´58) **
     AEventNode (Vptr (v´27, Int.zero))
       (V$OS_EVENT_TYPE_MBOX
        :: Vint32 (Int.or v´66 v´63)
           :: Vint32 i2 :: Vnull :: x3 :: v´44 :: nil)
       (update_nth_val ∘(Int.unsigned v´61) v´54 (Vint32 (Int.or v´65 v´62)))
       (DMbox Vnull) **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (message, (Void) ) :: (legal, Int8u) :: nil) **
     LV message @ (Void) |-> Vnull **
     dllseg v´51 (Vptr (v´52, Int.zero)) v´38 Vnull v´33 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´29 **
     dllseg v´29 Vnull v´22 (Vptr (v´52, Int.zero)) v´31 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSEventList @ OS_EVENT |-> v´40 **
     evsllseg v´40 (Vptr (v´27, Int.zero)) v´23 v´25 **
     evsllseg v´44 Vnull v´24 v´26 **
     AOSTCBPrioTbl v´28 v´39 v´37 v´49 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´1 **
     AOSQFreeList v´2 **
     AOSQFreeBlk v´3 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´19 v´20 **
     AOSTime (Vint32 v´16) **
     AGVars **
     atoy_inv´ **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (v´27, Int.zero)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   ENTER_CRITICAL;ₛ
   message =ₑ OSTCBCur OSTCBMsg;ₛ
   If(message !=ₑ NULL)
        {EXIT_CRITICAL;ₛ
        RETURN MBOX_PEND_SUCC} ;ₛ
   EXIT_CRITICAL;ₛ
   RETURN MBOX_PEND_TIMEOUT_ERR {{Afalse}}
.
Definition gen_mbox_post_part1:= forall (x : addrval)
                              ( : val)
                              (H0 : val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                    val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vnull)
                              (v´0 : list vallist)
                              (v´1 : list vallist)
                              (v´2 : list vallist)
                              (v´3 : list EventData)
                              (v´4 : list EventCtr)
                              (v´5 : vallist)
                              (v´6 : val)
                              (v´7 : val)
                              (v´8 : list vallist)
                              (v´9 : vallist)
                              (v´10 : list vallist)
                              (v´11 : vallist)
                              (v´12 : val)
                              (v´13 : EcbMod.map)
                              (v´14 : TcbMod.map)
                              (v´15 : int32)
                              (v´16 : addrval)
                              (v´17 : addrval)
                              (v´18 : val)
                              (v´19 : list vallist)
                              (H1 : RH_TCBList_ECBList_P v´13 v´14 v´16)
                              (H3 : RH_CurTCB v´16 v´14)
                              (v´22 : list EventCtr)
                              (v´23 : list EventCtr)
                              (v´24 : list EventData)
                              (v´25 : list EventData)
                              (v´27 : vallist)
                              (v´28 : val)
                              (v´29 : val)
                              (v´30 : list vallist)
                              (v´31 : vallist)
                              (v´32 : list vallist)
                              (v´33 : vallist)
                              (v´34 : val)
                              (v´35 : EcbMod.map)
                              (v´36 : TcbMod.map)
                              (v´38 : addrval)
                              (v´39 : val)
                              (v´41 : vallist)
                              (v´43 : val)
                              (v´44 : EcbMod.map)
                              (v´45 : EcbMod.map)
                              (v´46 : EcbMod.map)
                              (m0 : msg)
                              (w : waitset)
                              (v´48 : addrval)
                              (H6 : ECBList_P v´43 Vnull v´23 v´25 v´45 v´36)
                              (H19 : EcbMod.join v´44 v´46 v´35)
                              (H10 : RH_TCBList_ECBList_P v´35 v´36 v´38)
                              (H11 : RH_CurTCB v´38 v´36)
                              (H15 : length v´22 = length v´24)
                              (H18 : isptr v´43)
                              (H12 : val_inj
                                       (if Int.eq ($ 1) ($ 0)
                                        then Some (Vint32 Int.one)
                                        else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                     val_inj
                                       (if Int.eq ($ 1) ($ 0)
                                        then Some (Vint32 Int.one)
                                        else Some (Vint32 Int.zero)) = Vnull)
                              (v´20 : addrval)
                              (v´26 : block)
                              (H14 : array_type_vallist_match Int8u v´41)
                              (H22 : length v´41 = OS_EVENT_TBL_SIZE)
                              (x4 : val)
                              (i : int32)
                              (H24 : Int.unsigned i <= 255)
                              (i1 : int32)
                              (H25 : Int.unsigned i1 <= 65535)
                              (H21 : RL_Tbl_Grp_P v´41 (Vint32 i))
                              (H27 : isptr v´43)
                              (H5 : ECBList_P v´39 (Vptr (v´26, Int.zero)) v´22 v´24 v´44 v´36)
                              (H9 : EcbMod.joinsig (v´26, Int.zero) (absmbox m0, w) v´45 v´46)
                              (H2 : Vptr (v´26, Int.zero) = Vnull \/
                                    exists p, Vptr (v´26, Int.zero) = Vptr p)
                              (H : val_inj (Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                   val_inj (Some( Vint32 Int.zero)) = Vnull)
                              (H17 : id_addrval´ (Vptr (v´26, Int.zero)) OSEventTbl OS_EVENT = Some v´20)
                              (H23 : Int.unsigned ($ OS_EVENT_TYPE_MBOX) <= 255)
                              (H28 : RH_ECB_P (absmbox m0, w))
                              (H30 : RH_ECB_P (absmbox m0, w))
                              (H26 : isptr m0)
                              (H8 : R_ECB_ETbl_P (v´26, Int.zero)
                                                 (V$OS_EVENT_TYPE_MBOX
                                                   :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) v´36)
                              (H4 : ECBList_P v´39 Vnull
                                              (v´22 ++
                                                    ((V$OS_EVENT_TYPE_MBOX
                                                       :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) :: nil) ++
                                                    v´23) (v´24 ++ (DMbox m0 :: nil) ++ v´25) v´35 v´36)
                              (H16 : Int.eq i ($ 0) = false)
                              (v´21 : option val)
,
  {|OSQ_spec , GetHPrio , I,
   fun v : option val =>
   ((((EX v0 : val, LV message @ (Void) |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post1
       (Vptr (v´26, Int.zero) :: Vptr x :: V$OS_STAT_MBOX :: nil) v´21
       (logic_lv v´27
        :: logic_lv v´31
           :: logic_llv v´30
              :: logic_llv v´32
                 :: logic_lv v´33
                    :: logic_val v´34
                       :: logic_abstcb v´36
                          :: logic_val v´28
                             :: logic_val v´29
                                :: logic_val (Vptr v´38)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MBOX
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: m0 :: x4 :: v´43 :: nil)
                                      :: logic_lv v´41
                                         :: logic_leventd (DMbox m0 :: nil)
                                            :: logic_code
                                                 (mbox_post
                                                  (Vptr (v´26, Int.zero)
                                                  ::
                                                  Vptr x :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV legal @ Int8u |-> (V$OS_STAT_MBOX) **
     GV OSEventList @ OS_EVENT |-> v´39 **
     evsllseg v´39 (Vptr (v´26, Int.zero)) v´22 v´24 **
     evsllseg v´43 Vnull v´23 v´25 **
     HECBList v´35 **
     HTCBList v´36 **
     HCurTCB v´38 **
     AOSEventFreeList v´0 **
     AOSQFreeList v´1 **
     AOSQFreeBlk v´2 **
     AOSIntNesting **
     AOSTCBFreeList v´18 v´19 **
     AOSTime (Vint32 v´15) **
     HTime v´15 **
     AGVars **
     atoy_inv´ **
     LV message @ (Void) |-> Vptr x **
     LV pevent @ OS_EVENT |-> Vptr (v´26, Int.zero) **
     A_dom_lenv
       ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   RETURN OS_NO_ERR {{Afalse}}
.

Definition gen_mbox_post_part2 := forall (x : addrval)
                               ( : val)
                               (H0 : val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vint32 Int.zero \/ val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vnull)
                               (v´0 : list vallist)
                               (v´1 : list vallist)
                               (v´2 : list vallist)
                               (v´3 : list EventData)
                               (v´4 : list EventCtr)
                               (v´5 : vallist)
                               (v´6 : val)
                               (v´7 : val)
                               (v´8 : list vallist)
                               (v´9 : vallist)
                               (v´10 : list vallist)
                               (v´11 : vallist)
                               (v´12 : val)
                               (v´13 : EcbMod.map)
                               (v´14 : TcbMod.map)
                               (v´15 : int32)
                               (v´16 : addrval)
                               (v´17 : addrval)
                               (v´18 : val)
                               (v´19 : list vallist)
                               (H1 : RH_TCBList_ECBList_P v´13 v´14 v´16)
                               (H3 : RH_CurTCB v´16 v´14)
                               (v´22 : list EventCtr)
                               (v´23 : list EventCtr)
                               (v´24 : list EventData)
                               (v´25 : list EventData)
                               (v´27 : vallist)
                               (v´28 : val)
                               (v´29 : val)
                               (v´30 : list vallist)
                               (v´31 : vallist)
                               (v´32 : list vallist)
                               (v´33 : vallist)
                               (v´34 : val)
                               (v´35 : EcbMod.map)
                               (v´36 : TcbMod.map)
                               (v´38 : addrval)
                               (v´39 : val)
                               (v´41 : vallist)
                               (v´43 : val)
                               (v´44 : EcbMod.map)
                               (v´45 : EcbMod.map)
                               (v´46 : EcbMod.map)
                               (m0 : msg)
                               (w : waitset)
                               (v´48 : addrval)
                               (H6 : ECBList_P v´43 Vnull v´23 v´25 v´45 v´36)
                               (H19 : EcbMod.join v´44 v´46 v´35)
                               (H10 : RH_TCBList_ECBList_P v´35 v´36 v´38)
                               (H11 : RH_CurTCB v´38 v´36)
                               (H15 : length v´22 = length v´24)
                               (H18 : isptr v´43)
                               (H12 : val_inj
                                        (if Int.eq ($ 1) ($ 0)
                                         then Some (Vint32 Int.one)
                                         else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                      val_inj
                                        (if Int.eq ($ 1) ($ 0)
                                         then Some (Vint32 Int.one)
                                         else Some (Vint32 Int.zero)) = Vnull)
                               (v´20 : addrval)
                               (v´26 : block)
                               (H14 : array_type_vallist_match Int8u v´41)
                               (H22 : length v´41 = OS_EVENT_TBL_SIZE)
                               (x4 : val)
                               (i : int32)
                               (H24 : Int.unsigned i <= 255)
                               (i1 : int32)
                               (H25 : Int.unsigned i1 <= 65535)
                               (H21 : RL_Tbl_Grp_P v´41 (Vint32 i))
                               (H27 : isptr v´43)
                               (H5 : ECBList_P v´39 (Vptr (v´26, Int.zero)) v´22 v´24 v´44 v´36)
                               (H9 : EcbMod.joinsig (v´26, Int.zero) (absmbox m0, w) v´45 v´46)
                               (H2 : Vptr (v´26, Int.zero) = Vnull \/
                                     (exists p, Vptr (v´26, Int.zero) = Vptr p))
                               (H : val_inj (Some (Vint32 Int.zero)) = Vint32 Int.zero \/ val_inj (Some (Vint32 Int.zero)) = Vnull)
                               (H17 : id_addrval´ (Vptr (v´26, Int.zero)) OSEventTbl OS_EVENT = Some v´20)
                               (H23 : Int.unsigned ($ OS_EVENT_TYPE_MBOX) <= 255)
                               (H28 : RH_ECB_P (absmbox m0, w))
                               (H30 : RH_ECB_P (absmbox m0, w))
                               (H26 : isptr m0)
                               (H8 : R_ECB_ETbl_P (v´26, Int.zero)
                                                  (V$OS_EVENT_TYPE_MBOX
                                                    :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) v´36)
                               (H4 : ECBList_P v´39 Vnull
                                               (v´22 ++
                                                     ((V$OS_EVENT_TYPE_MBOX
                                                        :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) :: nil) ++
                                                     v´23) (v´24 ++ (DMbox m0 :: nil) ++ v´25) v´35 v´36)
                               (H16 : Int.eq i ($ 0) = false)
                               (v´21 : option val),
   {|OSQ_spec , GetHPrio , I,
   fun v : option val =>
   ((((EX v0 : val, LV message @ (Void) |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post3
       (Vptr (v´26, Int.zero) :: Vptr x :: V$OS_STAT_MBOX :: nil) v´21
       (logic_lv v´27
        :: logic_lv v´31
           :: logic_llv v´30
              :: logic_llv v´32
                 :: logic_lv v´33
                    :: logic_val v´34
                       :: logic_abstcb v´36
                          :: logic_val v´28
                             :: logic_val v´29
                                :: logic_val (Vptr v´38)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MBOX
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: m0 :: x4 :: v´43 :: nil)
                                      :: logic_lv v´41
                                         :: logic_leventd (DMbox m0 :: nil)
                                           :: logic_code
                                                 (mbox_post
                                                  (Vptr (v´26, Int.zero)
                                                  ::
                                                  Vptr x :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV legal @ Int8u |-> (V$OS_STAT_MBOX) **
     GV OSEventList @ OS_EVENT |-> v´39 **
     evsllseg v´39 (Vptr (v´26, Int.zero)) v´22 v´24 **
     evsllseg v´43 Vnull v´23 v´25 **
     HECBList v´35 **
     HTCBList v´36 **
     HCurTCB v´38 **
     AOSEventFreeList v´0 **
     AOSQFreeList v´1 **
     AOSQFreeBlk v´2 **
     AOSIntNesting **
     AOSTCBFreeList v´18 v´19 **
     AOSTime (Vint32 v´15) **
     HTime v´15 **
     AGVars **
     atoy_inv´ **
     LV message @ (Void) |-> Vptr x **
     LV pevent @ OS_EVENT |-> Vptr (v´26, Int.zero) **
     A_dom_lenv
       ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_mbox_post_part3:= forall
                         (x : addrval)
                         ( : val)
                         ( H0 : val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vnull)
                         (v´0 : list vallist)
                         (v´1 : list vallist)
                         (v´2 : list vallist)
                         (v´3 : list EventData)
                         (v´4 : list EventCtr)
                         (v´5 : vallist)
                         (v´6 : val)
                         (v´7 : val)
                         (v´8 : list vallist)
                         (v´9 : vallist)
                         (v´10 : list vallist)
                         (v´11 : vallist)
                         (v´12 : val)
                         (v´13 : EcbMod.map)
                         (v´14 : TcbMod.map)
                         (v´15 : int32)
                         (v´16 : addrval)
                         (v´17 : addrval)
                         (v´18 : val)
                         (v´19 : list vallist)
                         (H1 : RH_TCBList_ECBList_P v´13 v´14 v´16)
                         (H3 : RH_CurTCB v´16 v´14)
                         (v´22 : list EventCtr)
                         (v´23 : list EventCtr)
                         (v´24 : list EventData)
                         (v´25 : list EventData)
                         (v´27 : vallist)
                         (v´28 : val)
                         (v´29 : val)
                         (v´30 : list vallist)
                         (v´31 : vallist)
                         (v´32 : list vallist)
                         (v´33 : vallist)
                         (v´34 : val)
                         (v´35 : EcbMod.map)
                         (v´36 : TcbMod.map)
                         (v´38 : addrval)
                         (v´39 : val)
                         (v´41 : vallist)
                         (v´43 : val)
                         (v´44 : EcbMod.map)
                         (v´45 : EcbMod.map)
                         (v´46 : EcbMod.map)
                         (m0 : msg)
                         (w : waitset)
                         (v´48 : addrval)
                         (H6 : ECBList_P v´43 Vnull v´23 v´25 v´45 v´36)
                         (H19 : EcbMod.join v´44 v´46 v´35)
                         (H10 : RH_TCBList_ECBList_P v´35 v´36 v´38)
                         (H11 : RH_CurTCB v´38 v´36)
                         (H15 : length v´22 = length v´24)
                         (H18 : isptr v´43)
                         (H12 : val_inj
                                  (if Int.eq ($ 1) ($ 0)
                                   then Some (Vint32 Int.one)
                                   else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                val_inj
                                  (if Int.eq ($ 1) ($ 0)
                                   then Some (Vint32 Int.one)
                                   else Some (Vint32 Int.zero)) = Vnull)
                         (v´20 : addrval)
                         (v´26 : block)
                         (H14 : array_type_vallist_match Int8u v´41)
                         (H22 : length v´41 = OS_EVENT_TBL_SIZE)
                         (x4 : val)
                         (i : int32)
                         (H24 : Int.unsigned i <= 255)
                         (i1 : int32)
                         (H25 : Int.unsigned i1 <= 65535)
                         (H21 : RL_Tbl_Grp_P v´41 (Vint32 i))
                         (H27 : isptr v´43)
                         (H5 : ECBList_P v´39 (Vptr (v´26, Int.zero)) v´22 v´24 v´44 v´36)
                         (H9 : EcbMod.joinsig (v´26, Int.zero) (absmbox m0, w) v´45 v´46)
                         (H2 : Vptr (v´26, Int.zero) = Vnull \/
                               (exists p, Vptr (v´26, Int.zero) = Vptr p))
                         (H : val_inj (Some ( Vint32 Int.zero)) = Vint32 Int.zero \/
                              val_inj (Some ( Vint32 Int.zero)) = Vnull)
                         (H17 : id_addrval´ (Vptr (v´26, Int.zero)) OSEventTbl OS_EVENT = Some v´20)
                         (H23 : Int.unsigned ($ OS_EVENT_TYPE_MBOX) <= 255)
                         (H28 : RH_ECB_P (absmbox m0, w))
                         (H30 : RH_ECB_P (absmbox m0, w))
                         (H26 : isptr m0)
                         (H8 : R_ECB_ETbl_P (v´26, Int.zero)
                                            (V$OS_EVENT_TYPE_MBOX
                                              :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) v´36)
                         (H4 : ECBList_P v´39 Vnull
                                         (v´22 ++
                                               ((V$OS_EVENT_TYPE_MBOX
                                                  :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) :: nil) ++
                                               v´23) (v´24 ++ (DMbox m0 :: nil) ++ v´25) v´35 v´36)
                         (H16 : Int.eq i ($ 0) = false)
                         (v´21 : option val )
                       ,
   {|OSQ_spec , GetHPrio , I,
   fun v : option val =>
   ((((EX v0 : val, LV message @ (Void) |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post5
       (Vptr (v´26, Int.zero) :: Vptr x :: V$OS_STAT_MBOX :: nil) v´21
       (logic_lv v´27
        :: logic_lv v´31
           :: logic_llv v´30
              :: logic_llv v´32
                 :: logic_lv v´33
                    :: logic_val v´34
                       :: logic_abstcb v´36
                          :: logic_val v´28
                             :: logic_val v´29
                                :: logic_val (Vptr v´38)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MBOX
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: m0 :: x4 :: v´43 :: nil)
                                      :: logic_lv v´41
                                         :: logic_leventd (DMbox m0 :: nil)
                                                  :: logic_code
                                                 (mbox_post
                                                  (Vptr (v´26, Int.zero)
                                                  ::
                                                  Vptr x :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV legal @ Int8u |-> (V$OS_STAT_MBOX) **
     GV OSEventList @ OS_EVENT |-> v´39 **
     evsllseg v´39 (Vptr (v´26, Int.zero)) v´22 v´24 **
     evsllseg v´43 Vnull v´23 v´25 **
     HECBList v´35 **
     HTCBList v´36 **
     HCurTCB v´38 **
     AOSEventFreeList v´0 **
     AOSQFreeList v´1 **
     AOSQFreeBlk v´2 **
     AOSIntNesting **
     AOSTCBFreeList v´18 v´19 **
     AOSTime (Vint32 v´15) **
     HTime v´15 **
     AGVars **
     atoy_inv´ **
     LV message @ (Void) |-> Vptr x **
     LV pevent @ OS_EVENT |-> Vptr (v´26, Int.zero) **
     A_dom_lenv
       ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   RETURN OS_NO_ERR {{Afalse}}.

Definition gen_mbox_post_part4:=forall (x : addrval)
                              ( : val)
                              (H0 : val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                    val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vnull)
                              (v´0 : list vallist)
                              (v´1 : list vallist)
                              (v´2 : list vallist)
                              (v´3 : list EventData)
                              (v´4 : list EventCtr)
                              (v´5 : vallist)
                              (v´6 : val)
                              (v´7 : val)
                              (v´8 : list vallist)
                              (v´9 : vallist)
                              (v´10 : list vallist)
                              (v´11 : vallist)
                              (v´12 : val)
                              (v´13 : EcbMod.map)
                              (v´14 : TcbMod.map)
                              (v´15 : int32)
                              (v´16 : addrval)
                              (v´17 : addrval)
                              (v´18 : val)
                              (v´19 : list vallist)
                              (H1 : RH_TCBList_ECBList_P v´13 v´14 v´16)
                              (H3 : RH_CurTCB v´16 v´14)
                              (v´22 : list EventCtr)
                              (v´23 : list EventCtr)
                              (v´24 : list EventData)
                              (v´25 : list EventData)
                              (v´27 : vallist)
                              (v´28 : val)
                              (v´29 : val)
                              (v´30 : list vallist)
                              (v´31 : vallist)
                              (v´32 : list vallist)
                              (v´33 : vallist)
                              (v´34 : val)
                              (v´35 : EcbMod.map)
                              (v´36 : TcbMod.map)
                              (v´38 : addrval)
                              (v´39 : val)
                              (v´41 : vallist)
                              (v´43 : val)
                              (v´44 : EcbMod.map)
                              (v´45 : EcbMod.map)
                              (v´46 : EcbMod.map)
                              (m0 : msg)
                              (w : waitset)
                              (v´48 : addrval)
                              (H6 : ECBList_P v´43 Vnull v´23 v´25 v´45 v´36)
                              (H19 : EcbMod.join v´44 v´46 v´35)
                              (H10 : RH_TCBList_ECBList_P v´35 v´36 v´38)
                              (H11 : RH_CurTCB v´38 v´36)
                              (H15 : length v´22 = length v´24)
                              (H18 : isptr v´43)
                              (H12 : val_inj
                                       (if Int.eq ($ 1) ($ 0)
                                        then Some (Vint32 Int.one)
                                        else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                     val_inj
                                       (if Int.eq ($ 1) ($ 0)
                                        then Some (Vint32 Int.one)
                                        else Some (Vint32 Int.zero)) = Vnull)
                              (v´20 : addrval)
                              (v´26 : block)
                              (H14 : array_type_vallist_match Int8u v´41)
                              (H22 : length v´41 = OS_EVENT_TBL_SIZE)
                              (x4 : val)
                              (i : int32)
                              (H24 : Int.unsigned i <= 255)
                              (i1 : int32)
                              (H25 : Int.unsigned i1 <= 65535)
                              (H21 : RL_Tbl_Grp_P v´41 (Vint32 i))
                              (H27 : isptr v´43)
                              (H5 : ECBList_P v´39 (Vptr (v´26, Int.zero)) v´22 v´24 v´44 v´36)
                              (H9 : EcbMod.joinsig (v´26, Int.zero) (absmbox m0, w) v´45 v´46)
                              (H2 : Vptr (v´26, Int.zero) = Vnull \/
                                    (exists p, Vptr (v´26, Int.zero) = Vptr p))
                              (H : val_inj (Some ( Vint32 Int.zero)) = Vint32 Int.zero \/
                                   val_inj (Some ( Vint32 Int.zero)) = Vnull)
                              (H17 : id_addrval´ (Vptr (v´26, Int.zero)) OSEventTbl OS_EVENT = Some v´20)
                              (H23 : Int.unsigned ($ OS_EVENT_TYPE_MBOX) <= 255)
                              (H28 : RH_ECB_P (absmbox m0, w))
                              (H30 : RH_ECB_P (absmbox m0, w))
                              (H26 : isptr m0)
                              (H8 : R_ECB_ETbl_P (v´26, Int.zero)
                                                 (V$OS_EVENT_TYPE_MBOX
                                                   :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) v´36)
                              (H4 : ECBList_P v´39 Vnull
                                              (v´22 ++
                                                    ((V$OS_EVENT_TYPE_MBOX
                                                       :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) :: nil) ++
                                                    v´23) (v´24 ++ (DMbox m0 :: nil) ++ v´25) v´35 v´36)
                              (H16 : Int.eq i ($ 0) = false)
                              (v´21 : option val
                              ),
   {|OSQ_spec , GetHPrio , I,
   fun v : option val =>
   ((((EX v0 : val, LV message @ (Void) |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post1´
       (Vptr (v´26, Int.zero) :: Vptr x :: V$OS_STAT_MBOX :: nil) v´21
       (logic_lv v´27
        :: logic_lv v´31
           :: logic_llv v´30
              :: logic_llv v´32
                 :: logic_lv v´33
                    :: logic_val v´34
                       :: logic_abstcb v´36
                          :: logic_val v´28
                             :: logic_val v´29
                                :: logic_val (Vptr v´38)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MBOX
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: m0 :: x4 :: v´43 :: nil)
                                      :: logic_lv v´41
                                         :: logic_leventd (DMbox m0 :: nil)
                                                   :: logic_code
                                                 (mbox_post
                                                  (Vptr (v´26, Int.zero)
                                                  ::
                                                  Vptr x :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV legal @ Int8u |-> (V$OS_STAT_MBOX) **
     GV OSEventList @ OS_EVENT |-> v´39 **
     evsllseg v´39 (Vptr (v´26, Int.zero)) v´22 v´24 **
     evsllseg v´43 Vnull v´23 v´25 **
     HECBList v´35 **
     HTCBList v´36 **
     HCurTCB v´38 **
     AOSEventFreeList v´0 **
     AOSQFreeList v´1 **
     AOSQFreeBlk v´2 **
     AOSIntNesting **
     AOSTCBFreeList v´18 v´19 **
     AOSTime (Vint32 v´15) **
     HTime v´15 **
     AGVars **
     atoy_inv´ **
     LV message @ (Void) |-> Vptr x **
     LV pevent @ OS_EVENT |-> Vptr (v´26, Int.zero) **
     A_dom_lenv
       ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   RETURN OS_NO_ERR {{Afalse}}.

Definition gen_mbox_post_part5:=forall (
                           x : addrval)
                              ( : val)
                              (H0 : val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                    val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vnull)
                              (v´0 : list vallist)
                              (v´1 : list vallist)
                              (v´2 : list vallist)
                              (v´3 : list EventData)
                              (v´4 : list EventCtr)
                              (v´5 : vallist)
                              (v´6 : val)
                              (v´7 : val)
                              (v´8 : list vallist)
                              (v´9 : vallist)
                              (v´10 : list vallist)
                              (v´11 : vallist)
                              (v´12 : val)
                              (v´13 : EcbMod.map)
                              (v´14 : TcbMod.map)
                              (v´15 : int32)
                              (v´16 : addrval)
                              (v´17 : addrval)
                              (v´18 : val)
                              (v´19 : list vallist)
                              (H1 : RH_TCBList_ECBList_P v´13 v´14 v´16)
                              (H3 : RH_CurTCB v´16 v´14)
                              (v´22 : list EventCtr)
                              (v´23 : list EventCtr)
                              (v´24 : list EventData)
                              (v´25 : list EventData)
                              (v´27 : vallist)
                              (v´28 : val)
                              (v´29 : val)
                              (v´30 : list vallist)
                              (v´31 : vallist)
                              (v´32 : list vallist)
                              (v´33 : vallist)
                              (v´34 : val)
                              (v´35 : EcbMod.map)
                              (v´36 : TcbMod.map)
                              (v´38 : addrval)
                              (v´39 : val)
                              (v´41 : vallist)
                              (v´43 : val)
                              (v´44 : EcbMod.map)
                              (v´45 : EcbMod.map)
                              (v´46 : EcbMod.map)
                              (m0 : msg)
                              (w : waitset)
                              (v´48 : addrval)
                              (H6 : ECBList_P v´43 Vnull v´23 v´25 v´45 v´36)
                              (H19 : EcbMod.join v´44 v´46 v´35)
                              (H10 : RH_TCBList_ECBList_P v´35 v´36 v´38)
                              (H11 : RH_CurTCB v´38 v´36)
                              (H15 : length v´22 = length v´24)
                              (H18 : isptr v´43)
                              (H12 : val_inj
                                       (if Int.eq ($ 1) ($ 0)
                                        then Some (Vint32 Int.one)
                                        else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                     val_inj
                                       (if Int.eq ($ 1) ($ 0)
                                        then Some (Vint32 Int.one)
                                        else Some (Vint32 Int.zero)) = Vnull)
                              (v´20 : addrval)
                              (v´26 : block)
                              (H14 : array_type_vallist_match Int8u v´41)
                              (H22 : length v´41 = OS_EVENT_TBL_SIZE)
                              (x4 : val)
                              (i : int32)
                              (H24 : Int.unsigned i <= 255)
                              (i1 : int32)
                              (H25 : Int.unsigned i1 <= 65535)
                              (H21 : RL_Tbl_Grp_P v´41 (Vint32 i))
                              (H27 : isptr v´43)
                              (H5 : ECBList_P v´39 (Vptr (v´26, Int.zero)) v´22 v´24 v´44 v´36)
                              (H9 : EcbMod.joinsig (v´26, Int.zero) (absmbox m0, w) v´45 v´46)
                              (H2 : Vptr (v´26, Int.zero) = Vnull \/
                                    (exists p, Vptr (v´26, Int.zero) = Vptr p))
                              (H : val_inj (Some ( Vint32 Int.zero)) = Vint32 Int.zero \/
                                   val_inj (Some ( Vint32 Int.zero)) = Vnull)
                              (H17 : id_addrval´ (Vptr (v´26, Int.zero)) OSEventTbl OS_EVENT = Some v´20)
                              (H23 : Int.unsigned ($ OS_EVENT_TYPE_MBOX) <= 255)
                              (H28 : RH_ECB_P (absmbox m0, w))
                              (H30 : RH_ECB_P (absmbox m0, w))
                              (H26 : isptr m0)
                              (H8 : R_ECB_ETbl_P (v´26, Int.zero)
                                                 (V$OS_EVENT_TYPE_MBOX
                                                   :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) v´36)
                              (H4 : ECBList_P v´39 Vnull
                                              (v´22 ++
                                                    ((V$OS_EVENT_TYPE_MBOX
                                                       :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) :: nil) ++
                                                    v´23) (v´24 ++ (DMbox m0 :: nil) ++ v´25) v´35 v´36)
                              (H16 : Int.eq i ($ 0) = false)
                              (v´21 : option val
                              )
                       ,
   {|OSQ_spec , GetHPrio , I,
   fun v : option val =>
   ((((EX v0 : val, LV message @ (Void) |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post3´
       (Vptr (v´26, Int.zero) :: Vptr x :: V$OS_STAT_MBOX :: nil) v´21
       (logic_lv v´27
        :: logic_lv v´31
           :: logic_llv v´30
              :: logic_llv v´32
                 :: logic_lv v´33
                    :: logic_val v´34
                       :: logic_abstcb v´36
                          :: logic_val v´28
                             :: logic_val v´29
                                :: logic_val (Vptr v´38)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MBOX
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: m0 :: x4 :: v´43 :: nil)
                                      :: logic_lv v´41
                                         :: logic_leventd (DMbox m0 :: nil)
                                                  :: logic_code
                                                 (mbox_post
                                                  (Vptr (v´26, Int.zero)
                                                  ::
                                                  Vptr x :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV legal @ Int8u |-> (V$OS_STAT_MBOX) **
     GV OSEventList @ OS_EVENT |-> v´39 **
     evsllseg v´39 (Vptr (v´26, Int.zero)) v´22 v´24 **
     evsllseg v´43 Vnull v´23 v´25 **
     HECBList v´35 **
     HTCBList v´36 **
     HCurTCB v´38 **
     AOSEventFreeList v´0 **
     AOSQFreeList v´1 **
     AOSQFreeBlk v´2 **
     AOSIntNesting **
     AOSTCBFreeList v´18 v´19 **
     AOSTime (Vint32 v´15) **
     HTime v´15 **
     AGVars **
     atoy_inv´ **
     LV message @ (Void) |-> Vptr x **
     LV pevent @ OS_EVENT |-> Vptr (v´26, Int.zero) **
     A_dom_lenv
       ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_mbox_post_part6:= forall (
                           x : addrval)
                              ( : val)
                              (H0 : val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                    val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vnull)
                              (v´0 : list vallist)
                              (v´1 : list vallist)
                              (v´2 : list vallist)
                              (v´3 : list EventData)
                              (v´4 : list EventCtr)
                              (v´5 : vallist)
                              (v´6 : val)
                              (v´7 : val)
                              (v´8 : list vallist)
                              (v´9 : vallist)
                              (v´10 : list vallist)
                              (v´11 : vallist)
                              (v´12 : val)
                              (v´13 : EcbMod.map)
                              (v´14 : TcbMod.map)
                              (v´15 : int32)
                              (v´16 : addrval)
                              (v´17 : addrval)
                              (v´18 : val)
                              (v´19 : list vallist)
                              (H1 : RH_TCBList_ECBList_P v´13 v´14 v´16)
                              (H3 : RH_CurTCB v´16 v´14)
                              (v´22 : list EventCtr)
                              (v´23 : list EventCtr)
                              (v´24 : list EventData)
                              (v´25 : list EventData)
                              (v´27 : vallist)
                              (v´28 : val)
                              (v´29 : val)
                              (v´30 : list vallist)
                              (v´31 : vallist)
                              (v´32 : list vallist)
                              (v´33 : vallist)
                              (v´34 : val)
                              (v´35 : EcbMod.map)
                              (v´36 : TcbMod.map)
                              (v´38 : addrval)
                              (v´39 : val)
                              (v´41 : vallist)
                              (v´43 : val)
                              (v´44 : EcbMod.map)
                              (v´45 : EcbMod.map)
                              (v´46 : EcbMod.map)
                              (m0 : msg)
                              (w : waitset)
                              (v´48 : addrval)
                              (H6 : ECBList_P v´43 Vnull v´23 v´25 v´45 v´36)
                              (H19 : EcbMod.join v´44 v´46 v´35)
                              (H10 : RH_TCBList_ECBList_P v´35 v´36 v´38)
                              (H11 : RH_CurTCB v´38 v´36)
                              (H15 : length v´22 = length v´24)
                              (H18 : isptr v´43)
                              (H12 : val_inj
                                       (if Int.eq ($ 1) ($ 0)
                                        then Some (Vint32 Int.one)
                                        else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                     val_inj
                                       (if Int.eq ($ 1) ($ 0)
                                        then Some (Vint32 Int.one)
                                        else Some (Vint32 Int.zero)) = Vnull)
                              (v´20 : addrval)
                              (v´26 : block)
                              (H14 : array_type_vallist_match Int8u v´41)
                              (H22 : length v´41 = OS_EVENT_TBL_SIZE)
                              (x4 : val)
                              (i : int32)
                              (H24 : Int.unsigned i <= 255)
                              (i1 : int32)
                              (H25 : Int.unsigned i1 <= 65535)
                              (H21 : RL_Tbl_Grp_P v´41 (Vint32 i))
                              (H27 : isptr v´43)
                              (H5 : ECBList_P v´39 (Vptr (v´26, Int.zero)) v´22 v´24 v´44 v´36)
                              (H9 : EcbMod.joinsig (v´26, Int.zero) (absmbox m0, w) v´45 v´46)
                              (H2 : Vptr (v´26, Int.zero) = Vnull \/
                                    (exists p, Vptr (v´26, Int.zero) = Vptr p))
                              (H : val_inj (Some ( Vint32 Int.zero)) = Vint32 Int.zero \/
                                   val_inj (Some ( Vint32 Int.zero)) = Vnull)
                              (H17 : id_addrval´ (Vptr (v´26, Int.zero)) OSEventTbl OS_EVENT = Some v´20)
                              (H23 : Int.unsigned ($ OS_EVENT_TYPE_MBOX) <= 255)
                              (H28 : RH_ECB_P (absmbox m0, w))
                              (H30 : RH_ECB_P (absmbox m0, w))
                              (H26 : isptr m0)
                              (H8 : R_ECB_ETbl_P (v´26, Int.zero)
                                                 (V$OS_EVENT_TYPE_MBOX
                                                   :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) v´36)
                              (H4 : ECBList_P v´39 Vnull
                                              (v´22 ++
                                                    ((V$OS_EVENT_TYPE_MBOX
                                                       :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) :: nil) ++
                                                    v´23) (v´24 ++ (DMbox m0 :: nil) ++ v´25) v´35 v´36)
                              (H16 : Int.eq i ($ 0) = false)
                              (v´21 : option val),
   {|OSQ_spec , GetHPrio , I,
   fun v : option val =>
   ((((EX v0 : val, LV message @ (Void) |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post5´
       (Vptr (v´26, Int.zero) :: Vptr x :: V$OS_STAT_MBOX :: nil) v´21
       (logic_lv v´27
        :: logic_lv v´31
           :: logic_llv v´30
              :: logic_llv v´32
                 :: logic_lv v´33
                    :: logic_val v´34
                       :: logic_abstcb v´36
                          :: logic_val v´28
                             :: logic_val v´29
                                :: logic_val (Vptr v´38)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MBOX
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: m0 :: x4 :: v´43 :: nil)
                                      :: logic_lv v´41
                                         :: logic_leventd (DMbox m0 :: nil)
                                                  :: logic_code
                                                 (mbox_post
                                                  (Vptr (v´26, Int.zero)
                                                  ::
                                                  Vptr x :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV legal @ Int8u |-> (V$OS_STAT_MBOX) **
     GV OSEventList @ OS_EVENT |-> v´39 **
     evsllseg v´39 (Vptr (v´26, Int.zero)) v´22 v´24 **
     evsllseg v´43 Vnull v´23 v´25 **
     HECBList v´35 **
     HTCBList v´36 **
     HCurTCB v´38 **
     AOSEventFreeList v´0 **
     AOSQFreeList v´1 **
     AOSQFreeBlk v´2 **
     AOSIntNesting **
     AOSTCBFreeList v´18 v´19 **
     AOSTime (Vint32 v´15) **
     HTime v´15 **
     AGVars **
     atoy_inv´ **
     LV message @ (Void) |-> Vptr x **
     LV pevent @ OS_EVENT |-> Vptr (v´26, Int.zero) **
     A_dom_lenv
       ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_mbox_post_part0 := forall (x : addrval)
                                ( : val)
                                (H0 : val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                      val_inj (let (_, _) := x in Some (Vint32 Int.zero)) = Vnull)
                                (v´0 : list vallist)
                                (v´1 : list vallist)
                                (v´2 : list vallist)
                                (v´3 : list EventData)
                                (v´4 : list EventCtr)
                                (v´5 : vallist)
                                (v´6 : val)
                                (v´7 : val)
                                (v´8 : list vallist)
                                (v´9 : vallist)
                                (v´10 : list vallist)
                                (v´11 : vallist)
                                (v´12 : val)
                                (v´13 : EcbMod.map)
                                (v´14 : TcbMod.map)
                                (v´15 : int32)
                                (v´16 : addrval)
                                (v´17 : addrval)
                                (v´18 : val)
                                (v´19 : list vallist)
                                (H1 : RH_TCBList_ECBList_P v´13 v´14 v´16)
                                (H3 : RH_CurTCB v´16 v´14)
                                (v´22 : list EventCtr)
                                (v´23 : list EventCtr)
                                (v´24 : list EventData)
                                (v´25 : list EventData)
                                (v´27 : vallist)
                                (v´28 : val)
                                (v´29 : val)
                                (v´30 : list vallist)
                                (v´31 : vallist)
                                (v´32 : list vallist)
                                (v´33 : vallist)
                                (v´34 : val)
                                (v´35 : EcbMod.map)
                                (v´36 : TcbMod.map)
                                (v´38 : addrval)
                                (v´39 : val)
                                (v´41 : vallist)
                                (v´43 : val)
                                (v´44 : EcbMod.map)
                                (v´45 : EcbMod.map)
                                (v´46 : EcbMod.map)
                                (m0 : msg)
                                (w : waitset)
                                (v´48 : addrval)
                                (H6 : ECBList_P v´43 Vnull v´23 v´25 v´45 v´36)
                                (H19 : EcbMod.join v´44 v´46 v´35)
                                (H10 : RH_TCBList_ECBList_P v´35 v´36 v´38)
                                (H11 : RH_CurTCB v´38 v´36)
                                (H15 : length v´22 = length v´24)
                                (H18 : isptr v´43)
                                (H12 : val_inj
                                         (if Int.eq ($ 1) ($ 0)
                                          then Some (Vint32 Int.one)
                                          else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
                                       val_inj
                                         (if Int.eq ($ 1) ($ 0)
                                          then Some (Vint32 Int.one)
                                          else Some (Vint32 Int.zero)) = Vnull)
                                (v´20 : addrval)
                                (v´26 : block)
                                (H14 : array_type_vallist_match Int8u v´41)
                                (H22 : length v´41 = OS_EVENT_TBL_SIZE)
                                (x4 : val)
                                (i : int32)
                                (H24 : Int.unsigned i <= 255)
                                (i1 : int32)
                                (H25 : Int.unsigned i1 <= 65535)
                                (H21 : RL_Tbl_Grp_P v´41 (Vint32 i))
                                (H27 : isptr v´43)
                                (H5 : ECBList_P v´39 (Vptr (v´26, Int.zero)) v´22 v´24 v´44 v´36)
                                (H9 : EcbMod.joinsig (v´26, Int.zero) (absmbox m0, w) v´45 v´46)
                                (H2 : Vptr (v´26, Int.zero) = Vnull \/
                                      (exists p, Vptr (v´26, Int.zero) = Vptr p))
                                (H : val_inj (Some ( Vint32 Int.zero)) = Vint32 Int.zero \/
                                     val_inj (Some ( Vint32 Int.zero)) = Vnull)
                                (H17 : id_addrval´ (Vptr (v´26, Int.zero)) OSEventTbl OS_EVENT = Some v´20)
                                (H23 : Int.unsigned ($ OS_EVENT_TYPE_MBOX) <= 255)
                                (H28 : RH_ECB_P (absmbox m0, w))
                                (H30 : RH_ECB_P (absmbox m0, w))
                                (H26 : isptr m0)
                                (H8 : R_ECB_ETbl_P (v´26, Int.zero)
                                                   (V$OS_EVENT_TYPE_MBOX
                                                     :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) v´36)
                                (H4 : ECBList_P v´39 Vnull
                                                (v´22 ++
                                                      ((V$OS_EVENT_TYPE_MBOX
                                                         :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil, v´41) :: nil) ++
                                                      v´23) (v´24 ++ (DMbox m0 :: nil) ++ v´25) v´35 v´36)
                                (H16 : Int.eq i ($ 0) = false)
                        ,
    {|OSQ_spec , GetHPrio , I,
   fun v : option val =>
   ((((EX v0 : val, LV message @ (Void) |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{ <|| mbox_post (Vptr (v´26, Int.zero) :: Vptr x :: nil) ||> **
     LV legal @ Int8u |-> (V$OS_STAT_MBOX) **
     Astruct (v´26, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MBOX
        :: Vint32 i :: Vint32 i1 :: m0 :: x4 :: v´43 :: nil) **
     Aarray v´20 (Tarray Int8u OS_EVENT_TBL_SIZE) v´41 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´39 **
     evsllseg v´39 (Vptr (v´26, Int.zero)) v´22 v´24 **
     evsllseg v´43 Vnull v´23 v´25 **
     A_isr_is_prop **
     AOSTCBList v´28 v´29 v´30 (v´31 :: v´32) v´33 v´38 v´36 **
     AOSRdyTblGrp v´33 v´34 **
     AOSTCBPrioTbl v´27 v´33 v´36 v´48 **
     HECBList v´35 **
     HTCBList v´36 **
     HCurTCB v´38 **
     AOSEventFreeList v´0 **
     AOSQFreeList v´1 **
     AOSQFreeBlk v´2 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´18 v´19 **
     AOSTime (Vint32 v´15) **
     HTime v´15 **
     AGVars **
     atoy_inv´ **
     LV message @ (Void) |-> Vptr x **
     LV pevent @ OS_EVENT |-> Vptr (v´26, Int.zero) **
     A_dom_lenv
       ((message, (Void) ) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)}}
   OS_EventTaskRdy pevent , message , legal ­);ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   RETURN OS_NO_ERR {{Afalse}}
.

Definition gen_sempend_part1:=
forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : list vallist)
  (v´1 : list vallist)
  (v´2 : list vallist)
  (v´3 : list EventData)
  (v´4 : list EventCtr)
  (v´5 : vallist)
  (v´6 : val)
  (v´7 : val)
  (v´8 : list vallist)
  (v´9 : vallist)
  (v´10 : list vallist)
  (v´11 : vallist)
  (v´12 : val)
  (v´13 : EcbMod.map)
  (v´14 : TcbMod.map)
  (v´15 : int32)
  (v´16 : addrval)
  (v´17 : addrval)
  (v´18 : val)
  (v´19 : list vallist)
  (H : RH_TCBList_ECBList_P v´13 v´14 v´16)
  (H0 : RH_CurTCB v´16 v´14)
  (v´22 : list EventCtr)
  (v´23 : list EventCtr)
  (v´24 : list EventData)
  (v´25 : list EventData)
  (v´27 : vallist)
  (v´28 : val)
  (v´30 : list vallist)
  (v´32 : list vallist)
  (v´33 : vallist)
  (v´34 : val)
  (v´35 : EcbMod.map)
  (v´36 : TcbMod.map)
  (v´39 : val)
  (v´41 : vallist)
  (v´43 : val)
  (v´44 : EcbMod.map)
  (v´45 : EcbMod.map)
  (v´46 : EcbMod.map)
  (v´48 : addrval)
  (H5 : ECBList_P v´43 Vnull v´23 v´25 v´45 v´36)
  (H19 : EcbMod.join v´44 v´46 v´35)
  (H14 : length v´22 = length v´24)
  (H18 : isptr v´43)
  (H11 : $ 1 <> $ 0)
  (v´20 : addrval)
  (v´26 : block)
  (H13 : array_type_vallist_match Int8u v´41)
  (H21 : length v´41 = OS_EVENT_TBL_SIZE)
  (x2 : val)
  (x3 : val)
  (i0 : int32)
  (H23 : Int.unsigned i0 <= 255)
  (i2 : int32)
  (H24 : Int.unsigned i2 <= 65535)
  (H25 : isptr x2)
  (H20 : RL_Tbl_Grp_P v´41 (Vint32 i0))
  (H26 : isptr v´43)
  (H4 : ECBList_P v´39 (Vptr (v´26, Int.zero)) v´22 v´24 v´44 v´36)
  (H2 : isptr (Vptr (v´26, Int.zero)))
  (H16 : id_addrval´ (Vptr (v´26, Int.zero)) OSEventTbl OS_EVENT = Some v´20)
  (H22 : Int.unsigned ($ OS_EVENT_TYPE_SEM) <= 255)
  (x : waitset)
  (H8 : EcbMod.joinsig (v´26, Int.zero) (abssem i2, x) v´45 v´46)
  (Hget : EcbMod.get v´35 (v´26, Int.zero) = Some (abssem i2, x))
  (H6 : RLH_ECBData_P (DSem i2) (abssem i2, x))
  (v´21 : val)
  (v´37 : val)
  (v´40 : TcbMod.map)
  (v´42 : TcbMod.map)
  (v´47 : val)
  (v´49 : block)
  (H28 : v´28 <> Vnull)
  (H29 : TcbMod.join v´40 v´42 v´36)
  (H30 : TCBList_P v´28 v´30 v´33 v´40)
  (H27 : Vptr (v´49, Int.zero) <> Vnull)
  (x9 : val)
  (x10 : val)
  (H34 : isptr x10)
  (H35 : isptr x9)
  (i8 : int32)
  (H36 : Int.unsigned i8 <= 65535)
  (i7 : int32)
  (H37 : Int.unsigned i7 <= 255)
  (i6 : int32)
  (H38 : Int.unsigned i6 <= 255)
  (i5 : int32)
  (H39 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H40 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H41 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H42 : Int.unsigned i1 <= 255)
  (H33 : isptr v´21)
  (H12 : isptr v´47)
  (H9 : RH_TCBList_ECBList_P v´35 v´36 (v´49, Int.zero))
  (H10 : RH_CurTCB (v´49, Int.zero) v´36)
  (H15 : Int.eq i6 ($ OS_IDLE_PRIO) = false)
  (H17 : Int.eq i7 ($ OS_STAT_RDY) = true)
  (H32 : Int.eq i8 ($ 0) = true)
  (H43 : Int.ltu ($ 0) i2 = false)
  (H7 : R_ECB_ETbl_P (v´26, Int.zero)
         (V$OS_EVENT_TYPE_SEM
          :: Vint32 i0 :: Vint32 i2 :: x2 :: x3 :: v´43 :: nil, v´41) v´36)
  (H3 : ECBList_P v´39 Vnull
         (v´22 ++
          ((V$OS_EVENT_TYPE_SEM
            :: Vint32 i0 :: Vint32 i2 :: x2 :: x3 :: v´43 :: nil, v´41)
           :: nil) ++ v´23) (v´24 ++ (DSem i2 :: nil) ++ v´25) v´35 v´36)
  (H31 : TCBList_P (Vptr (v´49, Int.zero))
          ((v´47
            :: v´21
               :: x10
                  :: x9
                     :: Vint32 i8
                        :: Vint32 i7
                           :: Vint32 i6
                              :: Vint32 i5
                                 :: Vint32 i4
                                    :: Vint32 i3 :: Vint32 i1 :: nil) :: v´32)
          v´33 v´42),
   {|OSQ_spec, GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{Astruct (v´49, Int.zero) OS_TCB
       (v´47
        :: v´21
           :: x10
              :: x9
                 :: Vint32 i8
                    :: Vint32 i7
                       :: Vint32 i6
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     dllseg v´47 (Vptr (v´49, Int.zero)) v´37 Vnull v´32 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´28 **
     dllseg v´28 Vnull v´21 (Vptr (v´49, Int.zero)) v´30 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBCur @ OS_TCB |-> Vptr (v´49, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_SEM
        :: Vint32 i0 :: Vint32 i2 :: x2 :: x3 :: v´43 :: nil)
       (DSem i2) **
     Astruct (v´26, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_SEM
        :: Vint32 i0 :: Vint32 i2 :: x2 :: x3 :: v´43 :: nil) **
     Aarray v´20 (Tarray Int8u OS_EVENT_TBL_SIZE) v´41 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´39 **
     evsllseg v´39 (Vptr (v´26, Int.zero)) v´22 v´24 **
     evsllseg v´43 Vnull v´23 v´25 **
     A_isr_is_prop **
     AOSRdyTblGrp v´33 v´34 **
     AOSTCBPrioTbl v´27 v´33 v´36 v´48 **
     HECBList v´35 **
     HTCBList v´36 **
     HCurTCB (v´49, Int.zero) **
      <|| sem_pend (Vptr (v´26, Int.zero) :: Vint32 i :: nil) ||> **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´0 **
     AOSQFreeList v´1 **
     AOSQFreeBlk v´2 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´18 v´19 **
     AOSTime (Vint32 v´15) **
     HTime v´15 **
     AGVars **
     atoy_inv´ **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (v´26, Int.zero) **
     A_dom_lenv
       ((timeout, Int16u) :: (pevent, OS_EVENT ) :: (legal, Int8u) :: nil)}}
   If (OSTCBCurOSTCBMsg !=ₑ NULL) {
       EXIT_CRITICAL;ₛ
       RETURN OS_ERR_PEVENT_NULL
   };ₛ
   OSTCBCur OSTCBStat =ₑ OS_STAT_SEM;ₛ
   OSTCBCur OSTCBDly =ₑ timeout ;ₛ
   OS_EventTaskWait pevent ­);ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   ENTER_CRITICAL;ₛ
   If (OSTCBCurOSTCBMsg ==ₑ NULL)
   {EXIT_CRITICAL;ₛ
    RETURN OS_TIMEOUT} ;ₛ
   EXIT_CRITICAL;ₛ
   RETURN OS_NO_ERR {{Afalse}}.

Definition gen_sempost_part_1 := forall
  ( : val)
  (v´0 : val)
  (v´1 : list vallist)
  (v´2 : list vallist)
  (v´3 : list vallist)
  (v´4 : list EventData)
  (v´5 : list EventCtr)
  (v´6 : vallist)
  (v´7 : val)
  (v´8 : val)
  (v´9 : list vallist)
  (v´10 : vallist)
  (v´11 : list vallist)
  (v´12 : vallist)
  (v´13 : val)
  (v´14 : EcbMod.map)
  (v´15 : TcbMod.map)
  (v´16 : int32)
  (v´17 : addrval)
  (v´18 : addrval)
  (v´19 : val)
  (v´20 : list vallist)
  (H : RH_TCBList_ECBList_P v´14 v´15 v´17)
  (H0 : RH_CurTCB v´17 v´15)
  (v´23 : list EventCtr)
  (v´24 : list EventCtr)
  (v´25 : list EventData)
  (v´26 : list EventData)
  (v´28 : vallist)
  (v´29 : val)
  (v´30 : val)
  (v´31 : list vallist)
  (v´32 : vallist)
  (v´33 : list vallist)
  (v´34 : vallist)
  (v´35 : val)
  (v´36 : EcbMod.map)
  (v´37 : TcbMod.map)
  (v´39 : addrval)
  (v´40 : val)
  (v´42 : vallist)
  (v´44 : val)
  (v´45 : EcbMod.map)
  (v´46 : EcbMod.map)
  (v´47 : EcbMod.map)
  (v´49 : addrval)
  (H4 : ECBList_P v´44 Vnull v´24 v´26 v´46 v´37)
  (H18 : EcbMod.join v´45 v´47 v´36)
  (H8 : RH_TCBList_ECBList_P v´36 v´37 v´39)
  (H9 : RH_CurTCB v´39 v´37)
  (H13 : length v´23 = length v´25)
  (H17 : isptr v´44)
  (H10 : $ 1 <> $ 0)
  (v´21 : addrval)
  (v´27 : block)
  (H12 : array_type_vallist_match Int8u v´42)
  (H20 : length v´42 = OS_EVENT_TBL_SIZE)
  (x2 : val)
  (x3 : val)
  (i : int32)
  (H22 : Int.unsigned i <= 255)
  (i1 : int32)
  (H23 : Int.unsigned i1 <= 65535)
  (H24 : isptr x2)
  (H19 : RL_Tbl_Grp_P v´42 (Vint32 i))
  (H25 : isptr v´44)
  (H3 : ECBList_P v´40 (Vptr (v´27, Int.zero)) v´23 v´25 v´45 v´37)
  (H1 : isptr (Vptr (v´27, Int.zero)))
  (H15 : id_addrval´ (Vptr (v´27, Int.zero)) OSEventTbl OS_EVENT = Some v´21)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_SEM) <= 255)
  (H6 : R_ECB_ETbl_P (v´27, Int.zero)
         (V$OS_EVENT_TYPE_SEM
          :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) v´37)
  (x : waitset)
  (H7 : EcbMod.joinsig (v´27, Int.zero) (abssem i1, x) v´46 v´47)
  (Hget : EcbMod.get v´36 (v´27, Int.zero) = Some (abssem i1, x))
  (H2 : ECBList_P v´40 Vnull
         (v´23 ++
          ((V$OS_EVENT_TYPE_SEM
            :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) :: nil) ++
          v´24) (v´25 ++ (DSem i1 :: nil) ++ v´26) v´36 v´37)
  (H5 : RLH_ECBData_P (DSem i1) (abssem i1, x))
  (H11 : Int.eq i ($ 0) = false)
  (v´22 : option val),
   {|OSQ_spec, GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post1 (Vptr (v´27, Int.zero) :: (Vptr (v´27, Int.zero)) :: V$OS_STAT_SEM :: nil)
       v´22
       (logic_lv v´28
        :: logic_lv v´32
           :: logic_llv v´31
              :: logic_llv v´33
                 :: logic_lv v´34
                    :: logic_val v´35
                       :: logic_abstcb v´37
                          :: logic_val v´29
                             :: logic_val v´30
                                :: logic_val (Vptr v´39)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_SEM
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: x2 :: x3 :: v´44 :: nil)
                                      :: logic_lv v´42
                                         :: logic_leventd (DSem i1 :: nil)
                                            :: logic_code
                                                 (sem_post
                                                  (Vptr (v´27, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_SEM) **
     GV OSEventList @ OS_EVENT |-> v´40 **
     evsllseg v´40 (Vptr (v´27, Int.zero)) v´23 v´25 **
     evsllseg v´44 Vnull v´24 v´26 **
     HECBList v´36 **
     HTCBList v´37 **
     HCurTCB v´39 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´1 **
     AOSQFreeList v´2 **
     AOSQFreeBlk v´3 **
     AOSIntNesting **
     AOSTCBFreeList v´19 v´20 **
     AOSTime (Vint32 v´16) **
     HTime v´16 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´27, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   RETURN OS_NO_ERR {{Afalse}}.

Definition gen_sempost_part_2:= forall
  ( : val)
  (v´0 : val)
  (v´1 : list vallist)
  (v´2 : list vallist)
  (v´3 : list vallist)
  (v´4 : list EventData)
  (v´5 : list EventCtr)
  (v´6 : vallist)
  (v´7 : val)
  (v´8 : val)
  (v´9 : list vallist)
  (v´10 : vallist)
  (v´11 : list vallist)
  (v´12 : vallist)
  (v´13 : val)
  (v´14 : EcbMod.map)
  (v´15 : TcbMod.map)
  (v´16 : int32)
  (v´17 : addrval)
  (v´18 : addrval)
  (v´19 : val)
  (v´20 : list vallist)
  (H : RH_TCBList_ECBList_P v´14 v´15 v´17)
  (H0 : RH_CurTCB v´17 v´15)
  (v´23 : list EventCtr)
  (v´24 : list EventCtr)
  (v´25 : list EventData)
  (v´26 : list EventData)
  (v´28 : vallist)
  (v´29 : val)
  (v´30 : val)
  (v´31 : list vallist)
  (v´32 : vallist)
  (v´33 : list vallist)
  (v´34 : vallist)
  (v´35 : val)
  (v´36 : EcbMod.map)
  (v´37 : TcbMod.map)
  (v´39 : addrval)
  (v´40 : val)
  (v´42 : vallist)
  (v´44 : val)
  (v´45 : EcbMod.map)
  (v´46 : EcbMod.map)
  (v´47 : EcbMod.map)
  (v´49 : addrval)
  (H4 : ECBList_P v´44 Vnull v´24 v´26 v´46 v´37)
  (H18 : EcbMod.join v´45 v´47 v´36)
  (H8 : RH_TCBList_ECBList_P v´36 v´37 v´39)
  (H9 : RH_CurTCB v´39 v´37)
  (H13 : length v´23 = length v´25)
  (H17 : isptr v´44)
  (H10 : $ 1 <> $ 0)
  (v´21 : addrval)
  (v´27 : block)
  (H12 : array_type_vallist_match Int8u v´42)
  (H20 : length v´42 = OS_EVENT_TBL_SIZE)
  (x2 : val)
  (x3 : val)
  (i : int32)
  (H22 : Int.unsigned i <= 255)
  (i1 : int32)
  (H23 : Int.unsigned i1 <= 65535)
  (H24 : isptr x2)
  (H19 : RL_Tbl_Grp_P v´42 (Vint32 i))
  (H25 : isptr v´44)
  (H3 : ECBList_P v´40 (Vptr (v´27, Int.zero)) v´23 v´25 v´45 v´37)
  (H1 : isptr (Vptr (v´27, Int.zero)))
  (H15 : id_addrval´ (Vptr (v´27, Int.zero)) OSEventTbl OS_EVENT = Some v´21)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_SEM) <= 255)
  (H6 : R_ECB_ETbl_P (v´27, Int.zero)
         (V$OS_EVENT_TYPE_SEM
          :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) v´37)
  (x : waitset)
  (H7 : EcbMod.joinsig (v´27, Int.zero) (abssem i1, x) v´46 v´47)
  (Hget : EcbMod.get v´36 (v´27, Int.zero) = Some (abssem i1, x))
  (H2 : ECBList_P v´40 Vnull
         (v´23 ++
          ((V$OS_EVENT_TYPE_SEM
            :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) :: nil) ++
          v´24) (v´25 ++ (DSem i1 :: nil) ++ v´26) v´36 v´37)
  (H5 : RLH_ECBData_P (DSem i1) (abssem i1, x))
  (H11 : Int.eq i ($ 0) = false)
  (v´22 : option val),
   {|OSQ_spec, GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post3 (Vptr (v´27, Int.zero) :: (Vptr (v´27, Int.zero)) :: V$OS_STAT_SEM :: nil)
       v´22
       (logic_lv v´28
        :: logic_lv v´32
           :: logic_llv v´31
              :: logic_llv v´33
                 :: logic_lv v´34
                    :: logic_val v´35
                       :: logic_abstcb v´37
                          :: logic_val v´29
                             :: logic_val v´30
                                :: logic_val (Vptr v´39)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_SEM
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: x2 :: x3 :: v´44 :: nil)
                                      :: logic_lv v´42
                                         :: logic_leventd (DSem i1 :: nil)
                                            :: logic_code
                                                 (sem_post
                                                  (Vptr (v´27, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_SEM) **
     GV OSEventList @ OS_EVENT |-> v´40 **
     evsllseg v´40 (Vptr (v´27, Int.zero)) v´23 v´25 **
     evsllseg v´44 Vnull v´24 v´26 **
     HECBList v´36 **
     HTCBList v´37 **
     HCurTCB v´39 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´1 **
     AOSQFreeList v´2 **
     AOSQFreeBlk v´3 **
     AOSIntNesting **
     AOSTCBFreeList v´19 v´20 **
     AOSTime (Vint32 v´16) **
     HTime v´16 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´27, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_sempost_part_3 := forall
  ( : val)
  (v´0 : val)
  (v´1 : list vallist)
  (v´2 : list vallist)
  (v´3 : list vallist)
  (v´4 : list EventData)
  (v´5 : list EventCtr)
  (v´6 : vallist)
  (v´7 : val)
  (v´8 : val)
  (v´9 : list vallist)
  (v´10 : vallist)
  (v´11 : list vallist)
  (v´12 : vallist)
  (v´13 : val)
  (v´14 : EcbMod.map)
  (v´15 : TcbMod.map)
  (v´16 : int32)
  (v´17 : addrval)
  (v´18 : addrval)
  (v´19 : val)
  (v´20 : list vallist)
  (H : RH_TCBList_ECBList_P v´14 v´15 v´17)
  (H0 : RH_CurTCB v´17 v´15)
  (v´23 : list EventCtr)
  (v´24 : list EventCtr)
  (v´25 : list EventData)
  (v´26 : list EventData)
  (v´28 : vallist)
  (v´29 : val)
  (v´30 : val)
  (v´31 : list vallist)
  (v´32 : vallist)
  (v´33 : list vallist)
  (v´34 : vallist)
  (v´35 : val)
  (v´36 : EcbMod.map)
  (v´37 : TcbMod.map)
  (v´39 : addrval)
  (v´40 : val)
  (v´42 : vallist)
  (v´44 : val)
  (v´45 : EcbMod.map)
  (v´46 : EcbMod.map)
  (v´47 : EcbMod.map)
  (v´49 : addrval)
  (H4 : ECBList_P v´44 Vnull v´24 v´26 v´46 v´37)
  (H18 : EcbMod.join v´45 v´47 v´36)
  (H8 : RH_TCBList_ECBList_P v´36 v´37 v´39)
  (H9 : RH_CurTCB v´39 v´37)
  (H13 : length v´23 = length v´25)
  (H17 : isptr v´44)
  (H10 : $ 1 <> $ 0)
  (v´21 : addrval)
  (v´27 : block)
  (H12 : array_type_vallist_match Int8u v´42)
  (H20 : length v´42 = OS_EVENT_TBL_SIZE)
  (x2 : val)
  (x3 : val)
  (i : int32)
  (H22 : Int.unsigned i <= 255)
  (i1 : int32)
  (H23 : Int.unsigned i1 <= 65535)
  (H24 : isptr x2)
  (H19 : RL_Tbl_Grp_P v´42 (Vint32 i))
  (H25 : isptr v´44)
  (H3 : ECBList_P v´40 (Vptr (v´27, Int.zero)) v´23 v´25 v´45 v´37)
  (H1 : isptr (Vptr (v´27, Int.zero)))
  (H15 : id_addrval´ (Vptr (v´27, Int.zero)) OSEventTbl OS_EVENT = Some v´21)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_SEM) <= 255)
  (H6 : R_ECB_ETbl_P (v´27, Int.zero)
         (V$OS_EVENT_TYPE_SEM
          :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) v´37)
  (x : waitset)
  (H7 : EcbMod.joinsig (v´27, Int.zero) (abssem i1, x) v´46 v´47)
  (Hget : EcbMod.get v´36 (v´27, Int.zero) = Some (abssem i1, x))
  (H2 : ECBList_P v´40 Vnull
         (v´23 ++
          ((V$OS_EVENT_TYPE_SEM
            :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) :: nil) ++
          v´24) (v´25 ++ (DSem i1 :: nil) ++ v´26) v´36 v´37)
  (H5 : RLH_ECBData_P (DSem i1) (abssem i1, x))
  (H11 : Int.eq i ($ 0) = false)
  (v´22 : option val),
   {|OSQ_spec, GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post5 (Vptr (v´27, Int.zero) :: (Vptr (v´27, Int.zero)) :: V$OS_STAT_SEM :: nil)
       v´22
       (logic_lv v´28
        :: logic_lv v´32
           :: logic_llv v´31
              :: logic_llv v´33
                 :: logic_lv v´34
                    :: logic_val v´35
                       :: logic_abstcb v´37
                          :: logic_val v´29
                             :: logic_val v´30
                                :: logic_val (Vptr v´39)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_SEM
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: x2 :: x3 :: v´44 :: nil)
                                      :: logic_lv v´42
                                         :: logic_leventd (DSem i1 :: nil)
                                            :: logic_code
                                                 (sem_post
                                                  (Vptr (v´27, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_SEM) **
     GV OSEventList @ OS_EVENT |-> v´40 **
     evsllseg v´40 (Vptr (v´27, Int.zero)) v´23 v´25 **
     evsllseg v´44 Vnull v´24 v´26 **
     HECBList v´36 **
     HTCBList v´37 **
     HCurTCB v´39 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´1 **
     AOSQFreeList v´2 **
     AOSQFreeBlk v´3 **
     AOSIntNesting **
     AOSTCBFreeList v´19 v´20 **
     AOSTime (Vint32 v´16) **
     HTime v´16 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´27, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_sempost_part_4:= forall
  ( : val)
  (v´0 : val)
  (v´1 : list vallist)
  (v´2 : list vallist)
  (v´3 : list vallist)
  (v´4 : list EventData)
  (v´5 : list EventCtr)
  (v´6 : vallist)
  (v´7 : val)
  (v´8 : val)
  (v´9 : list vallist)
  (v´10 : vallist)
  (v´11 : list vallist)
  (v´12 : vallist)
  (v´13 : val)
  (v´14 : EcbMod.map)
  (v´15 : TcbMod.map)
  (v´16 : int32)
  (v´17 : addrval)
  (v´18 : addrval)
  (v´19 : val)
  (v´20 : list vallist)
  (H : RH_TCBList_ECBList_P v´14 v´15 v´17)
  (H0 : RH_CurTCB v´17 v´15)
  (v´23 : list EventCtr)
  (v´24 : list EventCtr)
  (v´25 : list EventData)
  (v´26 : list EventData)
  (v´28 : vallist)
  (v´29 : val)
  (v´30 : val)
  (v´31 : list vallist)
  (v´32 : vallist)
  (v´33 : list vallist)
  (v´34 : vallist)
  (v´35 : val)
  (v´36 : EcbMod.map)
  (v´37 : TcbMod.map)
  (v´39 : addrval)
  (v´40 : val)
  (v´42 : vallist)
  (v´44 : val)
  (v´45 : EcbMod.map)
  (v´46 : EcbMod.map)
  (v´47 : EcbMod.map)
  (v´49 : addrval)
  (H4 : ECBList_P v´44 Vnull v´24 v´26 v´46 v´37)
  (H18 : EcbMod.join v´45 v´47 v´36)
  (H8 : RH_TCBList_ECBList_P v´36 v´37 v´39)
  (H9 : RH_CurTCB v´39 v´37)
  (H13 : length v´23 = length v´25)
  (H17 : isptr v´44)
  (H10 : $ 1 <> $ 0)
  (v´21 : addrval)
  (v´27 : block)
  (H12 : array_type_vallist_match Int8u v´42)
  (H20 : length v´42 = OS_EVENT_TBL_SIZE)
  (x2 : val)
  (x3 : val)
  (i : int32)
  (H22 : Int.unsigned i <= 255)
  (i1 : int32)
  (H23 : Int.unsigned i1 <= 65535)
  (H24 : isptr x2)
  (H19 : RL_Tbl_Grp_P v´42 (Vint32 i))
  (H25 : isptr v´44)
  (H3 : ECBList_P v´40 (Vptr (v´27, Int.zero)) v´23 v´25 v´45 v´37)
  (H1 : isptr (Vptr (v´27, Int.zero)))
  (H15 : id_addrval´ (Vptr (v´27, Int.zero)) OSEventTbl OS_EVENT = Some v´21)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_SEM) <= 255)
  (H6 : R_ECB_ETbl_P (v´27, Int.zero)
         (V$OS_EVENT_TYPE_SEM
          :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) v´37)
  (x : waitset)
  (H7 : EcbMod.joinsig (v´27, Int.zero) (abssem i1, x) v´46 v´47)
  (Hget : EcbMod.get v´36 (v´27, Int.zero) = Some (abssem i1, x))
  (H2 : ECBList_P v´40 Vnull
         (v´23 ++
          ((V$OS_EVENT_TYPE_SEM
            :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) :: nil) ++
          v´24) (v´25 ++ (DSem i1 :: nil) ++ v´26) v´36 v´37)
  (H5 : RLH_ECBData_P (DSem i1) (abssem i1, x))
  (H11 : Int.eq i ($ 0) = false)
  (v´22 : option val),
   {|OSQ_spec, GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post1´ (Vptr (v´27, Int.zero) :: (Vptr (v´27, Int.zero)) :: V$OS_STAT_SEM :: nil)
       v´22
       (logic_lv v´28
        :: logic_lv v´32
           :: logic_llv v´31
              :: logic_llv v´33
                 :: logic_lv v´34
                    :: logic_val v´35
                       :: logic_abstcb v´37
                          :: logic_val v´29
                             :: logic_val v´30
                                :: logic_val (Vptr v´39)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_SEM
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: x2 :: x3 :: v´44 :: nil)
                                      :: logic_lv v´42
                                         :: logic_leventd (DSem i1 :: nil)
                                            :: logic_code
                                                 (sem_post
                                                  (Vptr (v´27, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_SEM) **
     GV OSEventList @ OS_EVENT |-> v´40 **
     evsllseg v´40 (Vptr (v´27, Int.zero)) v´23 v´25 **
     evsllseg v´44 Vnull v´24 v´26 **
     HECBList v´36 **
     HTCBList v´37 **
     HCurTCB v´39 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´1 **
     AOSQFreeList v´2 **
     AOSQFreeBlk v´3 **
     AOSIntNesting **
     AOSTCBFreeList v´19 v´20 **
     AOSTime (Vint32 v´16) **
     HTime v´16 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´27, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_sempost_part_5:= forall
  ( : val)
  (v´0 : val)
  (v´1 : list vallist)
  (v´2 : list vallist)
  (v´3 : list vallist)
  (v´4 : list EventData)
  (v´5 : list EventCtr)
  (v´6 : vallist)
  (v´7 : val)
  (v´8 : val)
  (v´9 : list vallist)
  (v´10 : vallist)
  (v´11 : list vallist)
  (v´12 : vallist)
  (v´13 : val)
  (v´14 : EcbMod.map)
  (v´15 : TcbMod.map)
  (v´16 : int32)
  (v´17 : addrval)
  (v´18 : addrval)
  (v´19 : val)
  (v´20 : list vallist)
  (H : RH_TCBList_ECBList_P v´14 v´15 v´17)
  (H0 : RH_CurTCB v´17 v´15)
  (v´23 : list EventCtr)
  (v´24 : list EventCtr)
  (v´25 : list EventData)
  (v´26 : list EventData)
  (v´28 : vallist)
  (v´29 : val)
  (v´30 : val)
  (v´31 : list vallist)
  (v´32 : vallist)
  (v´33 : list vallist)
  (v´34 : vallist)
  (v´35 : val)
  (v´36 : EcbMod.map)
  (v´37 : TcbMod.map)
  (v´39 : addrval)
  (v´40 : val)
  (v´42 : vallist)
  (v´44 : val)
  (v´45 : EcbMod.map)
  (v´46 : EcbMod.map)
  (v´47 : EcbMod.map)
  (v´49 : addrval)
  (H4 : ECBList_P v´44 Vnull v´24 v´26 v´46 v´37)
  (H18 : EcbMod.join v´45 v´47 v´36)
  (H8 : RH_TCBList_ECBList_P v´36 v´37 v´39)
  (H9 : RH_CurTCB v´39 v´37)
  (H13 : length v´23 = length v´25)
  (H17 : isptr v´44)
  (H10 : $ 1 <> $ 0)
  (v´21 : addrval)
  (v´27 : block)
  (H12 : array_type_vallist_match Int8u v´42)
  (H20 : length v´42 = OS_EVENT_TBL_SIZE)
  (x2 : val)
  (x3 : val)
  (i : int32)
  (H22 : Int.unsigned i <= 255)
  (i1 : int32)
  (H23 : Int.unsigned i1 <= 65535)
  (H24 : isptr x2)
  (H19 : RL_Tbl_Grp_P v´42 (Vint32 i))
  (H25 : isptr v´44)
  (H3 : ECBList_P v´40 (Vptr (v´27, Int.zero)) v´23 v´25 v´45 v´37)
  (H1 : isptr (Vptr (v´27, Int.zero)))
  (H15 : id_addrval´ (Vptr (v´27, Int.zero)) OSEventTbl OS_EVENT = Some v´21)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_SEM) <= 255)
  (H6 : R_ECB_ETbl_P (v´27, Int.zero)
         (V$OS_EVENT_TYPE_SEM
          :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) v´37)
  (x : waitset)
  (H7 : EcbMod.joinsig (v´27, Int.zero) (abssem i1, x) v´46 v´47)
  (Hget : EcbMod.get v´36 (v´27, Int.zero) = Some (abssem i1, x))
  (H2 : ECBList_P v´40 Vnull
         (v´23 ++
          ((V$OS_EVENT_TYPE_SEM
            :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) :: nil) ++
          v´24) (v´25 ++ (DSem i1 :: nil) ++ v´26) v´36 v´37)
  (H5 : RLH_ECBData_P (DSem i1) (abssem i1, x))
  (H11 : Int.eq i ($ 0) = false)
  (v´22 : option val),
   {|OSQ_spec, GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post3´ (Vptr (v´27, Int.zero) :: (Vptr (v´27, Int.zero)) :: V$OS_STAT_SEM :: nil)
       v´22
       (logic_lv v´28
        :: logic_lv v´32
           :: logic_llv v´31
              :: logic_llv v´33
                 :: logic_lv v´34
                    :: logic_val v´35
                       :: logic_abstcb v´37
                          :: logic_val v´29
                             :: logic_val v´30
                                :: logic_val (Vptr v´39)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_SEM
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: x2 :: x3 :: v´44 :: nil)
                                      :: logic_lv v´42
                                         :: logic_leventd (DSem i1 :: nil)
                                            :: logic_code
                                                 (sem_post
                                                  (Vptr (v´27, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_SEM) **
     GV OSEventList @ OS_EVENT |-> v´40 **
     evsllseg v´40 (Vptr (v´27, Int.zero)) v´23 v´25 **
     evsllseg v´44 Vnull v´24 v´26 **
     HECBList v´36 **
     HTCBList v´37 **
     HCurTCB v´39 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´1 **
     AOSQFreeList v´2 **
     AOSQFreeBlk v´3 **
     AOSIntNesting **
     AOSTCBFreeList v´19 v´20 **
     AOSTime (Vint32 v´16) **
     HTime v´16 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´27, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_sempost_part_6 := forall
  ( : val)
  (v´0 : val)
  (v´1 : list vallist)
  (v´2 : list vallist)
  (v´3 : list vallist)
  (v´4 : list EventData)
  (v´5 : list EventCtr)
  (v´6 : vallist)
  (v´7 : val)
  (v´8 : val)
  (v´9 : list vallist)
  (v´10 : vallist)
  (v´11 : list vallist)
  (v´12 : vallist)
  (v´13 : val)
  (v´14 : EcbMod.map)
  (v´15 : TcbMod.map)
  (v´16 : int32)
  (v´17 : addrval)
  (v´18 : addrval)
  (v´19 : val)
  (v´20 : list vallist)
  (H : RH_TCBList_ECBList_P v´14 v´15 v´17)
  (H0 : RH_CurTCB v´17 v´15)
  (v´23 : list EventCtr)
  (v´24 : list EventCtr)
  (v´25 : list EventData)
  (v´26 : list EventData)
  (v´28 : vallist)
  (v´29 : val)
  (v´30 : val)
  (v´31 : list vallist)
  (v´32 : vallist)
  (v´33 : list vallist)
  (v´34 : vallist)
  (v´35 : val)
  (v´36 : EcbMod.map)
  (v´37 : TcbMod.map)
  (v´39 : addrval)
  (v´40 : val)
  (v´42 : vallist)
  (v´44 : val)
  (v´45 : EcbMod.map)
  (v´46 : EcbMod.map)
  (v´47 : EcbMod.map)
  (v´49 : addrval)
  (H4 : ECBList_P v´44 Vnull v´24 v´26 v´46 v´37)
  (H18 : EcbMod.join v´45 v´47 v´36)
  (H8 : RH_TCBList_ECBList_P v´36 v´37 v´39)
  (H9 : RH_CurTCB v´39 v´37)
  (H13 : length v´23 = length v´25)
  (H17 : isptr v´44)
  (H10 : $ 1 <> $ 0)
  (v´21 : addrval)
  (v´27 : block)
  (H12 : array_type_vallist_match Int8u v´42)
  (H20 : length v´42 = OS_EVENT_TBL_SIZE)
  (x2 : val)
  (x3 : val)
  (i : int32)
  (H22 : Int.unsigned i <= 255)
  (i1 : int32)
  (H23 : Int.unsigned i1 <= 65535)
  (H24 : isptr x2)
  (H19 : RL_Tbl_Grp_P v´42 (Vint32 i))
  (H25 : isptr v´44)
  (H3 : ECBList_P v´40 (Vptr (v´27, Int.zero)) v´23 v´25 v´45 v´37)
  (H1 : isptr (Vptr (v´27, Int.zero)))
  (H15 : id_addrval´ (Vptr (v´27, Int.zero)) OSEventTbl OS_EVENT = Some v´21)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_SEM) <= 255)
  (H6 : R_ECB_ETbl_P (v´27, Int.zero)
         (V$OS_EVENT_TYPE_SEM
          :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) v´37)
  (x : waitset)
  (H7 : EcbMod.joinsig (v´27, Int.zero) (abssem i1, x) v´46 v´47)
  (Hget : EcbMod.get v´36 (v´27, Int.zero) = Some (abssem i1, x))
  (H2 : ECBList_P v´40 Vnull
                  (v´23 ++
          ((V$OS_EVENT_TYPE_SEM
            :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) :: nil) ++
          v´24) (v´25 ++ (DSem i1 :: nil) ++ v´26) v´36 v´37)
  (H5 : RLH_ECBData_P (DSem i1) (abssem i1, x))
  (H11 : Int.eq i ($ 0) = false)
  (v´22 : option val),
   {|OSQ_spec, GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post5´ (Vptr (v´27, Int.zero) :: (Vptr (v´27, Int.zero)) :: V$OS_STAT_SEM :: nil)
       v´22
       (logic_lv v´28
        :: logic_lv v´32
           :: logic_llv v´31
              :: logic_llv v´33
                 :: logic_lv v´34
                    :: logic_val v´35
                       :: logic_abstcb v´37
                          :: logic_val v´29
                             :: logic_val v´30
                                :: logic_val (Vptr v´39)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_SEM
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: x2 :: x3 :: v´44 :: nil)
                                      :: logic_lv v´42
                                      :: logic_leventd (DSem i1 :: nil)
                                            :: logic_code
                                                 (sem_post
                                                  (Vptr (v´27, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_SEM) **
     GV OSEventList @ OS_EVENT |-> v´40 **
     evsllseg v´40 (Vptr (v´27, Int.zero)) v´23 v´25 **
     evsllseg v´44 Vnull v´24 v´26 **
     HECBList v´36 **
     HTCBList v´37 **
     HCurTCB v´39 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´1 **
     AOSQFreeList v´2 **
     AOSQFreeBlk v´3 **
     AOSIntNesting **
     AOSTCBFreeList v´19 v´20 **
     AOSTime (Vint32 v´16) **
     HTime v´16 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´27, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_sempost_part_0:= forall
  ( : val)
  (v´0 : val)
  (v´1 : list vallist)
  (v´2 : list vallist)
  (v´3 : list vallist)
  (v´4 : list EventData)
  (v´5 : list EventCtr)
  (v´6 : vallist)
  (v´7 : val)
  (v´8 : val)
  (v´9 : list vallist)
  (v´10 : vallist)
  (v´11 : list vallist)
  (v´12 : vallist)
  (v´13 : val)
  (v´14 : EcbMod.map)
  (v´15 : TcbMod.map)
  (v´16 : int32)
  (v´17 : addrval)
  (v´18 : addrval)
  (v´19 : val)
  (v´20 : list vallist)
  (H : RH_TCBList_ECBList_P v´14 v´15 v´17)
  (H0 : RH_CurTCB v´17 v´15)
  (v´23 : list EventCtr)
  (v´24 : list EventCtr)
  (v´25 : list EventData)
  (v´26 : list EventData)
  (v´28 : vallist)
  (v´29 : val)
  (v´30 : val)
  (v´31 : list vallist)
  (v´32 : vallist)
  (v´33 : list vallist)
  (v´34 : vallist)
  (v´35 : val)
  (v´36 : EcbMod.map)
  (v´37 : TcbMod.map)
  (v´39 : addrval)
  (v´40 : val)
  (v´42 : vallist)
  (v´44 : val)
  (v´45 : EcbMod.map)
  (v´46 : EcbMod.map)
  (v´47 : EcbMod.map)
  (v´49 : addrval)
  (H4 : ECBList_P v´44 Vnull v´24 v´26 v´46 v´37)
  (H18 : EcbMod.join v´45 v´47 v´36)
  (H8 : RH_TCBList_ECBList_P v´36 v´37 v´39)
  (H9 : RH_CurTCB v´39 v´37)
  (H13 : length v´23 = length v´25)
  (H17 : isptr v´44)
  (H10 : $ 1 <> $ 0)
  (v´21 : addrval)
  (v´27 : block)
  (H12 : array_type_vallist_match Int8u v´42)
  (H20 : length v´42 = OS_EVENT_TBL_SIZE)
  (x2 : val)
  (x3 : val)
  (i : int32)
  (H22 : Int.unsigned i <= 255)
  (i1 : int32)
  (H23 : Int.unsigned i1 <= 65535)
  (H24 : isptr x2)
  (H19 : RL_Tbl_Grp_P v´42 (Vint32 i))
  (H25 : isptr v´44)
  (H3 : ECBList_P v´40 (Vptr (v´27, Int.zero)) v´23 v´25 v´45 v´37)
  (H1 : isptr (Vptr (v´27, Int.zero)))
  (H15 : id_addrval´ (Vptr (v´27, Int.zero)) OSEventTbl OS_EVENT = Some v´21)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_SEM) <= 255)
  (H6 : R_ECB_ETbl_P (v´27, Int.zero)
         (V$OS_EVENT_TYPE_SEM
          :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) v´37)
  (x : waitset)
  (H7 : EcbMod.joinsig (v´27, Int.zero) (abssem i1, x) v´46 v´47)
  (Hget : EcbMod.get v´36 (v´27, Int.zero) = Some (abssem i1, x))
  (H2 : ECBList_P v´40 Vnull
         (v´23 ++
               ((V$OS_EVENT_TYPE_SEM
            :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil, v´42) :: nil) ++
          v´24) (v´25 ++ (DSem i1 :: nil) ++ v´26) v´36 v´37)
  (H5 : RLH_ECBData_P (DSem i1) (abssem i1, x))
  (H11 : Int.eq i ($ 0) = false),
                        {|OSQ_spec, GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{AEventData
       (V$OS_EVENT_TYPE_SEM
        :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil)
       (DSem i1) **
     Astruct (v´27, Int.zero) OS_EVENT
     (V$OS_EVENT_TYPE_SEM
        :: Vint32 i :: Vint32 i1 :: x2 :: x3 :: v´44 :: nil) **
     Aarray v´21 (Tarray Int8u OS_EVENT_TBL_SIZE) v´42 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´40 **
     evsllseg v´40 (Vptr (v´27, Int.zero)) v´23 v´25 **
     evsllseg v´44 Vnull v´24 v´26 **
     A_isr_is_prop **
     AOSTCBList v´29 v´30 v´31 (v´32 :: v´33) v´34 v´39 v´37 **
     AOSRdyTblGrp v´34 v´35 **
     AOSTCBPrioTbl v´28 v´34 v´37 v´49 **
     HECBList v´36 **
     HTCBList v´37 **
     HCurTCB v´39 **
      <|| sem_post (Vptr (v´27, Int.zero) :: nil) ||> **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´1 **
     AOSQFreeList v´2 **
     AOSQFreeBlk v´3 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´19 v´20 **
     AOSTime (Vint32 v´16) **
     HTime v´16 **
     AGVars **
     atoy_inv´ **
     LV os_code_defs.x @ Int8u |-> v´0 **
     LV pevent @ OS_EVENT |-> Vptr (v´27, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (legal, Int8u) :: (os_code_defs.x, Int8u) :: nil)}}
     os_code_defs.x =ₑ OS_STAT_SEM;ₛ
   OS_EventTaskRdy pevent,Void pevent, os_code_defs.x­);ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_OSQPendRightPart2 := forall (
    i : int32
)(
         H1 : Int.unsigned i <= 65535
)(
          : val
)(
         v´0 : val
)(
         v´1 : val
)(
         v´2 : list vallist
)(
         v´3 : list vallist
)(
         v´4 : list vallist
)(
         v´5 : list EventData
)(
         v´6 : list EventCtr
)(
         v´7 : vallist
)(
         v´8 : val
)(
         v´9 : val
)(
         v´10 : list vallist
)(
         v´11 : vallist
)(
         v´12 : list vallist
)(
         v´13 : vallist
)(
         v´14 : val
)(
         v´15 : EcbMod.map
)(
         v´16 : TcbMod.map
)(
         v´17 : int32
)(
         v´18 : addrval
)(
         v´19 : addrval
)(
         v´20 : val
)(
         v´21 : list vallist
)(
         v´24 : list EventCtr
)(
         v´25 : list EventCtr
)(
         v´26 : list EventData
)(
         v´27 : list EventData
)(
         v´29 : vallist
)(
         v´30 : val
)(
         v´32 : list vallist
)(
         v´34 : list vallist
)(
         v´35 : vallist
)(
         v´36 : val
)(
         v´37 : EcbMod.map
)(
         v´38 : TcbMod.map
)(
         v´41 : val
)(
         v´43 : vallist
)(
         v2 : vallist
)(
         v´45 : val
)(
         v´46 : EcbMod.map
)(
         v´47 : EcbMod.map
)(
         v´48 : EcbMod.map
)(
         v´49 : absecb.B
)(
         v´50 : addrval
)(
         H2 : ECBList_P v´45 Vnull v´25 v´27 v´47 v´38
)(
         H22 : EcbMod.join v´46 v´48 v´37
)(
         H11 : length v´24 = length v´26
)(
         v´51 : addrval
)(
         v´53 : block
)(
         H15 : array_type_vallist_match Int8u v´43
)(
         H19 : length v´43 = OS_EVENT_TBL_SIZE
)(
         H20 : isptr v´45
)(
         x3 : val
)(
         i0 : int32
)(
         H10 : Int.unsigned i0 <= 255
)(
         i2 : int32
)(
         H21 : Int.unsigned i2 <= 65535
)(
         H18 : RL_Tbl_Grp_P v´43 (Vint32 i0)
)(
         H24 : isptr v´45
)(
  H14 : val_inj (val_eq (V$1) (V$0)) = Vint32 Int.zero \/
        val_inj (val_eq (V$1) (V$0)) = Vnull
)(
         H0 : ECBList_P v´41 (Vptr (v´53, Int.zero)) v´24 v´26 v´46 v´38
)(
         H5 : EcbMod.joinsig (v´53, Int.zero) v´49 v´47 v´48
)(
         H16 : id_addrval´ (Vptr (v´53, Int.zero)) OSEventTbl OS_EVENT = Some v´51
)(
         v´22 : val
)(
         v´23 : val
)(
         v´28 : TcbMod.map
)(
         v´39 : TcbMod.map
)(
         v´42 : val
)(
         v´52 : block
)(
         H26 : v´30 <> Vnull
)(
         H27 : TcbMod.join v´28 v´39 v´38
)(
         H28 : TCBList_P v´30 v´32 v´35 v´28
)(
         H25 : Vptr (v´52, Int.zero) <> Vnull
)(
         x8 : val
)(
         x9 : val
)(
         H32 : isptr x9
)(
         H33 : isptr x8
)(
         i9 : int32
)(
         H34 : Int.unsigned i9 <= 65535
)(
         i8 : int32
)(
         H35 : Int.unsigned i8 <= 255
)(
         i7 : int32
)(
         H36 : Int.unsigned i7 <= 255
)(
         i6 : int32
)(
         H37 : Int.unsigned i6 <= 255
)(
         i5 : int32
)(
         H38 : Int.unsigned i5 <= 255
)(
         i4 : int32
)(
         H39 : Int.unsigned i4 <= 255
)(
         i3 : int32
)(
         H40 : Int.unsigned i3 <= 255
)(
         H31 : isptr v´22
)(
         H12 : isptr v´42
)(
  H29 : TCBList_P (Vptr (v´52, Int.zero))
          ((v´42
            :: v´22
               :: x9
                  :: x8
                     :: Vint32 i9
                        :: Vint32 i8
                           :: Vint32 i7
                              :: Vint32 i6
                                 :: Vint32 i5
                                    :: Vint32 i4 :: Vint32 i3 :: nil) :: v´34)
          v´35 v´39
)(
         H6 : RH_TCBList_ECBList_P v´37 v´38 (v´52, Int.zero)
)(
         H7 : RH_CurTCB (v´52, Int.zero) v´38
)(
         Hnidle : Int.eq i7 ($ OS_IDLE_PRIO) = false
)(
         Hstrdy : Int.eq i8 ($ OS_STAT_RDY) = true
)(
         Hdly0 : Int.eq i9 ($ 0) = true
)(
         v´33 : block
)(
         v´40 : block * int32
)(
         v´44 : block
)(
         H45 : length v2 = OS_MAX_Q_SIZE
)(
  H41 : id_addrval´ (Vptr (v´44, Int.zero)) msgqueuetbl OS_Q_FREEBLK =
        Some v´40
)(
         x : val
)(
         x0 : val
)(
         x1 : val
)(
         x7 : val
)(
         x10 : val
)(
         H30 : isptr x10
)(
         H42 : isptr x7
)(
         H46 : isptr x
)(
         H48 : isptr x0
)(
         H49 : isptr x1
)(
         i11 : int32
)(
         H50 : Int.unsigned i11 <= 65535
)(
         i10 : int32
)(
         H51 : Int.unsigned i10 <= 65535
)(
         x11 : val
)(
         x12 : val
)(
         H47 : isptr x11
)(
         H52 : isptr (Vptr (v´44, Int.zero))
)(
  H43 : WellformedOSQ
          (x10
           :: x7
              :: x
                 :: x0
                    :: x1
                       :: Vint32 i11
                       :: Vint32 i10 :: Vptr (v´44, Int.zero) :: nil)
)(
  H3 : RLH_ECBData_P
         (DMsgQ (Vptr (v´33, Int.zero))
            (x10
             :: x7
                :: x
                   :: x0
                      :: x1
                         :: Vint32 i11
                            :: Vint32 i10 :: Vptr (v´44, Int.zero) :: nil)
            (x11 :: x12 :: nil) v2) v´49
)(
   H23 : isptr (Vptr (v´33, Int.zero))
)(
   H9 : Int.unsigned ($ OS_EVENT_TYPE_Q) <= 255
)(
  H8 : val_inj
         (notint
            (val_inj
               (if Int.eq ($ OS_EVENT_TYPE_Q) ($ OS_EVENT_TYPE_Q)
                then Some (Vint32 Int.one)
                else Some (Vint32 Int.zero)))) = Vint32 Int.zero \/
       val_inj
         (notint
            (val_inj
               (if Int.eq ($ OS_EVENT_TYPE_Q) ($ OS_EVENT_TYPE_Q)
                then Some (Vint32 Int.one)
                else Some (Vint32 Int.zero)))) = Vnull
)(
  H4 : R_ECB_ETbl_P (v´53, Int.zero)
         (V$OS_EVENT_TYPE_Q
          :: Vint32 i0
             :: Vint32 i2 :: Vptr (v´33, Int.zero) :: x3 :: v´45 :: nil,
          v´43) v´38
)(
  H : ECBList_P v´41 Vnull
        (v´24 ++
         ((V$OS_EVENT_TYPE_Q
           :: Vint32 i0
              :: Vint32 i2 :: Vptr (v´33, Int.zero) :: x3 :: v´45 :: nil,
          v´43) :: nil) ++ v´25)
        (v´26 ++
         (DMsgQ (Vptr (v´33, Int.zero))
            (x10
             :: x7
                :: x
                   :: x0
                      :: x1
                         :: Vint32 i11
                            :: Vint32 i10 :: Vptr (v´44, Int.zero) :: nil)
            (x11 :: x12 :: nil) v2 :: nil) ++ v´27) v´37 v´38
),
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV message @ (Void) |-> v0) **
      (EX v0 : val, LV pq @ OS_Q |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (message, (Void) ) :: (pq, OS_Q ) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{( <|| qpend (Vptr (v´53, Int.zero) :: Vint32 i :: nil) ||> **
      LV pq @ OS_Q |-> Vptr (v´33, Int.zero) **
      A_dom_lenv
        ((timeout, Int16u)
         :: (pevent, OS_EVENT )
            :: (message, (Void) ) :: (pq, OS_Q ) :: (legal, Int8u) :: nil) **
      GV OSTCBCur @ OS_TCB |-> Vptr (v´52, Int.zero) **
      Astruct (v´52, Int.zero) OS_TCB
        (v´42
         :: v´22
            :: x9
               :: Vnull
                  :: Vint32 i9
                     :: Vint32 i8
                        :: Vint32 i7
                           :: Vint32 i6
                              :: Vint32 i5 :: Vint32 i4 :: Vint32 i3 :: nil) **
      Astruct (v´44, Int.zero) OS_Q_FREEBLK (x11 :: x12 :: nil) **
      Aarray v´40 (Tarray (Void) OS_MAX_Q_SIZE) v2 **
      Astruct (v´33, Int.zero) OS_Q
        (x10
         :: x7
            :: x
               :: x0
                  :: x1
                     :: Vint32 i11
                        :: Vint32 i10 :: Vptr (v´44, Int.zero) :: nil) **
      dllseg v´42 (Vptr (v´52, Int.zero)) v´23 Vnull v´34 OS_TCB
        (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
      GV OSTCBList @ OS_TCB |-> v´30 **
      dllseg v´30 Vnull v´22 (Vptr (v´52, Int.zero)) v´32 OS_TCB
        (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
      Astruct (v´53, Int.zero) OS_EVENT
        (V$OS_EVENT_TYPE_Q
         :: Vint32 i0
            :: Vint32 i2 :: Vptr (v´33, Int.zero) :: x3 :: v´45 :: nil) **
      Aarray v´51 (Tarray Int8u OS_EVENT_TBL_SIZE) v´43 **
      Aie false **
      Ais nil **
      Acs (true :: nil) **
      Aisr empisr **
      GV OSEventList @ OS_EVENT |-> v´41 **
      evsllseg v´41 (Vptr (v´53, Int.zero)) v´24 v´26 **
      evsllseg v´45 Vnull v´25 v´27 **
      A_isr_is_prop **
      AOSRdyTblGrp v´35 v´36 **
      AOSTCBPrioTbl v´29 v´35 v´38 v´50 **
      HECBList v´37 **
      HTCBList v´38 **
      HCurTCB (v´52, Int.zero) **
      LV legal @ Int8u |-> (V$1) **
      AOSEventFreeList v´2 **
      AOSQFreeList v´3 **
      AOSQFreeBlk v´4 **
      AOSMapTbl **
      AOSUnMapTbl **
      AOSIntNesting **
      AOSTCBFreeList v´20 v´21 **
      AOSTime (Vint32 v´17) **
      HTime v´17 **
      AGVars **
      atoy_inv´ **
      LV message @ (Void) |-> **
      LV timeout @ Int16u |-> Vint32 i **
      LV pevent @ OS_EVENT |-> Vptr (v´53, Int.zero)) **
     [|val_inj
         (if Int.ltu ($ 0) i10
          then Some (Vint32 Int.one)
          else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
       val_inj
         (if Int.ltu ($ 0) i10
          then Some (Vint32 Int.one)
          else Some (Vint32 Int.zero)) = Vnull|]}}
   OSTCBCur OSTCBStat =ₑ OS_STAT_Q;ₛ
   OSTCBCur OSTCBDly =ₑ timeout ;ₛ
   OS_EventTaskWait pevent ­);ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   ENTER_CRITICAL;ₛ
   message =ₑ OSTCBCur OSTCBMsg;ₛ
   If(message !=ₑ NULL)
        {EXIT_CRITICAL;ₛ
        RETURN OS_NO_ERR} ;ₛ
   EXIT_CRITICAL;ₛ
   RETURN OS_TIMEOUT {{Afalse}}.

Definition gen_OSQPostProofPart1 := forall
( : val
)(
  v´0 : val
)(
  v´1 : val
)(
  x0 : addrval
)(
  v´2 : list vallist
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list EventData
)(
  v´6 : list EventCtr
)(
  v´7 : vallist
)(
  v´8 : val
)(
  v´9 : val
)(
  v´10 : list vallist
)(
  v´11 : vallist
)(
  v´12 : list vallist
)(
  v´13 : vallist
)(
  v´14 : val
)(
  v´15 : EcbMod.map
)(
  v´16 : TcbMod.map
)(
  v´17 : int32
)(
  v´18 : addrval
)(
  v´19 : addrval
)(
  v´20 : val
)(
  v´21 : list vallist
)(
  H : RH_TCBList_ECBList_P v´15 v´16 v´18
)(
  H0 : RH_CurTCB v´18 v´16
)(
  v´24 : list EventCtr
)(
  v´25 : list EventCtr
)(
  v´26 : list EventData
)(
  v´27 : list EventData
)(
  v´29 : vallist
)(
  v´30 : val
)(
  v´31 : val
)(
  v´32 : list vallist
)(
  v´33 : vallist
)(
  v´34 : list vallist
)(
  v´35 : vallist
)(
  v´36 : val
)(
  v´37 : EcbMod.map
)(
  v´38 : TcbMod.map
)(
  v´40 : addrval
)(
  v´41 : val
)(
  v´43 : vallist
)(
  v : val
)(
  v0 : vallist
)(
  v1 : vallist
)(
  v2 : vallist
)(
  v´45 : val
)(
  v´46 : EcbMod.map
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : absecb.B
)(
  v´50 : addrval
)(
  H3 : ECBList_P v´45 Vnull v´25 v´27 v´47 v´38
)(
  H4 : RLH_ECBData_P (DMsgQ v v0 v1 v2) v´49
)(
  H16 : EcbMod.join v´46 v´48 v´37
)(
  H7 : RH_TCBList_ECBList_P v´37 v´38 v´40
)(
  H8 : RH_CurTCB v´40 v´38
)(
  H12 : length v´24 = length v´26
)(
  H15 : isptr v´45
)(
  v´22 : addrval
)(
  v´28 : block
)(
  H10 : array_type_vallist_match Int8u v´43
)(
  H18 : length v´43 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  x4 : val
)(
  i0 : int32
)(
  H19 : Int.unsigned i0 <= 255
)(
  i : int32
)(
  H20 : Int.unsigned i <= 255
)(
  i1 : int32
)(
  H21 : Int.unsigned i1 <= 65535
)(
  H22 : isptr x3
)(
  H17 : RL_Tbl_Grp_P v´43 (Vint32 i)
)(
  H23 : isptr v´45
)(
  H1 : ECBList_P v´41 Vnull
         (v´24 ++
          ((Vint32 i0 :: Vint32 i :: Vint32 i1 :: x3 :: x4 :: v´45 :: nil,
           v´43) :: nil) ++ v´25) (v´26 ++ (DMsgQ v v0 v1 v2 :: nil) ++ v´27)
         v´37 v´38
)(
  H2 : ECBList_P v´41 (Vptr (v´28, Int.zero)) v´24 v´26 v´46 v´38
)(
  H6 : EcbMod.joinsig (v´28, Int.zero) v´49 v´47 v´48
)(
  H11 : id_addrval´ (Vptr (v´28, Int.zero)) OSEventTbl OS_EVENT = Some v´22
)(
  H5 : R_ECB_ETbl_P (v´28, Int.zero)
         (Vint32 i0 :: Vint32 i :: Vint32 i1 :: x3 :: x4 :: v´45 :: nil,
          v´43) v´38
)(
  HeqX : true = Int.eq i0 ($ OS_EVENT_TYPE_Q)
)(
  H13 : Int.eq i ($ 0) = false
)(
  v´23 : option val
),
{|OSQ_spec , GetHPrio, I,
   fun v3 : option val =>
   ((((EX v4 : val, LV message @ (Void) |-> v4) **
      (EX v4 : val, LV pevent @ OS_EVENT |-> v4) **
      (EX v4 : val, LV pq @ OS_Q |-> v4) **
      (EX v4 : val, LV legal @ Int8u |-> v4) **
      (EX v4 : val, LV x @ Int8u |-> v4) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((message, (Void) )
       :: (pevent, OS_EVENT )
          :: (pq, OS_Q ) :: (legal, Int8u) :: (x, Int8u) :: nil)) **
    <|| END v3 ||> , Afalse|}|-
   {{event_rdy_post1´
       (Vptr (v´28, Int.zero) :: Vptr x0 :: V$OS_STAT_Q :: nil) v´23
       (logic_lv v´29
        :: logic_lv v´33
           :: logic_llv v´32
              :: logic_llv v´34
                 :: logic_lv v´35
                    :: logic_val v´36
                       :: logic_abstcb v´38
                          :: logic_val v´30
                             :: logic_val v´31
                                :: logic_val (Vptr v´40)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_Q
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: x3 :: x4 :: v´45 :: nil)
                                      :: logic_lv v´43
                                         :: logic_leventd
                                              (DMsgQ v v0 v1 v2 :: nil)
                                            :: logic_code
                                                 (qpost
                                                  (Vptr (v´28, Int.zero)
                                                  ::
                                                  Vptr x0 :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV x @ Int8u |-> (V$OS_STAT_Q) **
     GV OSEventList @ OS_EVENT |-> v´41 **
     evsllseg v´41 (Vptr (v´28, Int.zero)) v´24 v´26 **
     evsllseg v´45 Vnull v´25 v´27 **
     HECBList v´37 **
     HTCBList v´38 **
     HCurTCB v´40 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´2 **
     AOSQFreeList v´3 **
     AOSQFreeBlk v´4 **
     AOSIntNesting **
     AOSTCBFreeList v´20 v´21 **
     AOSTime (Vint32 v´17) **
     HTime v´17 **
     AGVars **
     atoy_inv´ **
     LV pq @ OS_Q |-> **
     LV message @ (Void) |-> Vptr x0 **
     LV pevent @ OS_EVENT |-> Vptr (v´28, Int.zero) **
     A_dom_lenv
       ((message, (Void) )
        :: (pevent, OS_EVENT )
           :: (pq, OS_Q ) :: (legal, Int8u) :: (x, Int8u) :: nil) \\//
     event_rdy_post2´
       (Vptr (v´28, Int.zero) :: Vptr x0 :: V$OS_STAT_Q :: nil) v´23
       (logic_lv v´29
        :: logic_lv v´33
           :: logic_llv v´32
              :: logic_llv v´34
                 :: logic_lv v´35
                    :: logic_val v´36
                       :: logic_abstcb v´38
                          :: logic_val v´30
                             :: logic_val v´31
                                :: logic_val (Vptr v´40)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_Q
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: x3 :: x4 :: v´45 :: nil)
                                      :: logic_lv v´43
                                         :: logic_leventd
                                              (DMsgQ v v0 v1 v2 :: nil)
                                            :: logic_code
                                                 (qpost
                                                  (Vptr (v´28, Int.zero)
                                                  ::
                                                  Vptr x0 :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV x @ Int8u |-> (V$OS_STAT_Q) **
     GV OSEventList @ OS_EVENT |-> v´41 **
     evsllseg v´41 (Vptr (v´28, Int.zero)) v´24 v´26 **
     evsllseg v´45 Vnull v´25 v´27 **
     HECBList v´37 **
     HTCBList v´38 **
     HCurTCB v´40 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´2 **
     AOSQFreeList v´3 **
     AOSQFreeBlk v´4 **
     AOSIntNesting **
     AOSTCBFreeList v´20 v´21 **
     AOSTime (Vint32 v´17) **
     HTime v´17 **
     AGVars **
     atoy_inv´ **
     LV pq @ OS_Q |-> **
     LV message @ (Void) |-> Vptr x0 **
     LV pevent @ OS_EVENT |-> Vptr (v´28, Int.zero) **
     A_dom_lenv
       ((message, (Void) )
        :: (pevent, OS_EVENT )
           :: (pq, OS_Q ) :: (legal, Int8u) :: (x, Int8u) :: nil) \\//
     event_rdy_post3´
       (Vptr (v´28, Int.zero) :: Vptr x0 :: V$OS_STAT_Q :: nil) v´23
       (logic_lv v´29
        :: logic_lv v´33
           :: logic_llv v´32
              :: logic_llv v´34
                 :: logic_lv v´35
                    :: logic_val v´36
                       :: logic_abstcb v´38
                          :: logic_val v´30
                             :: logic_val v´31
                                :: logic_val (Vptr v´40)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_Q
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: x3 :: x4 :: v´45 :: nil)
                                      :: logic_lv v´43
                                         :: logic_leventd
                                              (DMsgQ v v0 v1 v2 :: nil)
                                            :: logic_code
                                                 (qpost
                                                  (Vptr (v´28, Int.zero)
                                                  ::
                                                  Vptr x0 :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV x @ Int8u |-> (V$OS_STAT_Q) **
     GV OSEventList @ OS_EVENT |-> v´41 **
     evsllseg v´41 (Vptr (v´28, Int.zero)) v´24 v´26 **
     evsllseg v´45 Vnull v´25 v´27 **
     HECBList v´37 **
     HTCBList v´38 **
     HCurTCB v´40 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´2 **
     AOSQFreeList v´3 **
     AOSQFreeBlk v´4 **
     AOSIntNesting **
     AOSTCBFreeList v´20 v´21 **
     AOSTime (Vint32 v´17) **
     HTime v´17 **
     AGVars **
     atoy_inv´ **
     LV pq @ OS_Q |-> **
     LV message @ (Void) |-> Vptr x0 **
     LV pevent @ OS_EVENT |-> Vptr (v´28, Int.zero) **
     A_dom_lenv
       ((message, (Void) )
        :: (pevent, OS_EVENT )
           :: (pq, OS_Q ) :: (legal, Int8u) :: (x, Int8u) :: nil) \\//
     event_rdy_post4´
       (Vptr (v´28, Int.zero) :: Vptr x0 :: V$OS_STAT_Q :: nil) v´23
       (logic_lv v´29
        :: logic_lv v´33
           :: logic_llv v´32
              :: logic_llv v´34
                 :: logic_lv v´35
                    :: logic_val v´36
                       :: logic_abstcb v´38
                          :: logic_val v´30
                             :: logic_val v´31
                                :: logic_val (Vptr v´40)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_Q
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: x3 :: x4 :: v´45 :: nil)
                                      :: logic_lv v´43
                                         :: logic_leventd
                                              (DMsgQ v v0 v1 v2 :: nil)
                                            :: logic_code
                                                 (qpost
                                                  (Vptr (v´28, Int.zero)
                                                  ::
                                                  Vptr x0 :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV x @ Int8u |-> (V$OS_STAT_Q) **
     GV OSEventList @ OS_EVENT |-> v´41 **
     evsllseg v´41 (Vptr (v´28, Int.zero)) v´24 v´26 **
     evsllseg v´45 Vnull v´25 v´27 **
     HECBList v´37 **
     HTCBList v´38 **
     HCurTCB v´40 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´2 **
     AOSQFreeList v´3 **
     AOSQFreeBlk v´4 **
     AOSIntNesting **
     AOSTCBFreeList v´20 v´21 **
     AOSTime (Vint32 v´17) **
     HTime v´17 **
     AGVars **
     atoy_inv´ **
     LV pq @ OS_Q |-> **
     LV message @ (Void) |-> Vptr x0 **
     LV pevent @ OS_EVENT |-> Vptr (v´28, Int.zero) **
     A_dom_lenv
       ((message, (Void) )
        :: (pevent, OS_EVENT )
           :: (pq, OS_Q ) :: (legal, Int8u) :: (x, Int8u) :: nil) \\//
     event_rdy_post5´
       (Vptr (v´28, Int.zero) :: Vptr x0 :: V$OS_STAT_Q :: nil) v´23
       (logic_lv v´29
        :: logic_lv v´33
           :: logic_llv v´32
              :: logic_llv v´34
                 :: logic_lv v´35
                    :: logic_val v´36
                       :: logic_abstcb v´38
                          :: logic_val v´30
                             :: logic_val v´31
                                :: logic_val (Vptr v´40)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_Q
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: x3 :: x4 :: v´45 :: nil)
                                      :: logic_lv v´43
                                         :: logic_leventd
                                              (DMsgQ v v0 v1 v2 :: nil)
                                            :: logic_code
                                                 (qpost
                                                  (Vptr (v´28, Int.zero)
                                                  ::
                                                  Vptr x0 :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV x @ Int8u |-> (V$OS_STAT_Q) **
     GV OSEventList @ OS_EVENT |-> v´41 **
     evsllseg v´41 (Vptr (v´28, Int.zero)) v´24 v´26 **
     evsllseg v´45 Vnull v´25 v´27 **
     HECBList v´37 **
     HTCBList v´38 **
     HCurTCB v´40 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´2 **
     AOSQFreeList v´3 **
     AOSQFreeBlk v´4 **
     AOSIntNesting **
     AOSTCBFreeList v´20 v´21 **
     AOSTime (Vint32 v´17) **
     HTime v´17 **
     AGVars **
     atoy_inv´ **
     LV pq @ OS_Q |-> **
     LV message @ (Void) |-> Vptr x0 **
     LV pevent @ OS_EVENT |-> Vptr (v´28, Int.zero) **
     A_dom_lenv
       ((message, (Void) )
        :: (pevent, OS_EVENT )
           :: (pq, OS_Q ) :: (legal, Int8u) :: (x, Int8u) :: nil) \\//
     event_rdy_post6´
       (Vptr (v´28, Int.zero) :: Vptr x0 :: V$OS_STAT_Q :: nil) v´23
       (logic_lv v´29
        :: logic_lv v´33
           :: logic_llv v´32
              :: logic_llv v´34
                 :: logic_lv v´35
                    :: logic_val v´36
                       :: logic_abstcb v´38
                          :: logic_val v´30
                             :: logic_val v´31
                                :: logic_val (Vptr v´40)
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_Q
                                         :: Vint32 i
                                            :: Vint32 i1
                                               :: x3 :: x4 :: v´45 :: nil)
                                      :: logic_lv v´43
                                         :: logic_leventd
                                              (DMsgQ v v0 v1 v2 :: nil)
                                            :: logic_code
                                                 (qpost
                                                  (Vptr (v´28, Int.zero)
                                                  ::
                                                  Vptr x0 :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV x @ Int8u |-> (V$OS_STAT_Q) **
     GV OSEventList @ OS_EVENT |-> v´41 **
     evsllseg v´41 (Vptr (v´28, Int.zero)) v´24 v´26 **
     evsllseg v´45 Vnull v´25 v´27 **
     HECBList v´37 **
     HTCBList v´38 **
     HCurTCB v´40 **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´2 **
     AOSQFreeList v´3 **
     AOSQFreeBlk v´4 **
     AOSIntNesting **
     AOSTCBFreeList v´20 v´21 **
     AOSTime (Vint32 v´17) **
     HTime v´17 **
     AGVars **
     atoy_inv´ **
     LV pq @ OS_Q |-> **
     LV message @ (Void) |-> Vptr x0 **
     LV pevent @ OS_EVENT |-> Vptr (v´28, Int.zero) **
     A_dom_lenv
       ((message, (Void) )
        :: (pevent, OS_EVENT )
           :: (pq, OS_Q ) :: (legal, Int8u) :: (x, Int8u) :: nil)}}
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   RETURN OS_NO_ERR {{Afalse}}
.

Definition gen_OSQPostProofPart2:= forall
( : val
)(
   v´0 : val
)(
  v´1 : val
)(
  x0 : addrval
)(
  v´2 : list vallist
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list EventData
)(
  v´6 : list EventCtr
)(
  v´7 : vallist
)(
  v´8 : val
)(
  v´9 : val
)(
  v´10 : list vallist
)(
  v´11 : vallist
)(
  v´12 : list vallist
)(
  v´13 : vallist
)(
  v´14 : val
)(
  v´15 : EcbMod.map
)(
  v´16 : TcbMod.map
)(
  v´17 : int32
)(
  v´18 : addrval
)(
  v´19 : addrval
)(
  v´20 : val
)(
  v´21 : list vallist
)(
  H : RH_TCBList_ECBList_P v´15 v´16 v´18
)(
  H0 : RH_CurTCB v´18 v´16
)(
  v´24 : list EventCtr
)(
  v´25 : list EventCtr
)(
  v´26 : list EventData
)(
  v´27 : list EventData
)(
  v´29 : vallist
)(
  v´30 : val
)(
  v´31 : val
)(
  v´32 : list vallist
)(
  v´33 : vallist
)(
  v´34 : list vallist
)(
  v´35 : vallist
)(
  v´36 : val
)(
  v´37 : EcbMod.map
)(
  v´38 : TcbMod.map
)(
  v´40 : addrval
)(
  v´41 : val
)(
  v´43 : vallist
)(
  v : val
)(
  v0 : vallist
)(
  v1 : vallist
)(
  v2 : vallist
)(
  v´45 : val
)(
  v´46 : EcbMod.map
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : absecb.B
)(
  v´50 : addrval
)(
  H3 : ECBList_P v´45 Vnull v´25 v´27 v´47 v´38
)(
  H4 : RLH_ECBData_P (DMsgQ v v0 v1 v2) v´49
)(
  H16 : EcbMod.join v´46 v´48 v´37
)(
  H7 : RH_TCBList_ECBList_P v´37 v´38 v´40
)(
  H8 : RH_CurTCB v´40 v´38
)(
  H12 : length v´24 = length v´26
)(
  H15 : isptr v´45
)(
  v´22 : addrval
)(
  v´28 : block
)(
  H10 : array_type_vallist_match Int8u v´43
)(
  H18 : length v´43 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  x4 : val
)(
  i0 : int32
)(
  H19 : Int.unsigned i0 <= 255
)(
  i : int32
)(
  H20 : Int.unsigned i <= 255
)(
  i1 : int32
)(
  H21 : Int.unsigned i1 <= 65535
)(
  H22 : isptr x3
)(
  H17 : RL_Tbl_Grp_P v´43 (Vint32 i)
)(
  H23 : isptr v´45
)(
  H1 : ECBList_P v´41 Vnull
         (v´24 ++
          ((Vint32 i0 :: Vint32 i :: Vint32 i1 :: x3 :: x4 :: v´45 :: nil,
           v´43) :: nil) ++ v´25) (v´26 ++ (DMsgQ v v0 v1 v2 :: nil) ++ v´27)
         v´37 v´38
)(
  H2 : ECBList_P v´41 (Vptr (v´28, Int.zero)) v´24 v´26 v´46 v´38
)(
  H6 : EcbMod.joinsig (v´28, Int.zero) v´49 v´47 v´48
)(
  H11 : id_addrval´ (Vptr (v´28, Int.zero)) OSEventTbl OS_EVENT = Some v´22
)(
  H5 : R_ECB_ETbl_P (v´28, Int.zero)
         (Vint32 i0 :: Vint32 i :: Vint32 i1 :: x3 :: x4 :: v´45 :: nil,
          v´43) v´38
)(
  HeqX : true = Int.eq i0 ($ OS_EVENT_TYPE_Q)
)(
  H9 : Vint32 (Int.notbool Int.one) = Vint32 Int.zero
),
  
  {|OSQ_spec , GetHPrio, I,
   fun v3 : option val =>
   ((((EX v4 : val, LV message @ (Void) |-> v4) **
      (EX v4 : val, LV pevent @ OS_EVENT |-> v4) **
      (EX v4 : val, LV pq @ OS_Q |-> v4) **
      (EX v4 : val, LV legal @ Int8u |-> v4) **
      (EX v4 : val, LV x @ Int8u |-> v4) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((message, (Void) )
       :: (pevent, OS_EVENT )
          :: (pq, OS_Q ) :: (legal, Int8u) :: (x, Int8u) :: nil)) **
    <|| END v3 ||> , Afalse|}|-
   {{(Astruct (v´28, Int.zero) OS_EVENT
        (Vint32 i0 :: Vint32 i :: Vint32 i1 :: x3 :: x4 :: v´45 :: nil) **
      Aarray v´22 (Tarray Int8u OS_EVENT_TBL_SIZE) v´43 **
      Aie false **
      Ais nil **
      Acs (true :: nil) **
      Aisr empisr **
      GV OSEventList @ OS_EVENT |-> v´41 **
      AEventData
        (Vint32 i0 :: Vint32 i :: Vint32 i1 :: x3 :: x4 :: v´45 :: nil)
        (DMsgQ v v0 v1 v2) **
      evsllseg v´41 (Vptr (v´28, Int.zero)) v´24 v´26 **
      evsllseg v´45 Vnull v´25 v´27 **
      A_isr_is_prop **
      AOSTCBList v´30 v´31 v´32 (v´33 :: v´34) v´35 v´40 v´38 **
      AOSRdyTblGrp v´35 v´36 **
      AOSTCBPrioTbl v´29 v´35 v´38 v´50 **
      HECBList v´37 **
      HTCBList v´38 **
      HCurTCB v´40 **
       <|| qpost (Vptr (v´28, Int.zero) :: Vptr x0 :: nil) ||> **
      LV legal @ Int8u |-> (V$1) **
      AOSEventFreeList v´2 **
      AOSQFreeList v´3 **
      AOSQFreeBlk v´4 **
      AOSMapTbl **
      AOSUnMapTbl **
      AOSIntNesting **
      AOSTCBFreeList v´20 v´21 **
      AOSTime (Vint32 v´17) **
      HTime v´17 **
      AGVars **
      atoy_inv´ **
      LV x @ Int8u |-> v´1 **
      LV pq @ OS_Q |-> **
      LV message @ (Void) |-> Vptr x0 **
      LV pevent @ OS_EVENT |-> Vptr (v´28, Int.zero) **
      A_dom_lenv
        ((message, (Void) )
         :: (pevent, OS_EVENT )
            :: (pq, OS_Q ) :: (legal, Int8u) :: (x, Int8u) :: nil)) **
     [|val_inj
         (notint
            (val_inj
               (if Int.eq i ($ 0)
                then Some (Vint32 Int.one)
                else Some (Vint32 Int.zero)))) = Vint32 Int.zero \/
       val_inj
         (notint
            (val_inj
               (if Int.eq i ($ 0)
                then Some (Vint32 Int.one)
                else Some (Vint32 Int.zero)))) = Vnull|]}}
   pq =ₑ pevent OSEventPtr;ₛ
   If(pq OSQEntries pq OSQSize)
        {EXIT_CRITICAL;ₛ
        RETURN OS_Q_FULL} ;ₛ
   pq OSQIn =ₑ message ;ₛ
   pq OSQIn =ₑ pq OSQIn +ₑ 1;ₛ
   pq OSQEntries =ₑ pq OSQEntries +ₑ 1;ₛ
   If(pq OSQIn ==ₑ pq OSQEnd)
        {pq OSQIn =ₑ pq OSQStart} ;ₛ
   EXIT_CRITICAL;ₛ
                   RETURN OS_NO_ERR {{Afalse}}.

Definition gen_mutex_pend_ptcb_is_rdy_left_to_cur´:= forall
             (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (v´32 : vallist)
  (v´33 : val)
  (v´37 : list vallist)
  (os_rdy_tbl : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (st : taskstatus)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, st, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, st, Vnull))
  (x0 : val)
  (x2 : TcbMod.map)
  (Htcblist_subr : TCBList_P x0 v´37 os_rdy_tbl x2)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (xs : taskstatus)
  (H12 : isptr x0)
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               os_rdy_tbl (cur_prio, st, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, st, Vnull) x2
                     tcbls_r)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_l)
  (Htcblist_sub_left : TCBList_P v´33 v´34 os_rdy_tbl tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 os_rdy_tbl tcbls_sub_r)
  (ptcb_addr : block)
  (x11 : val)
  (H31 : isptr x11)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (i10 : int32)
  (H44 : Int.unsigned i10 <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (ptcb_tcby : int32)
  (H47 : Int.unsigned ptcb_tcby <= 255)
  (ptcb_bitx : int32)
  (H48 : Int.unsigned ptcb_bitx <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H27 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, xs, xm))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (H_ptcb_in_left : TcbMod.get tcbls_l (ptcb_addr, Int.zero) =
                   Some (ptcb_prio, xs, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, xs, xm) tcbls_sub_r v´52)
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (H17 : RL_TCBblk_P
          (v´45
           :: v´43
              :: x11
                 :: xm
                    :: Vint32 i11
                       :: Vint32 i10
                          :: Vint32 ptcb_prio
                             :: Vint32 i8
                                :: Vint32 ptcb_tcby
                                   :: Vint32 ptcb_bitx :: Vint32 i2 :: nil))
  (H50 : R_TCB_Status_P
          (v´45
           :: v´43
              :: x11
                 :: xm
                    :: Vint32 i11
                       :: Vint32 i10
                          :: Vint32 ptcb_prio
                             :: Vint32 i8
                                :: Vint32 ptcb_tcby
                                   :: Vint32 ptcb_bitx :: Vint32 i2 :: nil)
          os_rdy_tbl (ptcb_prio, xs, xm))
  (Htcblist_subl : TCBList_P v´33
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x11
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 i10
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 ptcb_tcby
                                              :: Vint32 ptcb_bitx
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    os_rdy_tbl tcbls_l)
  (Hif_can_lift : ptcb_prio <> x>>ᵢ$ 8 /\
                 Int.ltu cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8) = true)
  (v´31 : val)
  (H9 : array_type_vallist_match OS_TCB v´32)
  (H52 : length v´32 = 64%nat)
  (H15 : RL_RTbl_PrioTbl_P os_rdy_tbl v´32 v´53)
  (H51 : R_PrioTbl_P v´32 tcbls v´53)
  (H_pip_is_hold : nth_val´ (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´32 =
                  Vptr v´53)
  (H53 : array_type_vallist_match Int8u os_rdy_tbl)
  (H56 : length os_rdy_tbl = OS_RDY_TBL_SIZE)
  (H54 : rule_type_val_match Int8u v´39 = true)
  (H55 : RL_Tbl_Grp_P os_rdy_tbl v´39)
  (H57 : prio_in_tbl ($ OS_IDLE_PRIO) os_rdy_tbl)
  (Hownernidle : ptcb_prio <> $ OS_IDLE_PRIO)
  (Hptcbstrdy : i10 = $ OS_STAT_RDY)
  (Hptcbdly0 : i11 = $ 0)
  (Hrange_py : 0 <= Int.unsigned ptcb_tcby <= 7)
  (v0 : int32)
  (Hif_ptcb_rdy1 : nth_val´ (Z.to_nat (Int.unsigned ptcb_tcby)) os_rdy_tbl =
                  Vint32 v0)
  (Hif_ptcb_rdy2 : v0&ptcb_bitx <> Int.zero)
  (Hrangev : Int.unsigned v0 <= 255)
  (Hfx : exists x1,
        nth_val´ (Z.to_nat (Int.unsigned ptcb_tcby))
          (update_nth_val (Z.to_nat (Int.unsigned ptcb_tcby)) os_rdy_tbl
             (Vint32 (v0&Int.not ptcb_bitx))) = Vint32 x1 /\
        Int.unsigned x1 <= 255)
  (Hif_false : val_inj
                (val_eq
                   (nth_val´ (Z.to_nat (Int.unsigned ptcb_tcby))
                      (update_nth_val (Z.to_nat (Int.unsigned ptcb_tcby))
                         os_rdy_tbl
                         (val_inj
                            (and (Vint32 v0) (Vint32 (Int.not ptcb_bitx))))))
                   (V$0)) = Vint32 Int.zero \/
              val_inj
                (val_eq
                   (nth_val´ (Z.to_nat (Int.unsigned ptcb_tcby))
                      (update_nth_val (Z.to_nat (Int.unsigned ptcb_tcby))
                         os_rdy_tbl
                         (val_inj
                            (and (Vint32 v0) (Vint32 (Int.not ptcb_bitx))))))
                   (V$0)) = Vnull)
  (Hgetlast:
     get_last_tcb_ptr v´34 v´33 = Some (Vptr (ptcb_addr,Int.zero)))
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v1 : val, LV timeout @ Int16u |-> v1) **
      (EX v1 : val, LV pevent @ OS_EVENT |-> v1) **
      (EX v1 : val, LV legal @ Int8u |-> v1) **
      (EX v1 : val, LV pip @ Int8u |-> v1) **
      (EX v1 : val, LV mprio @ Int8u |-> v1) **
      (EX v1 : val, LV isrdy @ Int8u |-> v1) **
      (EX v1 : val, LV ptcb @ OS_TCB |-> v1) **
      (EX v1 : val, LV pevent2 @ OS_EVENT |-> v1) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{ <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil) **
     GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE)
       (update_nth_val (Z.to_nat (Int.unsigned ptcb_tcby)) os_rdy_tbl
          (val_inj (and (Vint32 v0) (Vint32 (Int.not ptcb_bitx))))) **
     GAarray OSTCBPrioTbl (Tarray OS_TCB 64)
       (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
          (update_nth_val (Z.to_nat (Int.unsigned ptcb_prio)) v´32
             (Vptr v´53)) (Vptr (ptcb_addr, Int.zero))) **
     PV v´53 @ Int8u |-> v´31 **
     Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x11
              :: xm
                 :: Vint32 i11
                    :: Vint32 i10
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 ptcb_tcby
                                :: Vint32 ptcb_bitx :: Vint32 i2 :: nil) **
     dllseg v´33 Vnull v´43 (Vptr (ptcb_addr, Int.zero)) v´34 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     dllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´26
       (Vptr (cur_addr, Int.zero)) v´36 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     dllseg x0 (Vptr (cur_addr, Int.zero)) v´42 Vnull v´37 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     GV OSRdyGrp @ Int8u |-> v´39 **
     G&OSPlaceHolder @ Int8u == v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero)}}
   ptcb OSTCBPrio =ₑ pip ;ₛ
   ptcb OSTCBY =ₑ ptcb OSTCBPrio 3;ₛ
   ptcb OSTCBBitY =ₑ OSMapTbl [ptcb OSTCBY];ₛ
   ptcb OSTCBX =ₑ ptcb OSTCBPrio &ₑ 7;ₛ
   ptcb OSTCBBitX =ₑ OSMapTbl [ptcb OSTCBX];ₛ
   OSRdyGrp =ₑ OSRdyGrp |ₑ ptcb OSTCBBitY;ₛ
   OSRdyTbl [ptcb OSTCBY] =ₑ
   OSRdyTbl [ptcb OSTCBY] |ₑ ptcb OSTCBBitX;ₛ
   OSTCBCur OSTCBStat =ₑ OS_STAT_MUTEX;ₛ
   OSTCBCur OSTCBDly =ₑ timeout ;ₛ
   OS_EventTaskWait pevent ­);ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   ENTER_CRITICAL;ₛ
   If(OSTCBCur OSTCBMsg !=ₑ NULL)
        {EXIT_CRITICAL;ₛ
        RETURN OS_NO_ERR} ;ₛ
   EXIT_CRITICAL;ₛ
   RETURN OS_TIMEOUT {{Afalse}}
.

Definition gen_mutex_pend_ptcb_is_rdy_left_to_cur :=
  forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (v´32 : vallist)
  (v´33 : val)
  (v´37 : list vallist)
  (os_rdy_tbl : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (st : taskstatus)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, st, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, st, Vnull))
  (x0 : val)
  (x2 : TcbMod.map)
  (Htcblist_subr : TCBList_P x0 v´37 os_rdy_tbl x2)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (xs : taskstatus)
  (H12 : isptr x0)
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               os_rdy_tbl (cur_prio, st, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, st, Vnull) x2
                     tcbls_r)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_l)
  (Htcblist_sub_left : TCBList_P v´33 v´34 os_rdy_tbl tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 os_rdy_tbl tcbls_sub_r)
  (ptcb_addr : block)
  (x11 : val)
  (H31 : isptr x11)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (i10 : int32)
  (H44 : Int.unsigned i10 <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (ptcb_tcby : int32)
  (H47 : Int.unsigned ptcb_tcby <= 255)
  (ptcb_bitx : int32)
  (H48 : Int.unsigned ptcb_bitx <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H27 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, xs, xm))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (H_ptcb_in_left : TcbMod.get tcbls_l (ptcb_addr, Int.zero) =
                   Some (ptcb_prio, xs, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, xs, xm) tcbls_sub_r v´52)
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (H17 : RL_TCBblk_P
          (v´45
           :: v´43
              :: x11
                 :: xm
                    :: Vint32 i11
                       :: Vint32 i10
                          :: Vint32 ptcb_prio
                             :: Vint32 i8
                                :: Vint32 ptcb_tcby
                                   :: Vint32 ptcb_bitx :: Vint32 i2 :: nil))
  (H50 : R_TCB_Status_P
          (v´45
           :: v´43
              :: x11
                 :: xm
                    :: Vint32 i11
                       :: Vint32 i10
                          :: Vint32 ptcb_prio
                             :: Vint32 i8
                                :: Vint32 ptcb_tcby
                                   :: Vint32 ptcb_bitx :: Vint32 i2 :: nil)
          os_rdy_tbl (ptcb_prio, xs, xm))
  (Htcblist_subl : TCBList_P v´33
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x11
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 i10
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 ptcb_tcby
                                              :: Vint32 ptcb_bitx
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    os_rdy_tbl tcbls_l)
  (Hif_can_lift : ptcb_prio <> x>>ᵢ$ 8 /\
                 Int.ltu cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8) = true)
  (v´31 : val)
  (H9 : array_type_vallist_match OS_TCB v´32)
  (H52 : length v´32 = 64%nat)
  (H15 : RL_RTbl_PrioTbl_P os_rdy_tbl v´32 v´53)
  (H51 : R_PrioTbl_P v´32 tcbls v´53)
  (H_pip_is_hold : (nth_val´ (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
                                v´32) = (Vptr v´53) )
  (H53 : array_type_vallist_match Int8u os_rdy_tbl)
  (H56 : length os_rdy_tbl = OS_RDY_TBL_SIZE)
  (H54 : rule_type_val_match Int8u v´39 = true)
  (H55 : RL_Tbl_Grp_P os_rdy_tbl v´39)
  (H57 : prio_in_tbl ($ OS_IDLE_PRIO) os_rdy_tbl)
  (Hif_false : val_inj
                (val_eq
                   (val_inj
                      (and
                         (nth_val´ (Z.to_nat (Int.unsigned ptcb_tcby))
                            os_rdy_tbl) (Vint32 ptcb_bitx)))
                   (V$0)) = Vint32 Int.zero \/
              val_inj
                (val_eq
                   (val_inj
                      (and
                         (nth_val´ (Z.to_nat (Int.unsigned ptcb_tcby))
                            os_rdy_tbl) (Vint32 ptcb_bitx)))
                   (V$0)) = Vnull)
  (Hownernidle: ptcb_prio <> $ OS_IDLE_PRIO)
  (Hptcbstrdy: i10 = $ OS_STAT_RDY)
  (Hptcbdly0: i11 = $ 0 )
  (Hgetlast: get_last_tcb_ptr v´34 v´33 = Some (Vptr (ptcb_addr,Int.zero)))
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{ <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil) **
     GAarray OSTCBPrioTbl (Tarray OS_TCB 64)
       (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
          (update_nth_val (Z.to_nat (Int.unsigned ptcb_prio)) v´32
             (Vptr v´53)) (Vptr (ptcb_addr, Int.zero))) **
     PV v´53 @ Int8u |-> v´31 **
     Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x11
              :: xm
                 :: Vint32 i11
                    :: Vint32 i10
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 ptcb_tcby
                                :: Vint32 ptcb_bitx :: Vint32 i2 :: nil) **
     dllseg v´33 Vnull v´43 (Vptr (ptcb_addr, Int.zero)) v´34 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     dllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´26
       (Vptr (cur_addr, Int.zero)) v´36 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     dllseg x0 (Vptr (cur_addr, Int.zero)) v´42 Vnull v´37 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE) os_rdy_tbl **
     GV OSRdyGrp @ Int8u |-> v´39 **
     G&OSPlaceHolder @ Int8u == v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero)}}
   OSRdyTbl [ptcb OSTCBY] &= ptcb OSTCBBitX;ₛ
   If(OSRdyTbl [ptcb OSTCBY] ==ₑ 0)
        {OSRdyGrp &= ptcb OSTCBBitY} ;ₛ
   ptcb OSTCBPrio =ₑ pip ;ₛ
   ptcb OSTCBY =ₑ ptcb OSTCBPrio 3;ₛ
   ptcb OSTCBBitY =ₑ OSMapTbl [ptcb OSTCBY];ₛ
   ptcb OSTCBX =ₑ ptcb OSTCBPrio &ₑ 7;ₛ
   ptcb OSTCBBitX =ₑ OSMapTbl [ptcb OSTCBX];ₛ
   OSRdyGrp =ₑ OSRdyGrp |ₑ ptcb OSTCBBitY;ₛ
   OSRdyTbl [ptcb OSTCBY] =ₑ
   OSRdyTbl [ptcb OSTCBY] |ₑ ptcb OSTCBBitX;ₛ
   OSTCBCur OSTCBStat =ₑ OS_STAT_MUTEX;ₛ
   OSTCBCur OSTCBDly =ₑ timeout ;ₛ
   OS_EventTaskWait pevent ­);ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   ENTER_CRITICAL;ₛ
   If(OSTCBCur OSTCBMsg !=ₑ NULL)
        {EXIT_CRITICAL;ₛ
        RETURN OS_NO_ERR} ;ₛ
   EXIT_CRITICAL;ₛ
                   RETURN OS_TIMEOUT {{Afalse}}.

Definition gen_mutex_pend_can_not_lift_left_to_cur:= forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (v´32 : vallist)
  (v´33 : val)
  (v´37 : list vallist)
  (v´38 : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (st : taskstatus)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, rdy, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, rdy, Vnull))
  (x0 : val)
  (x2 : TcbMod.map)
  (Htcblist_subr : TCBList_P x0 v´37 v´38 x2)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (H12 : isptr x0)
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               v´38 (cur_prio, rdy, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, rdy, Vnull) x2
                     tcbls_r)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_l)
  (Htcblist_sub_left : TCBList_P v´33 v´34 v´38 tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 v´38 tcbls_sub_r)
  (ptcb_addr : block)
  (x11 : val)
  (H31 : isptr x11)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (i10 : int32)
  (H44 : Int.unsigned i10 <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (i7 : int32)
  (H47 : Int.unsigned i7 <= 255)
  (i6 : int32)
  (H48 : Int.unsigned i6 <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H27 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, rdy, xm))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (H_ptcb_in_left : TcbMod.get tcbls_l (ptcb_addr, Int.zero) =
                   Some (ptcb_prio, rdy, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, rdy, xm) tcbls_sub_r v´52)
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (H17 : RL_TCBblk_P
          (v´45
           :: v´43
              :: x11
                 :: xm
                    :: Vint32 i11
                       :: Vint32 i10
                          :: Vint32 ptcb_prio
                             :: Vint32 i8
                                :: Vint32 i7 :: Vint32 i6 :: Vint32 i2 :: nil))
  (H50 : R_TCB_Status_P
          (v´45
           :: v´43
              :: x11
                 :: xm
                    :: Vint32 i11
                       :: Vint32 i10
                          :: Vint32 ptcb_prio
                             :: Vint32 i8
                                :: Vint32 i7 :: Vint32 i6 :: Vint32 i2 :: nil)
          v´38 (ptcb_prio, rdy, xm))
  (Htcblist_subl : TCBList_P v´33
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x11
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 i10
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 i7
                                              :: Vint32 i6
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    v´38 tcbls_l)
  (LHif_false : val_inj
                 (bool_and
                    (val_inj
                       (notint
                          (val_inj
                             (if Int.eq ptcb_prio (x>>ᵢ$ 8)
                              then Some (Vint32 Int.one)
                              else Some (Vint32 Int.zero)))))
                    (val_inj
                       (if Int.ltu cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8)
                        then Some (Vint32 Int.one)
                        else Some (Vint32 Int.zero)))) =
               Vint32 Int.zero \/
               val_inj
                 (bool_and
                    (val_inj
                       (notint
                          (val_inj
                             (if Int.eq ptcb_prio (x>>ᵢ$ 8)
                              then Some (Vint32 Int.one)
                              else Some (Vint32 Int.zero)))))
                    (val_inj
                       (if Int.ltu cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8)
                        then Some (Vint32 Int.one)
                        else Some (Vint32 Int.zero)))) = Vnull)

  (Hnocur: (Int.eq cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8) = false))
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x11
              :: xm
                 :: Vint32 i11
                    :: Vint32 i10
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 i7 :: Vint32 i6 :: Vint32 i2 :: nil) **
     dllseg v´33 Vnull v´43 (Vptr (ptcb_addr, Int.zero)) v´34 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     dllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´26
       (Vptr (cur_addr, Int.zero)) v´36 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
      <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     dllseg x0 (Vptr (cur_addr, Int.zero)) v´42 Vnull v´37 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     AOSRdyTblGrp v´38 v´39 **
     AOSTCBPrioTbl v´32 v´38 tcbls v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero) **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)}}
   OSTCBCur OSTCBStat =ₑ OS_STAT_MUTEX;ₛ
   OSTCBCur OSTCBDly =ₑ timeout ;ₛ
   OS_EventTaskWait pevent ­);ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   ENTER_CRITICAL;ₛ
   If(OSTCBCur OSTCBMsg !=ₑ NULL)
        {EXIT_CRITICAL;ₛ
        RETURN OS_NO_ERR} ;ₛ
   EXIT_CRITICAL;ₛ
   RETURN OS_TIMEOUT {{Afalse}}
.

Definition gen_mutex_pend_ptcb_is_rdy_right_to_cur´:=
   forall
                                              (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (ptbl : vallist)
  (v´33 : val)
  (v´35 : list vallist)
  (os_rdy_tbl : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (Htcblist_subl : TCBList_P v´33 v´35 os_rdy_tbl tcbls_l)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (x0 : val)
  (tcbls_r´ : TcbMod.map)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Fneq_i2_1 : Int.unsigned (x>>ᵢ$ 8) <= 255)
  (Fneq_i2_2 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) <= 255)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Feq_i2_1 : x>>ᵢ$ 8 = Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (H12 : isptr x0)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_r´)
  (Htcblist_sub_left : TCBList_P x0 v´34 os_rdy_tbl tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 os_rdy_tbl tcbls_sub_r)
  (ptcb_addr : block)
  (x10 : val)
  (H31 : isptr x10)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H27 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (Hptcb_prio_not_idle : ptcb_prio <> $ OS_IDLE_PRIO)
  (Hptcb_prio_scope_obv : 0 <= Int.unsigned ptcb_prio)
  (Hptcb_prio_scope : Int.unsigned ptcb_prio < 64)
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, rdy, xm))
  (H_ptcb_in_right : TcbMod.get tcbls_r´ (ptcb_addr, Int.zero) =
                    Some (ptcb_prio, rdy, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, rdy, xm) tcbls_sub_r v´52)
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, rdy, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, rdy, Vnull))
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               os_rdy_tbl (cur_prio, rdy, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, rdy, Vnull)
                     tcbls_r´ tcbls_r)
  (Hif_false : Int.eq (x&$ OS_MUTEX_KEEP_LOWER_8) cur_prio = false)
  (Hnocur : Int.eq cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8) = false)
  (H_cur_prio_scope : Int.unsigned cur_prio < 64)
  (Hx_scope1 : Int.unsigned (x>>ᵢ$ 8) < 64)
  (Hif_can_lift1 : ptcb_prio <> x>>ᵢ$ 8)
  (Hif_can_lift2 : Int.ltu cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8) = true)
  (v´31 : val)
  (Hptbl_1 : array_type_vallist_match OS_TCB ptbl)
  (Hptbl_2 : length ptbl = 64%nat)
  (H15 : RL_RTbl_PrioTbl_P os_rdy_tbl ptbl v´53)
  (H51 : R_PrioTbl_P ptbl tcbls v´53)
  (H_pip_is_hold : val_inj
                    (uop_eval
                       (val_inj
                          (bop_eval
                             (nth_val´ (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
                                ptbl) (Vptr v´53) OS_TCB
                             OS_TCB oeq)) oppsite) =
                  Vint32 Int.zero \/
                  val_inj
                    (uop_eval
                       (val_inj
                          (bop_eval
                             (nth_val´ (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
                                ptbl) (Vptr v´53) OS_TCB
                             OS_TCB oeq)) oppsite) = Vnull)
  (H9 : array_type_vallist_match Int8u os_rdy_tbl)
  (H54 : length os_rdy_tbl = OS_RDY_TBL_SIZE)
  (H52 : rule_type_val_match Int8u v´39 = true)
  (H53 : RL_Tbl_Grp_P os_rdy_tbl v´39)
  (H55 : prio_in_tbl ($ OS_IDLE_PRIO) os_rdy_tbl)
  (Hptcb_tcby_scope : Int.unsigned (ptcb_prio>>ᵢ$ 3) < 8)
  (v0 : int32)
  (Hrangev : Int.unsigned v0 <= 255)
  (H48 : Int.unsigned ($ 1<<(ptcb_prio&$ 7)) <= 255)
  (Hif_ptcb_rdy2 : v0&($ 1<<(ptcb_prio&$ 7)) <> Int.zero)
  (H47 : Int.unsigned (ptcb_prio>>ᵢ$ 3) <= 255)
  (Hrange_py : 0 <= Int.unsigned (ptcb_prio>>ᵢ$ 3) <= 7)
  (Hif_ptcb_rdy1 : nth_val´ (Z.to_nat (Int.unsigned (ptcb_prio>>ᵢ$ 3)))
                    os_rdy_tbl = Vint32 v0)
  (H33 : Int.unsigned ($ 0) <= 65535)
  (H44 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (Htcblist_subr : TCBList_P x0
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x10
                            :: xm
                               :: V$0
                                  :: V$OS_STAT_RDY
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 (ptcb_prio>>ᵢ$ 3)
                                              :: Vint32
                                                  ($ 1<<(ptcb_prio&$ 7))
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    os_rdy_tbl tcbls_r´)
  (H17 : RL_TCBblk_P
          (v´45
           :: v´43
              :: x10
                 :: xm
                    :: V$0
                       :: V$OS_STAT_RDY
                          :: Vint32 ptcb_prio
                             :: Vint32 i8
                                :: Vint32 (ptcb_prio>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<(ptcb_prio&$ 7))
                                      :: Vint32 i2 :: nil))
  (Hptcb_node : TCBNode_P
                 (v´45
                  :: v´43
                     :: x10
                        :: xm
                           :: V$0
                              :: V$OS_STAT_RDY
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 (ptcb_prio>>ᵢ$ 3)
                                          :: Vint32 ($ 1<<(ptcb_prio&$ 7))
                                             :: Vint32 i2 :: nil) os_rdy_tbl
                 (ptcb_prio, rdy, xm))
  (H50 : R_TCB_Status_P
          (v´45
           :: v´43
              :: x10
                 :: xm
                    :: V$0
                       :: V$OS_STAT_RDY
                          :: Vint32 ptcb_prio
                             :: Vint32 i8
                                :: Vint32 (ptcb_prio>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<(ptcb_prio&$ 7))
                                      :: Vint32 i2 :: nil) os_rdy_tbl
          (ptcb_prio, rdy, xm))
  (Hfx : exists x1,
        nth_val´ (Z.to_nat (Int.unsigned (ptcb_prio>>ᵢ$ 3)))
          (update_nth_val (Z.to_nat (Int.unsigned (ptcb_prio>>ᵢ$ 3)))
             os_rdy_tbl (Vint32 (v0&Int.not ($ 1<<(ptcb_prio&$ 7))))) =
        Vint32 x1 /\ Int.unsigned x1 <= 255)
  (Hif_false0 : val_inj
                 (val_eq
                    (nth_val´ (Z.to_nat (Int.unsigned (ptcb_prio>>ᵢ$ 3)))
                       (update_nth_val
                          (Z.to_nat (Int.unsigned (ptcb_prio>>ᵢ$ 3)))
                          os_rdy_tbl
                          (val_inj
                             (and (Vint32 v0)
                                (Vint32 (Int.not ($ 1<<(ptcb_prio&$ 7))))))))
                    (V$0)) = Vint32 Int.zero \/
               val_inj
                 (val_eq
                    (nth_val´ (Z.to_nat (Int.unsigned (ptcb_prio>>ᵢ$ 3)))
                       (update_nth_val
                          (Z.to_nat (Int.unsigned (ptcb_prio>>ᵢ$ 3)))
                          os_rdy_tbl
                          (val_inj
                             (and (Vint32 v0)
                                (Vint32 (Int.not ($ 1<<(ptcb_prio&$ 7))))))))
                    (V$0)) = Vnull)
  (Hgetlast: get_last_tcb_ptr v´34 x0 = Some (Vptr (ptcb_addr,Int.zero)))
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v1 : val, LV timeout @ Int16u |-> v1) **
      (EX v1 : val, LV pevent @ OS_EVENT |-> v1) **
      (EX v1 : val, LV legal @ Int8u |-> v1) **
      (EX v1 : val, LV pip @ Int8u |-> v1) **
      (EX v1 : val, LV mprio @ Int8u |-> v1) **
      (EX v1 : val, LV isrdy @ Int8u |-> v1) **
      (EX v1 : val, LV ptcb @ OS_TCB |-> v1) **
      (EX v1 : val, LV pevent2 @ OS_EVENT |-> v1) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{ <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil) **
     GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE)
       (update_nth_val (Z.to_nat (Int.unsigned (ptcb_prio>>ᵢ$ 3))) os_rdy_tbl
          (val_inj
             (and (Vint32 v0) (Vint32 (Int.not ($ 1<<(ptcb_prio&$ 7))))))) **
     GAarray OSTCBPrioTbl (Tarray OS_TCB 64)
       (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
          (update_nth_val (Z.to_nat (Int.unsigned ptcb_prio)) ptbl
             (Vptr v´53)) (Vptr (ptcb_addr, Int.zero))) **
     PV v´53 @ Int8u |-> v´31 **
     Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x10
              :: xm
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 (ptcb_prio>>ᵢ$ 3)
                                :: Vint32 ($ 1<<(ptcb_prio&$ 7))
                                   :: Vint32 i2 :: nil) **
     tcbdllseg x0 (Vptr (cur_addr, Int.zero)) v´43
       (Vptr (ptcb_addr, Int.zero)) v´34 **
     tcbdllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´42 Vnull v´36 **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     dllseg v´33 Vnull v´26 (Vptr (cur_addr, Int.zero)) v´35 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     GV OSRdyGrp @ Int8u |-> v´39 **
     G&OSPlaceHolder @ Int8u == v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero)}}
   ptcb OSTCBPrio =ₑ pip ;ₛ
   ptcb OSTCBY =ₑ ptcb OSTCBPrio 3;ₛ
   ptcb OSTCBBitY =ₑ OSMapTbl [ptcb OSTCBY];ₛ
   ptcb OSTCBX =ₑ ptcb OSTCBPrio &ₑ 7;ₛ
   ptcb OSTCBBitX =ₑ OSMapTbl [ptcb OSTCBX];ₛ
   OSRdyGrp =ₑ OSRdyGrp |ₑ ptcb OSTCBBitY;ₛ
   OSRdyTbl [ptcb OSTCBY] =ₑ
   OSRdyTbl [ptcb OSTCBY] |ₑ ptcb OSTCBBitX;ₛ
   OSTCBCur OSTCBStat =ₑ OS_STAT_MUTEX;ₛ
   OSTCBCur OSTCBDly =ₑ timeout ;ₛ
   OS_EventTaskWait pevent ­);ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   ENTER_CRITICAL;ₛ
   If(OSTCBCur OSTCBMsg !=ₑ NULL)
        {EXIT_CRITICAL;ₛ
        RETURN OS_NO_ERR} ;ₛ
   EXIT_CRITICAL;ₛ
   RETURN OS_TIMEOUT {{Afalse}}

.

Definition gen_mutex_pend_ptcb_is_rdy_right_to_cur:= forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (ptbl : vallist)
  (v´33 : val)
  (v´35 : list vallist)
  (os_rdy_tbl : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (Htcblist_subl : TCBList_P v´33 v´35 os_rdy_tbl tcbls_l)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (x0 : val)
  (tcbls_r´ : TcbMod.map)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Fneq_i2_1 : Int.unsigned (x>>ᵢ$ 8) <= 255)
  (Fneq_i2_2 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) <= 255)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Feq_i2_1 : x>>ᵢ$ 8 = Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (H12 : isptr x0)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_r´)
  (Htcblist_sub_left : TCBList_P x0 v´34 os_rdy_tbl tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 os_rdy_tbl tcbls_sub_r)
  (ptcb_addr : block)
  (x10 : val)
  (H31 : isptr x10)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (ptcb_stat : int32)
  (H44 : Int.unsigned ptcb_stat <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (ptcb_tcby : int32)
  (H47 : Int.unsigned ptcb_tcby <= 255)
  (ptcb_bitx : int32)
  (H48 : Int.unsigned ptcb_bitx <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H27 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (Htcblist_subr : TCBList_P x0
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x10
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 ptcb_stat
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 ptcb_tcby
                                              :: Vint32 ptcb_bitx
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    os_rdy_tbl tcbls_r´)
  (H17 : RL_TCBblk_P
          (v´45
           :: v´43
              :: x10
                 :: xm
                    :: Vint32 i11
                       :: Vint32 ptcb_stat
                          :: Vint32 ptcb_prio
                             :: Vint32 i8
                                :: Vint32 ptcb_tcby
                                   :: Vint32 ptcb_bitx :: Vint32 i2 :: nil))
  (Hptcb_prio_not_idle : ptcb_prio <> $ OS_IDLE_PRIO)
  (Hptcb_prio_scope_obv : 0 <= Int.unsigned ptcb_prio)
  (Hptcb_prio_scope : Int.unsigned ptcb_prio < 64)
  (Hif_ptcb_is_rdy1 : ptcb_stat = $ OS_STAT_RDY)
  (Hif_ptcb_is_rdy2 : i11 = $ 0)
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, rdy, xm))
  (H_ptcb_in_right : TcbMod.get tcbls_r´ (ptcb_addr, Int.zero) =
                    Some (ptcb_prio, rdy, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, rdy, xm) tcbls_sub_r v´52)
  (Hptcb_node : TCBNode_P
                 (v´45
                  :: v´43
                     :: x10
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 ptcb_tcby
                                          :: Vint32 ptcb_bitx
                                             :: Vint32 i2 :: nil) os_rdy_tbl
                 (ptcb_prio, rdy, xm))
  (H50 : R_TCB_Status_P
          (v´45
           :: v´43
              :: x10
                 :: xm
                    :: Vint32 i11
                       :: Vint32 ptcb_stat
                          :: Vint32 ptcb_prio
                             :: Vint32 i8
                                :: Vint32 ptcb_tcby
                                   :: Vint32 ptcb_bitx :: Vint32 i2 :: nil)
          os_rdy_tbl (ptcb_prio, rdy, xm))
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, rdy, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, rdy, Vnull))
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               os_rdy_tbl (cur_prio, rdy, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, rdy, Vnull)
                     tcbls_r´ tcbls_r)
  (Hif_false : Int.eq (x&$ OS_MUTEX_KEEP_LOWER_8) cur_prio = false)
  (Hnocur : Int.eq cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8) = false)
  (H_cur_prio_scope : Int.unsigned cur_prio < 64)
  (Hx_scope1 : Int.unsigned (x>>ᵢ$ 8) < 64)
  (Hif_can_lift1 : ptcb_prio <> x>>ᵢ$ 8)
  (Hif_can_lift2 : Int.ltu cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8) = true)
  (v´31 : val)
  (Hptbl_1 : array_type_vallist_match OS_TCB ptbl)
  (Hptbl_2 : length ptbl = 64%nat)
  (H15 : RL_RTbl_PrioTbl_P os_rdy_tbl ptbl v´53)
  (H51 : R_PrioTbl_P ptbl tcbls v´53)
  (H_pip_is_hold : val_inj
                    (uop_eval
                       (val_inj
                          (bop_eval
                             (nth_val´ (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
                                ptbl) (Vptr v´53) OS_TCB
                             OS_TCB oeq)) oppsite) =
                  Vint32 Int.zero \/
                  val_inj
                    (uop_eval
                       (val_inj
                          (bop_eval
                             (nth_val´ (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
                                ptbl) (Vptr v´53) OS_TCB
                             OS_TCB oeq)) oppsite) = Vnull)
  (H9 : array_type_vallist_match Int8u os_rdy_tbl)
  (H54 : length os_rdy_tbl = OS_RDY_TBL_SIZE)
  (H52 : rule_type_val_match Int8u v´39 = true)
  (H53 : RL_Tbl_Grp_P os_rdy_tbl v´39)
  (H55 : prio_in_tbl ($ OS_IDLE_PRIO) os_rdy_tbl)
  (Hptcb_tcby : ptcb_tcby = ptcb_prio>>ᵢ$ 3)
  (Hptcb_bitx : ptcb_bitx = $ 1<<(ptcb_prio&$ 7))
  (Hptcb_tcby_scope : Int.unsigned (ptcb_prio>>ᵢ$ 3) < 8)
  (Hptcb_bitx_scope : Int.unsigned (ptcb_prio>>ᵢ$ 3) < 8)
  (Hif_false : val_inj
                (val_eq
                   (val_inj
                      (and
                         (nth_val´ (Z.to_nat (Int.unsigned ptcb_tcby))
                            os_rdy_tbl) (Vint32 ptcb_bitx)))
                   (V$0)) = Vint32 Int.zero \/
              val_inj
                (val_eq
                   (val_inj
                      (and
                         (nth_val´ (Z.to_nat (Int.unsigned ptcb_tcby))
                            os_rdy_tbl) (Vint32 ptcb_bitx)))
                   (V$0)) = Vnull)
  (Hgetlast:
     get_last_tcb_ptr v´34 x0 = Some (Vptr (ptcb_addr,Int.zero)))
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{ <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil) **
     GAarray OSTCBPrioTbl (Tarray OS_TCB 64)
       (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
          (update_nth_val (Z.to_nat (Int.unsigned ptcb_prio)) ptbl
             (Vptr v´53)) (Vptr (ptcb_addr, Int.zero))) **
     PV v´53 @ Int8u |-> v´31 **
     Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x10
              :: xm
                 :: Vint32 i11
                    :: Vint32 ptcb_stat
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 ptcb_tcby
                                :: Vint32 ptcb_bitx :: Vint32 i2 :: nil) **
     tcbdllseg x0 (Vptr (cur_addr, Int.zero)) v´43
       (Vptr (ptcb_addr, Int.zero)) v´34 **
     tcbdllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´42 Vnull v´36 **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     dllseg v´33 Vnull v´26 (Vptr (cur_addr, Int.zero)) v´35 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE) os_rdy_tbl **
     GV OSRdyGrp @ Int8u |-> v´39 **
     G&OSPlaceHolder @ Int8u == v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero)}}
   OSRdyTbl [ptcb OSTCBY] &= ptcb OSTCBBitX;ₛ
   If(OSRdyTbl [ptcb OSTCBY] ==ₑ 0)
        {OSRdyGrp &= ptcb OSTCBBitY} ;ₛ
   ptcb OSTCBPrio =ₑ pip ;ₛ
   ptcb OSTCBY =ₑ ptcb OSTCBPrio 3;ₛ
   ptcb OSTCBBitY =ₑ OSMapTbl [ptcb OSTCBY];ₛ
   ptcb OSTCBX =ₑ ptcb OSTCBPrio &ₑ 7;ₛ
   ptcb OSTCBBitX =ₑ OSMapTbl [ptcb OSTCBX];ₛ
   OSRdyGrp =ₑ OSRdyGrp |ₑ ptcb OSTCBBitY;ₛ
   OSRdyTbl [ptcb OSTCBY] =ₑ
   OSRdyTbl [ptcb OSTCBY] |ₑ ptcb OSTCBBitX;ₛ
   OSTCBCur OSTCBStat =ₑ OS_STAT_MUTEX;ₛ
   OSTCBCur OSTCBDly =ₑ timeout ;ₛ
   OS_EventTaskWait pevent ­);ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   ENTER_CRITICAL;ₛ
   If(OSTCBCur OSTCBMsg !=ₑ NULL)
        {EXIT_CRITICAL;ₛ
        RETURN OS_NO_ERR} ;ₛ
   EXIT_CRITICAL;ₛ
   RETURN OS_TIMEOUT {{Afalse}}
.

Definition gen_mutex_pend_can_not_lift_right_to_cur:= forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (v´32 : vallist)
  (v´33 : val)
  (v´35 : list vallist)
  (v´38 : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (Htcblist_subl : TCBList_P v´33 v´35 v´38 tcbls_l)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (x0 : val)
  (tcbls_r´ : TcbMod.map)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Fneq_i2_1 : Int.unsigned (x>>ᵢ$ 8) <= 255)
  (Fneq_i2_2 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) <= 255)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Feq_i2_1 : x>>ᵢ$ 8 = Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (H12 : isptr x0)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_r´)
  (Htcblist_sub_left : TCBList_P x0 v´34 v´38 tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 v´38 tcbls_sub_r)
  (ptcb_addr : block)
  (x10 : val)
  (H31 : isptr x10)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (ptcb_stat : int32)
  (H44 : Int.unsigned ptcb_stat <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (i7 : int32)
  (H47 : Int.unsigned i7 <= 255)
  (i6 : int32)
  (H48 : Int.unsigned i6 <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H27 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (Htcblist_subr : TCBList_P x0
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x10
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 ptcb_stat
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 i7
                                              :: Vint32 i6
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    v´38 tcbls_r´)
  (H17 : RL_TCBblk_P
          (v´45
           :: v´43
              :: x10
                 :: xm
                    :: Vint32 i11
                       :: Vint32 ptcb_stat
                          :: Vint32 ptcb_prio
                             :: Vint32 i8
                                :: Vint32 i7 :: Vint32 i6 :: Vint32 i2 :: nil))
  (Hptcb_prio_not_idle : ptcb_prio <> $ OS_IDLE_PRIO)
  (Hptcb_prio_scope_obv : 0 <= Int.unsigned ptcb_prio)
  (Hptcb_prio_scope : Int.unsigned ptcb_prio < 64)
  (Hif_ptcb_is_rdy1 : ptcb_stat = $ OS_STAT_RDY)
  (Hif_ptcb_is_rdy2 : i11 = $ 0)
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, rdy, xm))
  (H_ptcb_in_right : TcbMod.get tcbls_r´ (ptcb_addr, Int.zero) =
                    Some (ptcb_prio, rdy, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, rdy, xm) tcbls_sub_r v´52)
  (Hptcb_node : TCBNode_P
                 (v´45
                  :: v´43
                     :: x10
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 i7
                                          :: Vint32 i6 :: Vint32 i2 :: nil)
                 v´38 (ptcb_prio, rdy, xm))
  (H50 : R_TCB_Status_P
          (v´45
           :: v´43
              :: x10
                 :: xm
                    :: Vint32 i11
                       :: Vint32 ptcb_stat
                          :: Vint32 ptcb_prio
                             :: Vint32 i8
                                :: Vint32 i7 :: Vint32 i6 :: Vint32 i2 :: nil)
          v´38 (ptcb_prio, rdy, xm))
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, rdy, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, rdy, Vnull))
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               v´38 (cur_prio, rdy, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, rdy, Vnull)
                     tcbls_r´ tcbls_r)
  (Hif_false : Int.eq (x&$ OS_MUTEX_KEEP_LOWER_8) cur_prio = false)
  (Hnocur : Int.eq cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8) = false)
  (H_cur_prio_scope : Int.unsigned cur_prio < 64)
  (Hx_scope1 : Int.unsigned (x>>ᵢ$ 8) < 64)
  (LHif_false : val_inj
                 (bool_and
                    (val_inj
                       (notint
                          (val_inj
                             (if Int.eq ptcb_prio (x>>ᵢ$ 8)
                              then Some (Vint32 Int.one)
                              else Some (Vint32 Int.zero)))))
                    (val_inj
                       (if Int.ltu cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8)
                        then Some (Vint32 Int.one)
                        else Some (Vint32 Int.zero)))) =
               Vint32 Int.zero \/
               val_inj
                 (bool_and
                    (val_inj
                       (notint
                          (val_inj
                             (if Int.eq ptcb_prio (x>>ᵢ$ 8)
                              then Some (Vint32 Int.one)
                              else Some (Vint32 Int.zero)))))
                    (val_inj
                       (if Int.ltu cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8)
                        then Some (Vint32 Int.one)
                        else Some (Vint32 Int.zero)))) = Vnull)
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x10
              :: xm
                 :: Vint32 i11
                    :: Vint32 ptcb_stat
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 i7 :: Vint32 i6 :: Vint32 i2 :: nil) **
     tcbdllseg x0 (Vptr (cur_addr, Int.zero)) v´43
       (Vptr (ptcb_addr, Int.zero)) v´34 **
     tcbdllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´42 Vnull v´36 **
      <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     dllseg v´33 Vnull v´26 (Vptr (cur_addr, Int.zero)) v´35 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     AOSRdyTblGrp v´38 v´39 **
     AOSTCBPrioTbl v´32 v´38 tcbls v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero) **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)}}
   OSTCBCur OSTCBStat =ₑ OS_STAT_MUTEX;ₛ
   OSTCBCur OSTCBDly =ₑ timeout ;ₛ
   OS_EventTaskWait pevent ­);ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   ENTER_CRITICAL;ₛ
   If(OSTCBCur OSTCBMsg !=ₑ NULL)
        {EXIT_CRITICAL;ₛ
        RETURN OS_NO_ERR} ;ₛ
   EXIT_CRITICAL;ₛ
   RETURN OS_TIMEOUT {{Afalse}}
 .

Definition gen_mutex_pend_part_0:=
  forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H : RH_TCBList_ECBList_P v´18 v´19 v´21)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (v´32 : vallist)
  (v´33 : val)
  (v´35 : list vallist)
  (v´37 : list vallist)
  (v´38 : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (v´41 : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 v´41)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (v´31 : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x2 : val)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (i2 : int32)
  (H23 : Int.unsigned i2 <= 65535)
  (H24 : isptr x2)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (v´31, Int.zero)) v´27 v´29 v´49 v´41)
  (H2 : isptr (Vptr (v´31, Int.zero)))
  (H16 : id_addrval´ (Vptr (v´31, Int.zero)) OSEventTbl OS_EVENT = Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (x : int32)
  (x0 : owner)
  (x1 : waitset)
  (H17 : MatchMutexSem (Vint32 i2) x2 x x0)
  (H8 : EcbMod.joinsig (v´31, Int.zero) (absmutexsem x x0, x1) v´50 v´51)
  (Hget : EcbMod.get v´40 (v´31, Int.zero) = Some (absmutexsem x x0, x1))
  (H26 : RH_ECB_P (absmutexsem x x0, x1))
  (H6 : RLH_ECBData_P (DMutex (Vint32 i2) x2) (absmutexsem x x0, x1))
  (v´26 : val)
  (v´42 : val)
  (v´45 : TcbMod.map)
  (v´47 : TcbMod.map)
  (v´52 : val)
  (v´54 : block)
  (H29 : v´33 <> Vnull)
  (H30 : TcbMod.join v´45 v´47 v´41)
  (H31 : TCBList_P v´33 v´35 v´38 v´45)
  (H28 : Vptr (v´54, Int.zero) <> Vnull)
  (x11 : val)
  (x12 : val)
  (H35 : isptr x12)
  (H36 : isptr x11)
  (i6 : int32)
  (H39 : Int.unsigned i6 <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H12 : isptr v´52)
  (H9 : RH_TCBList_ECBList_P v´40 v´41 (v´54, Int.zero))
  (H10 : RH_CurTCB (v´54, Int.zero) v´41)
  (st : taskstatus)
  (Hgetcur_subr : TcbMod.get v´47 (v´54, Int.zero) = Some (i6, st, x11))
  (Hgetcur : TcbMod.get v´41 (v´54, Int.zero) = Some (i6, st, x11))
  (Hneq_idle : i6 <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H15 : x11 = Vnull)
  (H7 : R_ECB_ETbl_P (v´31, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0 :: Vint32 i2 :: x2 :: x3 :: v´48 :: nil, v´46) v´41)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0 :: Vint32 i2 :: x2 :: x3 :: v´48 :: nil, v´46)
           :: nil) ++ v´28) (v´29 ++ (DMutex (Vint32 i2) x2 :: nil) ++ v´30)
         v´40 v´41)
  (H32 : TCBList_P (Vptr (v´54, Int.zero))
          ((v´52
            :: v´26
               :: x12
                  :: x11
                     :: V$0
                        :: V$OS_STAT_RDY
                           :: Vint32 i6
                              :: Vint32 i5
                                 :: Vint32 i4
                                    :: Vint32 i3 :: Vint32 i1 :: nil) :: v´37)
          v´38 v´47)
  (Hcurnode : TCBNode_P
               (v´52
                :: v´26
                   :: x12
                      :: x11
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 i6
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               v´38 (i6, st, x11)),
   {|OSQ_spec, GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{Astruct (v´54, Int.zero) OS_TCB
       (v´52
        :: v´26
           :: x12
              :: x11
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 i6
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     dllseg v´52 (Vptr (v´54, Int.zero)) v´42 Vnull v´37 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     dllseg v´33 Vnull v´26 (Vptr (v´54, Int.zero)) v´35 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBCur @ OS_TCB |-> Vptr (v´54, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0 :: Vint32 i2 :: x2 :: x3 :: v´48 :: nil)
       (DMutex (Vint32 i2) x2) **
     Astruct (v´31, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0 :: Vint32 i2 :: x2 :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (v´31, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     AOSRdyTblGrp v´38 v´39 **
     AOSTCBPrioTbl v´32 v´38 v´41 v´53 **
     HECBList v´40 **
     HTCBList v´41 **
     HCurTCB (v´54, Int.zero) **
      <|| mutexpend (Vptr (v´31, Int.zero) :: Vint32 i :: nil) ||> **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV ptcb @ OS_TCB |-> v´3 **
     LV isrdy @ Int8u |-> v´2 **
     LV mprio @ Int8u |-> v´1 **
     LV pip @ Int8u |-> v´0 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (v´31, Int.zero) **
     A_dom_lenv
     ((timeout, Int16u)
        :: (pevent, OS_EVENT )
        :: (legal, Int8u)
        :: (pip, Int8u)
        :: (mprio, Int8u)
        :: (isrdy, Int8u)
        :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)}}
        pip =ₑ Int8u〉(peventOSEventCnt 8);ₛ
        If (OSTCBCurOSTCBPrio <ₑ pip ||ₑ (OSTCBCurOSTCBPrio ==ₑ pip)){
            EXIT_CRITICAL;ₛ
            RETURN OS_ERR_MUTEX_PRIO
        };ₛ
        mprio =ₑ Int8u〉(peventOSEventCnt &ₑ OS_MUTEX_KEEP_LOWER_8);ₛ
        ptcb =ₑ peventOSEventPtr;ₛ
       
        If (mprio ==ₑ OS_MUTEX_AVAILABLE) {
            peventOSEventCnt =ₑ peventOSEventCnt &ₑ OS_MUTEX_KEEP_UPPER_8;ₛ
            peventOSEventCnt =ₑ peventOSEventCnt |ₑ OSTCBCurOSTCBPrio;ₛ
            peventOSEventPtr =ₑ OSTCBCur;ₛ
            
            EXIT_CRITICAL;ₛ
            RETURN OS_NO_ERR
        };ₛ

        If(ptcb ==ₑ OSTCBCur){
          EXIT_CRITICAL;ₛ
          RETURN OS_ERR_MUTEX_DEADLOCK
        };ₛ
        If(ptcbOSTCBPrio ==ₑ OS_IDLE_PRIO){
          EXIT_CRITICAL;ₛ
          RETURN OS_ERR_MUTEX_IDLE
        };ₛ
        If ( (ptcbOSTCBStat !=ₑ OS_STAT_RDY) ||ₑ (ptcbOSTCBDly !=ₑ 0)){
            EXIT_CRITICAL;ₛ
            RETURN OS_ERR_NEST
        };ₛ
        If(mprio ==ₑ (OSTCBCurOSTCBPrio)){
          EXIT_CRITICAL;ₛ
          RETURN OS_ERR_MUTEX_DEADLOCK
        };ₛ

        IF ((ptcbOSTCBPrio !=ₑ pip) &&ₑ (mprio >ₑ (OSTCBCurOSTCBPrio))){
            If ( OSTCBPrioTbl[pip] !=ₑ OS_TCB PlaceHolder){
                EXIT_CRITICAL;ₛ
                RETURN OS_ERR_MUTEXPR_NOT_HOLDER
            };ₛ
            OSTCBPrioTbl[ ptcbOSTCBPrio ] =ₑ OS_TCB PlaceHolder;ₛ
            OSTCBPrioTbl[pip] =ₑ OS_TCB ptcb;ₛ

            OSRdyTbl[ptcbOSTCBY] =ₑ OSRdyTbl[ptcbOSTCBY]&ₑ(ptcbOSTCBBitX);ₛ
            If (OSRdyTbl[ptcbOSTCBY] ==ₑ 0)
            {
                OSRdyGrp =ₑ OSRdyGrp &ₑ (ptcbOSTCBBitY)
            };ₛ
            ptcbOSTCBPrio =ₑ pip;ₛ
            ptcbOSTCBY =ₑ ptcbOSTCBPrio 3;ₛ
            ptcbOSTCBBitY =ₑ OSMapTbl[ptcbOSTCBY];ₛ
            ptcbOSTCBX =ₑ (ptcbOSTCBPrio) &ₑ 7;ₛ
            ptcbOSTCBBitX =ₑ OSMapTbl[ptcbOSTCBX];ₛ
            OSRdyGrp =ₑ OSRdyGrp |ₑ ptcbOSTCBBitY;ₛ
            OSRdyTbl[ptcbOSTCBY] =ₑ OSRdyTbl[ptcbOSTCBY] |ₑ ptcbOSTCBBitX;ₛ

            OSTCBCurOSTCBStat =ₑ OS_STAT_MUTEX;ₛ
            OSTCBCurOSTCBDly =ₑ timeout;ₛ
            OS_EventTaskWaitpevent­);ₛ
            EXIT_CRITICAL;ₛ

            OS_Sched(­);ₛ
            ENTER_CRITICAL;ₛ
            If (OSTCBCurOSTCBMsg !=ₑ NULL){
                EXIT_CRITICAL;ₛ
                RETURN OS_NO_ERR
            };ₛ
            EXIT_CRITICAL;ₛ
            RETURN OS_TIMEOUT
        } ELSE {
            OSTCBCurOSTCBStat =ₑ OS_STAT_MUTEX;ₛ
            OSTCBCurOSTCBDly =ₑ timeout;ₛ
            OS_EventTaskWaitpevent­);ₛ
            EXIT_CRITICAL;ₛ
            OS_Sched(­);ₛ
            ENTER_CRITICAL;ₛ
            If (OSTCBCurOSTCBMsg !=ₑ NULL){
                EXIT_CRITICAL;ₛ
                RETURN OS_NO_ERR
            };ₛ
            EXIT_CRITICAL;ₛ
            RETURN OS_TIMEOUT
        } {{Afalse}}.

Definition gen_mutex_pend_ptcb_is_cur_err:= forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (v´32 : vallist)
  (v´33 : val)
  (v´35 : list vallist)
  (v´37 : list vallist)
  (v´38 : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (Htcblist_subl : TCBList_P v´33 v´35 v´38 tcbls_l)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (st : taskstatus)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, st, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, st, Vnull))
  (x0 : val)
  (x2 : TcbMod.map)
  (Htcblist_subr : TCBList_P x0 v´37 v´38 x2)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Fneq_i2_1 : Int.unsigned (x>>ᵢ$ 8) <= 255)
  (Fneq_i2_2 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) <= 255)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Feq_i2_1 : x>>ᵢ$ 8 = Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_tid : addrval)
  (H24 : isptr (Vptr ptcb_tid))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0 :: Vint32 x :: Vptr ptcb_tid :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0 :: Vint32 x :: Vptr ptcb_tid :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++ (DMutex (Vint32 x) (Vptr ptcb_tid) :: nil) ++ v´30) v´40
         tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (ptcb_tid, x&$ OS_MUTEX_KEEP_LOWER_8)),
         wls) v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_tid, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8) (Some (ptcb_tid, x&$ OS_MUTEX_KEEP_LOWER_8)),
          wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr ptcb_tid))
         (absmutexsem (x>>ᵢ$ 8) (Some (ptcb_tid, x&$ OS_MUTEX_KEEP_LOWER_8)),
         wls))
  (ptcb_prio : priority)
  (xm : msg)
  (xs : taskstatus)
  (H_ptcb : TcbMod.get tcbls ptcb_tid = Some (ptcb_prio, xs, xm))
  (H12 : isptr x0)
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               v´38 (cur_prio, st, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, st, Vnull) x2
                     tcbls_r)
  (LHift_true : val_inj
                 (let (b, ofs) := ptcb_tid in
                  if peq b cur_addr
                  then
                   if Int.eq ofs Int.zero
                   then Some (Vint32 Int.one)
                   else Some (Vint32 Int.zero)
                  else Some (Vint32 Int.zero)) <> Vint32 Int.zero /\
               val_inj
                 (let (b, ofs) := ptcb_tid in
                  if peq b cur_addr
                  then
                   if Int.eq ofs Int.zero
                   then Some (Vint32 Int.one)
                   else Some (Vint32 Int.zero)
                  else Some (Vint32 Int.zero)) <> Vnull /\
               val_inj
                 (let (b, ofs) := ptcb_tid in
                  if peq b cur_addr
                  then
                   if Int.eq ofs Int.zero
                   then Some (Vint32 Int.one)
                   else Some (Vint32 Int.zero)
                  else Some (Vint32 Int.zero)) <> Vundef)
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{ <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     LV ptcb @ OS_TCB |-> Vptr ptcb_tid **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     dllseg x0 (Vptr (cur_addr, Int.zero)) v´42 Vnull v´37 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     dllseg v´33 Vnull v´26 (Vptr (cur_addr, Int.zero)) v´35 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0 :: Vint32 x :: Vptr ptcb_tid :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr ptcb_tid)) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0 :: Vint32 x :: Vptr ptcb_tid :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     AOSRdyTblGrp v´38 v´39 **
     AOSTCBPrioTbl v´32 v´38 tcbls v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero) **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)}}
   EXIT_CRITICAL;ₛ
   RETURN OS_ERR_MUTEX_DEADLOCK {{Afalse}}
.

Definition gen_mutex_pend_ptcb_is_idle_err_left_to_cur:= forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (v´32 : vallist)
  (v´33 : val)
  (v´37 : list vallist)
  (v´38 : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (st : taskstatus)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, st, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, st, Vnull))
  (x0 : val)
  (x2 : TcbMod.map)
  (Htcblist_subr : TCBList_P x0 v´37 v´38 x2)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Fneq_i2_1 : Int.unsigned (x>>ᵢ$ 8) <= 255)
  (Fneq_i2_2 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) <= 255)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Feq_i2_1 : x>>ᵢ$ 8 = Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (xs : taskstatus)
  (H12 : isptr x0)
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               v´38 (cur_prio, st, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, st, Vnull) x2
                     tcbls_r)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_l)
  (Htcblist_sub_left : TCBList_P v´33 v´34 v´38 tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 v´38 tcbls_sub_r)
  (ptcb_addr : block)
  (x11 : val)
  (H31 : isptr x11)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (i10 : int32)
  (H44 : Int.unsigned i10 <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (i7 : int32)
  (H47 : Int.unsigned i7 <= 255)
  (i6 : int32)
  (H48 : Int.unsigned i6 <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H17 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, xs, xm))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (H_ptcb_in_left : TcbMod.get tcbls_l (ptcb_addr, Int.zero) =
                   Some (ptcb_prio, xs, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, xs, xm) tcbls_sub_r v´52)
  (Hget_last_tcb : get_last_tcb_ptr v´34 v´33 =
                  Some (Vptr (ptcb_addr, Int.zero)))
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (Hptcb_node : TCBNode_P
                 (v´45
                  :: v´43
                     :: x11
                        :: xm
                           :: Vint32 i11
                              :: Vint32 i10
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 i7
                                          :: Vint32 i6 :: Vint32 i2 :: nil)
                 v´38 (ptcb_prio, xs, xm))
  (Htcblist_subl : TCBList_P v´33
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x11
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 i10
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 i7
                                              :: Vint32 i6
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    v´38 tcbls_l)
  (Hptcb_blk : RL_TCBblk_P
                (v´45
                 :: v´43
                    :: x11
                       :: xm
                          :: Vint32 i11
                             :: Vint32 i10
                                :: Vint32 ptcb_prio
                                   :: Vint32 i8
                                      :: Vint32 i7
                                         :: Vint32 i6 :: Vint32 i2 :: nil))
  (Hptcb_stat : R_TCB_Status_P
                 (v´45
                  :: v´43
                     :: x11
                        :: xm
                           :: Vint32 i11
                              :: Vint32 i10
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 i7
                                          :: Vint32 i6 :: Vint32 i2 :: nil)
                 v´38 (ptcb_prio, xs, xm))
  (LHift_true : Int.eq ptcb_prio ($ OS_IDLE_PRIO) = true)
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x11
              :: xm
                 :: Vint32 i11
                    :: Vint32 i10
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 i7 :: Vint32 i6 :: Vint32 i2 :: nil) **
     tcbdllseg v´33 Vnull v´43 (Vptr (ptcb_addr, Int.zero)) v´34 **
     tcbdllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´26
       (Vptr (cur_addr, Int.zero)) v´36 **
      <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     dllseg x0 (Vptr (cur_addr, Int.zero)) v´42 Vnull v´37 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     AOSRdyTblGrp v´38 v´39 **
     AOSTCBPrioTbl v´32 v´38 tcbls v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero) **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)}}
   EXIT_CRITICAL;ₛ
   RETURN OS_ERR_MUTEX_IDLE {{Afalse}}
.

Definition gen_mutex_pend_ptcb_is_not_rdy_left_to_cur:= forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (v´32 : vallist)
  (v´33 : val)
  (v´37 : list vallist)
  (v´38 : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (st : taskstatus)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, st, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, st, Vnull))
  (x0 : val)
  (x2 : TcbMod.map)
  (Htcblist_subr : TCBList_P x0 v´37 v´38 x2)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Fneq_i2_1 : Int.unsigned (x>>ᵢ$ 8) <= 255)
  (Fneq_i2_2 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) <= 255)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Feq_i2_1 : x>>ᵢ$ 8 = Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (xs : taskstatus)
  (H12 : isptr x0)
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               v´38 (cur_prio, st, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, st, Vnull) x2
                     tcbls_r)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_l)
  (Htcblist_sub_left : TCBList_P v´33 v´34 v´38 tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 v´38 tcbls_sub_r)
  (ptcb_addr : block)
  (x11 : val)
  (H31 : isptr x11)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (ptcb_stat : int32)
  (H44 : Int.unsigned ptcb_stat <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (i7 : int32)
  (H47 : Int.unsigned i7 <= 255)
  (i6 : int32)
  (H48 : Int.unsigned i6 <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H17 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, xs, xm))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (H_ptcb_in_left : TcbMod.get tcbls_l (ptcb_addr, Int.zero) =
                   Some (ptcb_prio, xs, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, xs, xm) tcbls_sub_r v´52)
  (Hget_last_tcb : get_last_tcb_ptr v´34 v´33 =
                  Some (Vptr (ptcb_addr, Int.zero)))
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (Hptcb_node : TCBNode_P
                 (v´45
                  :: v´43
                     :: x11
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 i7
                                          :: Vint32 i6 :: Vint32 i2 :: nil)
                 v´38 (ptcb_prio, xs, xm))
  (Htcblist_subl : TCBList_P v´33
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x11
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 ptcb_stat
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 i7
                                              :: Vint32 i6
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    v´38 tcbls_l)
  (Hptcb_blk : RL_TCBblk_P
                (v´45
                 :: v´43
                    :: x11
                       :: xm
                          :: Vint32 i11
                             :: Vint32 ptcb_stat
                                :: Vint32 ptcb_prio
                                   :: Vint32 i8
                                      :: Vint32 i7
                                         :: Vint32 i6 :: Vint32 i2 :: nil))
  (Hptcb_stat : R_TCB_Status_P
                 (v´45
                  :: v´43
                     :: x11
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 i7
                                          :: Vint32 i6 :: Vint32 i2 :: nil)
                 v´38 (ptcb_prio, xs, xm))
  (Hptcb_prio_not_idle : ptcb_prio <> $ OS_IDLE_PRIO)
  (Hptcb_prio_scope_obv : 0 <= Int.unsigned ptcb_prio)
  (Hptcb_prio_scope : Int.unsigned ptcb_prio < 64)
  (Hif_ptcb_is_not_rdy : ptcb_stat <> $ OS_STAT_RDY \/ i11 <> $ 0)
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x11
              :: xm
                 :: Vint32 i11
                    :: Vint32 ptcb_stat
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 i7 :: Vint32 i6 :: Vint32 i2 :: nil) **
     tcbdllseg v´33 Vnull v´43 (Vptr (ptcb_addr, Int.zero)) v´34 **
     tcbdllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´26
       (Vptr (cur_addr, Int.zero)) v´36 **
      <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     dllseg x0 (Vptr (cur_addr, Int.zero)) v´42 Vnull v´37 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     AOSRdyTblGrp v´38 v´39 **
     AOSTCBPrioTbl v´32 v´38 tcbls v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero) **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)}}
   EXIT_CRITICAL;ₛ
   RETURN OS_ERR_NEST {{Afalse}}
.

Definition gen_mutex_pend_cur_prio_eql_mprio_left_to_cur:= forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (v´32 : vallist)
  (v´33 : val)
  (v´37 : list vallist)
  (os_rdy_tbl : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (x0 : val)
  (x2 : TcbMod.map)
  (Htcblist_subr : TCBList_P x0 v´37 os_rdy_tbl x2)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Fneq_i2_1 : Int.unsigned (x>>ᵢ$ 8) <= 255)
  (Fneq_i2_2 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) <= 255)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Feq_i2_1 : x>>ᵢ$ 8 = Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (H12 : isptr x0)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_l)
  (Htcblist_sub_left : TCBList_P v´33 v´34 os_rdy_tbl tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 os_rdy_tbl tcbls_sub_r)
  (ptcb_addr : block)
  (x11 : val)
  (H31 : isptr x11)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (ptcb_stat : int32)
  (H44 : Int.unsigned ptcb_stat <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (ptcb_tcby : int32)
  (H47 : Int.unsigned ptcb_tcby <= 255)
  (ptcb_bitx : int32)
  (H48 : Int.unsigned ptcb_bitx <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H17 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (Hget_last_tcb : get_last_tcb_ptr v´34 v´33 =
                  Some (Vptr (ptcb_addr, Int.zero)))
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (Htcblist_subl : TCBList_P v´33
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x11
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 ptcb_stat
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 ptcb_tcby
                                              :: Vint32 ptcb_bitx
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    os_rdy_tbl tcbls_l)
  (Hptcb_blk : RL_TCBblk_P
                (v´45
                 :: v´43
                    :: x11
                       :: xm
                          :: Vint32 i11
                             :: Vint32 ptcb_stat
                                :: Vint32 ptcb_prio
                                   :: Vint32 i8
                                      :: Vint32 ptcb_tcby
                                         :: Vint32 ptcb_bitx
                                            :: Vint32 i2 :: nil))
  (Hptcb_prio_not_idle : ptcb_prio <> $ OS_IDLE_PRIO)
  (Hptcb_prio_scope_obv : 0 <= Int.unsigned ptcb_prio)
  (Hptcb_prio_scope : Int.unsigned ptcb_prio < 64)
  (Hif_ptcb_is_rdy1 : ptcb_stat = $ OS_STAT_RDY)
  (Hif_ptcb_is_rdy2 : i11 = $ 0)
  (Hrtbl_type : array_type_vallist_match Int8u os_rdy_tbl)
  (Hrtbl_len : length os_rdy_tbl = OS_RDY_TBL_SIZE)
  (Hgrp1 : RL_Tbl_Grp_P os_rdy_tbl v´39)
  (Hgrp2 : prio_in_tbl ($ OS_IDLE_PRIO) os_rdy_tbl)
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, rdy, xm))
  (H_ptcb_in_left : TcbMod.get tcbls_l (ptcb_addr, Int.zero) =
                   Some (ptcb_prio, rdy, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, rdy, xm) tcbls_sub_r v´52)
  (Hptcb_node : TCBNode_P
                 (v´45
                  :: v´43
                     :: x11
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 ptcb_tcby
                                          :: Vint32 ptcb_bitx
                                             :: Vint32 i2 :: nil) os_rdy_tbl
                 (ptcb_prio, rdy, xm))
  (Hptcb_stat : R_TCB_Status_P
                 (v´45
                  :: v´43
                     :: x11
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 ptcb_tcby
                                          :: Vint32 ptcb_bitx
                                             :: Vint32 i2 :: nil) os_rdy_tbl
                 (ptcb_prio, rdy, xm))
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, rdy, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, rdy, Vnull))
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               os_rdy_tbl (cur_prio, rdy, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, rdy, Vnull) x2
                     tcbls_r)
  (Hcur_prio_eql_mprio : Int.eq (x&$ OS_MUTEX_KEEP_LOWER_8) cur_prio = true)
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x11
              :: xm
                 :: Vint32 i11
                    :: Vint32 ptcb_stat
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 ptcb_tcby
                                :: Vint32 ptcb_bitx :: Vint32 i2 :: nil) **
     tcbdllseg v´33 Vnull v´43 (Vptr (ptcb_addr, Int.zero)) v´34 **
     tcbdllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´26
       (Vptr (cur_addr, Int.zero)) v´36 **
      <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     dllseg x0 (Vptr (cur_addr, Int.zero)) v´42 Vnull v´37 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     AOSRdyTblGrp os_rdy_tbl v´39 **
     AOSTCBPrioTbl v´32 os_rdy_tbl tcbls v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero) **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)}}
   EXIT_CRITICAL;ₛ
   RETURN OS_ERR_MUTEX_DEADLOCK {{Afalse}}
.

Definition gen_mutex_pend_pip_is_not_hold_left_to_cur:= forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (ptbl : vallist)
  (v´33 : val)
  (v´37 : list vallist)
  (os_rdy_tbl : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (x0 : val)
  (x2 : TcbMod.map)
  (Htcblist_subr : TCBList_P x0 v´37 os_rdy_tbl x2)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Fneq_i2_1 : Int.unsigned (x>>ᵢ$ 8) <= 255)
  (Fneq_i2_2 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) <= 255)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Feq_i2_1 : x>>ᵢ$ 8 = Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (H12 : isptr x0)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_l)
  (Htcblist_sub_left : TCBList_P v´33 v´34 os_rdy_tbl tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 os_rdy_tbl tcbls_sub_r)
  (ptcb_addr : block)
  (x11 : val)
  (H31 : isptr x11)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (ptcb_stat : int32)
  (H44 : Int.unsigned ptcb_stat <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (ptcb_tcby : int32)
  (H47 : Int.unsigned ptcb_tcby <= 255)
  (ptcb_bitx : int32)
  (H48 : Int.unsigned ptcb_bitx <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H17 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (Hget_last_tcb : get_last_tcb_ptr v´34 v´33 =
                  Some (Vptr (ptcb_addr, Int.zero)))
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (Htcblist_subl : TCBList_P v´33
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x11
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 ptcb_stat
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 ptcb_tcby
                                              :: Vint32 ptcb_bitx
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    os_rdy_tbl tcbls_l)
  (Hptcb_blk : RL_TCBblk_P
                (v´45
                 :: v´43
                    :: x11
                       :: xm
                          :: Vint32 i11
                             :: Vint32 ptcb_stat
                                :: Vint32 ptcb_prio
                                   :: Vint32 i8
                                      :: Vint32 ptcb_tcby
                                         :: Vint32 ptcb_bitx
                                            :: Vint32 i2 :: nil))
  (Hptcb_prio_not_idle : ptcb_prio <> $ OS_IDLE_PRIO)
  (Hptcb_prio_scope_obv : 0 <= Int.unsigned ptcb_prio)
  (Hptcb_prio_scope : Int.unsigned ptcb_prio < 64)
  (Hif_ptcb_is_rdy1 : ptcb_stat = $ OS_STAT_RDY)
  (Hif_ptcb_is_rdy2 : i11 = $ 0)
  (Hrtbl_type : array_type_vallist_match Int8u os_rdy_tbl)
  (Hrtbl_len : length os_rdy_tbl = OS_RDY_TBL_SIZE)
  (Hgrp1 : RL_Tbl_Grp_P os_rdy_tbl v´39)
  (Hgrp2 : prio_in_tbl ($ OS_IDLE_PRIO) os_rdy_tbl)
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, rdy, xm))
  (H_ptcb_in_left : TcbMod.get tcbls_l (ptcb_addr, Int.zero) =
                   Some (ptcb_prio, rdy, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, rdy, xm) tcbls_sub_r v´52)
  (Hptcb_node : TCBNode_P
                 (v´45
                  :: v´43
                     :: x11
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 ptcb_tcby
                                          :: Vint32 ptcb_bitx
                                             :: Vint32 i2 :: nil) os_rdy_tbl
                 (ptcb_prio, rdy, xm))
  (Hptcb_stat : R_TCB_Status_P
                 (v´45
                  :: v´43
                     :: x11
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 ptcb_tcby
                                          :: Vint32 ptcb_bitx
                                             :: Vint32 i2 :: nil) os_rdy_tbl
                 (ptcb_prio, rdy, xm))
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, rdy, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, rdy, Vnull))
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               os_rdy_tbl (cur_prio, rdy, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, rdy, Vnull) x2
                     tcbls_r)
  (Hif_false : Int.eq (x&$ OS_MUTEX_KEEP_LOWER_8) cur_prio = false)
  (Hnocur : Int.eq cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8) = false)
  (H_cur_prio_scope : Int.unsigned cur_prio < 64)
  (Hx_scope1 : Int.unsigned (x>>ᵢ$ 8) < 64)
  (Hif_can_lift1 : ptcb_prio <> x>>ᵢ$ 8)
  (Hif_can_lift2 : Int.ltu cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8) = true)
  (v´31 : val)
  (Hptbl_1 : array_type_vallist_match OS_TCB ptbl)
  (Hptbl_2 : length ptbl = 64%nat)
  (H15 : RL_RTbl_PrioTbl_P os_rdy_tbl ptbl v´53)
  (H27 : R_PrioTbl_P ptbl tcbls v´53)
  (Hif_true : val_inj
               (uop_eval
                  (val_inj
                     (bop_eval
                        (nth_val´ (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) ptbl)
                        (Vptr v´53) OS_TCB OS_TCB oeq)) oppsite) <>
             Vint32 Int.zero /\
             val_inj
               (uop_eval
                  (val_inj
                     (bop_eval
                        (nth_val´ (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) ptbl)
                        (Vptr v´53) OS_TCB OS_TCB oeq)) oppsite) <> Vnull /\
             val_inj
               (uop_eval
                  (val_inj
                     (bop_eval
                        (nth_val´ (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) ptbl)
                        (Vptr v´53) OS_TCB OS_TCB oeq)) oppsite) <>
             Vundef)
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{PV v´53 @ Int8u |-> v´31 **
     Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x11
              :: xm
                 :: Vint32 i11
                    :: Vint32 ptcb_stat
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 ptcb_tcby
                                :: Vint32 ptcb_bitx :: Vint32 i2 :: nil) **
     tcbdllseg v´33 Vnull v´43 (Vptr (ptcb_addr, Int.zero)) v´34 **
     tcbdllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´26
       (Vptr (cur_addr, Int.zero)) v´36 **
      <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     dllseg x0 (Vptr (cur_addr, Int.zero)) v´42 Vnull v´37 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     AOSRdyTblGrp os_rdy_tbl v´39 **
     GAarray OSTCBPrioTbl (Tarray OS_TCB 64) ptbl **
     G&OSPlaceHolder @ Int8u == v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero) **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)}}
   EXIT_CRITICAL;ₛ
   RETURN OS_ERR_MUTEXPR_NOT_HOLDER {{Afalse}}
.

Definition gen_mutex_pend_ptcb_is_idle_err_right_to_cur:= forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (v´32 : vallist)
  (v´33 : val)
  (v´35 : list vallist)
  (v´38 : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (Htcblist_subl : TCBList_P v´33 v´35 v´38 tcbls_l)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (st : taskstatus)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, st, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, st, Vnull))
  (x0 : val)
  (tcbls_r´ : TcbMod.map)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Fneq_i2_1 : Int.unsigned (x>>ᵢ$ 8) <= 255)
  (Fneq_i2_2 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) <= 255)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Feq_i2_1 : x>>ᵢ$ 8 = Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (xs : taskstatus)
  (H12 : isptr x0)
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               v´38 (cur_prio, st, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, st, Vnull)
                     tcbls_r´ tcbls_r)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_r´)
  (Htcblist_sub_left : TCBList_P x0 v´34 v´38 tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 v´38 tcbls_sub_r)
  (ptcb_addr : block)
  (x10 : val)
  (H31 : isptr x10)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (i10 : int32)
  (H44 : Int.unsigned i10 <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (i7 : int32)
  (H47 : Int.unsigned i7 <= 255)
  (i6 : int32)
  (H48 : Int.unsigned i6 <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H17 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, xs, xm))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (H_ptcb_in_right : TcbMod.get tcbls_r´ (ptcb_addr, Int.zero) =
                    Some (ptcb_prio, xs, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, xs, xm) tcbls_sub_r v´52)
  (Hget_last_tcb : get_last_tcb_ptr v´34 x0 =
                  Some (Vptr (ptcb_addr, Int.zero)))
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (Hptcb_node : TCBNode_P
                 (v´45
                  :: v´43
                     :: x10
                        :: xm
                           :: Vint32 i11
                              :: Vint32 i10
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 i7
                                          :: Vint32 i6 :: Vint32 i2 :: nil)
                 v´38 (ptcb_prio, xs, xm))
  (Htcblist_subr : TCBList_P x0
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x10
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 i10
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 i7
                                              :: Vint32 i6
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    v´38 tcbls_r´)
  (Hptcb_blk : RL_TCBblk_P
                (v´45
                 :: v´43
                    :: x10
                       :: xm
                          :: Vint32 i11
                             :: Vint32 i10
                                :: Vint32 ptcb_prio
                                   :: Vint32 i8
                                      :: Vint32 i7
                                         :: Vint32 i6 :: Vint32 i2 :: nil))
  (Hptcb_stat : R_TCB_Status_P
                 (v´45
                  :: v´43
                     :: x10
                        :: xm
                           :: Vint32 i11
                              :: Vint32 i10
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 i7
                                          :: Vint32 i6 :: Vint32 i2 :: nil)
                 v´38 (ptcb_prio, xs, xm))
  (LHift_true : Int.eq ptcb_prio ($ OS_IDLE_PRIO) = true)
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x10
              :: xm
                 :: Vint32 i11
                    :: Vint32 i10
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 i7 :: Vint32 i6 :: Vint32 i2 :: nil) **
     tcbdllseg x0 (Vptr (cur_addr, Int.zero)) v´43
       (Vptr (ptcb_addr, Int.zero)) v´34 **
     tcbdllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´42 Vnull v´36 **
      <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     dllseg v´33 Vnull v´26 (Vptr (cur_addr, Int.zero)) v´35 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     AOSRdyTblGrp v´38 v´39 **
     AOSTCBPrioTbl v´32 v´38 tcbls v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero) **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)}}
   EXIT_CRITICAL;ₛ
   RETURN OS_ERR_MUTEX_IDLE {{Afalse}}
.

Definition gen_mutex_pend_ptcb_is_not_rdy_right_to_cur:= forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (v´32 : vallist)
  (v´33 : val)
  (v´35 : list vallist)
  (v´38 : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (Htcblist_subl : TCBList_P v´33 v´35 v´38 tcbls_l)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (st : taskstatus)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, st, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, st, Vnull))
  (x0 : val)
  (tcbls_r´ : TcbMod.map)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Fneq_i2_1 : Int.unsigned (x>>ᵢ$ 8) <= 255)
  (Fneq_i2_2 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) <= 255)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Feq_i2_1 : x>>ᵢ$ 8 = Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (xs : taskstatus)
  (H12 : isptr x0)
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               v´38 (cur_prio, st, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, st, Vnull)
                     tcbls_r´ tcbls_r)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_r´)
  (Htcblist_sub_left : TCBList_P x0 v´34 v´38 tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 v´38 tcbls_sub_r)
  (ptcb_addr : block)
  (x10 : val)
  (H31 : isptr x10)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (ptcb_stat : int32)
  (H44 : Int.unsigned ptcb_stat <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (i7 : int32)
  (H47 : Int.unsigned i7 <= 255)
  (i6 : int32)
  (H48 : Int.unsigned i6 <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H17 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, xs, xm))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (H_ptcb_in_right : TcbMod.get tcbls_r´ (ptcb_addr, Int.zero) =
                    Some (ptcb_prio, xs, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, xs, xm) tcbls_sub_r v´52)
  (Hget_last_tcb : get_last_tcb_ptr v´34 x0 =
                  Some (Vptr (ptcb_addr, Int.zero)))
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (Hptcb_node : TCBNode_P
                 (v´45
                  :: v´43
                     :: x10
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 i7
                                          :: Vint32 i6 :: Vint32 i2 :: nil)
                 v´38 (ptcb_prio, xs, xm))
  (Htcblist_subr : TCBList_P x0
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x10
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 ptcb_stat
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 i7
                                              :: Vint32 i6
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    v´38 tcbls_r´)
  (Hptcb_blk : RL_TCBblk_P
                (v´45
                 :: v´43
                    :: x10
                       :: xm
                          :: Vint32 i11
                             :: Vint32 ptcb_stat
                                :: Vint32 ptcb_prio
                                   :: Vint32 i8
                                      :: Vint32 i7
                                         :: Vint32 i6 :: Vint32 i2 :: nil))
  (Hptcb_stat : R_TCB_Status_P
                 (v´45
                  :: v´43
                     :: x10
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 i7
                                          :: Vint32 i6 :: Vint32 i2 :: nil)
                 v´38 (ptcb_prio, xs, xm))
  (Hptcb_prio_not_idle : ptcb_prio <> $ OS_IDLE_PRIO)
  (Hptcb_prio_scope_obv : 0 <= Int.unsigned ptcb_prio)
  (Hptcb_prio_scope : Int.unsigned ptcb_prio < 64)
  (Hif_ptcb_is_not_rdy : ptcb_stat <> $ OS_STAT_RDY \/ i11 <> $ 0)
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x10
              :: xm
                 :: Vint32 i11
                    :: Vint32 ptcb_stat
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 i7 :: Vint32 i6 :: Vint32 i2 :: nil) **
     tcbdllseg x0 (Vptr (cur_addr, Int.zero)) v´43
       (Vptr (ptcb_addr, Int.zero)) v´34 **
     tcbdllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´42 Vnull v´36 **
      <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     dllseg v´33 Vnull v´26 (Vptr (cur_addr, Int.zero)) v´35 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     AOSRdyTblGrp v´38 v´39 **
     AOSTCBPrioTbl v´32 v´38 tcbls v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero) **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)}}
   EXIT_CRITICAL;ₛ
   RETURN OS_ERR_NEST {{Afalse}}
.

Definition gen_mutex_pend_cur_prio_eql_mprio_right_to_cur:= forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (v´32 : vallist)
  (v´33 : val)
  (v´35 : list vallist)
  (os_rdy_tbl : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (Htcblist_subl : TCBList_P v´33 v´35 os_rdy_tbl tcbls_l)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (x0 : val)
  (tcbls_r´ : TcbMod.map)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Fneq_i2_1 : Int.unsigned (x>>ᵢ$ 8) <= 255)
  (Fneq_i2_2 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) <= 255)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Feq_i2_1 : x>>ᵢ$ 8 = Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (H12 : isptr x0)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_r´)
  (Htcblist_sub_left : TCBList_P x0 v´34 os_rdy_tbl tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 os_rdy_tbl tcbls_sub_r)
  (ptcb_addr : block)
  (x10 : val)
  (H31 : isptr x10)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (ptcb_stat : int32)
  (H44 : Int.unsigned ptcb_stat <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (ptcb_tcby : int32)
  (H47 : Int.unsigned ptcb_tcby <= 255)
  (ptcb_bitx : int32)
  (H48 : Int.unsigned ptcb_bitx <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H17 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (Hget_last_tcb : get_last_tcb_ptr v´34 x0 =
                  Some (Vptr (ptcb_addr, Int.zero)))
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (Htcblist_subr : TCBList_P x0
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x10
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 ptcb_stat
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 ptcb_tcby
                                              :: Vint32 ptcb_bitx
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    os_rdy_tbl tcbls_r´)
  (Hptcb_blk : RL_TCBblk_P
                (v´45
                 :: v´43
                    :: x10
                       :: xm
                          :: Vint32 i11
                             :: Vint32 ptcb_stat
                                :: Vint32 ptcb_prio
                                   :: Vint32 i8
                                      :: Vint32 ptcb_tcby
                                         :: Vint32 ptcb_bitx
                                            :: Vint32 i2 :: nil))
  (Hptcb_prio_not_idle : ptcb_prio <> $ OS_IDLE_PRIO)
  (Hptcb_prio_scope_obv : 0 <= Int.unsigned ptcb_prio)
  (Hptcb_prio_scope : Int.unsigned ptcb_prio < 64)
  (Hif_ptcb_is_rdy1 : ptcb_stat = $ OS_STAT_RDY)
  (Hif_ptcb_is_rdy2 : i11 = $ 0)
  (Hrtbl_type : array_type_vallist_match Int8u os_rdy_tbl)
  (Hrtbl_len : length os_rdy_tbl = OS_RDY_TBL_SIZE)
  (Hgrp1 : RL_Tbl_Grp_P os_rdy_tbl v´39)
  (Hgrp2 : prio_in_tbl ($ OS_IDLE_PRIO) os_rdy_tbl)
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, rdy, xm))
  (H_ptcb_in_right : TcbMod.get tcbls_r´ (ptcb_addr, Int.zero) =
                    Some (ptcb_prio, rdy, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, rdy, xm) tcbls_sub_r v´52)
  (Hptcb_node : TCBNode_P
                 (v´45
                  :: v´43
                     :: x10
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 ptcb_tcby
                                          :: Vint32 ptcb_bitx
                                             :: Vint32 i2 :: nil) os_rdy_tbl
                 (ptcb_prio, rdy, xm))
  (Hptcb_stat : R_TCB_Status_P
                 (v´45
                  :: v´43
                     :: x10
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 ptcb_tcby
                                          :: Vint32 ptcb_bitx
                                             :: Vint32 i2 :: nil) os_rdy_tbl
                 (ptcb_prio, rdy, xm))
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, rdy, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, rdy, Vnull))
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               os_rdy_tbl (cur_prio, rdy, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, rdy, Vnull)
                     tcbls_r´ tcbls_r)
  (Hcur_prio_eql_mprio : Int.eq (x&$ OS_MUTEX_KEEP_LOWER_8) cur_prio = true)
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x10
              :: xm
                 :: Vint32 i11
                    :: Vint32 ptcb_stat
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 ptcb_tcby
                                :: Vint32 ptcb_bitx :: Vint32 i2 :: nil) **
     tcbdllseg x0 (Vptr (cur_addr, Int.zero)) v´43
       (Vptr (ptcb_addr, Int.zero)) v´34 **
     tcbdllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´42 Vnull v´36 **
      <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     dllseg v´33 Vnull v´26 (Vptr (cur_addr, Int.zero)) v´35 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     AOSRdyTblGrp os_rdy_tbl v´39 **
     AOSTCBPrioTbl v´32 os_rdy_tbl tcbls v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero) **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)}}
   EXIT_CRITICAL;ₛ
   RETURN OS_ERR_MUTEX_DEADLOCK {{Afalse}}
.

Definition gen_mutex_pend_pip_is_not_hold_right_to_cur:= forall
  (i : int32)
  (H1 : Int.unsigned i <= 65535)
  ( : val)
  (v´0 : val)
  (v´1 : val)
  (v´2 : val)
  (v´3 : val)
  (v´4 : val)
  (v´5 : list vallist)
  (v´6 : list vallist)
  (v´7 : list vallist)
  (v´8 : list EventData)
  (v´9 : list EventCtr)
  (v´10 : vallist)
  (v´11 : val)
  (v´12 : val)
  (v´13 : list vallist)
  (v´14 : vallist)
  (v´15 : list vallist)
  (v´16 : vallist)
  (v´17 : val)
  (v´18 : EcbMod.map)
  (v´19 : TcbMod.map)
  (v´20 : int32)
  (v´21 : addrval)
  (v´22 : addrval)
  (v´23 : val)
  (v´24 : list vallist)
  (H0 : RH_CurTCB v´21 v´19)
  (v´27 : list EventCtr)
  (v´28 : list EventCtr)
  (v´29 : list EventData)
  (v´30 : list EventData)
  (ptbl : vallist)
  (v´33 : val)
  (v´35 : list vallist)
  (os_rdy_tbl : vallist)
  (v´39 : val)
  (v´40 : EcbMod.map)
  (tcbls : TcbMod.map)
  (v´44 : val)
  (v´46 : vallist)
  (v´48 : val)
  (v´49 : EcbMod.map)
  (v´50 : EcbMod.map)
  (v´51 : EcbMod.map)
  (v´53 : addrval)
  (H5 : ECBList_P v´48 Vnull v´28 v´30 v´50 tcbls)
  (H11 : EcbMod.join v´49 v´51 v´40)
  (H14 : length v´27 = length v´29)
  (v´25 : addrval)
  (pevent_addr : block)
  (H13 : array_type_vallist_match Int8u v´46)
  (H19 : length v´46 = OS_EVENT_TBL_SIZE)
  (H20 : isptr v´48)
  (x3 : val)
  (i0 : int32)
  (H22 : Int.unsigned i0 <= 255)
  (H18 : RL_Tbl_Grp_P v´46 (Vint32 i0))
  (H25 : isptr v´48)
  (H4 : ECBList_P v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 v´49 tcbls)
  (H2 : isptr (Vptr (pevent_addr, Int.zero)))
  (H16 : id_addrval´ (Vptr (pevent_addr, Int.zero)) OSEventTbl OS_EVENT =
        Some v´25)
  (H21 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255)
  (wls : waitset)
  (v´26 : val)
  (v´42 : val)
  (tcbls_l : TcbMod.map)
  (tcbls_r : TcbMod.map)
  (cur_addr : block)
  (H29 : v´33 <> Vnull)
  (Htcbjoin_whole : TcbMod.join tcbls_l tcbls_r tcbls)
  (Htcblist_subl : TCBList_P v´33 v´35 os_rdy_tbl tcbls_l)
  (H28 : Vptr (cur_addr, Int.zero) <> Vnull)
  (x12 : val)
  (H35 : isptr x12)
  (cur_prio : int32)
  (H39 : Int.unsigned cur_prio <= 255)
  (i5 : int32)
  (H40 : Int.unsigned i5 <= 255)
  (i4 : int32)
  (H41 : Int.unsigned i4 <= 255)
  (i3 : int32)
  (H42 : Int.unsigned i3 <= 255)
  (i1 : int32)
  (H43 : Int.unsigned i1 <= 255)
  (H34 : isptr v´26)
  (H : RH_TCBList_ECBList_P v´40 tcbls (cur_addr, Int.zero))
  (H10 : RH_CurTCB (cur_addr, Int.zero) tcbls)
  (Hneq_idle : cur_prio <> $ OS_IDLE_PRIO)
  (H37 : Int.unsigned ($ 0) <= 65535)
  (H38 : Int.unsigned ($ OS_STAT_RDY) <= 255)
  (H36 : isptr Vnull)
  (x0 : val)
  (tcbls_r´ : TcbMod.map)
  (x : int32)
  (F2 : Int.unsigned x <= 65535)
  (H23 : Int.unsigned x <= 65535)
  (Fneq_i2_1 : Int.unsigned (x>>ᵢ$ 8) <= 255)
  (Fneq_i2_2 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) <= 255)
  (Hmutex_not_avail : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE)
  (Feq_i2_1 : x>>ᵢ$ 8 = Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
  (Hcur_prio : Int.ltu (x>>ᵢ$ 8) cur_prio = true)
  (ptcb_prio : priority)
  (xm : msg)
  (H12 : isptr x0)
  (v´34 : list vallist)
  (v´36 : list vallist)
  (v´43 : val)
  (v´45 : val)
  (tcbls_sub_l : TcbMod.map)
  (v´52 : TcbMod.map)
  (tcbls_sub_r : TcbMod.map)
  (Htcbjoin_sub_whole : TcbMod.join tcbls_sub_l v´52 tcbls_r´)
  (Htcblist_sub_left : TCBList_P x0 v´34 os_rdy_tbl tcbls_sub_l)
  (Htcblist_sub_right : TCBList_P v´45 v´36 os_rdy_tbl tcbls_sub_r)
  (ptcb_addr : block)
  (x10 : val)
  (H31 : isptr x10)
  (i11 : int32)
  (H33 : Int.unsigned i11 <= 65535)
  (ptcb_stat : int32)
  (H44 : Int.unsigned ptcb_stat <= 255)
  (i8 : int32)
  (H46 : Int.unsigned i8 <= 255)
  (ptcb_tcby : int32)
  (H47 : Int.unsigned ptcb_tcby <= 255)
  (ptcb_bitx : int32)
  (H48 : Int.unsigned ptcb_bitx <= 255)
  (i2 : int32)
  (H49 : Int.unsigned i2 <= 255)
  (H30 : isptr v´43)
  (H17 : isptr v´45)
  (H24 : isptr (Vptr (ptcb_addr, Int.zero)))
  (H7 : R_ECB_ETbl_P (pevent_addr, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i0
             :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
         v´46) tcbls)
  (H3 : ECBList_P v´44 Vnull
         (v´27 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i0
               :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil,
           v´46) :: nil) ++ v´28)
         (v´29 ++
          (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)) :: nil) ++ v´30)
         v´40 tcbls)
  (H8 : EcbMod.joinsig (pevent_addr, Int.zero)
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls)
         v´50 v´51)
  (Hget : EcbMod.get v´40 (pevent_addr, Int.zero) =
         Some
           (absmutexsem (x>>ᵢ$ 8)
              (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H26 : RH_ECB_P
          (absmutexsem (x>>ᵢ$ 8)
             (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H6 : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero)))
         (absmutexsem (x>>ᵢ$ 8)
            (Some (ptcb_addr, Int.zero, x&$ OS_MUTEX_KEEP_LOWER_8)), wls))
  (H_ptcb_not_cur : (ptcb_addr, Int.zero) <> (cur_addr, Int.zero))
  (Hget_last_tcb : get_last_tcb_ptr v´34 x0 =
                  Some (Vptr (ptcb_addr, Int.zero)))
  (H32 : isptr xm)
  (H45 : Int.unsigned ptcb_prio <= 255)
  (Htcblist_subr : TCBList_P x0
                    (v´34 ++
                     (v´45
                      :: v´43
                         :: x10
                            :: xm
                               :: Vint32 i11
                                  :: Vint32 ptcb_stat
                                     :: Vint32 ptcb_prio
                                        :: Vint32 i8
                                           :: Vint32 ptcb_tcby
                                              :: Vint32 ptcb_bitx
                                                 ::
                                                 Vint32 i2 :: nil) :: v´36)
                    os_rdy_tbl tcbls_r´)
  (Hptcb_blk : RL_TCBblk_P
                (v´45
                 :: v´43
                    :: x10
                       :: xm
                          :: Vint32 i11
                             :: Vint32 ptcb_stat
                                :: Vint32 ptcb_prio
                                   :: Vint32 i8
                                      :: Vint32 ptcb_tcby
                                         :: Vint32 ptcb_bitx
                                            :: Vint32 i2 :: nil))
  (Hptcb_prio_not_idle : ptcb_prio <> $ OS_IDLE_PRIO)
  (Hptcb_prio_scope_obv : 0 <= Int.unsigned ptcb_prio)
  (Hptcb_prio_scope : Int.unsigned ptcb_prio < 64)
  (Hif_ptcb_is_rdy1 : ptcb_stat = $ OS_STAT_RDY)
  (Hif_ptcb_is_rdy2 : i11 = $ 0)
  (Hrtbl_type : array_type_vallist_match Int8u os_rdy_tbl)
  (Hrtbl_len : length os_rdy_tbl = OS_RDY_TBL_SIZE)
  (Hgrp1 : RL_Tbl_Grp_P os_rdy_tbl v´39)
  (Hgrp2 : prio_in_tbl ($ OS_IDLE_PRIO) os_rdy_tbl)
  (H_ptcb : TcbMod.get tcbls (ptcb_addr, Int.zero) = Some (ptcb_prio, rdy, xm))
  (H_ptcb_in_right : TcbMod.get tcbls_r´ (ptcb_addr, Int.zero) =
                    Some (ptcb_prio, rdy, xm))
  (Htcbjoin_sub_right : TcbMod.joinsig (ptcb_addr, Int.zero)
                         (ptcb_prio, rdy, xm) tcbls_sub_r v´52)
  (Hptcb_node : TCBNode_P
                 (v´45
                  :: v´43
                     :: x10
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 ptcb_tcby
                                          :: Vint32 ptcb_bitx
                                             :: Vint32 i2 :: nil) os_rdy_tbl
                 (ptcb_prio, rdy, xm))
  (Hptcb_stat : R_TCB_Status_P
                 (v´45
                  :: v´43
                     :: x10
                        :: xm
                           :: Vint32 i11
                              :: Vint32 ptcb_stat
                                 :: Vint32 ptcb_prio
                                    :: Vint32 i8
                                       :: Vint32 ptcb_tcby
                                          :: Vint32 ptcb_bitx
                                             :: Vint32 i2 :: nil) os_rdy_tbl
                 (ptcb_prio, rdy, xm))
  (Hgetcur_subr : TcbMod.get tcbls_r (cur_addr, Int.zero) =
                 Some (cur_prio, rdy, Vnull))
  (Hgetcur : TcbMod.get tcbls (cur_addr, Int.zero) =
            Some (cur_prio, rdy, Vnull))
  (Hcurnode : TCBNode_P
               (x0
                :: v´26
                   :: x12
                      :: Vnull
                         :: V$0
                            :: V$OS_STAT_RDY
                               :: Vint32 cur_prio
                                  :: Vint32 i5
                                     :: Vint32 i4
                                        :: Vint32 i3 :: Vint32 i1 :: nil)
               os_rdy_tbl (cur_prio, rdy, Vnull))
  (Htcbjoin_right : TcbJoin (cur_addr, Int.zero) (cur_prio, rdy, Vnull)
                     tcbls_r´ tcbls_r)
  (Hif_false : Int.eq (x&$ OS_MUTEX_KEEP_LOWER_8) cur_prio = false)
  (Hnocur : Int.eq cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8) = false)
  (H_cur_prio_scope : Int.unsigned cur_prio < 64)
  (Hx_scope1 : Int.unsigned (x>>ᵢ$ 8) < 64)
  (Hif_can_lift1 : ptcb_prio <> x>>ᵢ$ 8)
  (Hif_can_lift2 : Int.ltu cur_prio (x&$ OS_MUTEX_KEEP_LOWER_8) = true)
  (v´31 : val)
  (Hptbl_1 : array_type_vallist_match OS_TCB ptbl)
  (Hptbl_2 : length ptbl = 64%nat)
  (H15 : RL_RTbl_PrioTbl_P os_rdy_tbl ptbl v´53)
  (H27 : R_PrioTbl_P ptbl tcbls v´53)
  (Hif_true : val_inj
               (uop_eval
                  (val_inj
                     (bop_eval
                        (nth_val´ (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) ptbl)
                        (Vptr v´53) OS_TCB OS_TCB oeq)) oppsite) <>
             Vint32 Int.zero /\
             val_inj
               (uop_eval
                  (val_inj
                     (bop_eval
                        (nth_val´ (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) ptbl)
                        (Vptr v´53) OS_TCB OS_TCB oeq)) oppsite) <> Vnull /\
             val_inj
               (uop_eval
                  (val_inj
                     (bop_eval
                        (nth_val´ (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) ptbl)
                        (Vptr v´53) OS_TCB OS_TCB oeq)) oppsite) <>
             Vundef)
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV timeout @ Int16u |-> v0) **
      (EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV mprio @ Int8u |-> v0) **
      (EX v0 : val, LV isrdy @ Int8u |-> v0) **
      (EX v0 : val, LV ptcb @ OS_TCB |-> v0) **
      (EX v0 : val, LV pevent2 @ OS_EVENT |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((timeout, Int16u)
       :: (pevent, OS_EVENT )
          :: (legal, Int8u)
             :: (pip, Int8u)
                :: (mprio, Int8u)
                   :: (isrdy, Int8u)
                      :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{PV v´53 @ Int8u |-> v´31 **
     Astruct (ptcb_addr, Int.zero) OS_TCB
       (v´45
        :: v´43
           :: x10
              :: xm
                 :: Vint32 i11
                    :: Vint32 ptcb_stat
                       :: Vint32 ptcb_prio
                          :: Vint32 i8
                             :: Vint32 ptcb_tcby
                                :: Vint32 ptcb_bitx :: Vint32 i2 :: nil) **
     tcbdllseg x0 (Vptr (cur_addr, Int.zero)) v´43
       (Vptr (ptcb_addr, Int.zero)) v´34 **
     tcbdllseg v´45 (Vptr (ptcb_addr, Int.zero)) v´42 Vnull v´36 **
      <|| mutexpend (Vptr (pevent_addr, Int.zero) :: Vint32 i :: nil) ||> **
     LV ptcb @ OS_TCB |-> Vptr (ptcb_addr, Int.zero) **
     LV mprio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (cur_addr, Int.zero) OS_TCB
       (x0
        :: v´26
           :: x12
              :: Vnull
                 :: V$0
                    :: V$OS_STAT_RDY
                       :: Vint32 cur_prio
                          :: Vint32 i5
                             :: Vint32 i4 :: Vint32 i3 :: Vint32 i1 :: nil) **
     GV OSTCBList @ OS_TCB |-> v´33 **
     dllseg v´33 Vnull v´26 (Vptr (cur_addr, Int.zero)) v´35 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBCur @ OS_TCB |-> Vptr (cur_addr, Int.zero) **
     AEventData
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil)
       (DMutex (Vint32 x) (Vptr (ptcb_addr, Int.zero))) **
     Astruct (pevent_addr, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i0
           :: Vint32 x :: Vptr (ptcb_addr, Int.zero) :: x3 :: v´48 :: nil) **
     Aarray v´25 (Tarray Int8u OS_EVENT_TBL_SIZE) v´46 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´44 **
     evsllseg v´44 (Vptr (pevent_addr, Int.zero)) v´27 v´29 **
     evsllseg v´48 Vnull v´28 v´30 **
     A_isr_is_prop **
     AOSRdyTblGrp os_rdy_tbl v´39 **
     GAarray OSTCBPrioTbl (Tarray OS_TCB 64) ptbl **
     G&OSPlaceHolder @ Int8u == v´53 **
     HECBList v´40 **
     HTCBList tcbls **
     HCurTCB (cur_addr, Int.zero) **
     LV legal @ Int8u |-> (V$1) **
     AOSEventFreeList v´5 **
     AOSQFreeList v´6 **
     AOSQFreeBlk v´7 **
     AOSMapTbl **
     AOSUnMapTbl **
     AOSIntNesting **
     AOSTCBFreeList v´23 v´24 **
     AOSTime (Vint32 v´20) **
     HTime v´20 **
     AGVars **
     atoy_inv´ **
     LV pevent2 @ OS_EVENT |-> v´4 **
     LV isrdy @ Int8u |-> v´2 **
     LV timeout @ Int16u |-> Vint32 i **
     LV pevent @ OS_EVENT |-> Vptr (pevent_addr, Int.zero) **
     A_dom_lenv
       ((timeout, Int16u)
        :: (pevent, OS_EVENT )
           :: (legal, Int8u)
              :: (pip, Int8u)
                 :: (mprio, Int8u)
                    :: (isrdy, Int8u)
                       :: (ptcb, OS_TCB ) :: (pevent2, OS_EVENT ) :: nil)}}
   EXIT_CRITICAL;ₛ
   RETURN OS_ERR_MUTEXPR_NOT_HOLDER {{Afalse}}
.

Definition gen_MutexPostPart1:= forall (
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : int32
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : length v´25 = length v´27
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Int8u v´44
)(
  H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  i : int32
)(
  H21 : Int.unsigned i <= 255
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
  H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
  H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
  x : int32
)(
  H10 : Int.unsigned x <= 65535
)(
  H15 : Int.unsigned (Int.shru x ($ 8)) < 64
)(
  H22 : Int.unsigned x <= 65535
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´50 : val
)(
  v´52 : block
)(
  H31 : v´31 <> Vnull
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : Vptr (v´52, Int.zero) <> Vnull
)(
  x8 : val
)(
  x9 : val
)(
  H37 : isptr x9
)(
  H38 : isptr x8
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 65535
)(
  i5 : int32
)(
  H40 : Int.unsigned i5 <= 255
)(
  i4 : int32
)(
  H41 : Int.unsigned i4 <= 255
)(
  i3 : int32
)(
  H42 : Int.unsigned i3 <= 255
)(
  i2 : int32
)(
  H43 : Int.unsigned i2 <= 255
)(
  i1 : int32
)(
  H44 : Int.unsigned i1 <= 255
)(
  i0 : int32
)(
  H45 : Int.unsigned i0 <= 255
)(
  H36 : isptr v´24
)(
  H27 : isptr v´50
)(
  H34 : TCBList_P (Vptr (v´52, Int.zero))
          ((v´50
            :: v´24
               :: x9
                  :: x8
                     :: Vint32 i6
                        :: Vint32 i5
                           :: Vint32 i4
                              :: Vint32 i3
                                 :: Vint32 i2
                                    :: Vint32 i1 :: Vint32 i0 :: nil) :: v´35)
          v´36 v´45
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
  H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
  H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
         v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H28 : Int.ltu i4 (Int.shru x ($ 8)) = false
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H47 : Int.ltu (Int.shru x ($ 8)) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
  H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (Int.shru x ($ 8)) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
         w) v´48 v´49
)(
  H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (Int.shru x ($ 8)) opr = true /\ Int.unsigned opr < 64
)(
  H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (Int.shru x ($ 8))
                (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match OS_TCB v´30
)(
  H51 : length v´30 = 64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x1 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some x1
)(
  x0 : val
)(
  H53 : nth_val (Z.to_nat (Int.unsigned (Int.shru x ($ 8)))) v´30 = Some x0
)(
  H54 : array_type_vallist_match Int8u v´36
)(
  H58 : length v´36 = OS_RDY_TBL_SIZE
)(
  i7 : int32
)(
  H55 : Int.unsigned i7 <= 255
)(
  H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
  H59 : length OSUnMapVallist = 256%nat
)(
  H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
  H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
  H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
  fffbb : Int.unsigned x2 < 8
)(
  fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
  H19´´ : length v´44 = Z.to_nat 8
)(
  x4 : int32
)(
  H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
  H64 : Int.unsigned x4 <= 255
)(
  H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
  x5 : int32
)(
  H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
  H67 : Int.unsigned x5 <= 255
)(
  ttfasd : Int.unsigned x5 < 8
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)
(last_condition : i5 = $ OS_STAT_RDY /\ i6 = $ 0 )

,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{ <|| mutexpost (Vptr (v´29, Int.zero) :: nil) ||> **
     LV os_code_defs.x @ Int8u |-> Vint32 ((x2<<$ 3)+ᵢx5) **
     LV legal @ Int8u |-> Vint32 x2 **
     PV v´51 @ Int8u |-> v´32 **
     Astruct (v´52, Int.zero) OS_TCB
       (v´50
        :: v´24
           :: x9
              :: x8
                 :: Vint32 i6
                    :: Vint32 i5
                       :: Vint32 i4
                          :: Vint32 i3
                             :: Vint32 i2 :: Vint32 i1 :: Vint32 i0 :: nil) **
     dllseg v´50 (Vptr (v´52, Int.zero)) v´40 Vnull v´35 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´31 **
     dllseg v´31 Vnull v´24 (Vptr (v´52, Int.zero)) v´33 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBCur @ OS_TCB |-> Vptr (v´52, Int.zero) **
     LV prio @ Int8u
     |-> Vint32 (Int.modu (x&$ OS_MUTEX_KEEP_LOWER_8) ($ Byte.modulus)) **
     LV pip @ Int8u |-> Vint32 (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus)) **
     Astruct (v´29, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil) **
     Aarray v´23 (Tarray Int8u OS_EVENT_TBL_SIZE) v´44 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     A_isr_is_prop **
     GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE) v´36 **
     GV OSRdyGrp @ Int8u |-> Vint32 i7 **
     GAarray OSTCBPrioTbl (Tarray OS_TCB 64) v´30 **
     G&OSPlaceHolder @ Int8u == v´51 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSMapTbl **
     GAarray OSUnMapTbl (Tarray Int8u 256) OSUnMapVallist **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   If(OSTCBCur OSTCBPrio ==ₑ pip )
        {If(OSTCBPrioTbl [prio ] !=ₑ OS_TCB os_mutex.PlaceHolder)
              {EXIT_CRITICAL;ₛ
              RETURN OS_ERR_ORIGINAL_NOT_HOLDER} ;ₛ
        OSRdyTbl [OSTCBCur OSTCBY] &= OSTCBCur OSTCBBitX;ₛ
        If(OSRdyTbl [OSTCBCur OSTCBY] ==ₑ 0)
             {OSRdyGrp &= OSTCBCur OSTCBBitY} ;ₛ
        OSTCBCur OSTCBPrio =ₑ prio ;ₛ
        OSTCBCur OSTCBY =ₑ prio 3;ₛ
        OSTCBCur OSTCBBitY =ₑ OSMapTbl [OSTCBCur OSTCBY];ₛ
        OSTCBCur OSTCBX =ₑ prio &ₑ 7;ₛ
        OSTCBCur OSTCBBitX =ₑ OSMapTbl [OSTCBCur OSTCBX];ₛ
        OSRdyGrp =ₑ OSRdyGrp |ₑ OSTCBCur OSTCBBitY;ₛ
        OSRdyTbl [OSTCBCur OSTCBY] =ₑ
        OSRdyTbl [OSTCBCur OSTCBY] |ₑ OSTCBCur OSTCBBitX;ₛ
        OSTCBPrioTbl [prio ] =ₑ OS_TCB OSTCBCur ;ₛ
        OSTCBPrioTbl [pip ] =ₑ OS_TCB os_mutex.PlaceHolder} ;ₛ
   If(pevent OSEventGrp !=ₑ 0)
        {os_code_defs.x =ₑ OS_STAT_MUTEX;ₛ
        prio =ᶠ OS_EventTaskRdy pevent , (Void) pevent ,
        os_code_defs.x ·);ₛ
        pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
        pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
        pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
        EXIT_CRITICAL;ₛ
        OS_Sched(­);ₛ
        RETURN OS_NO_ERR} ;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ OS_MUTEX_AVAILABLE;ₛ
   pevent OSEventPtr =ₑ NULL;ₛ
   EXIT_CRITICAL;ₛ
   RETURN OS_NO_ERR {{Afalse}}
.

Definition gen_MutexPostPart3133:= forall
(
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : int32
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : length v´25 = length v´27
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Int8u v´44
)(
  H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  i : int32
)(
  H21 : Int.unsigned i <= 255
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
  H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
  H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
  x : int32
)(
  H10 : Int.unsigned x <= 65535
)(
  H22 : Int.unsigned x <= 65535
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : v´31 <> Vnull
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : Vptr (v´52, Int.zero) <> Vnull
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 65535
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
  H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
  H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
         v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match OS_TCB v´30
)(
  H51 : length v´30 = 64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x0 : val
)(
  H54 : array_type_vallist_match Int8u v´36
)(
  H58 : length v´36 = OS_RDY_TBL_SIZE
)(
  i7 : int32
)(
  H55 : Int.unsigned i7 <= 255
)(
  H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
  H59 : length OSUnMapVallist = 256%nat
)(
  H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
  H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
  H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
  fffbb : Int.unsigned x2 < 8
)(
  fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
  H19´´ : length v´44 = Z.to_nat 8
)(
  x4 : int32
)(
  H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
  H64 : Int.unsigned x4 <= 255
)(
  H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
  x5 : int32
)(
  H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
  H67 : Int.unsigned x5 <= 255
)(
  ttfasd : Int.unsigned x5 < 8
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x14 : int32
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
  x15 : val
)(
  H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
  H37 : isptr x15
)(
  H40 : Int.unsigned x14 <= 255
)(
  r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
  r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
  H34 : array_type_vallist_match Int8u OSMapVallist
)(
  H69 : length OSMapVallist = 8%nat
)(
  H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
  x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
  H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
  H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x9
)(
  H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
  H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x11
)(
  H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
  HH58 : length v´36 = Z.to_nat 8
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  x16 : int32
)(
  H91 : Int.unsigned x16 <= 255
)(
  x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
  H90 : Int.unsigned x13 <= 255
)(
  x12 : int32
)(
  H89 : Int.unsigned x12 <= 255
)(
  t1 : int32
)(
  t3 : Int.unsigned t1 <= 255
)(
  t11 : int32
)(
  t13 : Int.unsigned t11 <= 255
)(
  v´34 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some (Vptr v´51)
)(
  H99 : i <> Int.zero
)(
  H100 : val_inj
           (notint
              (val_inj
                 (if Int.eq i ($ 0)
                  then Some (Vint32 Int.one)
                  else Some (Vint32 Int.zero)))) <> Vnull
)(
  H101 : val_inj
           (notint
              (val_inj
                 (if Int.eq i ($ 0)
                  then Some (Vint32 Int.one)
                  else Some (Vint32 Int.zero)))) <> Vundef
)(
  H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
         w) v´48 v´49
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
  H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
  H68 : Int.ltu (x>>ᵢ$ 8) ((x2<<$ 3)+ᵢx5) = true
)(
  H77 : 0 <= Int.unsigned (x>>ᵢ$ 8)
)(
  H85 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H43 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) <= 255
)(
  H45 : Int.unsigned ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3)) <= 255
)(
  H44 : Int.unsigned ($ 1<<((x>>ᵢ$ 8)&$ 7)) <= 255
)(
  H42 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) <= 255
)(
  H70 : TcbJoin (v´52, Int.zero) (x>>ᵢ$ 8, t, m) x10 v´45
)(
  H41 : Int.unsigned (x>>ᵢ$ 8) <= 255
)(
  H28 : Int.ltu (x>>ᵢ$ 8) (x>>ᵢ$ 8) = false
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 (x>>ᵢ$ 8)
                             :: Vint32 ((x>>ᵢ$ 8)&$ 7)
                                :: Vint32 ((x>>ᵢ$ 8)>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<((x>>ᵢ$ 8)&$ 7))
                                      :: Vint32 ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3))
                                         :: nil) v´36
          (x>>ᵢ$ 8, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 (x>>ᵢ$ 8)
                                  :: Vint32 ((x>>ᵢ$ 8)&$ 7)
                                     :: Vint32 ((x>>ᵢ$ 8)>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<((x>>ᵢ$ 8)&$ 7))
                                           :: Vint32 ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3))
                                              :: nil) :: v´35) v´36 v´45
)(
  r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  r5 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r6 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rr5 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr6 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  rrr5 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr6 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  aa : rule_type_val_match Int8u
         (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa3 : rule_type_val_match Int8u
          (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
  H86 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x12
)(
  H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
)(
  H94 : val_inj
          (if Int.eq (x>>ᵢ$ 8) (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) <> Vnull
)(
  H95 : val_inj
          (if Int.eq (x>>ᵢ$ 8) (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) <> Vundef
)(
  H96 : array_type_vallist_match Int8u
          (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
             (val_inj
                (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7)))))))
)(
  H97 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length
           (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
              (val_inj
                 (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))))%nat
)(
  t2 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
         (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
            (val_inj
               (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))) =
       Vint32 t1
)(
  H98 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) <
         length
           (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
              (val_inj
                 (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))))%nat
)(
  t12 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)))
          (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
             (val_inj
                (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))) =
        Vint32 t11
)(
  v´37 : val
)
( last_condition : ProtectWrapper (x14 = $ OS_STAT_RDY /\ i6 = $ 0))
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post1
       (Vptr (v´29, Int.zero)
        :: Vptr (v´29, Int.zero) :: V$OS_STAT_MUTEX :: nil)
       (Some v´37)
       (logic_lv
          (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
             (update_nth_val
                (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30
                (Vptr (v´52, Int.zero))) (Vptr v´51))
        :: logic_lv
             (x7
              :: v´24
                 :: x15
                    :: m
                       :: Vint32 i6
                          :: Vint32 x14
                             :: Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8)
                                :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)
                                   :: Vint32
                                        ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)
                                      :: Vint32 x11 :: Vint32 x8 :: nil)
           :: logic_llv v´33
              :: logic_llv v´35
                 :: logic_lv
                      (update_nth_val
                         (Z.to_nat
                            (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
                         (update_nth_val
                            (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
                            (val_inj
                               (and (Vint32 x12)
                                  (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7)))))))
                         (val_inj (or (Vint32 t1) (Vint32 x11))))
                    :: logic_val v´34
                       :: logic_abstcb
                            (TcbMod.set v´39 (v´52, Int.zero)
                               (x&$ OS_MUTEX_KEEP_LOWER_8, t, m))
                          :: logic_val v´31
                             :: logic_val (Vptr (v´52, Int.zero))
                                :: logic_val (Vptr (v´52, Int.zero))
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MUTEX
                                         :: Vint32 i
                                            :: Vint32 x
                                               :: Vptr (v´52, $ 0)
                                                  ::
                                                  x3 :: v´46 :: nil)
                                      :: logic_lv v´44
                                         :: logic_leventd
                                              (DMutex
                                                 (Vint32 x)
                                                 (Vptr (v´52, $ 0)) :: nil)
                                            :: logic_code
                                                 (mutexpost
                                                  (Vptr (v´29, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV prio @ Int8u |-> v´37 **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_MUTEX) **
     LV legal @ Int8u |-> Vint32 x2 **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
   pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_MutexPostPart10 :=forall (
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : Int.int
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : @eq nat (@length EventCtr v´25) (@length EventData v´27)
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Tint8 v´44
)(
  H19 : @eq nat (@length val v´44) (nat_of_Z OS_EVENT_TBL_SIZE)
)(
  x3 : val
)(
  i : Int.int
)(
  H21 : Z.le (Int.unsigned i) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (@pair block Int.int v´29 Int.zero)) v´25 v´27
         v´47 v´39
)(
  H14 : @eq (option (prod block Int.int))
          (id_addrval´ (Vptr (@pair block Int.int v´29 Int.zero)) OSEventTbl
             OS_EVENT) (@Some addrval v´23)
)(
  H20 : Z.le (Int.unsigned (Int.repr OS_EVENT_TYPE_MUTEX))
          (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  x : Int.int
)(
  H10 : Z.le (Int.unsigned x)
          (Zpos
             (xI
                (xI
                   (xI
                      (xI
                         (xI
                            (xI
                               (xI (xI (xI (xI (xI (xI (xI (xI (xI xH))))))))))))))))
)(
  H15 : Z.lt (Int.unsigned (Int.shru x (Int.repr (Zpos (xO (xO (xO xH)))))))
          (Zpos (xO (xO (xO (xO (xO (xO xH)))))))
)(
  H22 : Z.le (Int.unsigned x)
          (Zpos
             (xI
                (xI
                   (xI
                      (xI
                         (xI
                            (xI
                               (xI (xI (xI (xI (xI (xI (xI (xI (xI xH))))))))))))))))
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : not (@eq val v´31 Vnull)
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : not (@eq val (Vptr (@pair block Int.int v´52 Int.zero)) Vnull)
)(
  i6 : Int.int
)(
  H39 : Z.le (Int.unsigned i6)
          (Zpos
             (xI
                (xI
                   (xI
                      (xI
                         (xI
                            (xI
                               (xI (xI (xI (xI (xI (xI (xI (xI (xI xH))))))))))))))))
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (@pair block Int.int v´52 Int.zero)
)(
  H8 : RH_CurTCB (@pair block Int.int v´52 Int.zero) v´39
)(
  H23 : isptr (Vptr (@pair block Int.int v´52 (Int.repr Z0)))
)(
  H5 : R_ECB_ETbl_P (@pair block Int.int v´29 Int.zero)
         (@pair (list val) vallist
            (@cons val (Vint32 (Int.repr OS_EVENT_TYPE_MUTEX))
               (@cons val (Vint32 i)
                  (@cons val (Vint32 x)
                     (@cons val
                        (Vptr (@pair block Int.int v´52 (Int.repr Z0)))
                        (@cons val x3 (@cons val v´46 (@nil val))))))) v´44)
         v´39
)(
  H1 : ECBList_P v´42 Vnull
         (@app EventCtr v´25
            (@app (prod (list val) vallist)
               (@cons (prod (list val) vallist)
                  (@pair (list val) vallist
                     (@cons val (Vint32 (Int.repr OS_EVENT_TYPE_MUTEX))
                        (@cons val (Vint32 i)
                           (@cons val (Vint32 x)
                              (@cons val
                                 (Vptr
                                    (@pair block Int.int v´52 (Int.repr Z0)))
                                 (@cons val x3 (@cons val v´46 (@nil val)))))))
                     v´44) (@nil (prod (list val) vallist))) v´26))
         (@app EventData v´27
            (@app EventData
               (@cons EventData
                  (DMutex (Vint32 x)
                     (Vptr (@pair block Int.int v´52 (Int.repr Z0))))
                  (@nil EventData)) v´28)) v´38 v´39
)(
  H29 : Logic.or
          (@eq Int.int (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
             (Int.repr OS_MUTEX_AVAILABLE))
          (not
             (@eq Int.int (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                (Int.repr OS_MUTEX_AVAILABLE)))
)(
  H35 : not
          (@eq Int.int (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
             (Int.repr OS_MUTEX_AVAILABLE))
)(
  H47 : @eq bool
          (Int.ltu (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
             (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))) true
)(
  H48 : Z.lt (Int.unsigned (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8)))
          (Zpos (xO (xO (xO (xO (xO (xO xH)))))))
)(
  H6 : EcbMod.joinsig (@pair block Int.int v´29 Int.zero)
         (@pair edata waitset
            (absmutexsem (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
               (@Some (prod (prod block Int.int) Int.int)
                  (@pair (prod block Int.int) Int.int
                     (@pair block Int.int v´52 (Int.repr Z0))
                     (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))) w) v´48
         v´49
)(
  H4 : @eq (option (prod (prod block Int.int) Int.int))
         (@Some (prod (prod block Int.int) Int.int)
            (@pair (prod block Int.int) Int.int
               (@pair block Int.int v´52 (Int.repr Z0))
               (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
         (@None (prod (prod block Int.int) Int.int)) ->
       @eq waitset w (@nil tid)
)(
  H9 : forall (tid : tid) (opr : Int.int),
       @eq (option (prod (prod block Int.int) Int.int))
         (@Some (prod (prod block Int.int) Int.int)
            (@pair (prod block Int.int) Int.int
               (@pair block Int.int v´52 (Int.repr Z0))
               (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
         (@Some (prod language.tid Int.int)
            (@pair language.tid Int.int tid opr)) ->
       Logic.and
         (@eq bool
            (Int.ltu (Int.shru x (Int.repr (Zpos (xO (xO (xO xH)))))) opr)
            true)
         (Z.lt (Int.unsigned opr) (Zpos (xO (xO (xO (xO (xO (xO xH))))))))
)(
  H13 : not (@eq waitset w (@nil tid)) ->
        not
          (@eq (option (prod (prod block Int.int) Int.int))
             (@Some (prod (prod block Int.int) Int.int)
                (@pair (prod block Int.int) Int.int
                   (@pair block Int.int v´52 (Int.repr Z0))
                   (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
             (@None (prod (prod block Int.int) Int.int)))
)(
  H25 : @eq Int.int (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
          (Int.repr OS_MUTEX_AVAILABLE) ->
        Logic.and
          (@eq (option (prod (prod block Int.int) Int.int))
             (@Some (prod (prod block Int.int) Int.int)
                (@pair (prod block Int.int) Int.int
                   (@pair block Int.int v´52 (Int.repr Z0))
                   (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
             (@None (prod (prod block Int.int) Int.int)))
          (@eq val (Vptr (@pair block Int.int v´52 (Int.repr Z0))) Vnull)
)(
  H26 : not
          (@eq Int.int (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
             (Int.repr OS_MUTEX_AVAILABLE)) ->
        @ex addrval
          (fun tid : addrval =>
           Logic.and
             (@eq val (Vptr (@pair block Int.int v´52 (Int.repr Z0)))
                (Vptr tid))
             (@eq (option (prod (prod block Int.int) Int.int))
                (@Some (prod (prod block Int.int) Int.int)
                   (@pair (prod block Int.int) Int.int
                      (@pair block Int.int v´52 (Int.repr Z0))
                      (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
                (@Some (prod addrval Int.int)
                   (@pair addrval Int.int tid
                      (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))))
)(
  backup : RLH_ECBData_P
             (DMutex (Vint32 x)
                (Vptr (@pair block Int.int v´52 (Int.repr Z0))))
             (@pair edata waitset
                (absmutexsem (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                   (@Some (prod (prod block Int.int) Int.int)
                      (@pair (prod block Int.int) Int.int
                         (@pair block Int.int v´52 (Int.repr Z0))
                         (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))) w)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match (Tptr OS_TCB) v´30
)(
  H51 : @eq nat (@length val v´30)
          64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x1 : val
)(
  H52 : @eq (option val)
          (nth_val
             (Z.to_nat
                (Int.unsigned (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
             v´30) (@Some val x1)
)(
  x0 : val
)(
  H53 : @eq (option val)
          (nth_val
             (Z.to_nat
                (Int.unsigned
                   (Int.shru x (Int.repr (Zpos (xO (xO (xO xH)))))))) v´30)
          (@Some val x0)
)(
  H54 : array_type_vallist_match Tint8 v´36
)(
  H58 : @eq nat (@length val v´36) (nat_of_Z OS_RDY_TBL_SIZE)
)(
  i7 : Int.int
)(
  H55 : Z.le (Int.unsigned i7) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H57 : prio_in_tbl (Int.repr OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : Int.int
)(
  fffa : @eq nat (@length val OSUnMapVallist)
          256%nat ->
         lt (Z.to_nat (Int.unsigned i))
           256%nat ->
         @ex Int.int
           (fun x4 : Int.int =>
            Logic.and (@eq val (Vint32 x2) (Vint32 x4))
              (@eq bool true (rule_type_val_match Tint8 (Vint32 x4))))
)(
  H59 : @eq nat (@length val OSUnMapVallist)
         256%nat
)(
  H60 : lt (Z.to_nat (Int.unsigned i))
          256%nat
)(
  H61 : @eq val (nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist)
          (Vint32 x2)
)(
  H62 : @eq bool true (rule_type_val_match Tint8 (Vint32 x2))
)(
  fffbb : Z.lt (Int.unsigned x2) (Zpos (xO (xO (xO xH))))
)(
  fffbb2 : lt (Z.to_nat (Int.unsigned x2)) (@length val v´44)
)(
  H19´´ : @eq nat (@length val v´44) (Z.to_nat (Zpos (xO (xO (xO xH)))))
)(
  x4 : Int.int
)(
  H63 : @eq val (nth_val´ (Z.to_nat (Int.unsigned x2)) v´44) (Vint32 x4)
)(
  H64 : Z.le (Int.unsigned x4) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H65 : lt (Z.to_nat (Int.unsigned x4)) (@length val OSUnMapVallist)
)(
  x5 : Int.int
)(
  H66 : @eq val (nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist)
          (Vint32 x5)
)(
  H67 : Z.le (Int.unsigned x5) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  ttfasd : Z.lt (Int.unsigned x5) (Zpos (xO (xO (xO xH))))
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x6 : Int.int
)(
  x14 : Int.int
)(
  H77 : Z.le Z0 (Int.unsigned x6)
)(
  H85 : Z.lt (Int.unsigned x6) (Zpos (xO (xO (xO (xO (xO (xO xH)))))))
)(
  H82 : Logic.or (@eq Int.int x14 (Int.repr OS_STAT_RDY))
          (Logic.or (@eq Int.int x14 (Int.repr OS_STAT_SEM))
             (Logic.or (@eq Int.int x14 (Int.repr OS_STAT_Q))
                (Logic.or (@eq Int.int x14 (Int.repr OS_STAT_MBOX))
                   (@eq Int.int x14 (Int.repr OS_STAT_MUTEX)))))
)(
  x15 : val
)(
  H84 : @eq Int.int x14 (Int.repr OS_STAT_RDY) -> @eq val x15 Vnull
)(
  H43 : Z.le (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH)))))
          (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H45 : Z.le
          (Int.unsigned
             (Int.shl (Int.repr (Zpos xH))
                (Int.shru x6 (Int.repr (Zpos (xI xH))))))
          (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H44 : Z.le
          (Int.unsigned
             (Int.shl (Int.repr (Zpos xH))
                (Int.and x6 (Int.repr (Zpos (xI (xI xH)))))))
          (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H42 : Z.le (Int.unsigned (Int.and x6 (Int.repr (Zpos (xI (xI xH))))))
          (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H70 : TcbJoin (@pair block Int.int v´52 Int.zero)
          (@pair (prod priority taskstatus) msg
             (@pair priority taskstatus x6 t) m) x10 v´45
)(
  H41 : Z.le (Int.unsigned x6) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H28 : @eq bool
          (Int.ltu x6 (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))) false
)(
  H37 : isptr x15
)(
  H40 : Z.le (Int.unsigned x14) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H73 : R_TCB_Status_P
          (@cons val x7
             (@cons val v´24
                (@cons val x15
                   (@cons val m
                      (@cons val (Vint32 i6)
                         (@cons val (Vint32 x14)
                            (@cons val (Vint32 x6)
                               (@cons val
                                  (Vint32
                                     (Int.and x6
                                        (Int.repr (Zpos (xI (xI xH))))))
                                  (@cons val
                                     (Vint32
                                        (Int.shru x6
                                           (Int.repr (Zpos (xI xH)))))
                                     (@cons val
                                        (Vint32
                                           (Int.shl
                                              (Int.repr (Zpos xH))
                                              (Int.and x6
                                                 (Int.repr
                                                  (Zpos (xI (xI xH)))))))
                                        (@cons val
                                           (Vint32
                                              (Int.shl
                                                 (Int.repr (Zpos xH))
                                                 (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                           (@nil val)))))))))))) v´36
          (@pair (prod priority taskstatus) msg
             (@pair priority taskstatus x6 t) m)
)(
  backup2 : TCBList_P (Vptr (@pair block Int.int v´52 Int.zero))
              (@cons (list val)
                 (@cons val x7
                    (@cons val v´24
                       (@cons val x15
                          (@cons val m
                             (@cons val (Vint32 i6)
                                (@cons val (Vint32 x14)
                                   (@cons val (Vint32 x6)
                                      (@cons val
                                         (Vint32
                                            (Int.and x6
                                               (Int.repr (Zpos (xI (xI xH))))))
                                         (@cons val
                                            (Vint32
                                               (Int.shru x6
                                                  (Int.repr (Zpos (xI xH)))))
                                            (@cons val
                                               (Vint32
                                                  (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH)))))))
                                               (@cons val
                                                  (Vint32
                                                  (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  (@nil val)))))))))))) v´35)
              v´36 v´45
)(
  r1 : Z.lt
         (Int.unsigned
            (Int.shru (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
               (Int.repr (Zpos (xI xH))))) (Zpos (xO (xO (xO xH))))
)(
  r2 : Z.lt
         (Int.unsigned
            (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
               (Int.repr (Zpos (xI (xI xH)))))) (Zpos (xO (xO (xO xH))))
)(
  r3 : Z.lt
         (Int.unsigned
            (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
               (Int.repr (Zpos (xI xH))))) (Zpos (xO (xO (xO xH))))
)(
  r4 : Z.lt
         (Int.unsigned
            (Int.and (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
               (Int.repr (Zpos (xI (xI xH)))))) (Zpos (xO (xO (xO xH))))
)(
  H34 : array_type_vallist_match Tint8 OSMapVallist
)(
  H69 : @eq nat (@length val OSMapVallist) (S (S (S (S (S (S (S (S O))))))))
)(
  H71 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                   (Int.repr (Zpos (xI xH))))))
          (S (S (S (S (S (S (S (S O))))))))
)(
  x8 : Int.int
)(
  H74 : @eq val
          (nth_val´
             (Z.to_nat
                (Int.unsigned
                   (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                      (Int.repr (Zpos (xI xH)))))) OSMapVallist)
          (Vint32 x8)
)(
  H75 : @eq bool true (rule_type_val_match Tint8 (Vint32 x8))
)(
  H76 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                   (Int.repr (Zpos (xI (xI xH)))))))
          (S (S (S (S (S (S (S (S O))))))))
)(
  x9 : Int.int
)(
  H78 : @eq val
          (nth_val´
             (Z.to_nat
                (Int.unsigned
                   (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                      (Int.repr (Zpos (xI (xI xH))))))) OSMapVallist)
          (Vint32 x9)
)(
  H79 : @eq bool true (rule_type_val_match Tint8 (Vint32 x9))
)(
  H80 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                   (Int.repr (Zpos (xI (xI xH)))))))
          (S (S (S (S (S (S (S (S O))))))))
)(
  x11 : Int.int
)(
  H81 : @eq val
          (nth_val´
             (Z.to_nat
                (Int.unsigned
                   (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                      (Int.repr (Zpos (xI (xI xH))))))) OSMapVallist)
          (Vint32 x11)
)(
  H83 : @eq bool true (rule_type_val_match Tint8 (Vint32 x11))
)(
  r5 : Z.lt (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH)))))
         (Zpos (xO (xO (xO xH))))
)(
  r6 : Z.lt (Int.unsigned (Int.and x6 (Int.repr (Zpos (xI (xI xH))))))
         (Zpos (xO (xO (xO xH))))
)(
  rr1 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.shru (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                   (Int.repr (Zpos (xI xH)))))) (@length val v´36)
)(
  rr2 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                   (Int.repr (Zpos (xI (xI xH)))))))
          (@length val v´36)
)(
  rr3 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                   (Int.repr (Zpos (xI xH)))))) (@length val v´36)
)(
  rr4 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.and (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                   (Int.repr (Zpos (xI (xI xH)))))))
          (@length val v´36)
)(
  rr5 : lt (Z.to_nat (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH))))))
          (@length val v´36)
)(
  rr6 : lt
          (Z.to_nat
             (Int.unsigned (Int.and x6 (Int.repr (Zpos (xI (xI xH)))))))
          (@length val v´36)
)(
  rrr1 : Z.lt
           (Int.unsigned
              (Int.shru (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                 (Int.repr (Zpos (xI xH))))) (Z.of_nat (@length val v´36))
)(
  rrr2 : Z.lt
           (Int.unsigned
              (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                 (Int.repr (Zpos (xI (xI xH))))))
           (Z.of_nat (@length val v´36))
)(
  rrr3 : Z.lt
           (Int.unsigned
              (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                 (Int.repr (Zpos (xI xH))))) (Z.of_nat (@length val v´36))
)(
  rrr4 : Z.lt
           (Int.unsigned
              (Int.and (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                 (Int.repr (Zpos (xI (xI xH))))))
           (Z.of_nat (@length val v´36))
)(
  rrr5 : Z.lt (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH)))))
           (Z.of_nat (@length val v´36))
)(
  rrr6 : Z.lt (Int.unsigned (Int.and x6 (Int.repr (Zpos (xI (xI xH))))))
           (Z.of_nat (@length val v´36))
)(
  HH58 : @eq nat (@length val v´36) (Z.to_nat (Zpos (xO (xO (xO xH)))))
)(
  aa : @eq bool
         (rule_type_val_match Tint8
            (nth_val´
               (Z.to_nat
                  (Int.unsigned
                     (Int.shru
                        (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                        (Int.repr (Zpos (xI xH)))))) v´36)) true
)(
  aa2 : @eq bool
          (rule_type_val_match Tint8
             (nth_val´
                (Z.to_nat
                   (Int.unsigned
                      (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                         (Int.repr (Zpos (xI xH)))))) v´36)) true
)(
  aa3 : @eq bool
          (rule_type_val_match Tint8
             (nth_val´
                (Z.to_nat
                   (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH))))))
                v´36)) true
)(
  x16 : Int.int
)(
  H88 : @eq val
          (nth_val´
             (Z.to_nat
                (Int.unsigned
                   (Int.shru (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                      (Int.repr (Zpos (xI xH)))))) v´36)
          (Vint32 x16)
)(
  H91 : Z.le (Int.unsigned x16) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  x13 : Int.int
)(
  H87 : @eq val
          (nth_val´
             (Z.to_nat
                (Int.unsigned
                   (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                      (Int.repr (Zpos (xI xH)))))) v´36)
          (Vint32 x13)
)(
  H90 : Z.le (Int.unsigned x13) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  x12 : Int.int
)(
  H86 : @eq val
          (nth_val´
             (Z.to_nat (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH))))))
             v´36) (Vint32 x12)
)(
  H89 : Z.le (Int.unsigned x12) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H92 : @eq val x1 (Vptr v´51)
),
   InfRules OSQ_spec GetHPrio I
     (fun v : option val =>
      Astar
        (Astar
           (Astar
              (Astar
                 (@Aexists val
                    (fun v0 : val => Alvarmapsto pevent (Tptr OS_EVENT) v0))
                 (Astar
                    (@Aexists val
                       (fun v0 : val => Alvarmapsto os_code_defs.x Tint8 v0))
                    (Astar
                       (@Aexists val
                          (fun v0 : val => Alvarmapsto pip Tint8 v0))
                       (Astar
                          (@Aexists val
                             (fun v0 : val => Alvarmapsto prio Tint8 v0))
                          (Astar
                             (@Aexists val
                                (fun v0 : val => Alvarmapsto legal Tint8 v0))
                             Aemp)))))
              (Astar (Aie true)
                 (Astar (Ais (@nil hid))
                    (Astar (Acs (@nil ie)) (Aisr empisr)))))
           (A_dom_lenv
              (@cons (prod ident type)
                 (@pair ident type pevent (Tptr OS_EVENT))
                 (@cons (prod ident type)
                    (@pair ident type os_code_defs.x Tint8)
                    (@cons (prod ident type) (@pair ident type pip Tint8)
                       (@cons (prod ident type) (@pair ident type prio Tint8)
                          (@cons (prod ident type)
                             (@pair ident type legal Tint8)
                             (@nil (prod ident type)))))))))
        (Aop´ (spec_done v))) Afalse
     (Astar
        (Aop´
           (mutexpost
              (@cons val (Vptr (@pair block Int.int v´29 Int.zero))
                 (@nil val))))
        (Astar
           (A_dom_lenv
              (@cons (prod ident type)
                 (@pair ident type pevent (Tptr OS_EVENT))
                 (@cons (prod ident type)
                    (@pair ident type os_code_defs.x Tint8)
                    (@cons (prod ident type) (@pair ident type pip Tint8)
                       (@cons (prod ident type) (@pair ident type prio Tint8)
                          (@cons (prod ident type)
                             (@pair ident type legal Tint8)
                             (@nil (prod ident type))))))))
           (Astar
              (GAarray OSRdyTbl (Tarray Tint8 (nat_of_Z OS_RDY_TBL_SIZE))
                 (update_nth_val
                    (Z.to_nat
                       (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH))))))
                    v´36
                    (val_inj
                       (and
                          (nth_val´
                             (Z.to_nat
                                (Int.unsigned
                                   (Int.shru x6 (Int.repr (Zpos (xI xH))))))
                             v´36)
                          (Vint32
                             (Int.not
                                (Int.shl (Int.repr (Zpos xH))
                                   (Int.and x6 (Int.repr (Zpos (xI (xI xH))))))))))))
              (Astar
                 (Alvarmapsto os_code_defs.x Tint8
                    (Vint32
                       (Int.add (Int.shl x2 (Int.repr (Zpos (xI xH)))) x5)))
                 (Astar (Alvarmapsto legal Tint8 (Vint32 x2))
                    (Astar (Aptrmapsto v´51 Tint8 v´32)
                       (Astar
                          (Astruct (@pair block Int.int v´52 Int.zero) OS_TCB
                             (@cons val x7
                                (@cons val v´24
                                   (@cons val x15
                                      (@cons val m
                                         (@cons val
                                            (Vint32 i6)
                                            (@cons val
                                               (Vint32 x14)
                                               (@cons val
                                                  (Vint32 x6)
                                                  (@cons val
                                                  (Vint32
                                                  (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))
                                                  (@cons val
                                                  (Vint32
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH)))))
                                                  (@cons val
                                                  (Vint32
                                                  (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH)))))))
                                                  (@cons val
                                                  (Vint32
                                                  (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  (@nil val)))))))))))))
                          (Astar
                             (dllseg x7
                                (Vptr (@pair block Int.int v´52 Int.zero))
                                v´40 Vnull v´35 OS_TCB
                                (fun vl : vallist => nth_val (S O) vl)
                                (fun vl : vallist => nth_val O vl))
                             (Astar
                                (Agvarmapsto OSTCBList (Tptr OS_TCB) v´31)
                                (Astar
                                   (dllseg v´31 Vnull v´24
                                      (Vptr
                                         (@pair block Int.int v´52 Int.zero))
                                      v´33 OS_TCB
                                      (fun vl : vallist => nth_val (S O) vl)
                                      (fun vl : vallist => nth_val O vl))
                                   (Astar
                                      (Agvarmapsto OSTCBCur
                                         (Tptr OS_TCB)
                                         (Vptr
                                            (@pair block Int.int v´52
                                               Int.zero)))
                                      (Astar
                                         (Alvarmapsto prio Tint8
                                            (Vint32
                                               (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8))))
                                         (Astar
                                            (Alvarmapsto pip Tint8
                                               (Vint32
                                                  (Int.shru x
                                                  (Int.repr
                                                  (Zpos (xO (xO (xO xH))))))))
                                            (Astar
                                               (Astruct
                                                  (@pair block Int.int v´29
                                                  Int.zero) OS_EVENT
                                                  (@cons val
                                                  (Vint32
                                                  (Int.repr
                                                  OS_EVENT_TYPE_MUTEX))
                                                  (@cons val
                                                  (Vint32 i)
                                                  (@cons val
                                                  (Vint32 x)
                                                  (@cons val
                                                  (Vptr
                                                  (@pair block Int.int v´52
                                                  (Int.repr Z0)))
                                                  (@cons val x3
                                                  (@cons val v´46 (@nil val))))))))
                                               (Astar
                                                  (Aarray v´23
                                                  (Tarray Tint8
                                                  (nat_of_Z OS_EVENT_TBL_SIZE))
                                                  v´44)
                                                  (Astar
                                                  (Aie false)
                                                  (Astar
                                                  (Ais (@nil hid))
                                                  (Astar
                                                  (Acs
                                                  (@cons bool true
                                                  (@nil bool)))
                                                  (Astar
                                                  (Aisr empisr)
                                                  (Astar
                                                  (Agvarmapsto OSEventList
                                                  (Tptr OS_EVENT) v´42)
                                                  (Astar
                                                  (evsllseg v´42
                                                  (Vptr
                                                  (@pair block Int.int v´29
                                                  Int.zero)) v´25 v´27)
                                                  (Astar
                                                  (evsllseg v´46 Vnull v´26
                                                  v´28)
                                                  (Astar A_isr_is_prop
                                                  (Astar
                                                  (Agvarmapsto OSRdyGrp Tint8
                                                  (Vint32 i7))
                                                  (Astar
                                                  (GAarray OSTCBPrioTbl
                                                  (Tarray
                                                  (Tptr OS_TCB)
                                                  64)
                                                  v´30)
                                                  (Astar
                                                  (Agvarenv´ OSPlaceHolder
                                                  Tint8 v´51)
                                                  (Astar
                                                  (Aabsdata absecblsid
                                                  (absecblist v´38))
                                                  (Astar
                                                  (Aabsdata abstcblsid
                                                  (abstcblist v´39))
                                                  (Astar
                                                  (Aabsdata curtid
                                                  (oscurt
                                                  (@pair block Int.int v´52
                                                  Int.zero)))
                                                  (Astar
                                                  (AOSEventFreeList v´3)
                                                  (Astar
                                                  (AOSQFreeList v´4)
                                                  (Astar
                                                  (AOSQFreeBlk v´5)
                                                  (Astar
                                                  (GAarray OSMapTbl
                                                  (Tarray Tint8
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O)))))))))
                                                  OSMapVallist)
                                                  (Astar
                                                  (GAarray OSUnMapTbl
                                                  (Tarray Tint8
                                                256)
                                                  OSUnMapVallist)
                                                  (Astar AOSIntNesting
                                                  (Astar
                                                  (AOSTCBFreeList v´21 v´22)
                                                  (Astar
                                                  (AOSTime (Vint32 v´18))
                                                  (Astar
                                                  (Aabsdata ostmid
                                                  (ostm v´18))
                                                  (Astar AGVars
                                                  (Astar atoy_inv´
                                                  (Alvarmapsto pevent
                                                  (Tptr OS_EVENT)
                                                  (Vptr
                                                  (@pair block Int.int v´29
                                                  Int.zero)))))))))))))))))))))))))))))))))))))))))))
     (sseq
        (sifthen
           (ebinop oeq
              (earrayelem (evar OSRdyTbl)
                 (efield (ederef (evar OSTCBCur)) OSTCBY))
              (econst32 (Int.repr Z0)))
           (sassign (evar OSRdyGrp)
              (ebinop obitand (evar OSRdyGrp)
                 (eunop negation (efield (ederef (evar OSTCBCur)) OSTCBBitY)))))
        (sseq
           (sassign (efield (ederef (evar OSTCBCur)) OSTCBPrio) (evar prio))
           (sseq
              (sassign (efield (ederef (evar OSTCBCur)) OSTCBY)
                 (ebinop orshift (evar prio)
                    (econst32 (Int.repr (Zpos (xI xH))))))
              (sseq
                 (sassign (efield (ederef (evar OSTCBCur)) OSTCBBitY)
                    (earrayelem (evar OSMapTbl)
                       (efield (ederef (evar OSTCBCur)) OSTCBY)))
                 (sseq
                    (sassign (efield (ederef (evar OSTCBCur)) OSTCBX)
                       (ebinop obitand (evar prio)
                          (econst32 (Int.repr (Zpos (xI (xI xH)))))))
                    (sseq
                       (sassign (efield (ederef (evar OSTCBCur)) OSTCBBitX)
                          (earrayelem (evar OSMapTbl)
                             (efield (ederef (evar OSTCBCur)) OSTCBX)))
                       (sseq
                          (sassign (evar OSRdyGrp)
                             (ebinop obitor (evar OSRdyGrp)
                                (efield (ederef (evar OSTCBCur)) OSTCBBitY)))
                          (sseq
                             (sassign
                                (earrayelem (evar OSRdyTbl)
                                   (efield (ederef (evar OSTCBCur)) OSTCBY))
                                (ebinop obitor
                                   (earrayelem (evar OSRdyTbl)
                                      (efield (ederef (evar OSTCBCur)) OSTCBY))
                                   (efield (ederef (evar OSTCBCur)) OSTCBBitX)))
                             (sseq
                                (sassign
                                   (earrayelem (evar OSTCBPrioTbl)
                                      (evar prio))
                                   (ecast (evar OSTCBCur) (Tptr OS_TCB)))
                                (sassign
                                   (earrayelem (evar OSTCBPrioTbl) (evar pip))
                                   (ecast os_mutex.PlaceHolder (Tptr OS_TCB))))))))))))
     ( (
    <|| mutexpost (Vptr (v´29, Int.zero) :: nil) ||> **
   A_dom_lenv
     ((pevent, OS_EVENT )
      :: (os_code_defs.x, Int8u)
         :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil) **
   GAarray OSTCBPrioTbl (Tarray OS_TCB 64)
     (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x ($ 8))))
        (update_nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8)))
           v´30 (Vptr (v´52, Int.zero))) (Vptr v´51)) **
   GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE)
     (update_nth_val
        (Z.to_nat (Int.unsigned (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3))))
        (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
           (val_inj (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7)))))))
        (val_inj
           (or
              (nth_val´
                 (Z.to_nat (Int.unsigned (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3))))
                 (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
                    (val_inj
                       (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
              (Vint32 x11)))) **
   GV OSRdyGrp @ Int8u |-> Vint32 (Int.or (i7&Int.not ($ 1<<(Int.shru x6 ($ 3)))) x8) **
   GV OSTCBCur @ OS_TCB |-> Vptr (v´52, Int.zero) **
   Astruct (v´52, Int.zero) OS_TCB
     (x7
      :: v´24
         :: x15
            :: m
               :: Vint32 i6
                  :: Vint32 x14
                     :: Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8)
                        :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)
                           :: Vint32 (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3))
                              :: Vint32 x11 :: Vint32 x8 :: nil) **
   LV os_code_defs.x @ Int8u |-> Vint32 ((x2<<$ 3)+ᵢx5) **
   LV legal @ Int8u |-> Vint32 x2 **
   PV v´51 @ Int8u |-> v´32 **
   dllseg x7 (Vptr (v´52, Int.zero)) v´40 Vnull v´35 OS_TCB
     (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
   GV OSTCBList @ OS_TCB |-> v´31 **
   dllseg v´31 Vnull v´24 (Vptr (v´52, Int.zero)) v´33 OS_TCB
     (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
   LV prio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
   LV pip @ Int8u |-> Vint32 (Int.shru x ($ 8)) **
   Astruct (v´29, Int.zero) OS_EVENT
     (V$OS_EVENT_TYPE_MUTEX
      :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil) **
   Aarray v´23 (Tarray Int8u OS_EVENT_TBL_SIZE) v´44 **
   Aie false **
   Ais nil **
   Acs (true :: nil) **
   Aisr empisr **
   GV OSEventList @ OS_EVENT |-> v´42 **
   evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
   evsllseg v´46 Vnull v´26 v´28 **
   A_isr_is_prop **
   G&OSPlaceHolder @ Int8u == v´51 **
   HECBList v´38 **
   HTCBList v´39 **
   HCurTCB (v´52, Int.zero) **
   AOSEventFreeList v´3 **
   AOSQFreeList v´4 **
   AOSQFreeBlk v´5 **
   GAarray OSMapTbl (Tarray Int8u 8) OSMapVallist **
   GAarray OSUnMapTbl (Tarray Int8u 256) OSUnMapVallist **
   AOSIntNesting **
   AOSTCBFreeList v´21 v´22 **
   AOSTime (Vint32 v´18) **
   HTime v´18 **
   AGVars **
   atoy_inv´ **
   LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
   [|val_inj
       (val_eq
          (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3))))
             (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
                (val_inj
                   (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
          (V$0)) <> Vint32 Int.zero /\
     val_inj
       (val_eq
          (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3))))
             (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
                (val_inj
                   (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
          (V$0)) <> Vnull /\
     val_inj
       (val_eq
          (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3))))
             (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
                (val_inj
                   (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
          (V$0)) <> Vundef|] **
   [|val_inj
       (val_eq
          (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3))))
             (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
                (val_inj
                   (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
          (V$0)) <> Vint32 Int.zero /\
     val_inj
       (val_eq
          (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3))))
             (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
                (val_inj
                   (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
          (V$0)) <> Vnull /\
     val_inj
       (val_eq
          (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3))))
             (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
                (val_inj
                   (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
          (V$0)) <> Vundef|]
          ) **
          [| x1 = Vptr v´51 |]
          \\// (
              <|| mutexpost (Vptr (v´29, Int.zero) :: nil) ||> **
   A_dom_lenv
     ((pevent, OS_EVENT )
      :: (os_code_defs.x, Int8u)
         :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil) **
   GAarray OSTCBPrioTbl (Tarray OS_TCB 64)
     (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x ($ 8))))
        (update_nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8)))
           v´30 (Vptr (v´52, Int.zero))) (Vptr v´51)) **
   GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE)
     (update_nth_val
        (Z.to_nat (Int.unsigned (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3))))
        (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
           (val_inj (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7)))))))
        (val_inj
           (or
              (nth_val´
                 (Z.to_nat (Int.unsigned (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3))))
                 (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
                    (val_inj
                       (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
              (Vint32 x11)))) **
   GV OSRdyGrp @ Int8u |-> Vint32 (Int.or i7 x8) **
   GV OSTCBCur @ OS_TCB |-> Vptr (v´52, Int.zero) **
   Astruct (v´52, Int.zero) OS_TCB
     (x7
      :: v´24
         :: x15
            :: m
               :: Vint32 i6
                  :: Vint32 x14
                     :: Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8)
                        :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)
                           :: Vint32 (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3))
                              :: Vint32 x11 :: Vint32 x8 :: nil) **
   LV os_code_defs.x @ Int8u |-> Vint32 ((x2<<$ 3)+ᵢx5) **
   LV legal @ Int8u |-> Vint32 x2 **
   PV v´51 @ Int8u |-> v´32 **
   dllseg x7 (Vptr (v´52, Int.zero)) v´40 Vnull v´35 OS_TCB
     (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
   GV OSTCBList @ OS_TCB |-> v´31 **
   dllseg v´31 Vnull v´24 (Vptr (v´52, Int.zero)) v´33 OS_TCB
     (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
   LV prio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
   LV pip @ Int8u |-> Vint32 (Int.shru x ($ 8)) **
   Astruct (v´29, Int.zero) OS_EVENT
     (V$OS_EVENT_TYPE_MUTEX
      :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil) **
   Aarray v´23 (Tarray Int8u OS_EVENT_TBL_SIZE) v´44 **
   Aie false **
   Ais nil **
   Acs (true :: nil) **
   Aisr empisr **
   GV OSEventList @ OS_EVENT |-> v´42 **
   evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
   evsllseg v´46 Vnull v´26 v´28 **
   A_isr_is_prop **
   G&OSPlaceHolder @ Int8u == v´51 **
   HECBList v´38 **
   HTCBList v´39 **
   HCurTCB (v´52, Int.zero) **
   AOSEventFreeList v´3 **
   AOSQFreeList v´4 **
   AOSQFreeBlk v´5 **
   GAarray OSMapTbl (Tarray Int8u 8) OSMapVallist **
   GAarray OSUnMapTbl (Tarray Int8u 256) OSUnMapVallist **
   AOSIntNesting **
   AOSTCBFreeList v´21 v´22 **
   AOSTime (Vint32 v´18) **
   HTime v´18 **
   AGVars **
   atoy_inv´ **
   LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
   [|val_inj
       (val_eq
          (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3))))
             (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
                (val_inj
                   (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
          (V$0)) = Vint32 Int.zero \/
     val_inj
       (val_eq
          (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3))))
             (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
                (val_inj
                   (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
          (V$0)) = Vnull|] **
          [| x1 = Vptr v´51 |]
          )
).

Definition gen_MutexPostPIRdyTable2:= forall(
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : int32
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : length v´25 = length v´27
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Int8u v´44
)(
  H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  i : int32
)(
  H21 : Int.unsigned i <= 255
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
  H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
  H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
  x : int32
)(
  H10 : Int.unsigned x <= 65535
)(
  H15 : Int.unsigned (Int.shru x ($ 8)) < 64
)(
  H22 : Int.unsigned x <= 65535
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : v´31 <> Vnull
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : Vptr (v´52, Int.zero) <> Vnull
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 65535
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
  H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
  H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
         v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H47 : Int.ltu (Int.shru x ($ 8)) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
  H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (Int.shru x ($ 8)) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
         w) v´48 v´49
)(
  H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (Int.shru x ($ 8)) opr = true /\ Int.unsigned opr < 64
)(
  H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (Int.shru x ($ 8))
                (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match OS_TCB v´30
)(
  H51 : length v´30 = 64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x1 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some x1
)(
  x0 : val
)(
  H53 : nth_val (Z.to_nat (Int.unsigned (Int.shru x ($ 8)))) v´30 = Some x0
)(
  H54 : array_type_vallist_match Int8u v´36
)(
  H58 : length v´36 = OS_RDY_TBL_SIZE
)(
  i7 : int32
)(
  H55 : Int.unsigned i7 <= 255
)(
  H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
  H59 : length OSUnMapVallist = 256%nat
)(
  H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
  H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
  H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
  fffbb : Int.unsigned x2 < 8
)(
  fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
  H19´´ : length v´44 = Z.to_nat 8
)(
  x4 : int32
)(
  H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
  H64 : Int.unsigned x4 <= 255
)(
  H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
  x5 : int32
)(
  H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
  H67 : Int.unsigned x5 <= 255
)(
  ttfasd : Int.unsigned x5 < 8
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x6 : int32
)(
  x14 : int32
)(
  H77 : 0 <= Int.unsigned x6
)(
  H85 : Int.unsigned x6 < 64
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
  x15 : val
)(
  H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
  H43 : Int.unsigned (Int.shru x6 ($ 3)) <= 255
)(
  H45 : Int.unsigned ($ 1<<(Int.shru x6 ($ 3))) <= 255
)(
  H44 : Int.unsigned ($ 1<<(x6&$ 7)) <= 255
)(
  H42 : Int.unsigned (x6&$ 7) <= 255
)(
  H70 : TcbJoin (v´52, Int.zero) (x6, t, m) x10 v´45
)(
  H41 : Int.unsigned x6 <= 255
)(
  H28 : Int.ltu x6 (Int.shru x ($ 8)) = false
)(
  H37 : isptr x15
)(
  H40 : Int.unsigned x14 <= 255
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 x6
                             :: Vint32 (x6&$ 7)
                                :: Vint32 (Int.shru x6 ($ 3))
                                   :: Vint32 ($ 1<<(x6&$ 7))
                                      :: Vint32 ($ 1<<(Int.shru x6 ($ 3))) :: nil) v´36
          (x6, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 x6
                                  :: Vint32 (x6&$ 7)
                                     :: Vint32 (Int.shru x6 ($ 3))
                                        :: Vint32 ($ 1<<(x6&$ 7))
                                           :: Vint32 ($ 1<<(Int.shru x6 ($ 3))) :: nil)
               :: v´35) v´36 v´45
)(
  r1 : Int.unsigned (Int.shru (Int.shru x ($ 8)) ($ 3)) < 8
)(
  r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
  r3 : Int.unsigned (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3)) < 8
)(
  r4 : Int.unsigned ((Int.shru x ($ 8))&$ 7) < 8
)(
  H34 : array_type_vallist_match Int8u OSMapVallist
)(
  H69 : length OSMapVallist = 8%nat
)(
  H71 : (Z.to_nat (Int.unsigned (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3))) < 8)%nat
)(
  x8 : int32
)(
  H74 : nth_val´ (Z.to_nat (Int.unsigned (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3))))
          OSMapVallist = Vint32 x8
)(
  H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
  H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x9
)(
  H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
  H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x11
)(
  H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
  r5 : Int.unsigned (Int.shru x6 ($ 3)) < 8
)(
  r6 : Int.unsigned (x6&$ 7) < 8
)(
  rr1 : (Z.to_nat (Int.unsigned (Int.shru (Int.shru x ($ 8)) ($ 3))) < length v´36)%nat
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3))) <
         length v´36)%nat
)(
  rr4 : (Z.to_nat (Int.unsigned ((Int.shru x ($ 8))&$ 7)) < length v´36)%nat
)(
  rr5 : (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3))) < length v´36)%nat
)(
  rr6 : (Z.to_nat (Int.unsigned (x6&$ 7)) < length v´36)%nat
)(
  rrr1 : Int.unsigned (Int.shru (Int.shru x ($ 8)) ($ 3)) < Z.of_nat (length v´36)
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3)) <
         Z.of_nat (length v´36)
)(
  rrr4 : Int.unsigned ((Int.shru x ($ 8))&$ 7) < Z.of_nat (length v´36)
)(
  rrr5 : Int.unsigned (Int.shru x6 ($ 3)) < Z.of_nat (length v´36)
)(
  rrr6 : Int.unsigned (x6&$ 7) < Z.of_nat (length v´36)
)(
  HH58 : length v´36 = Z.to_nat 8
)(
  aa : rule_type_val_match Int8u
         (nth_val´ (Z.to_nat (Int.unsigned (Int.shru (Int.shru x ($ 8)) ($ 3)))) v´36) = true
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3))))
             v´36) = true
)(
  aa3 : rule_type_val_match Int8u
          (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36) = true
)(
  x16 : int32
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned (Int.shru (Int.shru x ($ 8)) ($ 3)))) v´36 = Vint32 x16
)(
  H91 : Int.unsigned x16 <= 255
)(
  x13 : int32
)(
  H87 : nth_val´ (Z.to_nat (Int.unsigned (Int.shru (x&$ OS_MUTEX_KEEP_LOWER_8) ($ 3))))
          v´36 = Vint32 x13
)(
  H90 : Int.unsigned x13 <= 255
)(
  x12 : int32
)(
  H86 : nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36 = Vint32 x12
)(
  H89 : Int.unsigned x12 <= 255
)(
  H92 : x1 = Vptr v´51
),
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{( <|| mutexpost (Vptr (v´29, Int.zero) :: nil) ||> **
      A_dom_lenv
        ((pevent, OS_EVENT )
         :: (os_code_defs.x, Int8u)
            :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil) **
      GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE)
        (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
           (val_inj
              (and (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36)
                 (Vint32 (Int.not ($ 1<<(x6&$ 7))))))) **
      LV os_code_defs.x @ Int8u |-> Vint32 ((x2<<$ 3)+ᵢx5) **
      LV legal @ Int8u |-> Vint32 x2 **
      PV v´51 @ Int8u |-> v´32 **
      Astruct (v´52, Int.zero) OS_TCB
        (x7
         :: v´24
            :: x15
               :: m
                  :: Vint32 i6
                     :: Vint32 x14
                        :: Vint32 x6
                           :: Vint32 (x6&$ 7)
                              :: Vint32 (Int.shru x6 ($ 3))
                                 :: Vint32 ($ 1<<(x6&$ 7))
                                    :: Vint32 ($ 1<<(Int.shru x6 ($ 3))) :: nil) **
      dllseg x7 (Vptr (v´52, Int.zero)) v´40 Vnull v´35 OS_TCB
        (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
      GV OSTCBList @ OS_TCB |-> v´31 **
      dllseg v´31 Vnull v´24 (Vptr (v´52, Int.zero)) v´33 OS_TCB
        (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
      GV OSTCBCur @ OS_TCB |-> Vptr (v´52, Int.zero) **
      LV prio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
      LV pip @ Int8u |-> Vint32 (Int.shru x ($ 8)) **
      Astruct (v´29, Int.zero) OS_EVENT
        (V$OS_EVENT_TYPE_MUTEX
         :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil) **
      Aarray v´23 (Tarray Int8u OS_EVENT_TBL_SIZE) v´44 **
      Aie false **
      Ais nil **
      Acs (true :: nil) **
      Aisr empisr **
      GV OSEventList @ OS_EVENT |-> v´42 **
      evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
      evsllseg v´46 Vnull v´26 v´28 **
      A_isr_is_prop **
      GV OSRdyGrp @ Int8u |-> Vint32 i7 **
      GAarray OSTCBPrioTbl (Tarray OS_TCB 64) v´30 **
      G&OSPlaceHolder @ Int8u == v´51 **
      HECBList v´38 **
      HTCBList v´39 **
      HCurTCB (v´52, Int.zero) **
      AOSEventFreeList v´3 **
      AOSQFreeList v´4 **
      AOSQFreeBlk v´5 **
      GAarray OSMapTbl (Tarray Int8u 8) OSMapVallist **
      GAarray OSUnMapTbl (Tarray Int8u 256) OSUnMapVallist **
      AOSIntNesting **
      AOSTCBFreeList v´21 v´22 **
      AOSTime (Vint32 v´18) **
      HTime v´18 **
      AGVars ** atoy_inv´ ** LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero)) **
     [|val_inj
         (val_eq
            (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3))))
               (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
                  (val_inj
                     (and (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36)
                        (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
            (V$0)) = Vint32 Int.zero \/
       val_inj
         (val_eq
            (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3))))
               (update_nth_val (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36
                  (val_inj
                     (and (nth_val´ (Z.to_nat (Int.unsigned (Int.shru x6 ($ 3)))) v´36)
                        (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
            (V$0)) = Vnull|]}}
   OSTCBCur OSTCBPrio =ₑ prio ;ₛ
   OSTCBCur OSTCBY =ₑ prio 3;ₛ
   OSTCBCur OSTCBBitY =ₑ OSMapTbl [OSTCBCur OSTCBY];ₛ
   OSTCBCur OSTCBX =ₑ prio &ₑ 7;ₛ
   OSTCBCur OSTCBBitX =ₑ OSMapTbl [OSTCBCur OSTCBX];ₛ
   OSRdyGrp =ₑ OSRdyGrp |ₑ OSTCBCur OSTCBBitY;ₛ
   OSRdyTbl [OSTCBCur OSTCBY] =ₑ
   OSRdyTbl [OSTCBCur OSTCBY] |ₑ OSTCBCur OSTCBBitX;ₛ
   OSTCBPrioTbl [prio ] =ₑ OS_TCB OSTCBCur ;ₛ
   OSTCBPrioTbl [pip ] =ₑ OS_TCB os_mutex.PlaceHolder {{(
     (Astar
        (Aop´
           (mutexpost
              (@cons val (Vptr (@pair block Int.int v´29 Int.zero))
                 (@nil val))))
        (Astar
           (A_dom_lenv
              (@cons (prod ident type)
                 (@pair ident type pevent (Tptr OS_EVENT))
                 (@cons (prod ident type)
                    (@pair ident type os_code_defs.x Tint8)
                    (@cons (prod ident type) (@pair ident type pip Tint8)
                       (@cons (prod ident type) (@pair ident type prio Tint8)
                          (@cons (prod ident type)
                             (@pair ident type legal Tint8)
                             (@nil (prod ident type))))))))
           (Astar
              (GAarray OSTCBPrioTbl
                 (Tarray (Tptr OS_TCB)
                    (S
                       (S
                          (S
                             (S
                                (S
                                   (S
                                      (S
                                         (S
                                            (S
                                               (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                 (update_nth_val
                    (Z.to_nat
                       (Int.unsigned
                          (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))))
                    (update_nth_val
                       (Z.to_nat
                          (Int.unsigned
                             (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
                       v´30 (Vptr (@pair block Int.int v´52 Int.zero)))
                    (Vptr v´51)))
              (Astar
                 (GAarray OSRdyTbl (Tarray Tint8 (nat_of_Z OS_RDY_TBL_SIZE))
                    (update_nth_val
                       (Z.to_nat
                          (Int.unsigned
                             (Int.shru
                                (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                                (Int.repr (Zpos (xI xH))))))
                       (update_nth_val
                          (Z.to_nat
                             (Int.unsigned
                                (Int.shru x6 (Int.repr (Zpos (xI xH))))))
                          v´36
                          (val_inj
                             (and (Vint32 x12)
                                (Vint32
                                   (Int.not
                                      (Int.shl (Int.repr (Zpos xH))
                                         (Int.and x6
                                            (Int.repr (Zpos (xI (xI xH)))))))))))
                       (val_inj
                          (or
                             (nth_val´
                                (Z.to_nat
                                   (Int.unsigned
                                      (Int.shru
                                         (Int.and x
                                            (Int.repr OS_MUTEX_KEEP_LOWER_8))
                                         (Int.repr (Zpos (xI xH))))))
                                (update_nth_val
                                   (Z.to_nat
                                      (Int.unsigned
                                         (Int.shru x6
                                            (Int.repr (Zpos (xI xH)))))) v´36
                                   (val_inj
                                      (and (Vint32 x12)
                                         (Vint32
                                            (Int.not
                                               (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))))))))
                             (Vint32 x11)))))
                 (Astar (Agvarmapsto OSRdyGrp Tint8 (Vint32 (Int.or i7 x8)))
                    (Astar
                       (Agvarmapsto OSTCBCur (Tptr OS_TCB)
                          (Vptr (@pair block Int.int v´52 Int.zero)))
                       (Astar
                          (Astruct (@pair block Int.int v´52 Int.zero) OS_TCB
                             (@cons val x7
                                (@cons val v´24
                                   (@cons val x15
                                      (@cons val m
                                         (@cons val
                                            (Vint32 i6)
                                            (@cons val
                                               (Vint32 x14)
                                               (@cons val
                                                  (Vint32
                                                  (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8)))
                                                  (@cons val
                                                  (Vint32
                                                  (Int.and
                                                  (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8))
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))
                                                  (@cons val
                                                  (Vint32
                                                  (Int.shru
                                                  (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8))
                                                  (Int.repr (Zpos (xI xH)))))
                                                  (@cons val
                                                  (Vint32 x11)
                                                  (@cons val
                                                  (Vint32 x8)
                                                  (@nil val)))))))))))))
                          (Astar
                             (Alvarmapsto os_code_defs.x Tint8
                                (Vint32
                                   (Int.add
                                      (Int.shl x2 (Int.repr (Zpos (xI xH))))
                                      x5)))
                             (Astar (Alvarmapsto legal Tint8 (Vint32 x2))
                                (Astar (Aptrmapsto v´51 Tint8 v´32)
                                   (Astar
                                      (dllseg x7
                                         (Vptr
                                            (@pair block Int.int v´52
                                               Int.zero)) v´40 Vnull v´35
                                         OS_TCB
                                         (fun vl : vallist =>
                                          nth_val (S O) vl)
                                         (fun vl : vallist => nth_val O vl))
                                      (Astar
                                         (Agvarmapsto OSTCBList
                                            (Tptr OS_TCB) v´31)
                                         (Astar
                                            (dllseg v´31 Vnull v´24
                                               (Vptr
                                                  (@pair block Int.int v´52
                                                  Int.zero)) v´33 OS_TCB
                                               (fun vl : vallist =>
                                                nth_val (S O) vl)
                                               (fun vl : vallist =>
                                                nth_val O vl))
                                            (Astar
                                               (Alvarmapsto prio Tint8
                                                  (Vint32
                                                  (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8))))
                                               (Astar
                                                  (Alvarmapsto pip Tint8
                                                  (Vint32
                                                  (Int.shru x
                                                  (Int.repr
                                                  (Zpos (xO (xO (xO xH))))))))
                                                  (Astar
                                                  (Astruct
                                                  (@pair block Int.int v´29
                                                  Int.zero) OS_EVENT
                                                  (@cons val
                                                  (Vint32
                                                  (Int.repr
                                                  OS_EVENT_TYPE_MUTEX))
                                                  (@cons val
                                                  (Vint32 i)
                                                  (@cons val
                                                  (Vint32 x)
                                                  (@cons val
                                                  (Vptr
                                                  (@pair block Int.int v´52
                                                  (Int.repr Z0)))
                                                  (@cons val x3
                                                  (@cons val v´46 (@nil val))))))))
                                                  (Astar
                                                  (Aarray v´23
                                                  (Tarray Tint8
                                                  (nat_of_Z OS_EVENT_TBL_SIZE))
                                                  v´44)
                                                  (Astar
                                                  (Aie false)
                                                  (Astar
                                                  (Ais (@nil hid))
                                                  (Astar
                                                  (Acs
                                                  (@cons bool true
                                                  (@nil bool)))
                                                  (Astar
                                                  (Aisr empisr)
                                                  (Astar
                                                  (Agvarmapsto OSEventList
                                                  (Tptr OS_EVENT) v´42)
                                                  (Astar
                                                  (evsllseg v´42
                                                  (Vptr
                                                  (@pair block Int.int v´29
                                                  Int.zero)) v´25 v´27)
                                                  (Astar
                                                  (evsllseg v´46 Vnull v´26
                                                  v´28)
                                                  (Astar A_isr_is_prop
                                                  (Astar
                                                  (Agvarenv´ OSPlaceHolder
                                                  Tint8 v´51)
                                                  (Astar
                                                  (Aabsdata absecblsid
                                                  (absecblist v´38))
                                                  (Astar
                                                  (Aabsdata abstcblsid
                                                  (abstcblist v´39))
                                                  (Astar
                                                  (Aabsdata curtid
                                                  (oscurt
                                                  (@pair block Int.int v´52
                                                  Int.zero)))
                                                  (Astar
                                                  (AOSEventFreeList v´3)
                                                  (Astar
                                                  (AOSQFreeList v´4)
                                                  (Astar
                                                  (AOSQFreeBlk v´5)
                                                  (Astar
                                                  (GAarray OSMapTbl
                                                  (Tarray Tint8
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O)))))))))
                                                  OSMapVallist)
                                                  (Astar
                                                  (GAarray OSUnMapTbl
                                                  (Tarray Tint8
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                                                  OSUnMapVallist)
                                                  (Astar AOSIntNesting
                                                  (Astar
                                                  (AOSTCBFreeList v´21 v´22)
                                                  (Astar
                                                  (AOSTime (Vint32 v´18))
                                                  (Astar
                                                  (Aabsdata ostmid
                                                  (ostm v´18))
                                                  (Astar AGVars
                                                  (Astar atoy_inv´
                                                  (Astar
                                                  (Alvarmapsto pevent
                                                  (Tptr OS_EVENT)
                                                  (Vptr
                                                  (@pair block Int.int v´29
                                                  Int.zero)))
                                                  (Apure
                                                  (Logic.or
                                                  (@eq val
                                                  (val_inj
                                                  (val_eq
                                                  (nth_val´
                                                  (Z.to_nat
                                                  (Int.unsigned
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  (update_nth_val
                                                  (Z.to_nat
                                                  (Int.unsigned
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  v´36
                                                  (val_inj
                                                  (and
                                                  (Vint32 x12)
                                                  (Vint32
                                                  (Int.not
                                                  (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))))))))
                                                  (Vint32 (Int.repr Z0))))
                                                  (Vint32 Int.zero))
                                                  (@eq val
                                                  (val_inj
                                                  (val_eq
                                                  (nth_val´
                                                  (Z.to_nat
                                                  (Int.unsigned
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  (update_nth_val
                                                  (Z.to_nat
                                                  (Int.unsigned
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  v´36
                                                  (val_inj
                                                  (and
                                                  (Vint32 x12)
                                                  (Vint32
                                                  (Int.not
                                                  (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))))))))
                                                  (Vint32 (Int.repr Z0))))
                                                  Vnull)))))))))))))))))))))))))))))))))))))))))))))}}
.

Definition gen_tmp:= forall
(
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : Int.int
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : @eq nat (@length EventCtr v´25) (@length EventData v´27)
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Tint8 v´44
)(
  H19 : @eq nat (@length val v´44) (nat_of_Z OS_EVENT_TBL_SIZE)
)(
  x3 : val
)(
  i : Int.int
)(
  H21 : Z.le (Int.unsigned i) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (@pair block Int.int v´29 Int.zero)) v´25 v´27
         v´47 v´39
)(
  H14 : @eq (option (prod block Int.int))
          (id_addrval´ (Vptr (@pair block Int.int v´29 Int.zero)) OSEventTbl
             OS_EVENT) (@Some addrval v´23)
)(
  H20 : Z.le (Int.unsigned (Int.repr OS_EVENT_TYPE_MUTEX))
          (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  x : Int.int
)(
  H10 : Z.le (Int.unsigned x)
          (Zpos
             (xI
                (xI
                   (xI
                      (xI
                         (xI
                            (xI
                               (xI (xI (xI (xI (xI (xI (xI (xI (xI xH))))))))))))))))
)(
  H15 : Z.lt (Int.unsigned (Int.shru x (Int.repr (Zpos (xO (xO (xO xH)))))))
          (Zpos (xO (xO (xO (xO (xO (xO xH)))))))
)(
  H22 : Z.le (Int.unsigned x)
          (Zpos
             (xI
                (xI
                   (xI
                      (xI
                         (xI
                            (xI
                               (xI (xI (xI (xI (xI (xI (xI (xI (xI xH))))))))))))))))
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : not (@eq val v´31 Vnull)
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : not (@eq val (Vptr (@pair block Int.int v´52 Int.zero)) Vnull)
)(
  i6 : Int.int
)(
  H39 : Z.le (Int.unsigned i6)
          (Zpos
             (xI
                (xI
                   (xI
                      (xI
                         (xI
                            (xI
                               (xI (xI (xI (xI (xI (xI (xI (xI (xI xH))))))))))))))))
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (@pair block Int.int v´52 Int.zero)
)(
  H8 : RH_CurTCB (@pair block Int.int v´52 Int.zero) v´39
)(
  H23 : isptr (Vptr (@pair block Int.int v´52 (Int.repr Z0)))
)(
  H5 : R_ECB_ETbl_P (@pair block Int.int v´29 Int.zero)
         (@pair (list val) vallist
            (@cons val (Vint32 (Int.repr OS_EVENT_TYPE_MUTEX))
               (@cons val (Vint32 i)
                  (@cons val (Vint32 x)
                     (@cons val
                        (Vptr (@pair block Int.int v´52 (Int.repr Z0)))
                        (@cons val x3 (@cons val v´46 (@nil val))))))) v´44)
         v´39
)(
  H1 : ECBList_P v´42 Vnull
         (@app EventCtr v´25
            (@app (prod (list val) vallist)
               (@cons (prod (list val) vallist)
                  (@pair (list val) vallist
                     (@cons val (Vint32 (Int.repr OS_EVENT_TYPE_MUTEX))
                        (@cons val (Vint32 i)
                           (@cons val (Vint32 x)
                              (@cons val
                                 (Vptr
                                    (@pair block Int.int v´52 (Int.repr Z0)))
                                 (@cons val x3 (@cons val v´46 (@nil val)))))))
                     v´44) (@nil (prod (list val) vallist))) v´26))
         (@app EventData v´27
            (@app EventData
               (@cons EventData
                  (DMutex (Vint32 x)
                     (Vptr (@pair block Int.int v´52 (Int.repr Z0))))
                  (@nil EventData)) v´28)) v´38 v´39
)(
  H29 : Logic.or
          (@eq Int.int (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
             (Int.repr OS_MUTEX_AVAILABLE))
          (not
             (@eq Int.int (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                (Int.repr OS_MUTEX_AVAILABLE)))
)(
  H35 : not
          (@eq Int.int (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
             (Int.repr OS_MUTEX_AVAILABLE))
)(
  H47 : @eq bool
          (Int.ltu (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
             (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))) true
)(
  H48 : Z.lt (Int.unsigned (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8)))
          (Zpos (xO (xO (xO (xO (xO (xO xH)))))))
)(
  H6 : EcbMod.joinsig (@pair block Int.int v´29 Int.zero)
         (@pair edata waitset
            (absmutexsem (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
               (@Some (prod (prod block Int.int) Int.int)
                  (@pair (prod block Int.int) Int.int
                     (@pair block Int.int v´52 (Int.repr Z0))
                     (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))) w) v´48
         v´49
)(
  H4 : @eq (option (prod (prod block Int.int) Int.int))
         (@Some (prod (prod block Int.int) Int.int)
            (@pair (prod block Int.int) Int.int
               (@pair block Int.int v´52 (Int.repr Z0))
               (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
         (@None (prod (prod block Int.int) Int.int)) ->
       @eq waitset w (@nil tid)
)(
  H9 : forall (tid : tid) (opr : Int.int),
       @eq (option (prod (prod block Int.int) Int.int))
         (@Some (prod (prod block Int.int) Int.int)
            (@pair (prod block Int.int) Int.int
               (@pair block Int.int v´52 (Int.repr Z0))
               (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
         (@Some (prod language.tid Int.int)
            (@pair language.tid Int.int tid opr)) ->
       Logic.and
         (@eq bool
            (Int.ltu (Int.shru x (Int.repr (Zpos (xO (xO (xO xH)))))) opr)
            true)
         (Z.lt (Int.unsigned opr) (Zpos (xO (xO (xO (xO (xO (xO xH))))))))
)(
  H13 : not (@eq waitset w (@nil tid)) ->
        not
          (@eq (option (prod (prod block Int.int) Int.int))
             (@Some (prod (prod block Int.int) Int.int)
                (@pair (prod block Int.int) Int.int
                   (@pair block Int.int v´52 (Int.repr Z0))
                   (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
             (@None (prod (prod block Int.int) Int.int)))
)(
  H25 : @eq Int.int (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
          (Int.repr OS_MUTEX_AVAILABLE) ->
        Logic.and
          (@eq (option (prod (prod block Int.int) Int.int))
             (@Some (prod (prod block Int.int) Int.int)
                (@pair (prod block Int.int) Int.int
                   (@pair block Int.int v´52 (Int.repr Z0))
                   (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
             (@None (prod (prod block Int.int) Int.int)))
          (@eq val (Vptr (@pair block Int.int v´52 (Int.repr Z0))) Vnull)
)(
  H26 : not
          (@eq Int.int (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
             (Int.repr OS_MUTEX_AVAILABLE)) ->
        @ex addrval
          (fun tid : addrval =>
           Logic.and
             (@eq val (Vptr (@pair block Int.int v´52 (Int.repr Z0)))
                (Vptr tid))
             (@eq (option (prod (prod block Int.int) Int.int))
                (@Some (prod (prod block Int.int) Int.int)
                   (@pair (prod block Int.int) Int.int
                      (@pair block Int.int v´52 (Int.repr Z0))
                      (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
                (@Some (prod addrval Int.int)
                   (@pair addrval Int.int tid
                      (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))))
)(
  backup : RLH_ECBData_P
             (DMutex (Vint32 x)
                (Vptr (@pair block Int.int v´52 (Int.repr Z0))))
             (@pair edata waitset
                (absmutexsem (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                   (@Some (prod (prod block Int.int) Int.int)
                      (@pair (prod block Int.int) Int.int
                         (@pair block Int.int v´52 (Int.repr Z0))
                         (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))) w)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match (Tptr OS_TCB) v´30
)(
  H51 : @eq nat (@length val v´30)
          (S
             (S
                (S
                   (S
                      (S
                         (S
                            (S
                               (S
                                  (S
                                     (S
                                        (S
                                           (S
                                              (S
                                                 (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x1 : val
)(
  H52 : @eq (option val)
          (nth_val
             (Z.to_nat
                (Int.unsigned (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
             v´30) (@Some val x1)
)(
  x0 : val
)(
  H53 : @eq (option val)
          (nth_val
             (Z.to_nat
                (Int.unsigned
                   (Int.shru x (Int.repr (Zpos (xO (xO (xO xH)))))))) v´30)
          (@Some val x0)
)(
  H54 : array_type_vallist_match Tint8 v´36
)(
  H58 : @eq nat (@length val v´36) (nat_of_Z OS_RDY_TBL_SIZE)
)(
  i7 : Int.int
)(
  H55 : Z.le (Int.unsigned i7) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H57 : prio_in_tbl (Int.repr OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : Int.int
)(
  fffa : @eq nat (@length val OSUnMapVallist)
           (S
              (S
                 (S
                    (S
                       (S
                          (S
                             (S
                                (S
                                   (S
                                      (S
                                         (S
                                            (S
                                               (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ->
         lt (Z.to_nat (Int.unsigned i))
           (S
              (S
                 (S
                    (S
                       (S
                          (S
                             (S
                                (S
                                   (S
                                      (S
                                         (S
                                            (S
                                               (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ->
         @ex Int.int
           (fun x4 : Int.int =>
            Logic.and (@eq val (Vint32 x2) (Vint32 x4))
              (@eq bool true (rule_type_val_match Tint8 (Vint32 x4))))
)(
  H59 : @eq nat (@length val OSUnMapVallist)
          (S
             (S
                (S
                   (S
                      (S
                         (S
                            (S
                               (S
                                  (S
                                     (S
                                        (S
                                           (S
                                              (S
                                                 (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
)(
  H60 : lt (Z.to_nat (Int.unsigned i))
          (S
             (S
                (S
                   (S
                      (S
                         (S
                            (S
                               (S
                                  (S
                                     (S
                                        (S
                                           (S
                                              (S
                                                 (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
)(
  H61 : @eq val (nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist)
          (Vint32 x2)
)(
  H62 : @eq bool true (rule_type_val_match Tint8 (Vint32 x2))
)(
  fffbb : Z.lt (Int.unsigned x2) (Zpos (xO (xO (xO xH))))
)(
  fffbb2 : lt (Z.to_nat (Int.unsigned x2)) (@length val v´44)
)(
  H19´´ : @eq nat (@length val v´44) (Z.to_nat (Zpos (xO (xO (xO xH)))))
)(
  x4 : Int.int
)(
  H63 : @eq val (nth_val´ (Z.to_nat (Int.unsigned x2)) v´44) (Vint32 x4)
)(
  H64 : Z.le (Int.unsigned x4) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H65 : lt (Z.to_nat (Int.unsigned x4)) (@length val OSUnMapVallist)
)(
  x5 : Int.int
)(
  H66 : @eq val (nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist)
          (Vint32 x5)
)(
  H67 : Z.le (Int.unsigned x5) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  ttfasd : Z.lt (Int.unsigned x5) (Zpos (xO (xO (xO xH))))
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5)
                            (Int.modu (Int.shru x ($ 8)) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x6 : Int.int
)(
  x14 : Int.int
)(
  H77 : Z.le Z0 (Int.unsigned x6)
)(
  H85 : Z.lt (Int.unsigned x6) (Zpos (xO (xO (xO (xO (xO (xO xH)))))))
)(
  H82 : Logic.or (@eq Int.int x14 (Int.repr OS_STAT_RDY))
          (Logic.or (@eq Int.int x14 (Int.repr OS_STAT_SEM))
             (Logic.or (@eq Int.int x14 (Int.repr OS_STAT_Q))
                (Logic.or (@eq Int.int x14 (Int.repr OS_STAT_MBOX))
                   (@eq Int.int x14 (Int.repr OS_STAT_MUTEX)))))
)(
  x15 : val
)(
  H84 : @eq Int.int x14 (Int.repr OS_STAT_RDY) -> @eq val x15 Vnull
)(
  H43 : Z.le (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH)))))
          (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H45 : Z.le
          (Int.unsigned
             (Int.shl (Int.repr (Zpos xH))
                (Int.shru x6 (Int.repr (Zpos (xI xH))))))
          (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H44 : Z.le
          (Int.unsigned
             (Int.shl (Int.repr (Zpos xH))
                (Int.and x6 (Int.repr (Zpos (xI (xI xH)))))))
          (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H42 : Z.le (Int.unsigned (Int.and x6 (Int.repr (Zpos (xI (xI xH))))))
          (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H70 : TcbJoin (@pair block Int.int v´52 Int.zero)
          (@pair (prod Int.int taskstatus) msg
             (@pair Int.int taskstatus x6 t) m) x10 v´45
)(
  H41 : Z.le (Int.unsigned x6) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H28 : @eq bool
          (Int.ltu x6 (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))) false
)(
  H37 : isptr x15
)(
  H40 : Z.le (Int.unsigned x14) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H73 : R_TCB_Status_P
          (@cons val x7
             (@cons val v´24
                (@cons val x15
                   (@cons msg m
                      (@cons val (Vint32 i6)
                         (@cons val (Vint32 x14)
                            (@cons val (Vint32 x6)
                               (@cons val
                                  (Vint32
                                     (Int.and x6
                                        (Int.repr (Zpos (xI (xI xH))))))
                                  (@cons val
                                     (Vint32
                                        (Int.shru x6
                                           (Int.repr (Zpos (xI xH)))))
                                     (@cons val
                                        (Vint32
                                           (Int.shl
                                              (Int.repr (Zpos xH))
                                              (Int.and x6
                                                 (Int.repr
                                                  (Zpos (xI (xI xH)))))))
                                        (@cons val
                                           (Vint32
                                              (Int.shl
                                                 (Int.repr (Zpos xH))
                                                 (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                           (@nil val)))))))))))) v´36
          (@pair (prod Int.int taskstatus) msg
             (@pair Int.int taskstatus x6 t) m)
)(
  backup2 : TCBList_P (Vptr (@pair block Int.int v´52 Int.zero))
              (@cons (list val)
                 (@cons val x7
                    (@cons val v´24
                       (@cons val x15
                          (@cons msg m
                             (@cons val (Vint32 i6)
                                (@cons val (Vint32 x14)
                                   (@cons val (Vint32 x6)
                                      (@cons val
                                         (Vint32
                                            (Int.and x6
                                               (Int.repr (Zpos (xI (xI xH))))))
                                         (@cons val
                                            (Vint32
                                               (Int.shru x6
                                                  (Int.repr (Zpos (xI xH)))))
                                            (@cons val
                                               (Vint32
                                                  (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH)))))))
                                               (@cons val
                                                  (Vint32
                                                  (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  (@nil val)))))))))))) v´35)
              v´36 v´45
)(
  r1 : Z.lt
         (Int.unsigned
            (Int.shru (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
               (Int.repr (Zpos (xI xH))))) (Zpos (xO (xO (xO xH))))
)(
  r2 : Z.lt
         (Int.unsigned
            (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
               (Int.repr (Zpos (xI (xI xH)))))) (Zpos (xO (xO (xO xH))))
)(
  r3 : Z.lt
         (Int.unsigned
            (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
               (Int.repr (Zpos (xI xH))))) (Zpos (xO (xO (xO xH))))
)(
  r4 : Z.lt
         (Int.unsigned
            (Int.and (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
               (Int.repr (Zpos (xI (xI xH)))))) (Zpos (xO (xO (xO xH))))
)(
  H34 : array_type_vallist_match Tint8 OSMapVallist
)(
  H69 : @eq nat (@length val OSMapVallist) (S (S (S (S (S (S (S (S O))))))))
)(
  H71 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                   (Int.repr (Zpos (xI xH))))))
          (S (S (S (S (S (S (S (S O))))))))
)(
  x8 : Int.int
)(
  H74 : @eq val
          (nth_val´
             (Z.to_nat
                (Int.unsigned
                   (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                      (Int.repr (Zpos (xI xH)))))) OSMapVallist)
          (Vint32 x8)
)(
  H75 : @eq bool true (rule_type_val_match Tint8 (Vint32 x8))
)(
  H76 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                   (Int.repr (Zpos (xI (xI xH)))))))
          (S (S (S (S (S (S (S (S O))))))))
)(
  x9 : Int.int
)(
  H78 : @eq val
          (nth_val´
             (Z.to_nat
                (Int.unsigned
                   (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                      (Int.repr (Zpos (xI (xI xH))))))) OSMapVallist)
          (Vint32 x9)
)(
  H79 : @eq bool true (rule_type_val_match Tint8 (Vint32 x9))
)(
  H80 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                   (Int.repr (Zpos (xI (xI xH)))))))
          (S (S (S (S (S (S (S (S O))))))))
)(
  x11 : Int.int
)(
  H81 : @eq val
          (nth_val´
             (Z.to_nat
                (Int.unsigned
                   (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                      (Int.repr (Zpos (xI (xI xH))))))) OSMapVallist)
          (Vint32 x11)
)(
  H83 : @eq bool true (rule_type_val_match Tint8 (Vint32 x11))
)(
  r5 : Z.lt (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH)))))
         (Zpos (xO (xO (xO xH))))
)(
  r6 : Z.lt (Int.unsigned (Int.and x6 (Int.repr (Zpos (xI (xI xH))))))
         (Zpos (xO (xO (xO xH))))
)(
  rr1 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.shru (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                   (Int.repr (Zpos (xI xH)))))) (@length val v´36)
)(
  rr2 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                   (Int.repr (Zpos (xI (xI xH)))))))
          (@length val v´36)
)(
  rr3 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                   (Int.repr (Zpos (xI xH)))))) (@length val v´36)
)(
  rr4 : lt
          (Z.to_nat
             (Int.unsigned
                (Int.and (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                   (Int.repr (Zpos (xI (xI xH)))))))
          (@length val v´36)
)(
  rr5 : lt (Z.to_nat (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH))))))
          (@length val v´36)
)(
  rr6 : lt
          (Z.to_nat
             (Int.unsigned (Int.and x6 (Int.repr (Zpos (xI (xI xH)))))))
          (@length val v´36)
)(
  rrr1 : Z.lt
           (Int.unsigned
              (Int.shru (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                 (Int.repr (Zpos (xI xH))))) (Z.of_nat (@length val v´36))
)(
  rrr2 : Z.lt
           (Int.unsigned
              (Int.and (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                 (Int.repr (Zpos (xI (xI xH))))))
           (Z.of_nat (@length val v´36))
)(
  rrr3 : Z.lt
           (Int.unsigned
              (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                 (Int.repr (Zpos (xI xH))))) (Z.of_nat (@length val v´36))
)(
  rrr4 : Z.lt
           (Int.unsigned
              (Int.and (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                 (Int.repr (Zpos (xI (xI xH))))))
           (Z.of_nat (@length val v´36))
)(
  rrr5 : Z.lt (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH)))))
           (Z.of_nat (@length val v´36))
)(
  rrr6 : Z.lt (Int.unsigned (Int.and x6 (Int.repr (Zpos (xI (xI xH))))))
           (Z.of_nat (@length val v´36))
)(
  HH58 : @eq nat (@length val v´36) (Z.to_nat (Zpos (xO (xO (xO xH)))))
)(
  aa : @eq bool
         (rule_type_val_match Tint8
            (nth_val´
               (Z.to_nat
                  (Int.unsigned
                     (Int.shru
                        (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                        (Int.repr (Zpos (xI xH)))))) v´36)) true
)(
  aa2 : @eq bool
          (rule_type_val_match Tint8
             (nth_val´
                (Z.to_nat
                   (Int.unsigned
                      (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                         (Int.repr (Zpos (xI xH)))))) v´36)) true
)(
  aa3 : @eq bool
          (rule_type_val_match Tint8
             (nth_val´
                (Z.to_nat
                   (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH))))))
                v´36)) true
)(
  x16 : Int.int
)(
  H88 : @eq val
          (nth_val´
             (Z.to_nat
                (Int.unsigned
                   (Int.shru (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))
                      (Int.repr (Zpos (xI xH)))))) v´36)
          (Vint32 x16)
)(
  H91 : Z.le (Int.unsigned x16) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  x13 : Int.int
)(
  H87 : @eq val
          (nth_val´
             (Z.to_nat
                (Int.unsigned
                   (Int.shru (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                      (Int.repr (Zpos (xI xH)))))) v´36)
          (Vint32 x13)
)(
  H90 : Z.le (Int.unsigned x13) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  x12 : Int.int
)(
  H86 : @eq val
          (nth_val´
             (Z.to_nat (Int.unsigned (Int.shru x6 (Int.repr (Zpos (xI xH))))))
             v´36) (Vint32 x12)
)(
  H89 : Z.le (Int.unsigned x12) (Zpos (xI (xI (xI (xI (xI (xI (xI xH))))))))
)(
  H92 : @eq val x1 (Vptr v´51)
),
   InfRules OSQ_spec GetHPrio I
     (fun v : option val =>
      Astar
        (Astar
           (Astar
              (Astar
                 (@Aexists val
                    (fun v0 : val => Alvarmapsto pevent (Tptr OS_EVENT) v0))
                 (Astar
                    (@Aexists val
                       (fun v0 : val => Alvarmapsto os_code_defs.x Tint8 v0))
                    (Astar
                       (@Aexists val
                          (fun v0 : val => Alvarmapsto pip Tint8 v0))
                       (Astar
                          (@Aexists val
                             (fun v0 : val => Alvarmapsto prio Tint8 v0))
                          (Astar
                             (@Aexists val
                                (fun v0 : val => Alvarmapsto legal Tint8 v0))
                             Aemp)))))
              (Astar (Aie true)
                 (Astar (Ais (@nil hid))
                    (Astar (Acs (@nil ie)) (Aisr empisr)))))
           (A_dom_lenv
              (@cons (prod ident type)
                 (@pair ident type pevent (Tptr OS_EVENT))
                 (@cons (prod ident type)
                    (@pair ident type os_code_defs.x Tint8)
                    (@cons (prod ident type) (@pair ident type pip Tint8)
                       (@cons (prod ident type) (@pair ident type prio Tint8)
                          (@cons (prod ident type)
                             (@pair ident type legal Tint8)
                             (@nil (prod ident type)))))))))
        (Aop´ (spec_done v))) Afalse
     (Astar
        (Aop´
           (mutexpost
              (@cons val (Vptr (@pair block Int.int v´29 Int.zero))
                 (@nil val))))
        (Astar
           (A_dom_lenv
              (@cons (prod ident type)
                 (@pair ident type pevent (Tptr OS_EVENT))
                 (@cons (prod ident type)
                    (@pair ident type os_code_defs.x Tint8)
                    (@cons (prod ident type) (@pair ident type pip Tint8)
                       (@cons (prod ident type) (@pair ident type prio Tint8)
                          (@cons (prod ident type)
                             (@pair ident type legal Tint8)
                             (@nil (prod ident type))))))))
           (Astar
              (GAarray OSRdyTbl (Tarray Tint8 (nat_of_Z OS_RDY_TBL_SIZE))
                 (update_nth_val
                    (Z.to_nat
                       (Int.unsigned
                          (Int.shru
                             (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                             (Int.repr (Zpos (xI xH))))))
                    (update_nth_val
                       (Z.to_nat
                          (Int.unsigned
                             (Int.shru x6 (Int.repr (Zpos (xI xH)))))) v´36
                       (val_inj
                          (and (Vint32 x12)
                             (Vint32
                                (Int.not
                                   (Int.shl (Int.repr (Zpos xH))
                                      (Int.and x6
                                         (Int.repr (Zpos (xI (xI xH)))))))))))
                    (val_inj
                       (or
                          (nth_val´
                             (Z.to_nat
                                (Int.unsigned
                                   (Int.shru
                                      (Int.and x
                                         (Int.repr OS_MUTEX_KEEP_LOWER_8))
                                      (Int.repr (Zpos (xI xH))))))
                             (update_nth_val
                                (Z.to_nat
                                   (Int.unsigned
                                      (Int.shru x6 (Int.repr (Zpos (xI xH))))))
                                v´36
                                (val_inj
                                   (and (Vint32 x12)
                                      (Vint32
                                         (Int.not
                                            (Int.shl
                                               (Int.repr (Zpos xH))
                                               (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))))))))
                          (Vint32 x11)))))
              (Astar (Agvarmapsto OSRdyGrp Tint8 (Vint32 (Int.or i7 x8)))
                 (Astar
                    (Agvarmapsto OSTCBCur (Tptr OS_TCB)
                       (Vptr (@pair block Int.int v´52 Int.zero)))
                    (Astar
                       (Astruct (@pair block Int.int v´52 Int.zero) OS_TCB
                          (@cons val x7
                             (@cons val v´24
                                (@cons val x15
                                   (@cons val m
                                      (@cons val (Vint32 i6)
                                         (@cons val
                                            (Vint32 x14)
                                            (@cons val
                                               (Vint32
                                                  (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8)))
                                               (@cons val
                                                  (Vint32
                                                  (Int.and
                                                  (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8))
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))
                                                  (@cons val
                                                  (Vint32
                                                  (Int.shru
                                                  (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8))
                                                  (Int.repr (Zpos (xI xH)))))
                                                  (@cons val
                                                  (Vint32 x11)
                                                  (@cons val
                                                  (Vint32 x8)
                                                  (@nil val)))))))))))))
                       (Astar
                          (Alvarmapsto os_code_defs.x Tint8
                             (Vint32
                                (Int.add
                                   (Int.shl x2 (Int.repr (Zpos (xI xH)))) x5)))
                          (Astar (Alvarmapsto legal Tint8 (Vint32 x2))
                             (Astar (Aptrmapsto v´51 Tint8 v´32)
                                (Astar
                                   (dllseg x7
                                      (Vptr
                                         (@pair block Int.int v´52 Int.zero))
                                      v´40 Vnull v´35 OS_TCB
                                      (fun vl : vallist => nth_val (S O) vl)
                                      (fun vl : vallist => nth_val O vl))
                                   (Astar
                                      (Agvarmapsto OSTCBList
                                         (Tptr OS_TCB) v´31)
                                      (Astar
                                         (dllseg v´31 Vnull v´24
                                            (Vptr
                                               (@pair block Int.int v´52
                                                  Int.zero)) v´33 OS_TCB
                                            (fun vl : vallist =>
                                             nth_val (S O) vl)
                                            (fun vl : vallist => nth_val O vl))
                                         (Astar
                                            (Alvarmapsto prio Tint8
                                               (Vint32
                                                  (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8))))
                                            (Astar
                                               (Alvarmapsto pip Tint8
                                                  (Vint32
                                                  (Int.shru x
                                                  (Int.repr
                                                  (Zpos (xO (xO (xO xH))))))))
                                               (Astar
                                                  (Astruct
                                                  (@pair block Int.int v´29
                                                  Int.zero) OS_EVENT
                                                  (@cons val
                                                  (Vint32
                                                  (Int.repr
                                                  OS_EVENT_TYPE_MUTEX))
                                                  (@cons val
                                                  (Vint32 i)
                                                  (@cons val
                                                  (Vint32 x)
                                                  (@cons val
                                                  (Vptr
                                                  (@pair block Int.int v´52
                                                  (Int.repr Z0)))
                                                  (@cons val x3
                                                  (@cons val v´46 (@nil val))))))))
                                                  (Astar
                                                  (Aarray v´23
                                                  (Tarray Tint8
                                                  (nat_of_Z OS_EVENT_TBL_SIZE))
                                                  v´44)
                                                  (Astar
                                                  (Aie false)
                                                  (Astar
                                                  (Ais (@nil hid))
                                                  (Astar
                                                  (Acs
                                                  (@cons bool true
                                                  (@nil bool)))
                                                  (Astar
                                                  (Aisr empisr)
                                                  (Astar
                                                  (Agvarmapsto OSEventList
                                                  (Tptr OS_EVENT) v´42)
                                                  (Astar
                                                  (evsllseg v´42
                                                  (Vptr
                                                  (@pair block Int.int v´29
                                                  Int.zero)) v´25 v´27)
                                                  (Astar
                                                  (evsllseg v´46 Vnull v´26
                                                  v´28)
                                                  (Astar A_isr_is_prop
                                                  (Astar
                                                  (GAarray OSTCBPrioTbl
                                                  (Tarray
                                                  (Tptr OS_TCB)
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                                                  v´30)
                                                  (Astar
                                                  (Agvarenv´ OSPlaceHolder
                                                  Tint8 v´51)
                                                  (Astar
                                                  (Aabsdata absecblsid
                                                  (absecblist v´38))
                                                  (Astar
                                                  (Aabsdata abstcblsid
                                                  (abstcblist v´39))
                                                  (Astar
                                                  (Aabsdata curtid
                                                  (oscurt
                                                  (@pair block Int.int v´52
                                                  Int.zero)))
                                                  (Astar
                                                  (AOSEventFreeList v´3)
                                                  (Astar
                                                  (AOSQFreeList v´4)
                                                  (Astar
                                                  (AOSQFreeBlk v´5)
                                                  (Astar
                                                  (GAarray OSMapTbl
                                                  (Tarray Tint8
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O)))))))))
                                                  OSMapVallist)
                                                  (Astar
                                                  (GAarray OSUnMapTbl
                                                  (Tarray Tint8
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                                                  OSUnMapVallist)
                                                  (Astar AOSIntNesting
                                                  (Astar
                                                  (AOSTCBFreeList v´21 v´22)
                                                  (Astar
                                                  (AOSTime (Vint32 v´18))
                                                  (Astar
                                                  (Aabsdata ostmid
                                                  (ostm v´18))
                                                  (Astar AGVars
                                                  (Astar atoy_inv´
                                                  (Astar
                                                  (Alvarmapsto pevent
                                                  (Tptr OS_EVENT)
                                                  (Vptr
                                                  (@pair block Int.int v´29
                                                  Int.zero)))
                                                  (Apure
                                                  (Logic.or
                                                  (@eq val
                                                  (val_inj
                                                  (val_eq
                                                  (nth_val´
                                                  (Z.to_nat
                                                  (Int.unsigned
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  (update_nth_val
                                                  (Z.to_nat
                                                  (Int.unsigned
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  v´36
                                                  (val_inj
                                                  (and
                                                  (Vint32 x12)
                                                  (Vint32
                                                  (Int.not
                                                  (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))))))))
                                                  (Vint32 (Int.repr Z0))))
                                                  (Vint32 Int.zero))
                                                  (@eq val
                                                  (val_inj
                                                  (val_eq
                                                  (nth_val´
                                                  (Z.to_nat
                                                  (Int.unsigned
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  (update_nth_val
                                                  (Z.to_nat
                                                  (Int.unsigned
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  v´36
                                                  (val_inj
                                                  (and
                                                  (Vint32 x12)
                                                  (Vint32
                                                  (Int.not
                                                  (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))))))))
                                                  (Vint32 (Int.repr Z0))))
                                                  Vnull))))))))))))))))))))))))))))))))))))))))))))
     (sseq
        (sassign (earrayelem (evar OSTCBPrioTbl) (evar prio))
           (ecast (evar OSTCBCur) (Tptr OS_TCB)))
        (sassign (earrayelem (evar OSTCBPrioTbl) (evar pip))
           (ecast os_mutex.PlaceHolder (Tptr OS_TCB)))) (
     (Astar
        (Aop´
           (mutexpost
              (@cons val (Vptr (@pair block Int.int v´29 Int.zero))
                 (@nil val))))
        (Astar
           (A_dom_lenv
              (@cons (prod ident type)
                 (@pair ident type pevent (Tptr OS_EVENT))
                 (@cons (prod ident type)
                    (@pair ident type os_code_defs.x Tint8)
                    (@cons (prod ident type) (@pair ident type pip Tint8)
                       (@cons (prod ident type) (@pair ident type prio Tint8)
                          (@cons (prod ident type)
                             (@pair ident type legal Tint8)
                             (@nil (prod ident type))))))))
           (Astar
              (GAarray OSTCBPrioTbl
                 (Tarray (Tptr OS_TCB)
                    (S
                       (S
                          (S
                             (S
                                (S
                                   (S
                                      (S
                                         (S
                                            (S
                                               (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                 (update_nth_val
                    (Z.to_nat
                       (Int.unsigned
                          (Int.shru x (Int.repr (Zpos (xO (xO (xO xH))))))))
                    (update_nth_val
                       (Z.to_nat
                          (Int.unsigned
                             (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))))
                       v´30 (Vptr (@pair block Int.int v´52 Int.zero)))
                    (Vptr v´51)))
              (Astar
                 (GAarray OSRdyTbl (Tarray Tint8 (nat_of_Z OS_RDY_TBL_SIZE))
                    (update_nth_val
                       (Z.to_nat
                          (Int.unsigned
                             (Int.shru
                                (Int.and x (Int.repr OS_MUTEX_KEEP_LOWER_8))
                                (Int.repr (Zpos (xI xH))))))
                       (update_nth_val
                          (Z.to_nat
                             (Int.unsigned
                                (Int.shru x6 (Int.repr (Zpos (xI xH))))))
                          v´36
                          (val_inj
                             (and (Vint32 x12)
                                (Vint32
                                   (Int.not
                                      (Int.shl (Int.repr (Zpos xH))
                                         (Int.and x6
                                            (Int.repr (Zpos (xI (xI xH)))))))))))
                       (val_inj
                          (or
                             (nth_val´
                                (Z.to_nat
                                   (Int.unsigned
                                      (Int.shru
                                         (Int.and x
                                            (Int.repr OS_MUTEX_KEEP_LOWER_8))
                                         (Int.repr (Zpos (xI xH))))))
                                (update_nth_val
                                   (Z.to_nat
                                      (Int.unsigned
                                         (Int.shru x6
                                            (Int.repr (Zpos (xI xH)))))) v´36
                                   (val_inj
                                      (and (Vint32 x12)
                                         (Vint32
                                            (Int.not
                                               (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))))))))
                             (Vint32 x11)))))
                 (Astar (Agvarmapsto OSRdyGrp Tint8 (Vint32 (Int.or i7 x8)))
                    (Astar
                       (Agvarmapsto OSTCBCur (Tptr OS_TCB)
                          (Vptr (@pair block Int.int v´52 Int.zero)))
                       (Astar
                          (Astruct (@pair block Int.int v´52 Int.zero) OS_TCB
                             (@cons val x7
                                (@cons val v´24
                                   (@cons val x15
                                      (@cons val m
                                         (@cons val
                                            (Vint32 i6)
                                            (@cons val
                                               (Vint32 x14)
                                               (@cons val
                                                  (Vint32
                                                  (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8)))
                                                  (@cons val
                                                  (Vint32
                                                  (Int.and
                                                  (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8))
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))
                                                  (@cons val
                                                  (Vint32
                                                  (Int.shru
                                                  (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8))
                                                  (Int.repr (Zpos (xI xH)))))
                                                  (@cons val
                                                  (Vint32 x11)
                                                  (@cons val
                                                  (Vint32 x8)
                                                  (@nil val)))))))))))))
                          (Astar
                             (Alvarmapsto os_code_defs.x Tint8
                                (Vint32
                                   (Int.add
                                      (Int.shl x2 (Int.repr (Zpos (xI xH))))
                                      x5)))
                             (Astar (Alvarmapsto legal Tint8 (Vint32 x2))
                                (Astar (Aptrmapsto v´51 Tint8 v´32)
                                   (Astar
                                      (dllseg x7
                                         (Vptr
                                            (@pair block Int.int v´52
                                               Int.zero)) v´40 Vnull v´35
                                         OS_TCB
                                         (fun vl : vallist =>
                                          nth_val (S O) vl)
                                         (fun vl : vallist => nth_val O vl))
                                      (Astar
                                         (Agvarmapsto OSTCBList
                                            (Tptr OS_TCB) v´31)
                                         (Astar
                                            (dllseg v´31 Vnull v´24
                                               (Vptr
                                                  (@pair block Int.int v´52
                                                  Int.zero)) v´33 OS_TCB
                                               (fun vl : vallist =>
                                                nth_val (S O) vl)
                                               (fun vl : vallist =>
                                                nth_val O vl))
                                            (Astar
                                               (Alvarmapsto prio Tint8
                                                  (Vint32
                                                  (Int.and x
                                                  (Int.repr
                                                  OS_MUTEX_KEEP_LOWER_8))))
                                               (Astar
                                                  (Alvarmapsto pip Tint8
                                                  (Vint32
                                                  (Int.shru x
                                                  (Int.repr
                                                  (Zpos (xO (xO (xO xH))))))))
                                                  (Astar
                                                  (Astruct
                                                  (@pair block Int.int v´29
                                                  Int.zero) OS_EVENT
                                                  (@cons val
                                                  (Vint32
                                                  (Int.repr
                                                  OS_EVENT_TYPE_MUTEX))
                                                  (@cons val
                                                  (Vint32 i)
                                                  (@cons val
                                                  (Vint32 x)
                                                  (@cons val
                                                  (Vptr
                                                  (@pair block Int.int v´52
                                                  (Int.repr Z0)))
                                                  (@cons val x3
                                                  (@cons val v´46 (@nil val))))))))
                                                  (Astar
                                                  (Aarray v´23
                                                  (Tarray Tint8
                                                  (nat_of_Z OS_EVENT_TBL_SIZE))
                                                  v´44)
                                                  (Astar
                                                  (Aie false)
                                                  (Astar
                                                  (Ais (@nil hid))
                                                  (Astar
                                                  (Acs
                                                  (@cons bool true
                                                  (@nil bool)))
                                                  (Astar
                                                  (Aisr empisr)
                                                  (Astar
                                                  (Agvarmapsto OSEventList
                                                  (Tptr OS_EVENT) v´42)
                                                  (Astar
                                                  (evsllseg v´42
                                                  (Vptr
                                                  (@pair block Int.int v´29
                                                  Int.zero)) v´25 v´27)
                                                  (Astar
                                                  (evsllseg v´46 Vnull v´26
                                                  v´28)
                                                  (Astar A_isr_is_prop
                                                  (Astar
                                                  (Agvarenv´ OSPlaceHolder
                                                  Tint8 v´51)
                                                  (Astar
                                                  (Aabsdata absecblsid
                                                  (absecblist v´38))
                                                  (Astar
                                                  (Aabsdata abstcblsid
                                                  (abstcblist v´39))
                                                  (Astar
                                                  (Aabsdata curtid
                                                  (oscurt
                                                  (@pair block Int.int v´52
                                                  Int.zero)))
                                                  (Astar
                                                  (AOSEventFreeList v´3)
                                                  (Astar
                                                  (AOSQFreeList v´4)
                                                  (Astar
                                                  (AOSQFreeBlk v´5)
                                                  (Astar
                                                  (GAarray OSMapTbl
                                                  (Tarray Tint8
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O)))))))))
                                                  OSMapVallist)
                                                  (Astar
                                                  (GAarray OSUnMapTbl
                                                  (Tarray Tint8
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S
                                                  (S (S (S (S (S (S O)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
                                                  OSUnMapVallist)
                                                  (Astar AOSIntNesting
                                                  (Astar
                                                  (AOSTCBFreeList v´21 v´22)
                                                  (Astar
                                                  (AOSTime (Vint32 v´18))
                                                  (Astar
                                                  (Aabsdata ostmid
                                                  (ostm v´18))
                                                  (Astar AGVars
                                                  (Astar atoy_inv´
                                                  (Astar
                                                  (Alvarmapsto pevent
                                                  (Tptr OS_EVENT)
                                                  (Vptr
                                                  (@pair block Int.int v´29
                                                  Int.zero)))
                                                  (Apure
                                                  (Logic.or
                                                  (@eq val
                                                  (val_inj
                                                  (val_eq
                                                  (nth_val´
                                                  (Z.to_nat
                                                  (Int.unsigned
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  (update_nth_val
                                                  (Z.to_nat
                                                  (Int.unsigned
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  v´36
                                                  (val_inj
                                                  (and
                                                  (Vint32 x12)
                                                  (Vint32
                                                  (Int.not
                                                  (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))))))))
                                                  (Vint32 (Int.repr Z0))))
                                                  (Vint32 Int.zero))
                                                  (@eq val
                                                  (val_inj
                                                  (val_eq
                                                  (nth_val´
                                                  (Z.to_nat
                                                  (Int.unsigned
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  (update_nth_val
                                                  (Z.to_nat
                                                  (Int.unsigned
                                                  (Int.shru x6
                                                  (Int.repr (Zpos (xI xH))))))
                                                  v´36
                                                  (val_inj
                                                  (and
                                                  (Vint32 x12)
                                                  (Vint32
                                                  (Int.not
                                                  (Int.shl
                                                  (Int.repr (Zpos xH))
                                                  (Int.and x6
                                                  (Int.repr
                                                  (Zpos (xI (xI xH))))))))))))
                                                  (Vint32 (Int.repr Z0))))
                                                  Vnull)))))))))))))))))))))))))))))))))))))))))))))
.

Definition gen_tmp2:= forall
(
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : int32
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : length v´25 = length v´27
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Int8u v´44
)(
  H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  i : int32
)(
  H21 : Int.unsigned i <= 255
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
  H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
  H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
  x : int32
)(
  H10 : Int.unsigned x <= 65535
)(
  H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H22 : Int.unsigned x <= 65535
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : v´31 <> Vnull
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : Vptr (v´52, Int.zero) <> Vnull
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 65535
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
  H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
  H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
         v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
  H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
         w) v´48 v´49
)(
  H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
  H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match OS_TCB v´30
)(
  H51 : length v´30 = 64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x1 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some x1
)(
  x0 : val
)(
  H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
  H54 : array_type_vallist_match Int8u v´36
)(
  H58 : length v´36 = OS_RDY_TBL_SIZE
)(
  i7 : int32
)(
  H55 : Int.unsigned i7 <= 255
)(
  H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
  H59 : length OSUnMapVallist = 256%nat
)(
  H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
  H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
  H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
  fffbb : Int.unsigned x2 < 8
)(
  fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
  H19´´ : length v´44 = Z.to_nat 8
)(
  x4 : int32
)(
  H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
  H64 : Int.unsigned x4 <= 255
)(
  H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
  x5 : int32
)(
  H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
  H67 : Int.unsigned x5 <= 255
)(
  ttfasd : Int.unsigned x5 < 8
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5)
                            (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5)
                            (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5)
                            (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5)
                            (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x6 : int32
)(
  x14 : int32
)(
  H77 : 0 <= Int.unsigned x6
)(
  H85 : Int.unsigned x6 < 64
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
  x15 : val
)(
  H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
  H43 : Int.unsigned (x6>>ᵢ$ 3) <= 255
)(
  H45 : Int.unsigned ($ 1<<(x6>>ᵢ$ 3)) <= 255
)(
  H44 : Int.unsigned ($ 1<<(x6&$ 7)) <= 255
)(
  H42 : Int.unsigned (x6&$ 7) <= 255
)(
  H70 : TcbJoin (v´52, Int.zero) (x6, t, m) x10 v´45
)(
  H41 : Int.unsigned x6 <= 255
)(
  H28 : Int.ltu x6 (x>>ᵢ$ 8) = false
)(
  H37 : isptr x15
)(
  H40 : Int.unsigned x14 <= 255
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 x6
                             :: Vint32 (x6&$ 7)
                                :: Vint32 (x6>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<(x6&$ 7))
                                      :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
          v´36 (x6, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 x6
                                  :: Vint32 (x6&$ 7)
                                     :: Vint32 (x6>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<(x6&$ 7))
                                           :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
               :: v´35) v´36 v´45
)(
  r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
  r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
  r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  H34 : array_type_vallist_match Int8u OSMapVallist
)(
  H69 : length OSMapVallist = 8%nat
)(
  H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
  x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
  H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
  H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x9
)(
  H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
  H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x11
)(
  H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
  r5 : Int.unsigned (x6>>ᵢ$ 3) < 8
)(
  r6 : Int.unsigned (x6&$ 7) < 8
)(
  rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
  rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rr5 : (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)) < length v´36)%nat
)(
  rr6 : (Z.to_nat (Int.unsigned (x6&$ 7)) < length v´36)%nat
)(
  rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
  rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  rrr5 : Int.unsigned (x6>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr6 : Int.unsigned (x6&$ 7) < Z.of_nat (length v´36)
)(
  HH58 : length v´36 = Z.to_nat 8
)(
  aa : rule_type_val_match Int8u
         (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  aa3 : rule_type_val_match Int8u
          (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36) = true
)(
  x16 : int32
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
  H91 : Int.unsigned x16 <= 255
)(
  x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
  H90 : Int.unsigned x13 <= 255
)(
  x12 : int32
)(
  H86 : nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36 = Vint32 x12
)(
  H89 : Int.unsigned x12 <= 255
)(
  H92 : x1 = Vptr v´51
),
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{ <|| mutexpost (Vptr (v´29, Int.zero) :: nil) ||> **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil) **
     GV OSTCBCur @ OS_TCB |-> Vptr (v´52, Int.zero) **
     Astruct (v´52, Int.zero) OS_TCB
       (x7
        :: v´24
           :: x15
              :: m
                 :: Vint32 i6
                    :: Vint32 x14
                       :: Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8)
                          :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)
                             :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)
                                :: Vint32 ($ 1<<(x6&$ 7)) :: Vint32 x8 :: nil) **
     GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE)
       (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
          (val_inj (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))) **
     LV os_code_defs.x @ Int8u |-> Vint32 ((x2<<$ 3)+ᵢx5) **
     LV legal @ Int8u |-> Vint32 x2 **
     PV v´51 @ Int8u |-> v´32 **
     dllseg x7 (Vptr (v´52, Int.zero)) v´40 Vnull v´35 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´31 **
     dllseg v´31 Vnull v´24 (Vptr (v´52, Int.zero)) v´33 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     LV prio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (v´29, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil) **
     Aarray v´23 (Tarray Int8u OS_EVENT_TBL_SIZE) v´44 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     A_isr_is_prop **
     GV OSRdyGrp @ Int8u |-> Vint32 i7 **
     GAarray OSTCBPrioTbl (Tarray OS_TCB 64) v´30 **
     G&OSPlaceHolder @ Int8u == v´51 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     GAarray OSMapTbl (Tarray Int8u 8) OSMapVallist **
     GAarray OSUnMapTbl (Tarray Int8u 256) OSUnMapVallist **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     [|val_inj
         (val_eq
            (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
               (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                  (val_inj
                     (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
            (V$0)) = Vint32 Int.zero \/
       val_inj
         (val_eq
            (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
               (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                  (val_inj
                     (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
            (V$0)) = Vnull|]}}
   OSTCBCur OSTCBBitX =ₑ OSMapTbl [OSTCBCur OSTCBX];ₛ
   OSRdyGrp =ₑ OSRdyGrp |ₑ OSTCBCur OSTCBBitY;ₛ
   OSRdyTbl [OSTCBCur OSTCBY] =ₑ
   OSRdyTbl [OSTCBCur OSTCBY] |ₑ OSTCBCur OSTCBBitX;ₛ
   OSTCBPrioTbl [prio ] =ₑ OS_TCB OSTCBCur ;ₛ
   OSTCBPrioTbl [pip ] =ₑ OS_TCB os_mutex.PlaceHolder
   {{ <|| mutexpost (Vptr (v´29, Int.zero) :: nil) ||> **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil) **
     GAarray OSTCBPrioTbl (Tarray OS_TCB 64)
       (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
          (update_nth_val
             (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30
             (Vptr (v´52, Int.zero))) (Vptr v´51)) **
     GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE)
       (update_nth_val
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
             (val_inj (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7)))))))
          (val_inj
             (or
                (nth_val´
                   (Z.to_nat
                      (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
                   (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                      (val_inj
                         (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
                (Vint32 x11)))) **
     GV OSRdyGrp @ Int8u |-> Vint32 (Int.or i7 x8) **
     GV OSTCBCur @ OS_TCB |-> Vptr (v´52, Int.zero) **
     Astruct (v´52, Int.zero) OS_TCB
       (x7
        :: v´24
           :: x15
              :: m
                 :: Vint32 i6
                    :: Vint32 x14
                       :: Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8)
                          :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)
                             :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)
                                :: Vint32 x11 :: Vint32 x8 :: nil) **
     LV os_code_defs.x @ Int8u |-> Vint32 ((x2<<$ 3)+ᵢx5) **
     LV legal @ Int8u |-> Vint32 x2 **
     PV v´51 @ Int8u |-> v´32 **
     dllseg x7 (Vptr (v´52, Int.zero)) v´40 Vnull v´35 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     GV OSTCBList @ OS_TCB |-> v´31 **
     dllseg v´31 Vnull v´24 (Vptr (v´52, Int.zero)) v´33 OS_TCB
       (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
     LV prio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     Astruct (v´29, Int.zero) OS_EVENT
       (V$OS_EVENT_TYPE_MUTEX
        :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil) **
     Aarray v´23 (Tarray Int8u OS_EVENT_TBL_SIZE) v´44 **
     Aie false **
     Ais nil **
     Acs (true :: nil) **
     Aisr empisr **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     A_isr_is_prop **
     G&OSPlaceHolder @ Int8u == v´51 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     GAarray OSMapTbl (Tarray Int8u 8) OSMapVallist **
     GAarray OSUnMapTbl (Tarray Int8u 256) OSUnMapVallist **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     [|val_inj
         (val_eq
            (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
               (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                  (val_inj
                     (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
            (V$0)) = Vint32 Int.zero \/
       val_inj
         (val_eq
            (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
               (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                  (val_inj
                     (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
            (V$0)) = Vnull|]}}.

Definition gen_post3:= forall
(
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : int32
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : length v´25 = length v´27
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Int8u v´44
)(
  H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  i : int32
)(
  H21 : Int.unsigned i <= 255
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
  H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
  H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
  x : int32
)(
  H10 : Int.unsigned x <= 65535
)(
  H22 : Int.unsigned x <= 65535
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : v´31 <> Vnull
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : Vptr (v´52, Int.zero) <> Vnull
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 65535
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
  H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
  H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
         v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match OS_TCB v´30
)(
  H51 : length v´30 = 64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x0 : val
)(
  H54 : array_type_vallist_match Int8u v´36
)(
  H58 : length v´36 = OS_RDY_TBL_SIZE
)(
  i7 : int32
)(
  H55 : Int.unsigned i7 <= 255
)(
  H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
  H59 : length OSUnMapVallist = 256%nat
)(
  H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
  H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
  H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
  fffbb : Int.unsigned x2 < 8
)(
  fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
  H19´´ : length v´44 = Z.to_nat 8
)(
  x4 : int32
)(
  H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
  H64 : Int.unsigned x4 <= 255
)(
  H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
  x5 : int32
)(
  H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
  H67 : Int.unsigned x5 <= 255
)(
  ttfasd : Int.unsigned x5 < 8
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x14 : int32
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
  x15 : val
)(
  H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
  H37 : isptr x15
)(
  H40 : Int.unsigned x14 <= 255
)(
  r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
  r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
  H34 : array_type_vallist_match Int8u OSMapVallist
)(
  H69 : length OSMapVallist = 8%nat
)(
  H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
  x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
  H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
  H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x9
)(
  H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
  H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x11
)(
  H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
  HH58 : length v´36 = Z.to_nat 8
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  x16 : int32
)(
  H91 : Int.unsigned x16 <= 255
)(
  x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
  H90 : Int.unsigned x13 <= 255
)(
  x12 : int32
)(
  H89 : Int.unsigned x12 <= 255
)(
  last_condition : ProtectWrapper (x14 = $ OS_STAT_RDY /\ i6 = $ 0)
)(
  t1 : int32
)(
  t3 : Int.unsigned t1 <= 255
)(
  t11 : int32
)(
  t13 : Int.unsigned t11 <= 255
)(
  v´34 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some (Vptr v´51)
)(
  H99 : i <> Int.zero
)(
  H100 : val_inj
           (notint
              (val_inj
                 (if Int.eq i ($ 0)
                  then Some (Vint32 Int.one)
                  else Some (Vint32 Int.zero)))) <> Vnull
)(
  H101 : val_inj
           (notint
              (val_inj
                 (if Int.eq i ($ 0)
                  then Some (Vint32 Int.one)
                  else Some (Vint32 Int.zero)))) <> Vundef
)(
  H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
         w) v´48 v´49
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
  H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
  H68 : Int.ltu (x>>ᵢ$ 8) ((x2<<$ 3)+ᵢx5) = true
)(
  H77 : 0 <= Int.unsigned (x>>ᵢ$ 8)
)(
  H85 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H43 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) <= 255
)(
  H45 : Int.unsigned ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3)) <= 255
)(
  H44 : Int.unsigned ($ 1<<((x>>ᵢ$ 8)&$ 7)) <= 255
)(
  H42 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) <= 255
)(
  H70 : TcbJoin (v´52, Int.zero) (x>>ᵢ$ 8, t, m) x10 v´45
)(
  H41 : Int.unsigned (x>>ᵢ$ 8) <= 255
)(
  H28 : Int.ltu (x>>ᵢ$ 8) (x>>ᵢ$ 8) = false
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 (x>>ᵢ$ 8)
                             :: Vint32 ((x>>ᵢ$ 8)&$ 7)
                                :: Vint32 ((x>>ᵢ$ 8)>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<((x>>ᵢ$ 8)&$ 7))
                                      :: Vint32 ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3))
                                         :: nil) v´36
          (x>>ᵢ$ 8, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 (x>>ᵢ$ 8)
                                  :: Vint32 ((x>>ᵢ$ 8)&$ 7)
                                     :: Vint32 ((x>>ᵢ$ 8)>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<((x>>ᵢ$ 8)&$ 7))
                                           :: Vint32 ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3))
                                              :: nil) :: v´35) v´36 v´45
)(
  r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  r5 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r6 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rr5 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr6 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  rrr5 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr6 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  aa : rule_type_val_match Int8u
         (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa3 : rule_type_val_match Int8u
          (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
  H86 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x12
)(
  H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
)(
  H94 : val_inj
          (if Int.eq (x>>ᵢ$ 8) (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) <> Vnull
)(
  H95 : val_inj
          (if Int.eq (x>>ᵢ$ 8) (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) <> Vundef
)(
  H96 : array_type_vallist_match Int8u
          (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
             (val_inj
                (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7)))))))
)(
  H97 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length
           (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
              (val_inj
                 (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))))%nat
)(
  t2 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
         (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
            (val_inj
               (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))) =
       Vint32 t1
)(
  H98 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) <
         length
           (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
              (val_inj
                 (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))))%nat
)(
  t12 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)))
          (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
             (val_inj
                (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))) =
        Vint32 t11
)(
  v´37 : val
),
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post3
       (Vptr (v´29, Int.zero)
        :: Vptr (v´29, Int.zero) :: V$OS_STAT_MUTEX :: nil)
       (Some v´37)
       (logic_lv
          (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
             (update_nth_val
                (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30
                (Vptr (v´52, Int.zero))) (Vptr v´51))
        :: logic_lv
             (x7
              :: v´24
                 :: x15
                    :: m
                       :: Vint32 i6
                          :: Vint32 x14
                             :: Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8)
                                :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)
                                   :: Vint32
                                        ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)
                                      :: Vint32 x11 :: Vint32 x8 :: nil)
           :: logic_llv v´33
              :: logic_llv v´35
                 :: logic_lv
                      (update_nth_val
                         (Z.to_nat
                            (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
                         (update_nth_val
                            (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
                            (val_inj
                               (and (Vint32 x12)
                                  (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7)))))))
                         (val_inj (or (Vint32 t1) (Vint32 x11))))
                    :: logic_val v´34
                       :: logic_abstcb
                            (TcbMod.set v´39 (v´52, Int.zero)
                               (x&$ OS_MUTEX_KEEP_LOWER_8, t, m))
                          :: logic_val v´31
                             :: logic_val (Vptr (v´52, Int.zero))
                                :: logic_val (Vptr (v´52, Int.zero))
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MUTEX
                                         :: Vint32 i
                                            :: Vint32 x
                                               :: Vptr (v´52, $ 0)
                                                  ::
                                                  x3 :: v´46 :: nil)
                                      :: logic_lv v´44
                                         :: logic_leventd
                                              (DMutex
                                                 (Vint32 x)
                                                 (Vptr (v´52, $ 0)) :: nil)
                                            :: logic_code
                                                 (mutexpost
                                                  (Vptr (v´29, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV prio @ Int8u |-> v´37 **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_MUTEX) **
     LV legal @ Int8u |-> Vint32 x2 **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
   pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_post5:= forall
(
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : int32
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : length v´25 = length v´27
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Int8u v´44
)(
  H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  i : int32
)(
  H21 : Int.unsigned i <= 255
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
  H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
  H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
  x : int32
)(
  H10 : Int.unsigned x <= 65535
)(
  H22 : Int.unsigned x <= 65535
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : v´31 <> Vnull
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : Vptr (v´52, Int.zero) <> Vnull
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 65535
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
  H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
  H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
         v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match OS_TCB v´30
)(
  H51 : length v´30 = 64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x0 : val
)(
  H54 : array_type_vallist_match Int8u v´36
)(
  H58 : length v´36 = OS_RDY_TBL_SIZE
)(
  i7 : int32
)(
  H55 : Int.unsigned i7 <= 255
)(
  H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
  H59 : length OSUnMapVallist = 256%nat
)(
  H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
  H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
  H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
  fffbb : Int.unsigned x2 < 8
)(
  fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
  H19´´ : length v´44 = Z.to_nat 8
)(
  x4 : int32
)(
  H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
  H64 : Int.unsigned x4 <= 255
)(
  H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
  x5 : int32
)(
  H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
  H67 : Int.unsigned x5 <= 255
)(
  ttfasd : Int.unsigned x5 < 8
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x14 : int32
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
  x15 : val
)(
  H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
  H37 : isptr x15
)(
  H40 : Int.unsigned x14 <= 255
)(
  r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
  r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
  H34 : array_type_vallist_match Int8u OSMapVallist
)(
  H69 : length OSMapVallist = 8%nat
)(
  H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
  x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
  H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
  H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x9
)(
  H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
  H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x11
)(
  H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
  HH58 : length v´36 = Z.to_nat 8
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  x16 : int32
)(
  H91 : Int.unsigned x16 <= 255
)(
  x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
  H90 : Int.unsigned x13 <= 255
)(
  x12 : int32
)(
  H89 : Int.unsigned x12 <= 255
)(
  last_condition : ProtectWrapper (x14 = $ OS_STAT_RDY /\ i6 = $ 0)
)(
  t1 : int32
)(
  t3 : Int.unsigned t1 <= 255
)(
  t11 : int32
)(
  t13 : Int.unsigned t11 <= 255
)(
  v´34 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some (Vptr v´51)
)(
  H99 : i <> Int.zero
)(
  H100 : val_inj
           (notint
              (val_inj
                 (if Int.eq i ($ 0)
                  then Some (Vint32 Int.one)
                  else Some (Vint32 Int.zero)))) <> Vnull
)(
  H101 : val_inj
           (notint
              (val_inj
                 (if Int.eq i ($ 0)
                  then Some (Vint32 Int.one)
                  else Some (Vint32 Int.zero)))) <> Vundef
)(
  H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
         w) v´48 v´49
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
  H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
  H68 : Int.ltu (x>>ᵢ$ 8) ((x2<<$ 3)+ᵢx5) = true
)(
  H77 : 0 <= Int.unsigned (x>>ᵢ$ 8)
)(
  H85 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H43 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) <= 255
)(
  H45 : Int.unsigned ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3)) <= 255
)(
  H44 : Int.unsigned ($ 1<<((x>>ᵢ$ 8)&$ 7)) <= 255
)(
  H42 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) <= 255
)(
  H70 : TcbJoin (v´52, Int.zero) (x>>ᵢ$ 8, t, m) x10 v´45
)(
  H41 : Int.unsigned (x>>ᵢ$ 8) <= 255
)(
  H28 : Int.ltu (x>>ᵢ$ 8) (x>>ᵢ$ 8) = false
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 (x>>ᵢ$ 8)
                             :: Vint32 ((x>>ᵢ$ 8)&$ 7)
                                :: Vint32 ((x>>ᵢ$ 8)>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<((x>>ᵢ$ 8)&$ 7))
                                      :: Vint32 ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3))
                                         :: nil) v´36
          (x>>ᵢ$ 8, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 (x>>ᵢ$ 8)
                                  :: Vint32 ((x>>ᵢ$ 8)&$ 7)
                                     :: Vint32 ((x>>ᵢ$ 8)>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<((x>>ᵢ$ 8)&$ 7))
                                           :: Vint32 ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3))
                                              :: nil) :: v´35) v´36 v´45
)(
  r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  r5 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r6 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rr5 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr6 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  rrr5 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr6 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  aa : rule_type_val_match Int8u
         (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa3 : rule_type_val_match Int8u
          (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
  H86 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x12
)(
  H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
)(
  H94 : val_inj
          (if Int.eq (x>>ᵢ$ 8) (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) <> Vnull
)(
  H95 : val_inj
          (if Int.eq (x>>ᵢ$ 8) (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) <> Vundef
)(
  H96 : array_type_vallist_match Int8u
          (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
             (val_inj
                (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7)))))))
)(
  H97 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length
           (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
              (val_inj
                 (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))))%nat
)(
  t2 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
         (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
            (val_inj
               (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))) =
       Vint32 t1
)(
  H98 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) <
         length
           (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
              (val_inj
                 (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))))%nat
)(
  t12 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)))
          (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
             (val_inj
                (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))) =
        Vint32 t11
)(
  v´37 : val
),
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post5
       (Vptr (v´29, Int.zero)
        :: Vptr (v´29, Int.zero) :: V$OS_STAT_MUTEX :: nil)
       (Some v´37)
       (logic_lv
          (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
             (update_nth_val
                (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30
                (Vptr (v´52, Int.zero))) (Vptr v´51))
        :: logic_lv
             (x7
              :: v´24
                 :: x15
                    :: m
                       :: Vint32 i6
                          :: Vint32 x14
                             :: Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8)
                                :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)
                                   :: Vint32
                                        ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)
                                      :: Vint32 x11 :: Vint32 x8 :: nil)
           :: logic_llv v´33
              :: logic_llv v´35
                 :: logic_lv
                      (update_nth_val
                         (Z.to_nat
                            (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
                         (update_nth_val
                            (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
                            (val_inj
                               (and (Vint32 x12)
                                  (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7)))))))
                         (val_inj (or (Vint32 t1) (Vint32 x11))))
                    :: logic_val v´34
                       :: logic_abstcb
                            (TcbMod.set v´39 (v´52, Int.zero)
                               (x&$ OS_MUTEX_KEEP_LOWER_8, t, m))
                          :: logic_val v´31
                             :: logic_val (Vptr (v´52, Int.zero))
                                :: logic_val (Vptr (v´52, Int.zero))
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MUTEX
                                         :: Vint32 i
                                            :: Vint32 x
                                               :: Vptr (v´52, $ 0)
                                                  ::
                                                  x3 :: v´46 :: nil)
                                      :: logic_lv v´44
                                         :: logic_leventd
                                              (DMutex
                                                 (Vint32 x)
                                                 (Vptr (v´52, $ 0)) :: nil)
                                            :: logic_code
                                                 (mutexpost
                                                  (Vptr (v´29, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV prio @ Int8u |-> v´37 **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_MUTEX) **
     LV legal @ Int8u |-> Vint32 x2 **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
   pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_post1´:= forall
(
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : int32
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : length v´25 = length v´27
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Int8u v´44
)(
  H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  i : int32
)(
  H21 : Int.unsigned i <= 255
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
  H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
  H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
  x : int32
)(
  H10 : Int.unsigned x <= 65535
)(
  H22 : Int.unsigned x <= 65535
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : v´31 <> Vnull
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : Vptr (v´52, Int.zero) <> Vnull
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 65535
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
  H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
  H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
         v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match OS_TCB v´30
)(
  H51 : length v´30 = 64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x0 : val
)(
  H54 : array_type_vallist_match Int8u v´36
)(
  H58 : length v´36 = OS_RDY_TBL_SIZE
)(
  i7 : int32
)(
  H55 : Int.unsigned i7 <= 255
)(
  H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
  H59 : length OSUnMapVallist = 256%nat
)(
  H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
  H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
  H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
  fffbb : Int.unsigned x2 < 8
)(
  fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
  H19´´ : length v´44 = Z.to_nat 8
)(
  x4 : int32
)(
  H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
  H64 : Int.unsigned x4 <= 255
)(
  H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
  x5 : int32
)(
  H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
  H67 : Int.unsigned x5 <= 255
)(
  ttfasd : Int.unsigned x5 < 8
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x14 : int32
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
  x15 : val
)(
  H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
  H37 : isptr x15
)(
  H40 : Int.unsigned x14 <= 255
)(
  r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
  r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
  H34 : array_type_vallist_match Int8u OSMapVallist
)(
  H69 : length OSMapVallist = 8%nat
)(
  H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
  x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
  H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
  H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x9
)(
  H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
  H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x11
)(
  H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
  HH58 : length v´36 = Z.to_nat 8
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  x16 : int32
)(
  H91 : Int.unsigned x16 <= 255
)(
  x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
  H90 : Int.unsigned x13 <= 255
)(
  x12 : int32
)(
  H89 : Int.unsigned x12 <= 255
)(
  last_condition : ProtectWrapper (x14 = $ OS_STAT_RDY /\ i6 = $ 0)
)(
  t1 : int32
)(
  t3 : Int.unsigned t1 <= 255
)(
  t11 : int32
)(
  t13 : Int.unsigned t11 <= 255
)(
  v´34 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some (Vptr v´51)
)(
  H99 : i <> Int.zero
)(
  H100 : val_inj
           (notint
              (val_inj
                 (if Int.eq i ($ 0)
                  then Some (Vint32 Int.one)
                  else Some (Vint32 Int.zero)))) <> Vnull
)(
  H101 : val_inj
           (notint
              (val_inj
                 (if Int.eq i ($ 0)
                  then Some (Vint32 Int.one)
                  else Some (Vint32 Int.zero)))) <> Vundef
)(
  H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
         w) v´48 v´49
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
  H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
  H68 : Int.ltu (x>>ᵢ$ 8) ((x2<<$ 3)+ᵢx5) = true
)(
  H77 : 0 <= Int.unsigned (x>>ᵢ$ 8)
)(
  H85 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H43 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) <= 255
)(
  H45 : Int.unsigned ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3)) <= 255
)(
  H44 : Int.unsigned ($ 1<<((x>>ᵢ$ 8)&$ 7)) <= 255
)(
  H42 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) <= 255
)(
  H70 : TcbJoin (v´52, Int.zero) (x>>ᵢ$ 8, t, m) x10 v´45
)(
  H41 : Int.unsigned (x>>ᵢ$ 8) <= 255
)(
  H28 : Int.ltu (x>>ᵢ$ 8) (x>>ᵢ$ 8) = false
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 (x>>ᵢ$ 8)
                             :: Vint32 ((x>>ᵢ$ 8)&$ 7)
                                :: Vint32 ((x>>ᵢ$ 8)>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<((x>>ᵢ$ 8)&$ 7))
                                      :: Vint32 ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3))
                                         :: nil) v´36
          (x>>ᵢ$ 8, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 (x>>ᵢ$ 8)
                                  :: Vint32 ((x>>ᵢ$ 8)&$ 7)
                                     :: Vint32 ((x>>ᵢ$ 8)>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<((x>>ᵢ$ 8)&$ 7))
                                           :: Vint32 ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3))
                                              :: nil) :: v´35) v´36 v´45
)(
  r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  r5 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r6 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rr5 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr6 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  rrr5 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr6 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  aa : rule_type_val_match Int8u
         (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa3 : rule_type_val_match Int8u
          (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
  H86 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x12
)(
  H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
)(
  H94 : val_inj
          (if Int.eq (x>>ᵢ$ 8) (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) <> Vnull
)(
  H95 : val_inj
          (if Int.eq (x>>ᵢ$ 8) (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) <> Vundef
)(
  H96 : array_type_vallist_match Int8u
          (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
             (val_inj
                (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7)))))))
)(
  H97 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length
           (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
              (val_inj
                 (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))))%nat
)(
  t2 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
         (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
            (val_inj
               (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))) =
       Vint32 t1
)(
  H98 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) <
         length
           (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
              (val_inj
                 (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))))%nat
)(
  t12 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)))
          (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
             (val_inj
                (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))) =
        Vint32 t11
)(
  v´37 : val
),
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post1´
       (Vptr (v´29, Int.zero)
        :: Vptr (v´29, Int.zero) :: V$OS_STAT_MUTEX :: nil)
       (Some v´37)
       (logic_lv
          (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
             (update_nth_val
                (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30
                (Vptr (v´52, Int.zero))) (Vptr v´51))
        :: logic_lv
             (x7
              :: v´24
                 :: x15
                    :: m
                       :: Vint32 i6
                          :: Vint32 x14
                             :: Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8)
                                :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)
                                   :: Vint32
                                        ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)
                                      :: Vint32 x11 :: Vint32 x8 :: nil)
           :: logic_llv v´33
              :: logic_llv v´35
                 :: logic_lv
                      (update_nth_val
                         (Z.to_nat
                            (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
                         (update_nth_val
                            (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
                            (val_inj
                               (and (Vint32 x12)
                                  (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7)))))))
                         (val_inj (or (Vint32 t1) (Vint32 x11))))
                    :: logic_val v´34
                       :: logic_abstcb
                            (TcbMod.set v´39 (v´52, Int.zero)
                               (x&$ OS_MUTEX_KEEP_LOWER_8, t, m))
                          :: logic_val v´31
                             :: logic_val (Vptr (v´52, Int.zero))
                                :: logic_val (Vptr (v´52, Int.zero))
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MUTEX
                                         :: Vint32 i
                                            :: Vint32 x
                                               :: Vptr (v´52, $ 0)
                                                  ::
                                                  x3 :: v´46 :: nil)
                                      :: logic_lv v´44
                                         :: logic_leventd
                                              (DMutex
                                                 (Vint32 x)
                                                 (Vptr (v´52, $ 0)) :: nil)
                                            :: logic_code
                                                 (mutexpost
                                                  (Vptr (v´29, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV prio @ Int8u |-> v´37 **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_MUTEX) **
     LV legal @ Int8u |-> Vint32 x2 **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
   pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_post3´:= forall
(
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : int32
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : length v´25 = length v´27
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Int8u v´44
)(
  H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  i : int32
)(
  H21 : Int.unsigned i <= 255
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
  H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
  H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
  x : int32
)(
  H10 : Int.unsigned x <= 65535
)(
  H22 : Int.unsigned x <= 65535
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : v´31 <> Vnull
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : Vptr (v´52, Int.zero) <> Vnull
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 65535
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
  H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
  H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
         v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match OS_TCB v´30
)(
  H51 : length v´30 = 64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x0 : val
)(
  H54 : array_type_vallist_match Int8u v´36
)(
  H58 : length v´36 = OS_RDY_TBL_SIZE
)(
  i7 : int32
)(
  H55 : Int.unsigned i7 <= 255
)(
  H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
  H59 : length OSUnMapVallist = 256%nat
)(
  H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
  H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
  H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
  fffbb : Int.unsigned x2 < 8
)(
  fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
  H19´´ : length v´44 = Z.to_nat 8
)(
  x4 : int32
)(
  H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
  H64 : Int.unsigned x4 <= 255
)(
  H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
  x5 : int32
)(
  H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
  H67 : Int.unsigned x5 <= 255
)(
  ttfasd : Int.unsigned x5 < 8
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x14 : int32
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
  x15 : val
)(
  H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
  H37 : isptr x15
)(
  H40 : Int.unsigned x14 <= 255
)(
  r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
  r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
  H34 : array_type_vallist_match Int8u OSMapVallist
)(
  H69 : length OSMapVallist = 8%nat
)(
  H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
  x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
  H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
  H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x9
)(
  H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
  H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x11
)(
  H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
  HH58 : length v´36 = Z.to_nat 8
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  x16 : int32
)(
  H91 : Int.unsigned x16 <= 255
)(
  x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
  H90 : Int.unsigned x13 <= 255
)(
  x12 : int32
)(
  H89 : Int.unsigned x12 <= 255
)(
  last_condition : ProtectWrapper (x14 = $ OS_STAT_RDY /\ i6 = $ 0)
)(
  t1 : int32
)(
  t3 : Int.unsigned t1 <= 255
)(
  t11 : int32
)(
  t13 : Int.unsigned t11 <= 255
)(
  v´34 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some (Vptr v´51)
)(
  H99 : i <> Int.zero
)(
  H100 : val_inj
           (notint
              (val_inj
                 (if Int.eq i ($ 0)
                  then Some (Vint32 Int.one)
                  else Some (Vint32 Int.zero)))) <> Vnull
)(
  H101 : val_inj
           (notint
              (val_inj
                 (if Int.eq i ($ 0)
                  then Some (Vint32 Int.one)
                  else Some (Vint32 Int.zero)))) <> Vundef
)(
  H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
         w) v´48 v´49
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
  H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
  H68 : Int.ltu (x>>ᵢ$ 8) ((x2<<$ 3)+ᵢx5) = true
)(
  H77 : 0 <= Int.unsigned (x>>ᵢ$ 8)
)(
  H85 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H43 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) <= 255
)(
  H45 : Int.unsigned ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3)) <= 255
)(
  H44 : Int.unsigned ($ 1<<((x>>ᵢ$ 8)&$ 7)) <= 255
)(
  H42 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) <= 255
)(
  H70 : TcbJoin (v´52, Int.zero) (x>>ᵢ$ 8, t, m) x10 v´45
)(
  H41 : Int.unsigned (x>>ᵢ$ 8) <= 255
)(
  H28 : Int.ltu (x>>ᵢ$ 8) (x>>ᵢ$ 8) = false
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 (x>>ᵢ$ 8)
                             :: Vint32 ((x>>ᵢ$ 8)&$ 7)
                                :: Vint32 ((x>>ᵢ$ 8)>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<((x>>ᵢ$ 8)&$ 7))
                                      :: Vint32 ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3))
                                         :: nil) v´36
          (x>>ᵢ$ 8, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 (x>>ᵢ$ 8)
                                  :: Vint32 ((x>>ᵢ$ 8)&$ 7)
                                     :: Vint32 ((x>>ᵢ$ 8)>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<((x>>ᵢ$ 8)&$ 7))
                                           :: Vint32 ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3))
                                              :: nil) :: v´35) v´36 v´45
)(
  r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  r5 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r6 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rr5 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr6 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  rrr5 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr6 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  aa : rule_type_val_match Int8u
         (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa3 : rule_type_val_match Int8u
          (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
  H86 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x12
)(
  H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
)(
  H94 : val_inj
          (if Int.eq (x>>ᵢ$ 8) (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) <> Vnull
)(
  H95 : val_inj
          (if Int.eq (x>>ᵢ$ 8) (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) <> Vundef
)(
  H96 : array_type_vallist_match Int8u
          (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
             (val_inj
                (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7)))))))
)(
  H97 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length
           (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
              (val_inj
                 (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))))%nat
)(
  t2 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
         (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
            (val_inj
               (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))) =
       Vint32 t1
)(
  H98 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) <
         length
           (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
              (val_inj
                 (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))))%nat
)(
  t12 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)))
          (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
             (val_inj
                (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))) =
        Vint32 t11
)(
  v´37 : val
),
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post3´
       (Vptr (v´29, Int.zero)
        :: Vptr (v´29, Int.zero) :: V$OS_STAT_MUTEX :: nil)
       (Some v´37)
       (logic_lv
          (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
             (update_nth_val
                (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30
                (Vptr (v´52, Int.zero))) (Vptr v´51))
        :: logic_lv
             (x7
              :: v´24
                 :: x15
                    :: m
                       :: Vint32 i6
                          :: Vint32 x14
                             :: Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8)
                                :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)
                                   :: Vint32
                                        ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)
                                      :: Vint32 x11 :: Vint32 x8 :: nil)
           :: logic_llv v´33
              :: logic_llv v´35
                 :: logic_lv
                      (update_nth_val
                         (Z.to_nat
                            (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
                         (update_nth_val
                            (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
                            (val_inj
                               (and (Vint32 x12)
                                  (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7)))))))
                         (val_inj (or (Vint32 t1) (Vint32 x11))))
                    :: logic_val v´34
                       :: logic_abstcb
                            (TcbMod.set v´39 (v´52, Int.zero)
                               (x&$ OS_MUTEX_KEEP_LOWER_8, t, m))
                          :: logic_val v´31
                             :: logic_val (Vptr (v´52, Int.zero))
                                :: logic_val (Vptr (v´52, Int.zero))
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MUTEX
                                         :: Vint32 i
                                            :: Vint32 x
                                               :: Vptr (v´52, $ 0)
                                                  ::
                                                  x3 :: v´46 :: nil)
                                      :: logic_lv v´44
                                         :: logic_leventd
                                              (DMutex
                                                 (Vint32 x)
                                                 (Vptr (v´52, $ 0)) :: nil)
                                            :: logic_code
                                                 (mutexpost
                                                  (Vptr (v´29, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV prio @ Int8u |-> v´37 **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_MUTEX) **
     LV legal @ Int8u |-> Vint32 x2 **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
   pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_post5´:= forall
(
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : int32
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : length v´25 = length v´27
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Int8u v´44
)(
  H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  i : int32
)(
  H21 : Int.unsigned i <= 255
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
  H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
  H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
  x : int32
)(
  H10 : Int.unsigned x <= 65535
)(
  H22 : Int.unsigned x <= 65535
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : v´31 <> Vnull
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : Vptr (v´52, Int.zero) <> Vnull
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 65535
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
  H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
  H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
         v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match OS_TCB v´30
)(
  H51 : length v´30 = 64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x0 : val
)(
  H54 : array_type_vallist_match Int8u v´36
)(
  H58 : length v´36 = OS_RDY_TBL_SIZE
)(
  i7 : int32
)(
  H55 : Int.unsigned i7 <= 255
)(
  H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
  H59 : length OSUnMapVallist = 256%nat
)(
  H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
  H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
  H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
  fffbb : Int.unsigned x2 < 8
)(
  fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
  H19´´ : length v´44 = Z.to_nat 8
)(
  x4 : int32
)(
  H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
  H64 : Int.unsigned x4 <= 255
)(
  H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
  x5 : int32
)(
  H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
  H67 : Int.unsigned x5 <= 255
)(
  ttfasd : Int.unsigned x5 < 8
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x14 : int32
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
  x15 : val
)(
  H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
  H37 : isptr x15
)(
  H40 : Int.unsigned x14 <= 255
)(
  r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
  r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
  H34 : array_type_vallist_match Int8u OSMapVallist
)(
  H69 : length OSMapVallist = 8%nat
)(
  H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
  x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
  H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
  H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x9
)(
  H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
  H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x11
)(
  H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
  HH58 : length v´36 = Z.to_nat 8
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  x16 : int32
)(
  H91 : Int.unsigned x16 <= 255
)(
  x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
  H90 : Int.unsigned x13 <= 255
)(
  x12 : int32
)(
  H89 : Int.unsigned x12 <= 255
)(
  last_condition : ProtectWrapper (x14 = $ OS_STAT_RDY /\ i6 = $ 0)
)(
  t1 : int32
)(
  t3 : Int.unsigned t1 <= 255
)(
  t11 : int32
)(
  t13 : Int.unsigned t11 <= 255
)(
  v´34 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some (Vptr v´51)
)(
  H99 : i <> Int.zero
)(
  H100 : val_inj
           (notint
              (val_inj
                 (if Int.eq i ($ 0)
                  then Some (Vint32 Int.one)
                  else Some (Vint32 Int.zero)))) <> Vnull
)(
  H101 : val_inj
           (notint
              (val_inj
                 (if Int.eq i ($ 0)
                  then Some (Vint32 Int.one)
                  else Some (Vint32 Int.zero)))) <> Vundef
)(
  H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
         w) v´48 v´49
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
  H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
  H68 : Int.ltu (x>>ᵢ$ 8) ((x2<<$ 3)+ᵢx5) = true
)(
  H77 : 0 <= Int.unsigned (x>>ᵢ$ 8)
)(
  H85 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H43 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) <= 255
)(
  H45 : Int.unsigned ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3)) <= 255
)(
  H44 : Int.unsigned ($ 1<<((x>>ᵢ$ 8)&$ 7)) <= 255
)(
  H42 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) <= 255
)(
  H70 : TcbJoin (v´52, Int.zero) (x>>ᵢ$ 8, t, m) x10 v´45
)(
  H41 : Int.unsigned (x>>ᵢ$ 8) <= 255
)(
  H28 : Int.ltu (x>>ᵢ$ 8) (x>>ᵢ$ 8) = false
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 (x>>ᵢ$ 8)
                             :: Vint32 ((x>>ᵢ$ 8)&$ 7)
                                :: Vint32 ((x>>ᵢ$ 8)>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<((x>>ᵢ$ 8)&$ 7))
                                      :: Vint32 ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3))
                                         :: nil) v´36
          (x>>ᵢ$ 8, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 (x>>ᵢ$ 8)
                                  :: Vint32 ((x>>ᵢ$ 8)&$ 7)
                                     :: Vint32 ((x>>ᵢ$ 8)>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<((x>>ᵢ$ 8)&$ 7))
                                           :: Vint32 ($ 1<<((x>>ᵢ$ 8)>>ᵢ$ 3))
                                              :: nil) :: v´35) v´36 v´45
)(
  r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  r5 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r6 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rr5 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr6 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  rrr5 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr6 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  aa : rule_type_val_match Int8u
         (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa3 : rule_type_val_match Int8u
          (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
  H86 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x12
)(
  H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
)(
  H94 : val_inj
          (if Int.eq (x>>ᵢ$ 8) (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) <> Vnull
)(
  H95 : val_inj
          (if Int.eq (x>>ᵢ$ 8) (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) <> Vundef
)(
  H96 : array_type_vallist_match Int8u
          (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
             (val_inj
                (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7)))))))
)(
  H97 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length
           (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
              (val_inj
                 (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))))%nat
)(
  t2 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
         (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
            (val_inj
               (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))) =
       Vint32 t1
)(
  H98 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) <
         length
           (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
              (val_inj
                 (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))))%nat
)(
  t12 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)))
          (update_nth_val (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
             (val_inj
                (and (Vint32 x12) (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7))))))) =
        Vint32 t11
)(
  v´37 : val
),
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post5´
       (Vptr (v´29, Int.zero)
        :: Vptr (v´29, Int.zero) :: V$OS_STAT_MUTEX :: nil)
       (Some v´37)
       (logic_lv
          (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
             (update_nth_val
                (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30
                (Vptr (v´52, Int.zero))) (Vptr v´51))
        :: logic_lv
             (x7
              :: v´24
                 :: x15
                    :: m
                       :: Vint32 i6
                          :: Vint32 x14
                             :: Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8)
                                :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)
                                   :: Vint32
                                        ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)
                                      :: Vint32 x11 :: Vint32 x8 :: nil)
           :: logic_llv v´33
              :: logic_llv v´35
                 :: logic_lv
                      (update_nth_val
                         (Z.to_nat
                            (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
                         (update_nth_val
                            (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36
                            (val_inj
                               (and (Vint32 x12)
                                  (Vint32 (Int.not ($ 1<<((x>>ᵢ$ 8)&$ 7)))))))
                         (val_inj (or (Vint32 t1) (Vint32 x11))))
                    :: logic_val v´34
                       :: logic_abstcb
                            (TcbMod.set v´39 (v´52, Int.zero)
                               (x&$ OS_MUTEX_KEEP_LOWER_8, t, m))
                          :: logic_val v´31
                             :: logic_val (Vptr (v´52, Int.zero))
                                :: logic_val (Vptr (v´52, Int.zero))
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MUTEX
                                         :: Vint32 i
                                            :: Vint32 x
                                               :: Vptr (v´52, $ 0)
                                                  ::
                                                  x3 :: v´46 :: nil)
                                      :: logic_lv v´44
                                         :: logic_leventd
                                              (DMutex
                                                 (Vint32 x)
                                                 (Vptr (v´52, $ 0)) :: nil)
                                            :: logic_code
                                                 (mutexpost
                                                  (Vptr (v´29, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV prio @ Int8u |-> v´37 **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_MUTEX) **
     LV legal @ Int8u |-> Vint32 x2 **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
   pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_OSMutexPost3_3_event_rdy_post1´ := forall (
     : val
)(
         v´0 : val
)(
         v´1 : val
)(
         v´2 : val
)(
         v´3 : list vallist
)(
         v´4 : list vallist
)(
         v´5 : list vallist
)(
         v´6 : list EventData
)(
         v´7 : list EventCtr
)(
         v´8 : vallist
)(
         v´9 : val
)(
         v´10 : val
)(
         v´11 : list vallist
)(
         v´12 : vallist
)(
         v´13 : list vallist
)(
         v´14 : vallist
)(
         v´15 : val
)(
         v´16 : EcbMod.map
)(
         v´17 : TcbMod.map
)(
         v´18 : int32
)(
         v´19 : addrval
)(
         v´20 : addrval
)(
         v´21 : val
)(
         v´22 : list vallist
)(
         H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
         H0 : RH_CurTCB v´19 v´17
)(
         v´25 : list EventCtr
)(
         v´26 : list EventCtr
)(
         v´27 : list EventData
)(
         v´28 : list EventData
)(
         v´30 : vallist
)(
         v´31 : val
)(
         v´33 : list vallist
)(
         v´35 : list vallist
)(
         v´36 : vallist
)(
         v´38 : EcbMod.map
)(
         v´39 : TcbMod.map
)(
         v´42 : val
)(
         v´44 : vallist
)(
         v´46 : val
)(
         v´47 : EcbMod.map
)(
         v´48 : EcbMod.map
)(
         v´49 : EcbMod.map
)(
         w : waitset
)(
         v´51 : addrval
)(
         H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
         H17 : EcbMod.join v´47 v´49 v´38
)(
         H12 : length v´25 = length v´27
)(
         H16 : isptr v´46
)(
         v´23 : addrval
)(
         v´29 : block
)(
         H11 : array_type_vallist_match Int8u v´44
)(
         H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
         x3 : val
)(
         i : int32
)(
         H21 : Int.unsigned i <= 255
)(
         H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
         H24 : isptr v´46
)(
         H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
         H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
         H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
         x : int32
)(
         H10 : Int.unsigned x <= 65535
)(
         H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
         H22 : Int.unsigned x <= 65535
)(
         v´24 : val
)(
         v´40 : val
)(
         v´43 : TcbMod.map
)(
         v´45 : TcbMod.map
)(
         v´52 : block
)(
         H31 : v´31 <> Vnull
)(
         H32 : TcbMod.join v´43 v´45 v´39
)(
         H33 : TCBList_P v´31 v´33 v´36 v´43
)(
         H30 : Vptr (v´52, Int.zero) <> Vnull
)(
         i6 : int32
)(
         H39 : Int.unsigned i6 <= 65535
)(
         H36 : isptr v´24
)(
         x7 : val
)(
         x10 : TcbMod.map
)(
         t : taskstatus
)(
         m : msg
)(
         H72 : TCBList_P x7 v´35 v´36 x10
)(
         H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
         H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
         H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
          v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
         H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
         H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
         H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
          w) v´48 v´49
)(
         H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
         H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                          (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
         v´32 : val
)(
         H46 : array_type_vallist_match OS_TCB v´30
)(
         H51 : length v´30 = 64%nat
)(
         H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
         H50 : R_PrioTbl_P v´30 v´39 v´51
)(
         x1 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some x1
)(
         x0 : val
)(
         H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
         H54 : array_type_vallist_match Int8u v´36
)(
         H58 : length v´36 = OS_RDY_TBL_SIZE
)(
         i7 : int32
)(
         H55 : Int.unsigned i7 <= 255
)(
         H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
         H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
         x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
         H59 : length OSUnMapVallist = 256%nat
)(
         H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
         H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
         H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
         fffbb : Int.unsigned x2 < 8
)(
         fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
         H19´´ : length v´44 = Z.to_nat 8
)(
         x4 : int32
)(
         H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
         H64 : Int.unsigned x4 <= 255
)(
         H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
         x5 : int32
)(
         H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
         H67 : Int.unsigned x5 <= 255
)(
         ttfasd : Int.unsigned x5 < 8
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)(
         H27 : isptr x7
)(
         H38 : isptr m
)(
         x6 : int32
)(
         x14 : int32
)(
         H77 : 0 <= Int.unsigned x6
)(
         H85 : Int.unsigned x6 < 64
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
         x15 : val
)(
         H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
         H43 : Int.unsigned (x6>>ᵢ$ 3) <= 255
)(
         H45 : Int.unsigned ($ 1<<(x6>>ᵢ$ 3)) <= 255
)(
         H44 : Int.unsigned ($ 1<<(x6&$ 7)) <= 255
)(
         H42 : Int.unsigned (x6&$ 7) <= 255
)(
         H70 : TcbJoin (v´52, Int.zero) (x6, t, m) x10 v´45
)(
         H41 : Int.unsigned x6 <= 255
)(
         H28 : Int.ltu x6 (x>>ᵢ$ 8) = false
)(
         H37 : isptr x15
)(
         H40 : Int.unsigned x14 <= 255
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 x6
                             :: Vint32 (x6&$ 7)
                                :: Vint32 (x6>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<(x6&$ 7))
                                      :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
          v´36 (x6, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 x6
                                  :: Vint32 (x6&$ 7)
                                     :: Vint32 (x6>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<(x6&$ 7))
                                           :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
                 :: v´35) v´36 v´45
)(
         r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
         r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
         r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
         r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
         H34 : array_type_vallist_match Int8u OSMapVallist
)(
         H69 : length OSMapVallist = 8%nat
)(
         H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
         x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
         H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
         H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
         x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
                 OSMapVallist = Vint32 x9
)(
         H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
         H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
         x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
                 OSMapVallist = Vint32 x11
)(
         H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
         r5 : Int.unsigned (x6>>ᵢ$ 3) < 8
)(
         r6 : Int.unsigned (x6&$ 7) < 8
)(
         rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
         rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
         rr5 : (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)) < length v´36)%nat
)(
         rr6 : (Z.to_nat (Int.unsigned (x6&$ 7)) < length v´36)%nat
)(
         rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
         rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
         rrr5 : Int.unsigned (x6>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
         rrr6 : Int.unsigned (x6&$ 7) < Z.of_nat (length v´36)
)(
         HH58 : length v´36 = Z.to_nat 8
)(
  aa : rule_type_val_match Int8u
                           (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  aa3 : rule_type_val_match Int8u
                            (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36) = true
)(
         x16 : int32
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
         H91 : Int.unsigned x16 <= 255
)(
         x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
         H90 : Int.unsigned x13 <= 255
)(
         x12 : int32
)(
         H86 : nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36 = Vint32 x12
)(
         H89 : Int.unsigned x12 <= 255
)(
         H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
)(
  H93 : val_inj
          (if Int.eq x6 (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
        val_inj
          (if Int.eq x6 (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vnull
)(
  H94 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <>
        Vint32 Int.zero
)(
  H95 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <> Vnull
)(
  H96 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <> Vundef
)(
  v´34 : val
),
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post1´
       (Vptr (v´29, Int.zero)
        :: Vptr (v´29, Int.zero) :: V$OS_STAT_MUTEX :: nil)
       (Some v´34)
       (logic_lv v´30
        :: logic_lv
             (x7
              :: v´24
                 :: x15
                    :: m
                       :: Vint32 i6
                          :: Vint32 x14
                             :: Vint32 x6
                                :: Vint32 (x6&$ 7)
                                   :: Vint32 (x6>>ᵢ$ 3)
                                      :: Vint32 ($ 1<<(x6&$ 7))
                                         :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
           :: logic_llv v´33
              :: logic_llv v´35
                 :: logic_lv v´36
                    :: logic_val (Vint32 i7)
                       :: logic_abstcb v´39
                          :: logic_val v´31
                             :: logic_val (Vptr (v´52, Int.zero))
                                :: logic_val (Vptr (v´52, Int.zero))
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MUTEX
                                         :: Vint32 i
                                            :: Vint32 x
                                               :: Vptr (v´52, $ 0)
                                                  ::
                                                  x3 :: v´46 :: nil)
                                      :: logic_lv v´44
                                         :: logic_leventd
                                              (DMutex
                                                 (Vint32 x)
                                                 (Vptr (v´52, $ 0)) :: nil)
                                            :: logic_code
                                                 (mutexpost
                                                  (Vptr (v´29, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV prio @ Int8u |-> v´34 **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_MUTEX) **
     LV legal @ Int8u |-> Vint32 x2 **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
   pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   RETURN OS_NO_ERR {{Afalse}}.

Definition gen_OSMutexPost3_3_event_rdy_post1:= forall
(
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : int32
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : length v´25 = length v´27
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Int8u v´44
)(
  H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  i : int32
)(
  H21 : Int.unsigned i <= 255
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
  H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
  H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
  x : int32
)(
  H10 : Int.unsigned x <= 65535
)(
  H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H22 : Int.unsigned x <= 65535
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : v´31 <> Vnull
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : Vptr (v´52, Int.zero) <> Vnull
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 65535
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
  H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
  H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
          v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
  H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
          w) v´48 v´49
)(
  H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
  H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                          (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match OS_TCB v´30
)(
  H51 : length v´30 = 64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x1 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some x1
)(
  x0 : val
)(
  H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
  H54 : array_type_vallist_match Int8u v´36
)(
  H58 : length v´36 = OS_RDY_TBL_SIZE
)(
  i7 : int32
)(
  H55 : Int.unsigned i7 <= 255
)(
  H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
  H59 : length OSUnMapVallist = 256%nat
)(
  H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
  H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
  H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
  fffbb : Int.unsigned x2 < 8
)(
  fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
  H19´´ : length v´44 = Z.to_nat 8
)(
  x4 : int32
)(
  H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
  H64 : Int.unsigned x4 <= 255
)(
  H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
  x5 : int32
)(
  H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
  H67 : Int.unsigned x5 <= 255
)(
  ttfasd : Int.unsigned x5 < 8
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x6 : int32
)(
  x14 : int32
)(
  H77 : 0 <= Int.unsigned x6
)(
  H85 : Int.unsigned x6 < 64
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
  x15 : val
)(
  H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
  H43 : Int.unsigned (x6>>ᵢ$ 3) <= 255
)(
  H45 : Int.unsigned ($ 1<<(x6>>ᵢ$ 3)) <= 255
)(
  H44 : Int.unsigned ($ 1<<(x6&$ 7)) <= 255
)(
  H42 : Int.unsigned (x6&$ 7) <= 255
)(
  H70 : TcbJoin (v´52, Int.zero) (x6, t, m) x10 v´45
)(
  H41 : Int.unsigned x6 <= 255
)(
  H28 : Int.ltu x6 (x>>ᵢ$ 8) = false
)(
  H37 : isptr x15
)(
  H40 : Int.unsigned x14 <= 255
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 x6
                             :: Vint32 (x6&$ 7)
                                :: Vint32 (x6>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<(x6&$ 7))
                                      :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
          v´36 (x6, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 x6
                                  :: Vint32 (x6&$ 7)
                                     :: Vint32 (x6>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<(x6&$ 7))
                                           :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
                 :: v´35) v´36 v´45
)(
  r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
  r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
  r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  H34 : array_type_vallist_match Int8u OSMapVallist
)(
  H69 : length OSMapVallist = 8%nat
)(
  H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
  x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
  H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
  H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
                 OSMapVallist = Vint32 x9
)(
  H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
  H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
                 OSMapVallist = Vint32 x11
)(
  H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
  r5 : Int.unsigned (x6>>ᵢ$ 3) < 8
)(
  r6 : Int.unsigned (x6&$ 7) < 8
)(
  rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
  rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rr5 : (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)) < length v´36)%nat
)(
  rr6 : (Z.to_nat (Int.unsigned (x6&$ 7)) < length v´36)%nat
)(
  rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
  rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  rrr5 : Int.unsigned (x6>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr6 : Int.unsigned (x6&$ 7) < Z.of_nat (length v´36)
)(
  HH58 : length v´36 = Z.to_nat 8
)(
  aa : rule_type_val_match Int8u
                           (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  aa3 : rule_type_val_match Int8u
                            (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36) = true
)(
  x16 : int32
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
  H91 : Int.unsigned x16 <= 255
)(
  x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
  H90 : Int.unsigned x13 <= 255
)(
  x12 : int32
)(
  H86 : nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36 = Vint32 x12
)(
  H89 : Int.unsigned x12 <= 255
)(
  H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
)(
  H93 : val_inj
          (if Int.eq x6 (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
        val_inj
          (if Int.eq x6 (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vnull
)(
  H94 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <>
        Vint32 Int.zero
)(
  H95 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <> Vnull
)(
  H96 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <> Vundef
)(
  v´34 : val
),
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post1
       (Vptr (v´29, Int.zero)
        :: Vptr (v´29, Int.zero) :: V$OS_STAT_MUTEX :: nil)
       (Some v´34)
       (logic_lv v´30
        :: logic_lv
             (x7
              :: v´24
                 :: x15
                    :: m
                       :: Vint32 i6
                          :: Vint32 x14
                             :: Vint32 x6
                                :: Vint32 (x6&$ 7)
                                   :: Vint32 (x6>>ᵢ$ 3)
                                      :: Vint32 ($ 1<<(x6&$ 7))
                                         :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
           :: logic_llv v´33
              :: logic_llv v´35
                 :: logic_lv v´36
                    :: logic_val (Vint32 i7)
                       :: logic_abstcb v´39
                          :: logic_val v´31
                             :: logic_val (Vptr (v´52, Int.zero))
                                :: logic_val (Vptr (v´52, Int.zero))
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MUTEX
                                         :: Vint32 i
                                            :: Vint32 x
                                               :: Vptr (v´52, $ 0)
                                                  ::
                                                  x3 :: v´46 :: nil)
                                      :: logic_lv v´44
                                         :: logic_leventd
                                              (DMutex
                                                 (Vint32 x)
                                                 (Vptr (v´52, $ 0)) :: nil)
                                            :: logic_code
                                                 (mutexpost
                                                  (Vptr (v´29, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV prio @ Int8u |-> v´34 **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_MUTEX) **
     LV legal @ Int8u |-> Vint32 x2 **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
   pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   RETURN OS_NO_ERR {{Afalse}}.

Definition gen_OSMutexPost3_3_event_rdy_post3´:= forall (
     : val
)(
         v´0 : val
)(
         v´1 : val
)(
         v´2 : val
)(
         v´3 : list vallist
)(
         v´4 : list vallist
)(
         v´5 : list vallist
)(
         v´6 : list EventData
)(
         v´7 : list EventCtr
)(
         v´8 : vallist
)(
         v´9 : val
)(
         v´10 : val
)(
         v´11 : list vallist
)(
         v´12 : vallist
)(
         v´13 : list vallist
)(
         v´14 : vallist
)(
         v´15 : val
)(
         v´16 : EcbMod.map
)(
         v´17 : TcbMod.map
)(
         v´18 : int32
)(
         v´19 : addrval
)(
         v´20 : addrval
)(
         v´21 : val
)(
         v´22 : list vallist
)(
         H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
         H0 : RH_CurTCB v´19 v´17
)(
         v´25 : list EventCtr
)(
         v´26 : list EventCtr
)(
         v´27 : list EventData
)(
         v´28 : list EventData
)(
         v´30 : vallist
)(
         v´31 : val
)(
         v´33 : list vallist
)(
         v´35 : list vallist
)(
         v´36 : vallist
)(
         v´38 : EcbMod.map
)(
         v´39 : TcbMod.map
)(
         v´42 : val
)(
         v´44 : vallist
)(
         v´46 : val
)(
         v´47 : EcbMod.map
)(
         v´48 : EcbMod.map
)(
         v´49 : EcbMod.map
)(
         w : waitset
)(
         v´51 : addrval
)(
         H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
         H17 : EcbMod.join v´47 v´49 v´38
)(
         H12 : length v´25 = length v´27
)(
         H16 : isptr v´46
)(
         v´23 : addrval
)(
         v´29 : block
)(
         H11 : array_type_vallist_match Int8u v´44
)(
         H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
         x3 : val
)(
         i : int32
)(
         H21 : Int.unsigned i <= 255
)(
         H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
         H24 : isptr v´46
)(
         H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
         H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
         H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
         x : int32
)(
         H10 : Int.unsigned x <= 65535
)(
         H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
         H22 : Int.unsigned x <= 65535
)(
         v´24 : val
)(
         v´40 : val
)(
         v´43 : TcbMod.map
)(
         v´45 : TcbMod.map
)(
         v´52 : block
)(
         H31 : v´31 <> Vnull
)(
         H32 : TcbMod.join v´43 v´45 v´39
)(
         H33 : TCBList_P v´31 v´33 v´36 v´43
)(
         H30 : Vptr (v´52, Int.zero) <> Vnull
)(
         i6 : int32
)(
         H39 : Int.unsigned i6 <= 65535
)(
         H36 : isptr v´24
)(
         x7 : val
)(
         x10 : TcbMod.map
)(
         t : taskstatus
)(
         m : msg
)(
         H72 : TCBList_P x7 v´35 v´36 x10
)(
         H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
         H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
         H23 : isptr (Vptr (v´52, $ 0))
)(
         H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
             :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
   v´44) v´39
)(
         H1 : ECBList_P v´42 Vnull
         (v´25 ++
             ((V$OS_EVENT_TYPE_MUTEX
                  :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
   v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
         H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
         H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
         H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
          w) v´48 v´49
)(
         H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
         H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                          (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
       )(
         v´32 : val
)(
         H46 : array_type_vallist_match OS_TCB v´30
)(
         H51 : length v´30 = 64%nat
)(
         H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
         H50 : R_PrioTbl_P v´30 v´39 v´51
)(
         x1 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some x1
)(
         x0 : val
)(
         H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
         H54 : array_type_vallist_match Int8u v´36
)(
         H58 : length v´36 = OS_RDY_TBL_SIZE
)(
         i7 : int32
)(
         H55 : Int.unsigned i7 <= 255
)(
         H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
         H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
         x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
         H59 : length OSUnMapVallist = 256%nat
)(
         H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
         H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
         H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
         fffbb : Int.unsigned x2 < 8
)(
         fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
         H19´´ : length v´44 = Z.to_nat 8
)(
         x4 : int32
)(
         H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
         H64 : Int.unsigned x4 <= 255
)(
         H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
         x5 : int32
)(
         H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
         H67 : Int.unsigned x5 <= 255
)(
         ttfasd : Int.unsigned x5 < 8
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)(
         H27 : isptr x7
)(
         H38 : isptr m
)(
         x6 : int32
)(
         x14 : int32
)(
         H77 : 0 <= Int.unsigned x6
)(
         H85 : Int.unsigned x6 < 64
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
         x15 : val
)(
         H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
         H43 : Int.unsigned (x6>>ᵢ$ 3) <= 255
)(
         H45 : Int.unsigned ($ 1<<(x6>>ᵢ$ 3)) <= 255
)(
         H44 : Int.unsigned ($ 1<<(x6&$ 7)) <= 255
)(
         H42 : Int.unsigned (x6&$ 7) <= 255
)(
         H70 : TcbJoin (v´52, Int.zero) (x6, t, m) x10 v´45
)(
         H41 : Int.unsigned x6 <= 255
)(
         H28 : Int.ltu x6 (x>>ᵢ$ 8) = false
)(
         H37 : isptr x15
)(
         H40 : Int.unsigned x14 <= 255
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 x6
                             :: Vint32 (x6&$ 7)
                                :: Vint32 (x6>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<(x6&$ 7))
                                      :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
          v´36 (x6, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 x6
                                  :: Vint32 (x6&$ 7)
                                     :: Vint32 (x6>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<(x6&$ 7))
                                           :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
                 :: v´35) v´36 v´45
)(
         r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
         r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
         r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
         r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
         H34 : array_type_vallist_match Int8u OSMapVallist
)(
         H69 : length OSMapVallist = 8%nat
)(
         H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
         x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
         H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
         H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
         x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
                 OSMapVallist = Vint32 x9
)(
         H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
         H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
         x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
                 OSMapVallist = Vint32 x11
)(
         H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
         r5 : Int.unsigned (x6>>ᵢ$ 3) < 8
)(
         r6 : Int.unsigned (x6&$ 7) < 8
)(
         rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
         rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
         rr5 : (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)) < length v´36)%nat
)(
         rr6 : (Z.to_nat (Int.unsigned (x6&$ 7)) < length v´36)%nat
)(
         rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
         rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
         rrr5 : Int.unsigned (x6>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
         rrr6 : Int.unsigned (x6&$ 7) < Z.of_nat (length v´36)
)(
         HH58 : length v´36 = Z.to_nat 8
)(
  aa : rule_type_val_match Int8u
                           (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  aa3 : rule_type_val_match Int8u
                            (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36) = true
)(
         x16 : int32
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
         H91 : Int.unsigned x16 <= 255
)(
         x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
         H90 : Int.unsigned x13 <= 255
)(
         x12 : int32
)(
         H86 : nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36 = Vint32 x12
)(
         H89 : Int.unsigned x12 <= 255
)(
         H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
)(
  H93 : val_inj
          (if Int.eq x6 (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
        val_inj
          (if Int.eq x6 (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vnull
)(
  H94 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <>
        Vint32 Int.zero
)(
  H95 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <> Vnull
)(
  H96 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <> Vundef
)(
  v´34 : val
       ),
{|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post3´
       (Vptr (v´29, Int.zero)
        :: Vptr (v´29, Int.zero) :: V$OS_STAT_MUTEX :: nil)
       (Some v´34)
       (logic_lv v´30
        :: logic_lv
             (x7
              :: v´24
                 :: x15
                    :: m
                       :: Vint32 i6
                          :: Vint32 x14
                             :: Vint32 x6
                                :: Vint32 (x6&$ 7)
                                   :: Vint32 (x6>>ᵢ$ 3)
                                      :: Vint32 ($ 1<<(x6&$ 7))
                                         :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
           :: logic_llv v´33
              :: logic_llv v´35
                 :: logic_lv v´36
                    :: logic_val (Vint32 i7)
                       :: logic_abstcb v´39
                          :: logic_val v´31
                             :: logic_val (Vptr (v´52, Int.zero))
                                :: logic_val (Vptr (v´52, Int.zero))
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MUTEX
                                         :: Vint32 i
                                            :: Vint32 x
                                               :: Vptr (v´52, $ 0)
                                                  ::
                                                  x3 :: v´46 :: nil)
                                      :: logic_lv v´44
                                         :: logic_leventd
                                              (DMutex
                                                 (Vint32 x)
                                                 (Vptr (v´52, $ 0)) :: nil)
                                            :: logic_code
                                                 (mutexpost
                                                  (Vptr (v´29, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV prio @ Int8u |-> v´34 **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_MUTEX) **
     LV legal @ Int8u |-> Vint32 x2 **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
   pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   RETURN OS_NO_ERR {{Afalse}}.

Definition gen_OSMutexPost3_3_event_rdy_post3 := forall (
     : val
)(
         v´0 : val
)(
         v´1 : val
)(
         v´2 : val
)(
         v´3 : list vallist
)(
         v´4 : list vallist
)(
         v´5 : list vallist
)(
         v´6 : list EventData
)(
         v´7 : list EventCtr
)(
         v´8 : vallist
)(
         v´9 : val
)(
         v´10 : val
)(
         v´11 : list vallist
)(
         v´12 : vallist
)(
         v´13 : list vallist
)(
         v´14 : vallist
)(
         v´15 : val
)(
         v´16 : EcbMod.map
)(
         v´17 : TcbMod.map
)(
         v´18 : int32
)(
         v´19 : addrval
)(
         v´20 : addrval
)(
         v´21 : val
)(
         v´22 : list vallist
)(
         H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
         H0 : RH_CurTCB v´19 v´17
)(
         v´25 : list EventCtr
)(
         v´26 : list EventCtr
)(
         v´27 : list EventData
)(
         v´28 : list EventData
)(
         v´30 : vallist
)(
         v´31 : val
)(
         v´33 : list vallist
)(
         v´35 : list vallist
)(
         v´36 : vallist
)(
         v´38 : EcbMod.map
)(
         v´39 : TcbMod.map
)(
         v´42 : val
)(
         v´44 : vallist
)(
         v´46 : val
)(
         v´47 : EcbMod.map
)(
         v´48 : EcbMod.map
)(
         v´49 : EcbMod.map
)(
         w : waitset
)(
         v´51 : addrval
)(
         H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
         H17 : EcbMod.join v´47 v´49 v´38
)(
         H12 : length v´25 = length v´27
)(
         H16 : isptr v´46
)(
         v´23 : addrval
)(
         v´29 : block
)(
         H11 : array_type_vallist_match Int8u v´44
)(
         H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
         x3 : val
)(
         i : int32
)(
         H21 : Int.unsigned i <= 255
)(
         H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
         H24 : isptr v´46
)(
         H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
         H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
         H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
         x : int32
)(
         H10 : Int.unsigned x <= 65535
)(
         H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
         H22 : Int.unsigned x <= 65535
)(
         v´24 : val
)(
         v´40 : val
)(
         v´43 : TcbMod.map
)(
         v´45 : TcbMod.map
)(
         v´52 : block
)(
         H31 : v´31 <> Vnull
)(
         H32 : TcbMod.join v´43 v´45 v´39
)(
         H33 : TCBList_P v´31 v´33 v´36 v´43
)(
         H30 : Vptr (v´52, Int.zero) <> Vnull
)(
         i6 : int32
)(
         H39 : Int.unsigned i6 <= 65535
)(
         H36 : isptr v´24
)(
         x7 : val
)(
         x10 : TcbMod.map
)(
         t : taskstatus
)(
         m : msg
)(
         H72 : TCBList_P x7 v´35 v´36 x10
)(
         H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
         H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
         H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
          v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
         H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
         H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
         H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
          w) v´48 v´49
)(
         H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
         H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                          (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
         v´32 : val
)(
         H46 : array_type_vallist_match OS_TCB v´30
)(
         H51 : length v´30 = 64%nat
)(
         H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
         H50 : R_PrioTbl_P v´30 v´39 v´51
)(
         x1 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some x1
)(
         x0 : val
)(
         H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
         H54 : array_type_vallist_match Int8u v´36
)(
         H58 : length v´36 = OS_RDY_TBL_SIZE
)(
         i7 : int32
)(
         H55 : Int.unsigned i7 <= 255
)(
         H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
         H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
         x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
         H59 : length OSUnMapVallist = 256%nat
)(
         H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
         H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
         H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
         fffbb : Int.unsigned x2 < 8
)(
         fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
         H19´´ : length v´44 = Z.to_nat 8
)(
         x4 : int32
)(
         H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
         H64 : Int.unsigned x4 <= 255
)(
         H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
         x5 : int32
)(
         H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
         H67 : Int.unsigned x5 <= 255
)(
         ttfasd : Int.unsigned x5 < 8
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)(
         H27 : isptr x7
)(
         H38 : isptr m
)(
         x6 : int32
)(
         x14 : int32
)(
         H77 : 0 <= Int.unsigned x6
)(
         H85 : Int.unsigned x6 < 64
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
         x15 : val
)(
         H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
         H43 : Int.unsigned (x6>>ᵢ$ 3) <= 255
)(
         H45 : Int.unsigned ($ 1<<(x6>>ᵢ$ 3)) <= 255
)(
         H44 : Int.unsigned ($ 1<<(x6&$ 7)) <= 255
)(
         H42 : Int.unsigned (x6&$ 7) <= 255
)(
         H70 : TcbJoin (v´52, Int.zero) (x6, t, m) x10 v´45
)(
         H41 : Int.unsigned x6 <= 255
)(
         H28 : Int.ltu x6 (x>>ᵢ$ 8) = false
)(
         H37 : isptr x15
)(
         H40 : Int.unsigned x14 <= 255
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 x6
                             :: Vint32 (x6&$ 7)
                                :: Vint32 (x6>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<(x6&$ 7))
                                      :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
          v´36 (x6, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 x6
                                  :: Vint32 (x6&$ 7)
                                     :: Vint32 (x6>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<(x6&$ 7))
                                           :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
                 :: v´35) v´36 v´45
)(
         r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
         r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
         r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
         r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
         H34 : array_type_vallist_match Int8u OSMapVallist
)(
         H69 : length OSMapVallist = 8%nat
)(
         H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
         x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
         H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
         H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
         x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
                 OSMapVallist = Vint32 x9
)(
         H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
         H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
         x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
                 OSMapVallist = Vint32 x11
)(
         H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
         r5 : Int.unsigned (x6>>ᵢ$ 3) < 8
)(
         r6 : Int.unsigned (x6&$ 7) < 8
)(
         rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
         rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
         rr5 : (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)) < length v´36)%nat
)(
         rr6 : (Z.to_nat (Int.unsigned (x6&$ 7)) < length v´36)%nat
)(
         rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
         rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
         rrr5 : Int.unsigned (x6>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
         rrr6 : Int.unsigned (x6&$ 7) < Z.of_nat (length v´36)
)(
         HH58 : length v´36 = Z.to_nat 8
)(
  aa : rule_type_val_match Int8u
                           (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  aa3 : rule_type_val_match Int8u
                            (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36) = true
)(
         x16 : int32
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
         H91 : Int.unsigned x16 <= 255
)(
         x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
         H90 : Int.unsigned x13 <= 255
)(
         x12 : int32
)(
         H86 : nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36 = Vint32 x12
)(
         H89 : Int.unsigned x12 <= 255
)(
         H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
)(
  H93 : val_inj
          (if Int.eq x6 (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
        val_inj
          (if Int.eq x6 (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vnull
)(
  H94 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <>
        Vint32 Int.zero
)(
  H95 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <> Vnull
)(
  H96 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <> Vundef
)(
  v´34 : val
),
 {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post3
       (Vptr (v´29, Int.zero)
        :: Vptr (v´29, Int.zero) :: V$OS_STAT_MUTEX :: nil)
       (Some v´34)
       (logic_lv v´30
        :: logic_lv
             (x7
              :: v´24
                 :: x15
                    :: m
                       :: Vint32 i6
                          :: Vint32 x14
                             :: Vint32 x6
                                :: Vint32 (x6&$ 7)
                                   :: Vint32 (x6>>ᵢ$ 3)
                                      :: Vint32 ($ 1<<(x6&$ 7))
                                         :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
           :: logic_llv v´33
              :: logic_llv v´35
                 :: logic_lv v´36
                    :: logic_val (Vint32 i7)
                       :: logic_abstcb v´39
                          :: logic_val v´31
                             :: logic_val (Vptr (v´52, Int.zero))
                                :: logic_val (Vptr (v´52, Int.zero))
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MUTEX
                                         :: Vint32 i
                                            :: Vint32 x
                                               :: Vptr (v´52, $ 0)
                                                  ::
                                                  x3 :: v´46 :: nil)
                                      :: logic_lv v´44
                                         :: logic_leventd
                                              (DMutex
                                                 (Vint32 x)
                                                 (Vptr (v´52, $ 0)) :: nil)
                                            :: logic_code
                                                 (mutexpost
                                                  (Vptr (v´29, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV prio @ Int8u |-> v´34 **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_MUTEX) **
     LV legal @ Int8u |-> Vint32 x2 **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
   pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
   RETURN OS_NO_ERR {{Afalse}}.

Definition gen_OSMutexPost3_3_event_rdy_post5´:= forall (
     : val
)(
         v´0 : val
)(
         v´1 : val
)(
         v´2 : val
)(
         v´3 : list vallist
)(
         v´4 : list vallist
)(
         v´5 : list vallist
)(
         v´6 : list EventData
)(
         v´7 : list EventCtr
)(
         v´8 : vallist
)(
         v´9 : val
)(
         v´10 : val
)(
         v´11 : list vallist
)(
         v´12 : vallist
)(
         v´13 : list vallist
)(
         v´14 : vallist
)(
         v´15 : val
)(
         v´16 : EcbMod.map
)(
         v´17 : TcbMod.map
)(
         v´18 : int32
)(
         v´19 : addrval
)(
         v´20 : addrval
)(
         v´21 : val
)(
         v´22 : list vallist
)(
         H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
         H0 : RH_CurTCB v´19 v´17
)(
         v´25 : list EventCtr
)(
         v´26 : list EventCtr
)(
         v´27 : list EventData
)(
         v´28 : list EventData
)(
         v´30 : vallist
)(
         v´31 : val
)(
         v´33 : list vallist
)(
         v´35 : list vallist
)(
         v´36 : vallist
)(
         v´38 : EcbMod.map
)(
         v´39 : TcbMod.map
)(
         v´42 : val
)(
         v´44 : vallist
)(
         v´46 : val
)(
         v´47 : EcbMod.map
)(
         v´48 : EcbMod.map
)(
         v´49 : EcbMod.map
)(
         w : waitset
)(
         v´51 : addrval
)(
         H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
         H17 : EcbMod.join v´47 v´49 v´38
)(
         H12 : length v´25 = length v´27
)(
         H16 : isptr v´46
)(
         v´23 : addrval
)(
         v´29 : block
)(
         H11 : array_type_vallist_match Int8u v´44
)(
         H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
         x3 : val
)(
         i : int32
)(
         H21 : Int.unsigned i <= 255
)(
         H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
         H24 : isptr v´46
)(
         H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
         H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
         H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
         x : int32
)(
         H10 : Int.unsigned x <= 65535
)(
         H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
         H22 : Int.unsigned x <= 65535
)(
         v´24 : val
)(
         v´40 : val
)(
         v´43 : TcbMod.map
)(
         v´45 : TcbMod.map
)(
         v´52 : block
)(
         H31 : v´31 <> Vnull
)(
         H32 : TcbMod.join v´43 v´45 v´39
)(
         H33 : TCBList_P v´31 v´33 v´36 v´43
)(
         H30 : Vptr (v´52, Int.zero) <> Vnull
)(
         i6 : int32
)(
         H39 : Int.unsigned i6 <= 65535
)(
         H36 : isptr v´24
)(
         x7 : val
)(
         x10 : TcbMod.map
)(
         t : taskstatus
)(
         m : msg
)(
         H72 : TCBList_P x7 v´35 v´36 x10
)(
         H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
         H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
         H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
          v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
         H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
         H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
         H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
          w) v´48 v´49
)(
         H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
         H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                          (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
         v´32 : val
)(
         H46 : array_type_vallist_match OS_TCB v´30
)(
         H51 : length v´30 = 64%nat
)(
         H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
         H50 : R_PrioTbl_P v´30 v´39 v´51
)(
         x1 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some x1
)(
         x0 : val
)(
         H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
         H54 : array_type_vallist_match Int8u v´36
)(
         H58 : length v´36 = OS_RDY_TBL_SIZE
)(
         i7 : int32
)(
         H55 : Int.unsigned i7 <= 255
)(
         H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
         H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
         x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
         H59 : length OSUnMapVallist = 256%nat
)(
         H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
         H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
         H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
         fffbb : Int.unsigned x2 < 8
)(
         fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
         H19´´ : length v´44 = Z.to_nat 8
)(
         x4 : int32
)(
         H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
         H64 : Int.unsigned x4 <= 255
)(
         H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
         x5 : int32
)(
         H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
         H67 : Int.unsigned x5 <= 255
)(
         ttfasd : Int.unsigned x5 < 8
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)(
         H27 : isptr x7
)(
         H38 : isptr m
)(
         x6 : int32
)(
         x14 : int32
)(
         H77 : 0 <= Int.unsigned x6
)(
         H85 : Int.unsigned x6 < 64
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
         x15 : val
)(
         H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
         H43 : Int.unsigned (x6>>ᵢ$ 3) <= 255
)(
         H45 : Int.unsigned ($ 1<<(x6>>ᵢ$ 3)) <= 255
)(
         H44 : Int.unsigned ($ 1<<(x6&$ 7)) <= 255
)(
         H42 : Int.unsigned (x6&$ 7) <= 255
)(
         H70 : TcbJoin (v´52, Int.zero) (x6, t, m) x10 v´45
)(
         H41 : Int.unsigned x6 <= 255
)(
         H28 : Int.ltu x6 (x>>ᵢ$ 8) = false
)(
         H37 : isptr x15
)(
         H40 : Int.unsigned x14 <= 255
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 x6
                             :: Vint32 (x6&$ 7)
                                :: Vint32 (x6>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<(x6&$ 7))
                                      :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
          v´36 (x6, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 x6
                                  :: Vint32 (x6&$ 7)
                                     :: Vint32 (x6>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<(x6&$ 7))
                                           :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
                 :: v´35) v´36 v´45
)(
         r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
         r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
         r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
         r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
         H34 : array_type_vallist_match Int8u OSMapVallist
)(
         H69 : length OSMapVallist = 8%nat
)(
         H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
         x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
         H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
         H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
         x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
                 OSMapVallist = Vint32 x9
)(
         H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
         H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
         x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
                 OSMapVallist = Vint32 x11
)(
         H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
         r5 : Int.unsigned (x6>>ᵢ$ 3) < 8
)(
         r6 : Int.unsigned (x6&$ 7) < 8
)(
         rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
         rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
         rr5 : (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)) < length v´36)%nat
)(
         rr6 : (Z.to_nat (Int.unsigned (x6&$ 7)) < length v´36)%nat
)(
         rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
         rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
         rrr5 : Int.unsigned (x6>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
         rrr6 : Int.unsigned (x6&$ 7) < Z.of_nat (length v´36)
)(
         HH58 : length v´36 = Z.to_nat 8
)(
  aa : rule_type_val_match Int8u
                           (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  aa3 : rule_type_val_match Int8u
                            (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36) = true
)(
         x16 : int32
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
         H91 : Int.unsigned x16 <= 255
)(
         x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
         H90 : Int.unsigned x13 <= 255
)(
         x12 : int32
)(
         H86 : nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36 = Vint32 x12
)(
         H89 : Int.unsigned x12 <= 255
)(
         H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
)(
  H93 : val_inj
          (if Int.eq x6 (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
        val_inj
          (if Int.eq x6 (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vnull
)(
  H94 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <>
        Vint32 Int.zero
)(
  H95 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <> Vnull
)(
  H96 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <> Vundef
)(
  v´34 : val
),
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post5´
       (Vptr (v´29, Int.zero)
        :: Vptr (v´29, Int.zero) :: V$OS_STAT_MUTEX :: nil)
       (Some v´34)
       (logic_lv v´30
        :: logic_lv
             (x7
              :: v´24
                 :: x15
                    :: m
                       :: Vint32 i6
                          :: Vint32 x14
                             :: Vint32 x6
                                :: Vint32 (x6&$ 7)
                                   :: Vint32 (x6>>ᵢ$ 3)
                                      :: Vint32 ($ 1<<(x6&$ 7))
                                         :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
           :: logic_llv v´33
              :: logic_llv v´35
                 :: logic_lv v´36
                    :: logic_val (Vint32 i7)
                       :: logic_abstcb v´39
                          :: logic_val v´31
                             :: logic_val (Vptr (v´52, Int.zero))
                                :: logic_val (Vptr (v´52, Int.zero))
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MUTEX
                                         :: Vint32 i
                                            :: Vint32 x
                                               :: Vptr (v´52, $ 0)
                                                  ::
                                                  x3 :: v´46 :: nil)
                                      :: logic_lv v´44
                                         :: logic_leventd
                                              (DMutex
                                                 (Vint32 x)
                                                 (Vptr (v´52, $ 0)) :: nil)
                                            :: logic_code
                                                 (mutexpost
                                                  (Vptr (v´29, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV prio @ Int8u |-> v´34 **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_MUTEX) **
     LV legal @ Int8u |-> Vint32 x2 **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
   pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_OSMutexPost3_3_event_rdy_post5:= forall (
     : val
)(
         v´0 : val
)(
         v´1 : val
)(
         v´2 : val
)(
         v´3 : list vallist
)(
         v´4 : list vallist
)(
         v´5 : list vallist
)(
         v´6 : list EventData
)(
         v´7 : list EventCtr
)(
         v´8 : vallist
)(
         v´9 : val
)(
         v´10 : val
)(
         v´11 : list vallist
)(
         v´12 : vallist
)(
         v´13 : list vallist
)(
         v´14 : vallist
)(
         v´15 : val
)(
         v´16 : EcbMod.map
)(
         v´17 : TcbMod.map
)(
         v´18 : int32
)(
         v´19 : addrval
)(
         v´20 : addrval
)(
         v´21 : val
)(
         v´22 : list vallist
)(
         H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
         H0 : RH_CurTCB v´19 v´17
)(
         v´25 : list EventCtr
)(
         v´26 : list EventCtr
)(
         v´27 : list EventData
)(
         v´28 : list EventData
)(
         v´30 : vallist
)(
         v´31 : val
)(
         v´33 : list vallist
)(
         v´35 : list vallist
)(
         v´36 : vallist
)(
         v´38 : EcbMod.map
)(
         v´39 : TcbMod.map
)(
         v´42 : val
)(
         v´44 : vallist
)(
         v´46 : val
)(
         v´47 : EcbMod.map
)(
         v´48 : EcbMod.map
)(
         v´49 : EcbMod.map
)(
         w : waitset
)(
         v´51 : addrval
)(
         H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
         H17 : EcbMod.join v´47 v´49 v´38
)(
         H12 : length v´25 = length v´27
)(
         H16 : isptr v´46
)(
         v´23 : addrval
)(
         v´29 : block
)(
         H11 : array_type_vallist_match Int8u v´44
)(
         H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
         x3 : val
)(
         i : int32
)(
         H21 : Int.unsigned i <= 255
)(
         H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
         H24 : isptr v´46
)(
         H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
         H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
         H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
         x : int32
)(
         H10 : Int.unsigned x <= 65535
)(
         H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
         H22 : Int.unsigned x <= 65535
)(
         v´24 : val
)(
         v´40 : val
)(
         v´43 : TcbMod.map
)(
         v´45 : TcbMod.map
)(
         v´52 : block
)(
         H31 : v´31 <> Vnull
)(
         H32 : TcbMod.join v´43 v´45 v´39
)(
         H33 : TCBList_P v´31 v´33 v´36 v´43
)(
         H30 : Vptr (v´52, Int.zero) <> Vnull
)(
         i6 : int32
)(
         H39 : Int.unsigned i6 <= 65535
)(
         H36 : isptr v´24
)(
         x7 : val
)(
         x10 : TcbMod.map
)(
         t : taskstatus
)(
         m : msg
)(
         H72 : TCBList_P x7 v´35 v´36 x10
)(
         H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
         H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
         H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
          v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
         H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
         H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
         H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
          w) v´48 v´49
)(
         H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
         H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                          (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
         v´32 : val
)(
         H46 : array_type_vallist_match OS_TCB v´30
)(
         H51 : length v´30 = 64%nat
)(
         H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
         H50 : R_PrioTbl_P v´30 v´39 v´51
)(
         x1 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some x1
)(
         x0 : val
)(
         H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
         H54 : array_type_vallist_match Int8u v´36
)(
         H58 : length v´36 = OS_RDY_TBL_SIZE
)(
         i7 : int32
)(
         H55 : Int.unsigned i7 <= 255
)(
         H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
         H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
         x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
         H59 : length OSUnMapVallist = 256%nat
)(
         H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
         H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
         H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
         fffbb : Int.unsigned x2 < 8
)(
         fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
         H19´´ : length v´44 = Z.to_nat 8
)(
         x4 : int32
)(
         H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
         H64 : Int.unsigned x4 <= 255
)(
         H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
         x5 : int32
)(
         H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
         H67 : Int.unsigned x5 <= 255
)(
         ttfasd : Int.unsigned x5 < 8
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)(
         H27 : isptr x7
)(
         H38 : isptr m
)(
         x6 : int32
)(
         x14 : int32
)(
         H77 : 0 <= Int.unsigned x6
)(
         H85 : Int.unsigned x6 < 64
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
         x15 : val
)(
         H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
         H43 : Int.unsigned (x6>>ᵢ$ 3) <= 255
)(
         H45 : Int.unsigned ($ 1<<(x6>>ᵢ$ 3)) <= 255
)(
         H44 : Int.unsigned ($ 1<<(x6&$ 7)) <= 255
)(
         H42 : Int.unsigned (x6&$ 7) <= 255
)(
         H70 : TcbJoin (v´52, Int.zero) (x6, t, m) x10 v´45
)(
         H41 : Int.unsigned x6 <= 255
)(
         H28 : Int.ltu x6 (x>>ᵢ$ 8) = false
)(
         H37 : isptr x15
)(
         H40 : Int.unsigned x14 <= 255
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 x6
                             :: Vint32 (x6&$ 7)
                                :: Vint32 (x6>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<(x6&$ 7))
                                      :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
          v´36 (x6, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 x6
                                  :: Vint32 (x6&$ 7)
                                     :: Vint32 (x6>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<(x6&$ 7))
                                           :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
                 :: v´35) v´36 v´45
)(
         r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
         r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
         r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
         r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
         H34 : array_type_vallist_match Int8u OSMapVallist
)(
         H69 : length OSMapVallist = 8%nat
)(
         H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
         x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
         H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
         H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
         x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
                 OSMapVallist = Vint32 x9
)(
         H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
         H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
         x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
                 OSMapVallist = Vint32 x11
)(
         H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
         r5 : Int.unsigned (x6>>ᵢ$ 3) < 8
)(
         r6 : Int.unsigned (x6&$ 7) < 8
)(
         rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
         rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
         rr5 : (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)) < length v´36)%nat
)(
         rr6 : (Z.to_nat (Int.unsigned (x6&$ 7)) < length v´36)%nat
)(
         rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
         rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
         rrr5 : Int.unsigned (x6>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
         rrr6 : Int.unsigned (x6&$ 7) < Z.of_nat (length v´36)
)(
         HH58 : length v´36 = Z.to_nat 8
)(
  aa : rule_type_val_match Int8u
                           (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  aa3 : rule_type_val_match Int8u
                            (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36) = true
)(
         x16 : int32
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
         H91 : Int.unsigned x16 <= 255
)(
         x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
         H90 : Int.unsigned x13 <= 255
)(
         x12 : int32
)(
         H86 : nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36 = Vint32 x12
)(
         H89 : Int.unsigned x12 <= 255
)(
         H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
)(
  H93 : val_inj
          (if Int.eq x6 (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
        val_inj
          (if Int.eq x6 (x>>ᵢ$ 8)
           then Some (Vint32 Int.one)
           else Some (Vint32 Int.zero)) = Vnull
)(
  H94 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <>
        Vint32 Int.zero
)(
  H95 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <> Vnull
)(
  H96 : val_inj
          (notint
             (val_inj
                (if Int.eq i ($ 0)
                 then Some (Vint32 Int.one)
                 else Some (Vint32 Int.zero)))) <> Vundef
)(
  v´34 : val
),
 {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{event_rdy_post5
       (Vptr (v´29, Int.zero)
        :: Vptr (v´29, Int.zero) :: V$OS_STAT_MUTEX :: nil)
       (Some v´34)
       (logic_lv v´30
        :: logic_lv
             (x7
              :: v´24
                 :: x15
                    :: m
                       :: Vint32 i6
                          :: Vint32 x14
                             :: Vint32 x6
                                :: Vint32 (x6&$ 7)
                                   :: Vint32 (x6>>ᵢ$ 3)
                                      :: Vint32 ($ 1<<(x6&$ 7))
                                         :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
           :: logic_llv v´33
              :: logic_llv v´35
                 :: logic_lv v´36
                    :: logic_val (Vint32 i7)
                       :: logic_abstcb v´39
                          :: logic_val v´31
                             :: logic_val (Vptr (v´52, Int.zero))
                                :: logic_val (Vptr (v´52, Int.zero))
                                   :: logic_lv
                                        (V$OS_EVENT_TYPE_MUTEX
                                         :: Vint32 i
                                            :: Vint32 x
                                               :: Vptr (v´52, $ 0)
                                                  ::
                                                  x3 :: v´46 :: nil)
                                      :: logic_lv v´44
                                         :: logic_leventd
                                              (DMutex
                                                 (Vint32 x)
                                                 (Vptr (v´52, $ 0)) :: nil)
                                            :: logic_code
                                                 (mutexpost
                                                  (Vptr (v´29, Int.zero)
                                                  :: nil)) :: nil) **
     (Aie false **
      Ais nil ** Acs (true :: nil) ** Aisr empisr ** A_isr_is_prop) **
     LV prio @ Int8u |-> v´34 **
     LV os_code_defs.x @ Int8u |-> (V$OS_STAT_MUTEX) **
     LV legal @ Int8u |-> Vint32 x2 **
     LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
     GV OSEventList @ OS_EVENT |-> v´42 **
     evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
     evsllseg v´46 Vnull v´26 v´28 **
     HECBList v´38 **
     HTCBList v´39 **
     HCurTCB (v´52, Int.zero) **
     AOSEventFreeList v´3 **
     AOSQFreeList v´4 **
     AOSQFreeBlk v´5 **
     AOSIntNesting **
     AOSTCBFreeList v´21 v´22 **
     AOSTime (Vint32 v´18) **
     HTime v´18 **
     AGVars **
     atoy_inv´ **
     LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
     A_dom_lenv
       ((pevent, OS_EVENT )
        :: (os_code_defs.x, Int8u)
           :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)}}
   pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
   pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
   EXIT_CRITICAL;ₛ
   OS_Sched(­);ₛ
                 RETURN OS_NO_ERR {{Afalse}}.

Definition gen_MutexPostNoUnliftSuccReturn:= forall(
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : int32
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : length v´25 = length v´27
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Int8u v´44
)(
  H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  i : int32
)(
  H21 : Int.unsigned i <= 255
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
  H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
  H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
  x : int32
)(
  H10 : Int.unsigned x <= 65535
)(
  H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H22 : Int.unsigned x <= 65535
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : v´31 <> Vnull
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : Vptr (v´52, Int.zero) <> Vnull
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 65535
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
  H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
  H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
         v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
  H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
         w) v´48 v´49
)(
  H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
  H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match OS_TCB v´30
)(
  H51 : length v´30 = 64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x1 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some x1
)(
  x0 : val
)(
  H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
  H54 : array_type_vallist_match Int8u v´36
)(
  H58 : length v´36 = OS_RDY_TBL_SIZE
)(
  i7 : int32
)(
  H55 : Int.unsigned i7 <= 255
)(
  H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
  H59 : length OSUnMapVallist = 256%nat
)(
  H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
  H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
  H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
  fffbb : Int.unsigned x2 < 8
)(
  fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
  H19´´ : length v´44 = Z.to_nat 8
)(
  x4 : int32
)(
  H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
  H64 : Int.unsigned x4 <= 255
)(
  H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
  x5 : int32
)(
  H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
  H67 : Int.unsigned x5 <= 255
)(
  ttfasd : Int.unsigned x5 < 8
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5) (x>>ᵢ$ 8)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x6 : int32
)(
  x14 : int32
)(
  H77 : 0 <= Int.unsigned x6
)(
  H85 : Int.unsigned x6 < 64
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
  x15 : val
)(
  H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
  H43 : Int.unsigned (x6>>ᵢ$ 3) <= 255
)(
  H45 : Int.unsigned ($ 1<<(x6>>ᵢ$ 3)) <= 255
)(
  H44 : Int.unsigned ($ 1<<(x6&$ 7)) <= 255
)(
  H42 : Int.unsigned (x6&$ 7) <= 255
)(
  H70 : TcbJoin (v´52, Int.zero) (x6, t, m) x10 v´45
)(
  H41 : Int.unsigned x6 <= 255
)(
  H28 : Int.ltu x6 (x>>ᵢ$ 8) = false
)(
  H37 : isptr x15
)(
  H40 : Int.unsigned x14 <= 255
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 x6
                             :: Vint32 (x6&$ 7)
                                :: Vint32 (x6>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<(x6&$ 7))
                                      :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
          v´36 (x6, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 x6
                                  :: Vint32 (x6&$ 7)
                                     :: Vint32 (x6>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<(x6&$ 7))
                                           :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
               :: v´35) v´36 v´45
)(
  r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
  r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
  r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  H34 : array_type_vallist_match Int8u OSMapVallist
)(
  H69 : length OSMapVallist = 8%nat
)(
  H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
  x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
  H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
  H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x9
)(
  H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
  H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x11
)(
  H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
  r5 : Int.unsigned (x6>>ᵢ$ 3) < 8
)(
  r6 : Int.unsigned (x6&$ 7) < 8
)(
  rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
  rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rr5 : (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)) < length v´36)%nat
)(
  rr6 : (Z.to_nat (Int.unsigned (x6&$ 7)) < length v´36)%nat
)(
  rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
  rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  rrr5 : Int.unsigned (x6>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr6 : Int.unsigned (x6&$ 7) < Z.of_nat (length v´36)
)(
  HH58 : length v´36 = Z.to_nat 8
)(
  aa : rule_type_val_match Int8u
         (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  aa3 : rule_type_val_match Int8u
          (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36) = true
)(
  x16 : int32
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
  H91 : Int.unsigned x16 <= 255
)(
  x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
  H90 : Int.unsigned x13 <= 255
)(
  x12 : int32
)(
  H86 : nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36 = Vint32 x12
)(
  H89 : Int.unsigned x12 <= 255
)(
  H92 : Int.unsigned (x>>ᵢ$ 8) < Int.unsigned ($ Byte.modulus)
),
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{( <|| mutexpost (Vptr (v´29, Int.zero) :: nil) ||> **
      LV os_code_defs.x @ Int8u |-> Vint32 ((x2<<$ 3)+ᵢx5) **
      LV legal @ Int8u |-> Vint32 x2 **
      PV v´51 @ Int8u |-> v´32 **
      Astruct (v´52, Int.zero) OS_TCB
        (x7
         :: v´24
            :: x15
               :: m
                  :: Vint32 i6
                     :: Vint32 x14
                        :: Vint32 x6
                           :: Vint32 (x6&$ 7)
                              :: Vint32 (x6>>ᵢ$ 3)
                                 :: Vint32 ($ 1<<(x6&$ 7))
                                    :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil) **
      dllseg x7 (Vptr (v´52, Int.zero)) v´40 Vnull v´35 OS_TCB
        (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
      GV OSTCBList @ OS_TCB |-> v´31 **
      dllseg v´31 Vnull v´24 (Vptr (v´52, Int.zero)) v´33 OS_TCB
        (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
      GV OSTCBCur @ OS_TCB |-> Vptr (v´52, Int.zero) **
      LV prio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
      LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
      Astruct (v´29, Int.zero) OS_EVENT
        (V$OS_EVENT_TYPE_MUTEX
         :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil) **
      Aarray v´23 (Tarray Int8u OS_EVENT_TBL_SIZE) v´44 **
      Aie false **
      Ais nil **
      Acs (true :: nil) **
      Aisr empisr **
      GV OSEventList @ OS_EVENT |-> v´42 **
      evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
      evsllseg v´46 Vnull v´26 v´28 **
      A_isr_is_prop **
      GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE) v´36 **
      GV OSRdyGrp @ Int8u |-> Vint32 i7 **
      GAarray OSTCBPrioTbl (Tarray OS_TCB 64) v´30 **
      G&OSPlaceHolder @ Int8u == v´51 **
      HECBList v´38 **
      HTCBList v´39 **
      HCurTCB (v´52, Int.zero) **
      AOSEventFreeList v´3 **
      AOSQFreeList v´4 **
      AOSQFreeBlk v´5 **
      GAarray OSMapTbl (Tarray Int8u 8) OSMapVallist **
      GAarray OSUnMapTbl (Tarray Int8u 256) OSUnMapVallist **
      AOSIntNesting **
      AOSTCBFreeList v´21 v´22 **
      AOSTime (Vint32 v´18) **
      HTime v´18 **
      AGVars **
      atoy_inv´ **
      LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
      A_dom_lenv
        ((pevent, OS_EVENT )
         :: (os_code_defs.x, Int8u)
            :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
     [|val_inj
         (if Int.eq x6 (x>>ᵢ$ 8)
          then Some (Vint32 Int.one)
          else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
       val_inj
         (if Int.eq x6 (x>>ᵢ$ 8)
          then Some (Vint32 Int.one)
          else Some (Vint32 Int.zero)) = Vnull|]}}
   If(pevent OSEventGrp !=ₑ 0)
        {os_code_defs.x =ₑ OS_STAT_MUTEX;ₛ
        prio =ᶠ OS_EventTaskRdy pevent , (Void) pevent ,
        os_code_defs.x ·);ₛ
        pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
        pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
        pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
        EXIT_CRITICAL;ₛ
        OS_Sched(­);ₛ
        RETURN OS_NO_ERR} ;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ OS_MUTEX_AVAILABLE;ₛ
   pevent OSEventPtr =ₑ NULL;ₛ
   EXIT_CRITICAL;ₛ
   RETURN OS_NO_ERR {{Afalse}}.

Definition gen_MutexPostPart3 := forall
(
   : val
)(
  v´0 : val
)(
  v´1 : val
)(
  v´2 : val
)(
  v´3 : list vallist
)(
  v´4 : list vallist
)(
  v´5 : list vallist
)(
  v´6 : list EventData
)(
  v´7 : list EventCtr
)(
  v´8 : vallist
)(
  v´9 : val
)(
  v´10 : val
)(
  v´11 : list vallist
)(
  v´12 : vallist
)(
  v´13 : list vallist
)(
  v´14 : vallist
)(
  v´15 : val
)(
  v´16 : EcbMod.map
)(
  v´17 : TcbMod.map
)(
  v´18 : int32
)(
  v´19 : addrval
)(
  v´20 : addrval
)(
  v´21 : val
)(
  v´22 : list vallist
)(
  H : RH_TCBList_ECBList_P v´16 v´17 v´19
)(
  H0 : RH_CurTCB v´19 v´17
)(
  v´25 : list EventCtr
)(
  v´26 : list EventCtr
)(
  v´27 : list EventData
)(
  v´28 : list EventData
)(
  v´30 : vallist
)(
  v´31 : val
)(
  v´33 : list vallist
)(
  v´35 : list vallist
)(
  v´36 : vallist
)(
  v´38 : EcbMod.map
)(
  v´39 : TcbMod.map
)(
  v´42 : val
)(
  v´44 : vallist
)(
  v´46 : val
)(
  v´47 : EcbMod.map
)(
  v´48 : EcbMod.map
)(
  v´49 : EcbMod.map
)(
  w : waitset
)(
  v´51 : addrval
)(
  H3 : ECBList_P v´46 Vnull v´26 v´28 v´48 v´39
)(
  H17 : EcbMod.join v´47 v´49 v´38
)(
  H12 : length v´25 = length v´27
)(
  H16 : isptr v´46
)(
  v´23 : addrval
)(
  v´29 : block
)(
  H11 : array_type_vallist_match Int8u v´44
)(
  H19 : length v´44 = OS_EVENT_TBL_SIZE
)(
  x3 : val
)(
  i : int32
)(
  H21 : Int.unsigned i <= 255
)(
  H18 : RL_Tbl_Grp_P v´44 (Vint32 i)
)(
  H24 : isptr v´46
)(
  H2 : ECBList_P v´42 (Vptr (v´29, Int.zero)) v´25 v´27 v´47 v´39
)(
  H14 : id_addrval´ (Vptr (v´29, Int.zero)) OSEventTbl OS_EVENT = Some v´23
)(
  H20 : Int.unsigned ($ OS_EVENT_TYPE_MUTEX) <= 255
)(
  x : int32
)(
  H10 : Int.unsigned x <= 65535
)(
  H15 : Int.unsigned (x>>ᵢ$ 8) < 64
)(
  H22 : Int.unsigned x <= 65535
)(
  v´24 : val
)(
  v´40 : val
)(
  v´43 : TcbMod.map
)(
  v´45 : TcbMod.map
)(
  v´52 : block
)(
  H31 : v´31 <> Vnull
)(
  H32 : TcbMod.join v´43 v´45 v´39
)(
  H33 : TCBList_P v´31 v´33 v´36 v´43
)(
  H30 : Vptr (v´52, Int.zero) <> Vnull
)(
  i6 : int32
)(
  H39 : Int.unsigned i6 <= 65535
)(
  H36 : isptr v´24
)(
  x7 : val
)(
  x10 : TcbMod.map
)(
  t : taskstatus
)(
  m : msg
)(
  H72 : TCBList_P x7 v´35 v´36 x10
)(
  H7 : RH_TCBList_ECBList_P v´38 v´39 (v´52, Int.zero)
)(
  H8 : RH_CurTCB (v´52, Int.zero) v´39
)(
  H23 : isptr (Vptr (v´52, $ 0))
)(
  H5 : R_ECB_ETbl_P (v´29, Int.zero)
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
         v´44) v´39
)(
  H1 : ECBList_P v´42 Vnull
         (v´25 ++
          ((V$OS_EVENT_TYPE_MUTEX
            :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil,
           v´44) :: nil) ++ v´26)
         (v´27 ++ (DMutex (Vint32 x) (Vptr (v´52, $ 0)) :: nil) ++ v´28) v´38
         v´39
)(
  H29 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE \/
        x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H35 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE
)(
  H47 : Int.ltu (x>>ᵢ$ 8) (x&$ OS_MUTEX_KEEP_LOWER_8) = true
)(
  H48 : Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8) < 64
)(
  H6 : EcbMod.joinsig (v´29, Int.zero)
         (absmutexsem (x>>ᵢ$ 8) (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)),
         w) v´48 v´49
)(
  H4 : Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None -> w = nil
)(
  H9 : forall (tid : tid) (opr : int32),
       Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = Some (tid, opr) ->
       Int.ltu (x>>ᵢ$ 8) opr = true /\ Int.unsigned opr < 64
)(
  H13 : w <> nil -> Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) <> None
)(
  H25 : x&$ OS_MUTEX_KEEP_LOWER_8 = $ OS_MUTEX_AVAILABLE ->
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) = None /\
        Vptr (v´52, $ 0) = Vnull
)(
  H26 : x&$ OS_MUTEX_KEEP_LOWER_8 <> $ OS_MUTEX_AVAILABLE ->
        exists tid,
        Vptr (v´52, $ 0) = Vptr tid /\
        Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8) =
        Some (tid, x&$ OS_MUTEX_KEEP_LOWER_8)
)(
  backup : RLH_ECBData_P (DMutex (Vint32 x) (Vptr (v´52, $ 0)))
             (absmutexsem (x>>ᵢ$ 8)
                (Some (v´52, $ 0, x&$ OS_MUTEX_KEEP_LOWER_8)), w)
)(
  v´32 : val
)(
  H46 : array_type_vallist_match OS_TCB v´30
)(
  H51 : length v´30 = 64%nat
)(
  H49 : RL_RTbl_PrioTbl_P v´36 v´30 v´51
)(
  H50 : R_PrioTbl_P v´30 v´39 v´51
)(
  x1 : val
)(
  H52 : nth_val (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30 =
        Some x1
)(
  x0 : val
)(
  H53 : nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8))) v´30 = Some x0
)(
  H54 : array_type_vallist_match Int8u v´36
)(
  H58 : length v´36 = OS_RDY_TBL_SIZE
)(
  i7 : int32
)(
  H55 : Int.unsigned i7 <= 255
)(
  H57 : prio_in_tbl ($ OS_IDLE_PRIO) v´36
)(
  H56 : RL_Tbl_Grp_P v´36 (Vint32 i7)
)(
  x2 : int32
)(
  fffa : length OSUnMapVallist = 256%nat ->
         (Z.to_nat (Int.unsigned i) < 256)%nat ->
         exists x4,
         Vint32 x2 = Vint32 x4 /\
         true = rule_type_val_match Int8u (Vint32 x4)
)(
  H59 : length OSUnMapVallist = 256%nat
)(
  H60 : (Z.to_nat (Int.unsigned i) < 256)%nat
)(
  H61 : nth_val´ (Z.to_nat (Int.unsigned i)) OSUnMapVallist = Vint32 x2
)(
  H62 : true = rule_type_val_match Int8u (Vint32 x2)
)(
  fffbb : Int.unsigned x2 < 8
)(
  fffbb2 : (Z.to_nat (Int.unsigned x2) < length v´44)%nat
)(
  H19´´ : length v´44 = Z.to_nat 8
)(
  x4 : int32
)(
  H63 : nth_val´ (Z.to_nat (Int.unsigned x2)) v´44 = Vint32 x4
)(
  H64 : Int.unsigned x4 <= 255
)(
  H65 : (Z.to_nat (Int.unsigned x4) < length OSUnMapVallist)%nat
)(
  x5 : int32
)(
  H66 : nth_val´ (Z.to_nat (Int.unsigned x4)) OSUnMapVallist = Vint32 x5
)(
  H67 : Int.unsigned x5 <= 255
)(
  ttfasd : Int.unsigned x5 < 8
)(
  H68 : val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5)
                            (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5)
                            (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) =
        Vint32 Int.zero \/
        val_inj
          (bool_and
             (val_inj
                (notint
                   (val_inj
                      (if Int.eq i ($ 0)
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))
             (val_inj
                (bool_or
                   (val_inj
                      (if Int.ltu ((x2<<$ 3)+ᵢx5)
                            (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))
                   (val_inj
                      (if Int.eq ((x2<<$ 3)+ᵢx5)
                            (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
                       then Some (Vint32 Int.one)
                       else Some (Vint32 Int.zero)))))) = Vnull
)(
  H27 : isptr x7
)(
  H38 : isptr m
)(
  x6 : int32
)(
  x14 : int32
)(
  H77 : 0 <= Int.unsigned x6
)(
  H85 : Int.unsigned x6 < 64
)(
  H82 : x14 = $ OS_STAT_RDY \/
        x14 = $ OS_STAT_SEM \/
        x14 = $ OS_STAT_Q \/ x14 = $ OS_STAT_MBOX \/ x14 = $ OS_STAT_MUTEX
)(
  x15 : val
)(
  H84 : x14 = $ OS_STAT_RDY -> x15 = Vnull
)(
  H43 : Int.unsigned (x6>>ᵢ$ 3) <= 255
)(
  H45 : Int.unsigned ($ 1<<(x6>>ᵢ$ 3)) <= 255
)(
  H44 : Int.unsigned ($ 1<<(x6&$ 7)) <= 255
)(
  H42 : Int.unsigned (x6&$ 7) <= 255
)(
  H70 : TcbJoin (v´52, Int.zero) (x6, t, m) x10 v´45
)(
  H41 : Int.unsigned x6 <= 255
)(
  H28 : Int.ltu x6 (x>>ᵢ$ 8) = false
)(
  H37 : isptr x15
)(
  H40 : Int.unsigned x14 <= 255
)(
  H73 : R_TCB_Status_P
          (x7
           :: v´24
              :: x15
                 :: m
                    :: Vint32 i6
                       :: Vint32 x14
                          :: Vint32 x6
                             :: Vint32 (x6&$ 7)
                                :: Vint32 (x6>>ᵢ$ 3)
                                   :: Vint32 ($ 1<<(x6&$ 7))
                                      :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
          v´36 (x6, t, m)
)(
  backup2 : TCBList_P (Vptr (v´52, Int.zero))
              ((x7
                :: v´24
                   :: x15
                      :: m
                         :: Vint32 i6
                            :: Vint32 x14
                               :: Vint32 x6
                                  :: Vint32 (x6&$ 7)
                                     :: Vint32 (x6>>ᵢ$ 3)
                                        :: Vint32 ($ 1<<(x6&$ 7))
                                           :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil)
               :: v´35) v´36 v´45
)(
  r1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < 8
)(
  r2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) < 8
)(
  r3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) < 8
)(
  r4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < 8
)(
  H34 : array_type_vallist_match Int8u OSMapVallist
)(
  H69 : length OSMapVallist = 8%nat
)(
  H71 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) < 8)%nat
)(
  x8 : int32
)(
  H74 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
          OSMapVallist = Vint32 x8
)(
  H75 : true = rule_type_val_match Int8u (Vint32 x8)
)(
  H76 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x9 : int32
)(
  H78 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x9
)(
  H79 : true = rule_type_val_match Int8u (Vint32 x9)
)(
  H80 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) < 8)%nat
)(
  x11 : int32
)(
  H81 : nth_val´ (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)))
          OSMapVallist = Vint32 x11
)(
  H83 : true = rule_type_val_match Int8u (Vint32 x11)
)(
  r5 : Int.unsigned (x6>>ᵢ$ 3) < 8
)(
  r6 : Int.unsigned (x6&$ 7) < 8
)(
  rr1 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3)) < length v´36)%nat
)(
  rr2 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)) <
         length v´36)%nat
)(
  rr3 : (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)) <
         length v´36)%nat
)(
  rr4 : (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)&$ 7)) < length v´36)%nat
)(
  rr5 : (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)) < length v´36)%nat
)(
  rr6 : (Z.to_nat (Int.unsigned (x6&$ 7)) < length v´36)%nat
)(
  rrr1 : Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr2 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7) <
         Z.of_nat (length v´36)
)(
  rrr3 : Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3) <
         Z.of_nat (length v´36)
)(
  rrr4 : Int.unsigned ((x>>ᵢ$ 8)&$ 7) < Z.of_nat (length v´36)
)(
  rrr5 : Int.unsigned (x6>>ᵢ$ 3) < Z.of_nat (length v´36)
)(
  rrr6 : Int.unsigned (x6&$ 7) < Z.of_nat (length v´36)
)(
  HH58 : length v´36 = Z.to_nat 8
)(
  aa : rule_type_val_match Int8u
         (nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36) = true
)(
  aa2 : rule_type_val_match Int8u
          (nth_val´
             (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
             v´36) = true
)(
  aa3 : rule_type_val_match Int8u
          (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36) = true
)(
  x16 : int32
)(
  H88 : nth_val´ (Z.to_nat (Int.unsigned ((x>>ᵢ$ 8)>>ᵢ$ 3))) v´36 =
        Vint32 x16
)(
  H91 : Int.unsigned x16 <= 255
)(
  x13 : int32
)(
  H87 : nth_val´
          (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3))) v´36 =
        Vint32 x13
)(
  H90 : Int.unsigned x13 <= 255
)(
  x12 : int32
)(
  H86 : nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36 = Vint32 x12
)(
  H89 : Int.unsigned x12 <= 255
)
( last_condition : ProtectWrapper (x14 = $ OS_STAT_RDY /\ i6 = $ 0))
,
   {|OSQ_spec , GetHPrio, I,
   fun v : option val =>
   ((((EX v0 : val, LV pevent @ OS_EVENT |-> v0) **
      (EX v0 : val, LV os_code_defs.x @ Int8u |-> v0) **
      (EX v0 : val, LV pip @ Int8u |-> v0) **
      (EX v0 : val, LV prio @ Int8u |-> v0) **
      (EX v0 : val, LV legal @ Int8u |-> v0) ** Aemp) **
     Aie true ** Ais nil ** Acs nil ** Aisr empisr) **
    A_dom_lenv
      ((pevent, OS_EVENT )
       :: (os_code_defs.x, Int8u)
          :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
    <|| END v ||> , Afalse|}|-
   {{(( <|| mutexpost (Vptr (v´29, Int.zero) :: nil) ||> **
       A_dom_lenv
         ((pevent, OS_EVENT )
          :: (os_code_defs.x, Int8u)
             :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil) **
       GAarray OSTCBPrioTbl (Tarray OS_TCB 64)
         (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
            (update_nth_val
               (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30
               (Vptr (v´52, Int.zero))) (Vptr v´51)) **
       GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE)
         (update_nth_val
            (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
            (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
               (val_inj (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7)))))))
            (val_inj
               (or
                  (nth_val´
                     (Z.to_nat
                        (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
                     (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
                        v´36
                        (val_inj
                           (and (Vint32 x12)
                              (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
                  (Vint32 x11)))) **
       GV OSRdyGrp @ Int8u
       |-> Vint32 (Int.or (i7&Int.not ($ 1<<(x6>>ᵢ$ 3))) x8) **
       GV OSTCBCur @ OS_TCB |-> Vptr (v´52, Int.zero) **
       Astruct (v´52, Int.zero) OS_TCB
         (x7
          :: v´24
             :: x15
                :: m
                   :: Vint32 i6
                      :: Vint32 x14
                         :: Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8)
                            :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)
                               :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)
                                  :: Vint32 x11 :: Vint32 x8 :: nil) **
       LV os_code_defs.x @ Int8u |-> Vint32 ((x2<<$ 3)+ᵢx5) **
       LV legal @ Int8u |-> Vint32 x2 **
       PV v´51 @ Int8u |-> v´32 **
       dllseg x7 (Vptr (v´52, Int.zero)) v´40 Vnull v´35 OS_TCB
         (fun vl : vallist => nth_val 1 vl)
         (fun vl : vallist => nth_val 0 vl) **
       GV OSTCBList @ OS_TCB |-> v´31 **
       dllseg v´31 Vnull v´24 (Vptr (v´52, Int.zero)) v´33 OS_TCB
         (fun vl : vallist => nth_val 1 vl)
         (fun vl : vallist => nth_val 0 vl) **
       LV prio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
       LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
       Astruct (v´29, Int.zero) OS_EVENT
         (V$OS_EVENT_TYPE_MUTEX
          :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil) **
       Aarray v´23 (Tarray Int8u OS_EVENT_TBL_SIZE) v´44 **
       Aie false **
       Ais nil **
       Acs (true :: nil) **
       Aisr empisr **
       GV OSEventList @ OS_EVENT |-> v´42 **
       evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
       evsllseg v´46 Vnull v´26 v´28 **
       A_isr_is_prop **
       G&OSPlaceHolder @ Int8u == v´51 **
       HECBList v´38 **
       HTCBList v´39 **
       HCurTCB (v´52, Int.zero) **
       AOSEventFreeList v´3 **
       AOSQFreeList v´4 **
       AOSQFreeBlk v´5 **
       GAarray OSMapTbl (Tarray Int8u 8) OSMapVallist **
       GAarray OSUnMapTbl (Tarray Int8u 256) OSUnMapVallist **
       AOSIntNesting **
       AOSTCBFreeList v´21 v´22 **
       AOSTime (Vint32 v´18) **
       HTime v´18 **
       AGVars **
       atoy_inv´ **
       LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
       [|val_inj
           (val_eq
              (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
                 (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                    (val_inj
                       (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
              (V$0)) <> Vint32 Int.zero /\
         val_inj
           (val_eq
              (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
                 (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                    (val_inj
                       (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
              (V$0)) <> Vnull /\
         val_inj
           (val_eq
              (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
                 (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                    (val_inj
                       (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
              (V$0)) <> Vundef|] **
       [|val_inj
           (val_eq
              (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
                 (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                    (val_inj
                       (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
              (V$0)) <> Vint32 Int.zero /\
         val_inj
           (val_eq
              (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
                 (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                    (val_inj
                       (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
              (V$0)) <> Vnull /\
         val_inj
           (val_eq
              (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
                 (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                    (val_inj
                       (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
              (V$0)) <> Vundef|]) ** [|x1 = Vptr v´51|] \\//
       <|| mutexpost (Vptr (v´29, Int.zero) :: nil) ||> **
      A_dom_lenv
        ((pevent, OS_EVENT )
         :: (os_code_defs.x, Int8u)
            :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil) **
      GAarray OSTCBPrioTbl (Tarray OS_TCB 64)
        (update_nth_val (Z.to_nat (Int.unsigned (x>>ᵢ$ 8)))
           (update_nth_val
              (Z.to_nat (Int.unsigned (x&$ OS_MUTEX_KEEP_LOWER_8))) v´30
              (Vptr (v´52, Int.zero))) (Vptr v´51)) **
      GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE)
        (update_nth_val
           (Z.to_nat (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
           (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
              (val_inj (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7)))))))
           (val_inj
              (or
                 (nth_val´
                    (Z.to_nat
                       (Int.unsigned ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)))
                    (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                       (val_inj
                          (and (Vint32 x12)
                             (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
                 (Vint32 x11)))) **
      GV OSRdyGrp @ Int8u |-> Vint32 (Int.or i7 x8) **
      GV OSTCBCur @ OS_TCB |-> Vptr (v´52, Int.zero) **
      Astruct (v´52, Int.zero) OS_TCB
        (x7
         :: v´24
            :: x15
               :: m
                  :: Vint32 i6
                     :: Vint32 x14
                        :: Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8)
                           :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)&$ 7)
                              :: Vint32 ((x&$ OS_MUTEX_KEEP_LOWER_8)>>ᵢ$ 3)
                                 :: Vint32 x11 :: Vint32 x8 :: nil) **
      LV os_code_defs.x @ Int8u |-> Vint32 ((x2<<$ 3)+ᵢx5) **
      LV legal @ Int8u |-> Vint32 x2 **
      PV v´51 @ Int8u |-> v´32 **
      dllseg x7 (Vptr (v´52, Int.zero)) v´40 Vnull v´35 OS_TCB
        (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
      GV OSTCBList @ OS_TCB |-> v´31 **
      dllseg v´31 Vnull v´24 (Vptr (v´52, Int.zero)) v´33 OS_TCB
        (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
      LV prio @ Int8u |-> Vint32 (x&$ OS_MUTEX_KEEP_LOWER_8) **
      LV pip @ Int8u |-> Vint32 (x>>ᵢ$ 8) **
      Astruct (v´29, Int.zero) OS_EVENT
        (V$OS_EVENT_TYPE_MUTEX
         :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil) **
      Aarray v´23 (Tarray Int8u OS_EVENT_TBL_SIZE) v´44 **
      Aie false **
      Ais nil **
      Acs (true :: nil) **
      Aisr empisr **
      GV OSEventList @ OS_EVENT |-> v´42 **
      evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
      evsllseg v´46 Vnull v´26 v´28 **
      A_isr_is_prop **
      G&OSPlaceHolder @ Int8u == v´51 **
      HECBList v´38 **
      HTCBList v´39 **
      HCurTCB (v´52, Int.zero) **
      AOSEventFreeList v´3 **
      AOSQFreeList v´4 **
      AOSQFreeBlk v´5 **
      GAarray OSMapTbl (Tarray Int8u 8) OSMapVallist **
      GAarray OSUnMapTbl (Tarray Int8u 256) OSUnMapVallist **
      AOSIntNesting **
      AOSTCBFreeList v´21 v´22 **
      AOSTime (Vint32 v´18) **
      HTime v´18 **
      AGVars **
      atoy_inv´ **
      LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
      [|val_inj
          (val_eq
             (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
                (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                   (val_inj
                      (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
             (V$0)) = Vint32 Int.zero \/
        val_inj
          (val_eq
             (nth_val´ (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3)))
                (update_nth_val (Z.to_nat (Int.unsigned (x6>>ᵢ$ 3))) v´36
                   (val_inj
                      (and (Vint32 x12) (Vint32 (Int.not ($ 1<<(x6&$ 7))))))))
             (V$0)) = Vnull|] ** [|x1 = Vptr v´51|]) **
     [|val_inj
         (if Int.eq x6 (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
          then Some (Vint32 Int.one)
          else Some (Vint32 Int.zero)) <> Vint32 Int.zero /\
       val_inj
         (if Int.eq x6 (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
          then Some (Vint32 Int.one)
          else Some (Vint32 Int.zero)) <> Vnull /\
       val_inj
         (if Int.eq x6 (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
          then Some (Vint32 Int.one)
          else Some (Vint32 Int.zero)) <> Vundef|] \\//
     ( <|| mutexpost (Vptr (v´29, Int.zero) :: nil) ||> **
      LV os_code_defs.x @ Int8u |-> Vint32 ((x2<<$ 3)+ᵢx5) **
      LV legal @ Int8u |-> Vint32 x2 **
      PV v´51 @ Int8u |-> v´32 **
      Astruct (v´52, Int.zero) OS_TCB
        (x7
         :: v´24
            :: x15
               :: m
                  :: Vint32 i6
                     :: Vint32 x14
                        :: Vint32 x6
                           :: Vint32 (x6&$ 7)
                              :: Vint32 (x6>>ᵢ$ 3)
                                 :: Vint32 ($ 1<<(x6&$ 7))
                                    :: Vint32 ($ 1<<(x6>>ᵢ$ 3)) :: nil) **
      dllseg x7 (Vptr (v´52, Int.zero)) v´40 Vnull v´35 OS_TCB
        (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
      GV OSTCBList @ OS_TCB |-> v´31 **
      dllseg v´31 Vnull v´24 (Vptr (v´52, Int.zero)) v´33 OS_TCB
        (fun vl : vallist => nth_val 1 vl) (fun vl : vallist => nth_val 0 vl) **
      GV OSTCBCur @ OS_TCB |-> Vptr (v´52, Int.zero) **
      LV prio @ Int8u
      |-> Vint32 (Int.modu (x&$ OS_MUTEX_KEEP_LOWER_8) ($ Byte.modulus)) **
      LV pip @ Int8u |-> Vint32 (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus)) **
      Astruct (v´29, Int.zero) OS_EVENT
        (V$OS_EVENT_TYPE_MUTEX
         :: Vint32 i :: Vint32 x :: Vptr (v´52, $ 0) :: x3 :: v´46 :: nil) **
      Aarray v´23 (Tarray Int8u OS_EVENT_TBL_SIZE) v´44 **
      Aie false **
      Ais nil **
      Acs (true :: nil) **
      Aisr empisr **
      GV OSEventList @ OS_EVENT |-> v´42 **
      evsllseg v´42 (Vptr (v´29, Int.zero)) v´25 v´27 **
      evsllseg v´46 Vnull v´26 v´28 **
      A_isr_is_prop **
      GAarray OSRdyTbl (Tarray Int8u OS_RDY_TBL_SIZE) v´36 **
      GV OSRdyGrp @ Int8u |-> Vint32 i7 **
      GAarray OSTCBPrioTbl (Tarray OS_TCB 64) v´30 **
      G&OSPlaceHolder @ Int8u == v´51 **
      HECBList v´38 **
      HTCBList v´39 **
      HCurTCB (v´52, Int.zero) **
      AOSEventFreeList v´3 **
      AOSQFreeList v´4 **
      AOSQFreeBlk v´5 **
      GAarray OSMapTbl (Tarray Int8u 8) OSMapVallist **
      GAarray OSUnMapTbl (Tarray Int8u 256) OSUnMapVallist **
      AOSIntNesting **
      AOSTCBFreeList v´21 v´22 **
      AOSTime (Vint32 v´18) **
      HTime v´18 **
      AGVars **
      atoy_inv´ **
      LV pevent @ OS_EVENT |-> Vptr (v´29, Int.zero) **
      A_dom_lenv
        ((pevent, OS_EVENT )
         :: (os_code_defs.x, Int8u)
            :: (pip, Int8u) :: (prio, Int8u) :: (legal, Int8u) :: nil)) **
     [|val_inj
         (if Int.eq x6 (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
          then Some (Vint32 Int.one)
          else Some (Vint32 Int.zero)) = Vint32 Int.zero \/
       val_inj
         (if Int.eq x6 (Int.modu (x>>ᵢ$ 8) ($ Byte.modulus))
          then Some (Vint32 Int.one)
          else Some (Vint32 Int.zero)) = Vnull|]}}
   If(pevent OSEventGrp !=ₑ 0)
        {os_code_defs.x =ₑ OS_STAT_MUTEX;ₛ
        prio =ᶠ OS_EventTaskRdy pevent , (Void) pevent ,
        os_code_defs.x ·);ₛ
        pevent OSEventCnt &= OS_MUTEX_KEEP_UPPER_8;ₛ
        pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ prio ;ₛ
        pevent OSEventPtr =ₑ OSTCBPrioTbl [prio ];ₛ
        EXIT_CRITICAL;ₛ
        OS_Sched(­);ₛ
        RETURN OS_NO_ERR} ;ₛ
   pevent OSEventCnt =ₑ pevent OSEventCnt |ₑ OS_MUTEX_AVAILABLE;ₛ
   pevent OSEventPtr =ₑ NULL;ₛ
   EXIT_CRITICAL;ₛ
   RETURN OS_NO_ERR {{Afalse}}.

Close Scope code_scope.