Hint Resolve node_precise.

(* Specifications: *)
Lemma body_new_node : semax_body Vprog Gprog f_new_node new_node_spec.
Lemma node_contents_eq : forall sh1 sh2 e1 e2 n1 n2 l1 l2 p, readable_share sh1 -> readable_share sh2 ->
repable_signed e1 -> repable_signed e2 -> n1 <> Vundef -> n2 <> Vundef -> l1 <> Vundef -> l2 <> Vundef ->
data_at sh1 tnode (vint e1, (n1, l1)) p * data_at sh2 tnode (vint e2, (n2, l2)) p |--
!!(e1 = e2 /\ n1 = n2 /\ l1 = l2).
Lemma node_val_eq : forall sh1 sh2 e1 e2 n1 n2 l1 l2 p, readable_share sh1 -> readable_share sh2 ->
repable_signed e1 -> repable_signed e2 ->
data_at sh1 tnode (vint e1, (n1, l1)) p * data_at sh2 tnode (vint e2, (n2, l2)) p |-- !!(e1 = e2).
Corollary node_data_eq : forall gsh1 gsh2 sh1 sh2 rep1 rep2 p, readable_share sh1 -> readable_share sh2 ->
repable_signed (data rep1) -> repable_signed (data rep2) ->
node_data gsh1 gsh2 sh1 rep1 p * node_data gsh1 gsh2 sh2 rep2 p |-- !!(data rep1 = data rep2).
Lemma node_data_valid_pointer : forall gsh1 gsh2 sh rep p, readable_share sh ->
node_data gsh1 gsh2 sh rep p |-- valid_pointer p.
Lemma node_data_isptr : forall gsh1 gsh2 sh rep p,
node_data gsh1 gsh2 sh rep p = !!isptr p && node_data gsh1 gsh2 sh rep p.