Hint Rewrite
@field_at_data_at_cancel'
@field_at_data_at
@field_at__data_at_
@data_at__data_at : cancel.
(* END new experiments *)

(* Specifications: *)
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)).
Lemma data_at__tarray:
forall {CS: compspecs} sh t n,
data_at_ sh (tarray t n) =
data_at sh (tarray t n) (list_repeat (Z.to_nat n) (default_val t)).
Lemma data_at__tarray':
forall {CS: compspecs} sh t n v,
v = list_repeat (Z.to_nat n) (default_val t) ->
data_at_ sh (tarray t n) = data_at sh (tarray t n) v.
Lemma change_compspecs_data_at_cancel:
forall {cs1 cs2: compspecs} {CCE : change_composite_env cs1 cs2}
(sh: share) (t1 t2: type)
(v1: @reptype cs1 t1) (v2: @reptype cs2 t2)
(p: val),
t1 = t2 ->
cs_preserve_type cs1 cs2 (@coeq cs1 cs2 CCE) t1 = true ->
JMeq v1 v2 ->
@data_at cs1 sh t1 v1 p |-- @data_at cs2 sh t2 v2 p.
Lemma change_compspecs_field_at_cancel2:
forall {cs1 cs2: compspecs} {CCE : change_composite_env cs1 cs2}
(sh: share) (t1 t2: type) gfs
(p: val),
t1 = t2 ->
cs_preserve_type cs1 cs2 (@coeq cs1 cs2 CCE) t1 = true ->
@field_at_ cs1 sh t1 gfs p |-- @field_at_ cs2 sh t2 gfs p.
Lemma change_compspecs_data_at_cancel2:
forall {cs1 cs2: compspecs} {CCE : change_composite_env cs1 cs2}
(sh: share) (t1 t2: type)
(p: val),
t1 = t2 ->
cs_preserve_type cs1 cs2 (@coeq cs1 cs2 CCE) t1 = true ->
@data_at_ cs1 sh t1 p |-- @data_at_ cs2 sh t2 p.
Lemma change_compspecs_field_at_cancel3:
forall {cs1 cs2: compspecs} {CCE : change_composite_env cs1 cs2}
(sh: share) (t1 t2: type) gfs
(v1: @reptype cs1 (@nested_field_type cs1 t1 gfs))
(p: val),
t1 = t2 ->
cs_preserve_type cs1 cs2 (@coeq cs1 cs2 CCE) t1 = true ->
@field_at cs1 sh t1 gfs v1 p |-- @field_at_ cs2 sh t2 gfs p.
Lemma change_compspecs_data_at_cancel3:
forall {cs1 cs2: compspecs} {CCE : change_composite_env cs1 cs2}
(sh: share) (t1 t2: type)
(v1: @reptype cs1 t1)
(p: val),
t1 = t2 ->
cs_preserve_type cs1 cs2 (@coeq cs1 cs2 CCE) t1 = true ->
@data_at cs1 sh t1 v1 p |-- @data_at_ cs2 sh t2 p.