[seqfan] confusion definition of UR paths in A050144

Richard J. Mathar mathar at mpia-hd.mpg.de
Tue Jul 30 13:18:30 CEST 2024


I don't understand the crossrefs in the lattice paths in A050144.
The NAME in A050144 defines M(p,q,r) the number of UR paths from
(0,0) to (p,p-q) that meet the line y=x-r and do not rise above it.

A039599(n,r) are the UR paths from (0,0) to (n,n) that meet the line
y=x-r but do not *fall* below it.
i) The use of the sign of r in DEFN of A050144 does not make sense
   if we start at (0,0) and do not want to rise above y=x-r. For 
   any r>=1, we are already above the line at the start. So apart
   from some esoteric other parameter combinations, there are no such paths.

ii) if we assume that the corrected definition of A050144
   is "where M(p,q,r) is the number of UR paths from (0,0) to
   (p,p-q) that meet the line y=x-r and do not fall below it",
   then the x-refx should say that M(n,0,r) is given by A039599.

I cannot reconcile the M-definition with some brute-force
enumerations and T(n,k)=M(2n-1,n-1,k-1) at all, even if the
definition uses the corrected sign of r. Here is my (slow)
implementation in Maple:

# M= number of UR paths from (0,0) to (p,p-q) that meet
# the line y=x-r and do not fall below it.
# Definition in use in A050144
M := proc(p,q,r)
    local y,enc,encb,i,a,len,trX,trY ;
    # no such path initially
    a :=0 ;
    # final y-coordinate of the path
    y := p-q ;
    # need p steps R and y steps U. Encode path as binary sequence
    # where U=1, R=0. Path length is p+y. Numbers 0..2^(p+y)-1
    # Very slow implementation, obviously
    for enc  from 0 to 2^(p+y)-1 do
        # encode path in binary
        encb := convert(enc,base,2) ;
        # for small numbers pad with trailing zeros 
        # so the path has the full p+y bits.
        len := nops(encb) ;
        encb := [op(encb), seq(0,i=1..p+y-len)] ;
        # Now encb is a binary sequence with p+y bits/steps
        # Number of 1's = number of U must be y
        if add(i,i=encb) = y then
            # start at (0,0) on the trail
            trX := 0 ;
            trY := 0 ;
            # marker of having hit the y=x-r line
            hits := false ;
            # marker of staying above or on the y=x-r line
            above := true ;
            for i from 1 to nops(encb) do
                # 1=U, 0=R steps on the trail
                if op(i,encb) = 1 then
                    trY := trY+1 ;
                else
                    trX := trX+1 ;
                end if;
                if trY -trX < -r then
                    # fell below the line
                    above := false ;
                elif trY -trX = -r then
                    # touched th eline
                    hits := true ;
                end if;
            end do:
            # count if touched but not fallen below
            if hits = true and above = true then
                a := a+1 ;
            end if;
        end if;
    end do:
    a ;
end proc:

A039599 := proc(n,r)
    M(n,0,r) ;
end proc:
# check correctness of M against table in A039599
# for n from 0 to 10 do
#   for k from 0 to 10 do
#       printf("%d ",A039599(n,k)) ;
#   end do:
#   printf("\n") ;
# end do:

# failing attempts to verify A050144 ??
A050144 := proc(n,k)
    # M(2*n-1,n-1,k) ;
    M(2*n,n-1,k-1) ;
    # M(n-1,n-1,k-1) ;
end proc:

for n from 0 to 10 do
    for k from 0 to 10 do
        printf("%d ",A050144(n,k)) ;
    end do:
    printf("\n") ;
end do:


More information about the SeqFan mailing list