anchor.diff:          end forall
       end function
   
  -    function contains_p (a, p) result(b)
  -        integer, intent(in) :: a(:, :, :, :)
  -        integer, intent(in) :: p(:, :)
  -        logical             :: b
  -        integer             :: i, j
  -
  -        loop: do i = 1, size(a, 4)
  +    function contains_p (ps, p) result(b)
  +        type(list), intent(in) :: ps
  +        integer, intent(in)    :: p(:, :)
  +        logical                :: b
  +        integer                :: i, j
  +
  +        loop: do i = 1, ps%length
               do j = 1, size(p, 2)
  -                if (a(p(1, j), p(2, j), p(3, j), i) == 0) then
  +                if (ps%d(p(1, j), p(2, j), p(3, j), i) == 0) then
                       cycle loop
                   end if
               end do
  
positive.code:         end do
      end function
  
      subroutine read_pieces(vecs)
          integer, allocatable, intent(inout) :: vecs(:, :, :)
          character(len=20) :: name_
  
negative.code: module list_module
      type list
          integer              :: length
          integer, allocatable :: s(:, :, :)    ! sparse
          integer, allocatable :: d(:, :, :, :) ! dense
      end type
  end module
  
  