Definition set_lemma (temp : PTree.t (type * bool)) (var : PTree.t type)
         (ret : type) (gt : PTree.t type) (id : ident)
         (e : Clight.expr) (ty : type): my_lemma.Definition load_lemma (temp : PTree.t (type * bool)) (var : PTree.t type)
     (ret : type) (gt : PTree.t type) (id : ident) (t t_root : type) (e0 e1 : Clight.expr)
    (efs: list efield) (tts : list type) (e : type_id_env) (lr : LLRR)
    (n: nat): my_lemma.Definition store_lemma (temp : PTree.t (type * bool)) (var : PTree.t type)
     (ret : type) (gt : PTree.t type) (t t_root : type) (e0 e1 e2: Clight.expr)
     (efs : list efield) (tts : list type)
     (e : type_id_env) (lr : LLRR) (n: nat): my_lemma.

(* Specifications: *)
Lemma load_store_sound_aux: forall t_root, (@funcAs typ func RType_typ (func_defs.RSym_sym tbl) (@inr (sum (sum SymEnv.func (ModularFunc.ILogicFunc.ilfunc typ)) (BILogicFunc.bilfunc typ)) func' (Sep (fdata_at t_root))) (tyArr tyshare (tyArr (reptyp t_root) (tyArr tyval tympred))) = Some (fun (sh : share) (rt : typD (reptyp t_root)) (v : val) => data_at sh t_root (reptyp_reptype t_root rt) v)).
Lemma APPLY_sound_store_lemma: forall (temp : PTree.t (type * bool)) (var : PTree.t type) (ret : type) (gt : PTree.t type) (t t_root : type) (e0 e1 e2 : Clight.expr) (efs : list efield) (tts : list type) (e : type_id_env) (lr : LLRR) (n : nat), rtac_sound (EAPPLY typ func (store_lemma temp var ret gt t t_root e0 e1 e2 efs tts e lr n)).
Lemma APPLY_sound_load_lemma: forall (temp : PTree.t (type * bool)) (var : PTree.t type) (ret : type) (gt : PTree.t type) (id : ident) (t t_root : type) (e0 e1 : Clight.expr) (efs : list efield) (tts : list type) (e : type_id_env) (lr : LLRR) (n : nat), rtac_sound (EAPPLY typ func (load_lemma temp var ret gt id t t_root e0 e1 efs tts e lr n)).