Set Bullet Behavior "Strict Subproofs".
Ltac hered :=
match goal with
H : ?P ?x |- ?P ?y => revert H
end;
match goal with
|- ?P ?x -> ?P ?y =>
cut (hereditary age P);
[ let h := fresh "h" in intros h; apply h; auto | ]
end.
Ltac agejoinhyp :=
match goal with
H : sepalg.join _ _ ?m, A : age ?m _ |- _ =>
pose proof age1_join2 _ H A; clear H
end.
Ltac agehyps :=
match goal with
H : age ?x ?y, HH : ?P ?x |- _ =>
cut (P y);
[ clear HH; intros HH
| hered;
try apply pred_hered;
try apply predicates_hered.exactly_obligation_1]
end.
(** * Aging and predicates *)

(* Specifications: *)
Lemma hereditary_func_at' loc fs :
hereditary age (func_at' fs loc).
Lemma anti_hereditary_func_at' loc fs :
hereditary (fun x y => age y x) (func_at' fs loc).
Lemma pures_eq_unage {phi1 phi1' phi2}:
ge (level phi1') (level phi2) ->
age phi1 phi1' ->
juicy_safety.pures_eq phi1' phi2 ->
juicy_safety.pures_eq phi1 phi2.