Definition gupd_reptype_array_is_pair: forall t n a i t0,
0 <= i < n ->
sigT (fun F => sigT (fun G =>
forall v v0,
F (gupd_reptype_array t n a i t0 v v0) =
(proj_except_reptype_array t n a i v, v0) /\
gupd_reptype_array t n a i t0 v v0 =
G (proj_except_reptype_array t n a i v, v0)
)).

(* Specifications: *)
Lemma nf_replace2_is_nf_replace2_1_nf_replace2: forall t gf gfs t0,
legal_nested_field t (gf :: gfs) ->
nf_replace2 t gfs (nf_replace2 (nested_field_type2 t gfs) (gf :: nil) t0) =
nf_replace2 t (gf :: gfs) t0.
Lemma proj_except_reptype_is_proj_except_reptye1_gupd_reptype: forall t gf gfs v,
legal_nested_field t (gf :: gfs) ->
JMeq (proj_except_reptype t gf gfs v)
(gupd_reptype t gfs _ v
(proj_except_reptype _ gf nil (proj_reptype t gfs v))).
Lemma gupd_reptype_is_gupd_reptye1_gupd_reptype: forall t gf gfs t0 v v0,
legal_nested_field t (gf :: gfs) ->
JMeq (gupd_reptype t (gf :: gfs) t0 v v0)
(gupd_reptype t gfs _ v
(gupd_reptype _ (gf :: nil) _ (proj_reptype t gfs v) v0)).