t; auto.
eapply tc_eval'_id_i.
eassumption.Qed.

Definition abbreviate {A:Type} (x:A) := x.
Arguments abbreviate [A] [x].

Ltac clear_Delta :=
match goal with
| Delta := @abbreviate tycontext _ |- _ =>
   first [clear Delta | clearbody Delta]
| _ => idtac
end;
matchgoal with
 |  DS := @abbreviate (PTree.t funspec) _  |- _ =>
   first [clear DS | clearbody DS]
 | |- _ => idtac
 end.

Ltac

(* Specifications: *)
end; clear H
Proof. destruct a; auto; try contradiction. Qed. Lemma sem_cast_pointer2': forall (v : val) (t1 t2: type), match t1 with | Tpointer _ _ => is_true (negb (eqb_type t1 int_or_ptr_type)) | Tint I32 _ _ => if Archi.ptr64 then False else True | Tlong _ _ => if Archi.ptr64 then True else False | _ => False end -> match t2 with | Tpointer _ _ => is_true (negb (eqb_type t2 int_or_ptr_t
Qed. Hint Rewrite sem_cast_pointer2' using (try apply Coq.Init.Logic.I; try assumption; reflexivity) : norm. Lemma sem_cast_pointer2: forall v t1 t2 t3 t1' t2',
reflexivity. inv H0. Qed. Lemma is_pointer_or_null_force_int_ptr: forall v, is_pointer_or_null v -> (force_val match v with | Vint _
Qed. Hint Rewrite is_pointer_or_null_force_int_ptr using assumption : norm1. Lemma is_pointer_force_int_ptr: forall v, isptr v -> (force_val match v with | Vint _
Qed. Hint Rewrite is_pointer_force_int_ptr using assumption : norm1. Lemma is_pointer_or_null_match : forall v, is_pointer_or_null v -> (match v with | Vint _ => if
intros. destruct v; inv H; reflexivity. Qed. Hint Rewrite is_pointer_or_null_match using assumption : norm1. Lemma is_pointer_force_int_ptr2: forall v, isptr v -> match v with | Vint _ => if
intros. destruct v; inv H; reflexivity. Qed. Hint Rewrite is_pointer_force_int_ptr2 using assumption : norm1. Lemma is_pointer_or_null_force_int_ptr2: forall v, is_pointer_or_null (force_val match v with | Vint _ => Some v | Vptr _ _ => Some v | _ => None end) -> (force_val match v wi
Qed. Hint Rewrite is_pointer_or_null_force_int_ptr2 using assumption : norm1. Lemma isptr_match : forall w0, is_pointer_or_null match match w0 with | Vint _ => if Archi.ptr64 then None else Some w0 | Vlong _ => if Archi.ptr64 then Some w0 else None | Vptr _ _ => Some w0 | _ => None end with
Qed. Hint Rewrite isptr_match : norm1.
Qed.
intros. destruct v; inv H; reflexivity. Qed.
forall v, is_pointer_or_null (force_val (sem_cast_pointer v)) = is_pointer_or_null v. Proof. destruct v; reflexivity. Qed.
Arguments ret_type !Delta /. Arguments Datatypes.id {A} x / .
(fun rho: environ => A rho * B rho) = (A * B). Proof. reflexivity. Qed.
reflexivity. Qed. Hint Rewrite lift_lift_retval: norm2.
Qed. Hint Rewrite @lift0_exp : norm2. Hint Rewrite @lift0C_exp : norm2.
Lemma lift0_prop {A}{NA: NatDed A}: forall P, lift0 (!! P) = !!P. Proof. intros. extensionality rho; reflexiv
forall P, @liftx (LiftEnviron A) (@prop A NA P) = @prop (environ -> A) _ P. Proof. reflexivity. Qed.
Proof. intros. extensionality rho. reflexivity. Qed. Lemma lift0C_sepcon {A}{NA: NatDed A}{SA: SepLog A}: forall P Q N2 S2,
(@liftx (LiftEnviron A) P) (@liftx (LiftEnviron A) Q)). Proof. reflexivity. Qed.
@lift0_prop
: norm2.
Lemma snd_unfold: forall {A B} (x: A) (y: B), snd (x,y) = y. Proof. reflexivity. Qed.
unfold normal_ret_assert. normalize.
*)
Lemma local_andp_prop1: forall P Q R, local P && (prop Q && R) = prop Q && (local P && R). Proof. intros. rewrite andp_comm. rewrite andp_assoc. f_e
intros. extensionality rho; unfold local, lift1; simpl.