Definition lisfun (Q: nat -> pred heap) (p: nat)  : pred heap:=
(!!(p=0) && emp || !!(p<>0) && EX r:nat, mapsto p r * Q r)%pred.

(* Specifications: *)
Lemma covariant_lisfun: covariant lisfun.
Definition lis : nat -> pred heap := corec lisfun.
Lemma lis_fold_unfold:
forall p, lis p =  (!!(p=0) && emp || !!(p<>0) && EX r:nat, mapsto p r * lis r)%pred.