How implement a pointer to allocatable array inside a derived data type?

FWIW, I think you could just define an elemental type-bound function in your module for them:

elemental real(rk) function left(self,celli)
   class(grid), intent(in) :: self
   integer, intent(in) :: celli
   left = self%edges(celli-1)
end function left

This will be inlined by any compilers, and lets you avoid the pointer thing at all.