[edit: I initially misread your question as being about how to plot the intersection of the surfaces, and I initially focused on your Question's title. Sorry. Later down I get to the region, and to restricting the surface faces.]

There is a command for this in the **plots** package, called **intersectplot**. It produces the red spacecurve below.

If you don't want the gray plane as well, then just omit it from the call to **display**.

I deliberately used **x^2=4-y^2** , for a circular cylinder below (though the axes scaled are displayed unconstrained). Change that as you wish.

restart:
with(plots):
display(intersectplot( x^2=4-y^2, z=2-y, x=0..4, y=0..2, z=0..2, thickness=4),
plot3d(2-y, x=0..4, y=0..2, style=surface, color=gray, transparency=0.4),
implicitplot3d(x^2=4-y^2, x=0..4, y=0..2, z=0..2, style=surface,
color=gold, transparency=0.4, grid=[30,30,10]),
lightmodel=none, axes=box);

There are several other ways to accomplish this example, of course.

And, using your x=4-y^2 one could obtain the following. (I constrain the scaling of the axes here, for fun).

display(intersectplot( x=4-y^2, z=2-y, x=0..4, y=0..2, z=0..2, thickness=4),
plot3d(2-y, x=0..4, y=0..2, style=surface, color=gray, transparency=0.4),
implicitplot3d(x=4-y^2, x=0..4, y=0..2, z=0..2, style=surface,
color=gold, transparency=0.4, grid=[30,30,10]),
lightmodel=none, axes=box, scaling=constrained);

As I mentioned, apoligies for focusing on the intersecting curve, while you really mentioned wanting to plot the enclosed region.

Note that the range arguments of the **plot3d** command can be variable. That's how I restrict the plane **z=2-y** in one of the **plot3d** calls below.

Also, a coordinate-transformed surface from **plot3d** can sometimes have less jagged rendered edges than a surface from **implicitplot3d**. Changing coordinate systems can be another way to deal with that. Below I take the portion of the parabolic sheet (what you called a cylinder) as being x=f(z,y) a mathematical function. And then I transformed to flip x and z coordinates.

restart:
with(plots):
display(intersectplot( x=4-y^2, z=2-y, x=0..4, y=0..2, z=0..2, thickness=4),
plot3d(2-y, x=0..4-y^2, y=0..2, style=surface,
color=gold, transparency=0.4),
plottools:-transform((z,y,x)->[x,y,z])(plot3d(4-y^2, z=0..2-y, y=0..2,
style=surface, color=gold,
transparency=0.4)),
lightmodel=Light4, glossiness=1.0, axes=box, scaling=constrained,
view=[0..4, 0..2, 0..2]);

I'll leave the bottom and back plane portions to you. The variable range is the key.

acer