For 1) I'm sorry, I had a typo I didn't correct in the email. It should be:
// This is ok:
val [n:int] ptmp = mystr1_of_mystr(strtmp)
// but not this
val _ = [n:int] p->data := mystr1_of_mystr(strtmp)
I suppose an acceptable approach is to write a prffun to get info about dependent information.
For 2) then, is there any case where one could get in to memory efficiency trouble by performing multiple bindings to the same name?