Here are some notes that might help you debug your translations of English into logic. Assume we have an English sentence (ES) and a logical sentence (LS) we claim are equivalent. To be equivalent, they must have the same 'truth value' in every interpretation (ie, in every 'possible world' - you can think of 'possible worlds' as 'imagine some author wrote a novel where the world was ...'). Ie, abusing logical notation a bit, we want ForAll w [ ES(w) <-> LS(w) ] // where w = some world state (Recall '<->' is the 'equivalence' symbol.) Hence we can find a 'bug' in our translation if we can find some hypothetical world w where the truth value of the English sentence and the truth value of the logical sentence are different. Here is a very simple case: ES1: There exists an expensive vase. LS1: ForAll X [vase(X) -> expensive(X)] Here is a world state (ie, a specific scenario, a hypothetical world, or more technically, an 'interpretation' - see pg 292 of the textbook): constants: a, b definition of predicate VASE: vase(a) is true and vase(b) is true definition of predicate EXPENSIVE: expensive(a) is true and expensive(b) is false We would all agree that the English sentence ES1 is true in this world, since vase 'a' is expensive. We don't have an algorithm for judging the English sentence's truth, so we need to rely on our common sense. Fortunately we can 'mechanically' evaluate the logical sentence LS1 in this interpretation. For LS1 to be true, 'vase(X) -> expensive(X)' must be true for all the constants in our interpretation. Using the alternate form of '->' for easier evaluation, these BOTH must be true: [not vase(a)] or expensive(a) [not vase(b)] or expensive(b) The first of these is true, since expensive(a) is true. However the second is not. Hence the truth value of LS1 is FALSE. Since we have found a scenario where the truth value of our English and the truth value of our FOPC do not match, there is something wrong with our translation. (The correct version of LS1 is of course: ThereExists X [vase(X) and expensive(X)].) Note that we can't prove our translation into FOPC is CORRECT by this process, since the translation needs to hold in all possible worlds, but we can find examples that show a translation is buggy. This is analogous to debugging ordinary programs - we can see if our program gets all our test cases correct, but just because it gets all the test cases correct, doesn't mean the program has no bugs (unless we tried EVERY possible test cases, which usually is infeasible). Jude PS - Note that since an interpretation has a finite number of constants, ForAll becomes a "big AND" and ThereExists becomes a "big OR." In other words, if our constants are a, b, and c, then to evaluate the formula ForAll X p(X) and ThereExists y q(X,Y) we need to evaluate: [ p(a) and ( q(a,a) or q(a,b) or q(a,c) ) ] and [ p(b) and ( q(b,a) or q(b,b) or q(b,c) ) ] and [ p(c) and ( q(c,a) or q(c,b) or q(c,c) ) ]