Question: Getting pdsolve to assign its outputs to a function

I am trying to get the output of pdsolve to be assigned to the function it is being solved for but I am having issues with 'too many levels of recursion... Below is my code. Would appreciate any advice on how to get around this. I would also like any solution to eventually work within a 'for' loop.

restart; with(PDEtools);
umain := 1-exp(-y)+sum(A^i*u[i](y, z), i = 1 .. 5);
vmain := -1+sum(A^i*v[i](y, z), i = 1 .. 5);
wmain := sum(A^i*w[i](y, z), i = 1 .. 5);
pde[main] := diff(vmain, y)+diff(wmain, z);
pde[main[2]] := vmain*(diff(wmain, y))+wmain*(diff(wmain, z))-(diff(wmain, y$2));

sys[1] := [A^i*coeff(pde[main[2]], A) = 0, w[1](0, z) = sin(z), w[1](infinity, z) = 0];

for i from 2 to 5 do pde[i] := A^i*coeff(pde[main[2]], A^i) = 0; sys[i] := [pde[i], w[i](0, z) = 0, w[i](infinity, z) = 0] end do;


pdsolve(sys[1]);
w[1] := proc (y, z) options operator, arrow, function_assign; pdsolve(sys[1]) end proc;
w[1](y, z);
Error, (in w[1]) too many levels of recursion

Please Wait...