answer:Here, you have to use a lot of boolean logic. When a knight or knave says that something is true or false, they take the statement, evaluate it, and then either tell the result or apply a logical NOT gate to it and tell you the opposite. Since you do not know if the statement is true or false, you must backtrack and figure out if it is possible for the statement to be true or false. This is called the Boolean satisfiability problem, trying to figure out if any input exists that gives you the output that you are testing for. So in the example, either ((I am a knave) OR (B is a knight)) = true #he is a knight Or ((I am a knave) OR (B is a knight)) = false #he is a knave If he is a knave, then (I am a knave = true) OR (b is knight = unknown) = false Since the OR has a true value as input, it cannot give the false that is needed for the knave to say true. He cannot be a knave and must be a knight. Now since we know that (I am knave = false) OR (b is knight = unknown) = true B must be a knight to make the OR evaluate to true, since the other input is false. B must also be a knight. Since we have made no assumptions and eliminated every other possibility, we know that Knight Knight is the only possible combination.