S = NAND.E0) + NAND or S = NAND + NAND.E1) or S = NAND[(NOT.E0) . (C.E1)] or S = NAND[(C.E0) . (NOTE1
What does all this mean? That's not the standard way to describe a boolean function - at least not that I knew.
If I were to apply a NAND function to two variables (inputs), it would come down to
Y= not(A *B) where A, B are the inputs, Y is the output, * is the AND function and not is the not function.
To set up a multiplexer you have 3 inputs and 1 output:
A, B are the inputs to be multiplexed
Y is the output
S is the selector. S=1 -> Y=A, S=0 -> Y=B (or vice versa, it doesn't matter much)
Therefore Y=S*A + (not S)*B where + is the OR function.
Now you apply boolean logic to transform this equation into one containing only * and not, then you have a multiplexer made from NAND gates only. Although I strongly think that this should have been part of your class, I'll link you to
this text that gives you information on boolean simplification.
You could also use
Karnaugh maps for this task. This is a quick way to find the basic boolean equations. You still have to do the minimizing or transformation into logic types as required (here: NAND).