(* Copied from semax_switch. *)

(* Specifications: *)
Lemma unfash_allp:  forall {A} {agA: ageable A} {B} (f: B -> pred nat),
@unfash _ agA (allp f) = allp (fun x:B => unfash (f x)).
Lemma fash_TT: forall {A} {agA: ageable A}, @unfash A agA TT = TT.
Lemma allp_andp:
forall {A} {NA: ageable A} {B: Type} (b0: B) (P: B -> pred A) (Q: pred A),
(allp P && Q = allp (fun x => P x && Q))%pred.
Lemma unfash_prop_imp:
forall {A} {agA: ageable A} (P: Prop) (Q: pred nat),
(@unfash _ agA (prop P --> Q) = prop P --> @unfash _ agA Q)%pred.
Lemma unfash_imp:
forall {A} {NA: ageable A} (P Q: pred nat),
(@unfash A _ (P --> Q) = (@unfash A _ P) --> @unfash A _ Q)%pred.
Lemma unfash_andp:  forall {A} {agA: ageable A} (P Q: pred nat),
(@unfash A agA (andp P Q) = andp (@unfash A agA P) (@unfash A agA Q)).
Lemma andp_imp_e':
forall (A : Type) (agA : ageable A) (P Q : pred A),
P && (P --> Q) |-- P && Q.