Section STRONGER.
Context {cs: compspecs}.
Definition stronger {t: type} (v v': reptype t) : Prop :=
forall sh, data_at sh t v |-- data_at sh t v'.
Definition data_equal {t} v1 v2 := forall sh, data_at sh t v1 = data_at sh t v2.
Notation "X '>>>' Y" := (stronger X Y) (at level 60, no associativity).
Notation "X '===' Y" := (data_equal X Y) (at level 60, no associativity).
(* Lemma stronger_data_at_rec_derives: forall sh t v0 v1 pos p, legal_alignas_type t = true -> (alignof t | pos) -> v0 >>> v1 -> field_compatible t nil (offset_val (Int.repr pos) p) -> data_at_rec sh type_id_env.empty_ti t pos v0 p |-- data_at_rec sh type_id_env.empty_ti t pos v1 p. *)
(* Lemma stronger_data_at_rec_nested_field_derives: forall sh t gfs t0 v0 v1 p, legal_alignas_type t = true -> nested_field_type2 t gfs = t0 -> legal_nested_field t gfs -> v0 >>> v1 -> size_compatible t p -> align_compatible t p -> data_at_rec sh type_id_env.empty_ti t0 (nested_field_offset2 t gfs) v0 p |-- data_at_rec sh type_id_env.empty_ti t0 (nested_field_offset2 t gfs) v1 p. *)

Lemma stronger_array_ext: forall t0 n a (v0 v1: reptype (Tarray t0 n a)),
Zlength (unfold_reptype v0) = Zlength (unfold_reptype v1) ->
(forall i, 0 <= i < n -> Znth i (unfold_reptype v0)  >>> Znth i (unfold_reptype v1)) ->
v0 >>> v1.