Definition array_at_ (sh: Share.t) (t: type) (gfs: list gfield) (lo hi: Z) : val -> mpred :=
 array_at sh t gfs lo hi (list_repeat (Z.to_nat (hi-lo)) (default_val _)).

Lemma array_at_ext: forall sh t gfs lo hi v0 v1 p, Zlength v0 = Zlength v1 -> (forall i u0 u1, lo <= i < hi -> JMeq u0 (Znth (i-lo) v0) -> JMeq u1 (Znth (i-lo) v1) -> field_at sh t (ArraySubsc i :: gfs) u0 p = field_at sh t (ArraySubsc i :: gfs) u1 p) -> array_at sh t gfs lo hi v0 p = array_at sh t gfs lo hi v1 p.