Library MboxPendProof



Require Import include.
Require Import memory.

Require Import memdata.

Require Import NPeano.
Require Import os_code_defs.
Require Import os_code_notations.
Require Import os_ucos_h.
Require Import ucert.
Require Import OSQCreatePure.
Require Import os_code_notations.
Require Import List.
Require Import OSTimeDlyPure.
Require Import Mbox_common.

Ltac can_change_aop_solver := clear; try unfold OSInv;
  try unfold AOSEventFreeList, AOSQFreeList, AOSQFreeBlk, AECBList;
  try unfold AOSMapTbl, AOSUnMapTbl, AOSTCBPrioTbl, AOSIntNesting, AOSTCBList, AOSTCBFreeList;
  try unfold AOSRdyTblGrp, AOSRdyTbl, AOSRdyGrp, AOSTime, AGVars;
  try unfold AOSEvent, AOSEventTbl, AMsgData, AOSQCtr, AOSQBlk, node;
  unfold can_change_aop; fold can_change_aop; intuition auto 1 with can_change_aop;simpl;intros; intuition auto 1 with can_change_aop.

Lemma MboxPendProof:
    forall vl p r,
      Some p =
      BuildPreA´ os_api OSMboxPend
                 mbox_pendapi vl ->
      Some r =
      BuildRetA´ os_api OSMboxPend
                 mbox_pendapi vl ->
      exists t d1 d2 s,
        os_api OSMboxPend = Some (t, d1, d2, s) /\
        {|OSQ_spec , GetHPrio , I, r, Afalse|}|- {{p}}s {{Afalse}}.
  Hint Resolve CltEnvMod.beq_refl.
  Require Import MboxPendPart2.