proposition: Lemma data_at_tarray_value_split_1: forall sh p (l: list val), 0 < Zlength l -> data_at sh (tarray int_or_ptr_type (Zlength l)) l p = data_at sh int_or_ptr_type (hd nullval l) p * data_at sh (tarray int_or_ptr_type (Zlength l-1)) (tl l) (offset_val WORD_SIZE p).
proof: Proof. intros. destruct l. 1: rewrite Zlength_nil in H; lia. clear H. simpl hd. simpl tl. rewrite Zlength_cons. replace (Z.succ (Zlength l)) with (Zlength l + 1) by lia. replace (Zlength l + 1 - 1) with (Zlength l) by lia. eapply data_at_tarray_split_1; eauto. Qed.
imports: VST.veric.compcert_rmaps VST.msl.shares VST.msl.wand_frame VST.concurrency.conclib CertiGraph.lib.List_ext CertiGraph.msl_ext.log_normalize CertiGraph.msl_ext.ramification_lemmas CertiGraph.graph.graph_model CertiGraph.CertiGC.GCGraph CertiGraph.CertiGC.env_graph_gc CertiGraph.msl_ext.iter_sepcon Coq.Lists.List