Require VST.floyd.aggregate_pred. Import VST.floyd.aggregate_pred.aggregate_pred.
Hint Extern 2 (field_compatible0 _ (ArraySubsc _ :: _) _) =>
(eapply field_compatible0_cons_Tarray; [reflexivity | | omega])
: field_compatible.
Hint Extern 2 (field_compatible _ (ArraySubsc _ :: _) _) =>
(eapply field_compatible_cons_Tarray; [reflexivity | | omega])
: field_compatible.
Hint Extern 2 (field_compatible (Tarray _ _ _) nil _) =>
(eapply field_compatible_array_smaller0; [eassumption | omega]) : field_compatible.
Hint Extern 2 (field_compatible (tarray _ _) nil _) =>
(eapply field_compatible_array_smaller0; [eassumption | omega]) : field_compatible.
Hint Extern 2 (field_compatible0 (Tarray _ _ _) nil _) =>
(eapply field_compatible0_array_smaller0; [eassumption | omega]) : field_compatible.
Hint Extern 2 (field_compatible0 (tarray _ _) nil _) =>
(eapply field_compatible0_array_smaller0; [eassumption | omega]) : field_compatible.

Lemma field_compatible0_array_smaller1:
forall  {cs: compspecs} t i j n1 n2 p,
field_compatible0 (Tarray t n1 noattr) (ArraySubsc j::nil) p ->
0 <= i <= n2 ->
n2 <= n1 ->
field_compatible0 (Tarray t n2 noattr) (ArraySubsc i::nil) p.