(* does not simplify array indices, because that might be too expensive *)
Ltac simpl_compute_legal_nested_field :=
  repeat match goal with
  | |- context [ compute_legal_nested_field ?T ?L ] =>
    let r := eval hnf in (compute_legal_nested_field T L) in
    change (compute_legal_nested_field T L) with r
  end.Hint Extern 1 (_ = _) => 
  match goal with |- ?A = ?B => constr_eq A B; reflexivity end : cancel.

Lemma data_at__Tarray: forall {CS: compspecs} sh t n a, data_at_ sh (Tarray t n a) = data_at sh (Tarray t n a) (list_repeat (Z.to_nat n) (default_val t)).