I see the half plane for x less than 1/2 as red, which is as it should be, since the function is -1 there. For x greater than 1/2 and y negative the function is x*y which is negative and again red. For x greater than 1/2 and y positive, the function is x*y which is now positive and shows yellow. This all seems right to me, and is a little clearer if you try
contourplot3d(f(x,y),x=0..1,y=-1..1,contours=[0],filled=true,axes=boxed);
and rotate around until you see the 2-D view.
As for your first question, I am not so sure...
David.

I did play about with some ways to work with the derivatives (mainly using D) without success; but turning them into derivatives later is a workable solution

I did play about with some ways to work with the derivatives (mainly using D) without success; but turning them into derivatives later is a workable solution

Others have addressed the need Sci. Workplace, especially for LaTeX. Sci Workplace has meant I can produce LaTeX without knowing (much) LaTeX. I could live with some other way of producing nice documents (MathML for example) but the bottom line is I submit papers with math to Journals that can directly typeset from the LaTeX.
I use Sci Wrkplace for quickly making notes to myself or for my classes, and use it for simple math to help me make those notes. But for any significant math, I use Maple.
Maple is a better math tool,
SciWorkplace is a better document production tool.

Others have addressed the need Sci. Workplace, especially for LaTeX. Sci Workplace has meant I can produce LaTeX without knowing (much) LaTeX. I could live with some other way of producing nice documents (MathML for example) but the bottom line is I submit papers with math to Journals that can directly typeset from the LaTeX.
I use Sci Wrkplace for quickly making notes to myself or for my classes, and use it for simple math to help me make those notes. But for any significant math, I use Maple.
Maple is a better math tool,
SciWorkplace is a better document production tool.

A float can be converted to a rational, so the following does something similar (note the decimal point to convert the fraction to a real)
convert(77/45.,rational,3); # gives 12/7
convert(77/45.,rational,2); # gives 5/3

A float can be converted to a rational, so the following does something similar (note the decimal point to convert the fraction to a real)
convert(77/45.,rational,3); # gives 12/7
convert(77/45.,rational,2); # gives 5/3

try nops (number of operands). I would have expected it to be under ?list, but I see it isn't (in v. 10), which does seems like a serious omission.

And yet, a/bc is usually interpreted in typeset notation as a/(b*c). In the International Union of Pure and Appled Chemistry rules: "In evaluating combinations of many factors, multiplication takes precedence over division in the sense that a/bc should be interpretaed as a/(bc) rather than (a/b)c; however in complex expressions it is desirable to use brackets to eliminate any ambiguity" Usually the IUPAP (physics) and IUPAC (chemistry) rules are in agreement, and when I write papers with my mathematics colleagure, we also use this convention, so I think it is fairly universal.
(I am thinking as it it written on the page, i.e., output, here; I am not suggesting input a/b*c be interpreted this way, since (a/b)*c is the standard programming interpretation of input.)

You have solved x4=0 and x5=0, but x4=x2-x1 and x5=x3-x1, so no matter what x1 is, we must have x2=x3. So we really only have one equation x2=x3. If you solve this for C, you can get C as a function of L, but to get both L and C you need some more information.

Of course, I agree it is not a proof in the usual sense of the word; I was using it loosely. George used the word "verify", which would have been better. If the Logic package tests all the possibilities in a truth table is that more verified that if it hard codes that knowledge? I take the point of view with Maple that if it is hard coded in, then it is a piece of knowledge that has been proved elsewhere. Now perhaps there is a typo in some code that means that Maple is wrong, but that is a bit like an unfound error in a published proof. I accept that Maple is right as often as mathematicians, i.e., almost all of the time.
Cheers,
David.

Of course, I agree it is not a proof in the usual sense of the word; I was using it loosely. George used the word "verify", which would have been better. If the Logic package tests all the possibilities in a truth table is that more verified that if it hard codes that knowledge? I take the point of view with Maple that if it is hard coded in, then it is a piece of knowledge that has been proved elsewhere. Now perhaps there is a typo in some code that means that Maple is wrong, but that is a bit like an unfound error in a published proof. I accept that Maple is right as often as mathematicians, i.e., almost all of the time.
Cheers,
David.

This works without the logic package:
evalb((not(a and b))=((not a) or (not b)));
evalb((not(a or b))=((not a) and (not b)));
again both returning true. These boolean operators can return fail, so are different from the others, but that isn't a problem here since you get true back. The = is "equivalent" in the context of evalb.
I don't think you need implies here.
Cheers,
David.

This works without the logic package:
evalb((not(a and b))=((not a) or (not b)));
evalb((not(a or b))=((not a) and (not b)));
again both returning true. These boolean operators can return fail, so are different from the others, but that isn't a problem here since you get true back. The = is "equivalent" in the context of evalb.
I don't think you need implies here.
Cheers,
David.

I didn't look in the programming guide, but to show de Morgan's laws I would just do:
with(Logic):
Equivalent(¬(a &and b), (¬ a) &or (¬ b));
Equivalent(¬(a &or b), (¬ a) &and (¬ b));
Since both are true this is a proof.
Cheers,
David.