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)
  )).Definition gupd_reptype_structlist_is_pair: forall f i t0,
  isOK (field_type i f) = true ->
  sigT (fun F => sigT (fun G =>
    forall v v0,
      F (gupd_reptype_structlist f i t0 v v0) =
        (proj_except_reptype_structlist f i v, v0) /\
      gupd_reptype_structlist f i t0 v v0 =
        G (proj_except_reptype_structlist f i v, v0)
  )).Definition gupd_reptype_unionlist_is_pair: forall f i t0,
  sigT (fun F => sigT (fun G =>
    forall (v: reptype_unionlist f) v0,
      F (gupd_reptype_unionlist i t0 v0) = (proj_except_reptype_unionlist, v0) /\
      gupd_reptype_unionlist i t0 v0 = G (proj_except_reptype_unionlist, v0))).

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))).