matrix = array[array[int]] make_matrix = proc (gen: proctype (int,int,matrix) returns (int), size: int) returns (matrix) m: matrix := matrix$fill_copy(0, size, array[int]$fill(0, size, 0)) for y: int in int$from_to(0, size-1) do for x: int in int$from_to(0, size-1) do m[y][x] := gen(x,y,m) end end return(m) end make_matrix lower = proc (x,y: int, m: matrix) returns (int) if x>y then return(0) elseif x=y | x=0 then return(1) else return( m[y-1][x-1] + m[y-1][x] ) end end lower upper = proc (x,y: int, m: matrix) returns (int) if x