BOOLE - Boolean Logic
Propositions are logical formulas consisting of proposition symbols and connecting operators. They are recursively defined by the following rules:
- All proposition symbols (in this problem, lower-case alphabetic characters, e.g.,
z) are propositions.
Pis a proposition,
)is a proposition, and
Pis a direct subformula of it.
)are propositions, and
Qare direct subformulas of them.
- Nothing else is a proposition.
<->denote logical negation, conjunction, disjunction, implication, and equivalence, respectively. A proposition
Pis a subformula of a proposition
Pis a direct subformula of a proposition
Qis a subformula of
P be a proposition and assign boolean values (i.e.,
1) to all proposition symbols that occur in
This induces a boolean value to all subformulas of
P according to the standard semantics of the logical operators:
This way, a value for
P can be calculated.
This value depends on the choice of the assignment of boolean values to the proposition symbols.
n different proposition symbols, there are
2n different assignments.
To evaluate all possible assignments we may use truth tables.
A truth table contains one line per assignment (i.e.,
2n lines in total).
Every line contains the values of all subformulas under the chosen assignment.
The value of a subformula is aligned with the proposition symbol, if the subformula is a proposition symbol, and with the center of the operator otherwise.
The input contains several test cases, each on a separate line. Every test case denotes a proposition and may contain arbitrary amounts of spaces in between. The input file terminates immediately after the newline symbol following the last test case.
For each test case generate a truth table for the denoted proposition.
Start the truth table by repeating the input line.
Evaluate the proposition (and its subformulas) for all assignments to its variables, and output one line for each assignment.
The line must have the same length as the corresponding input line and must consist only of spaces and the characters
Output an empty line after each test case.
s1,...,sn be the proposition symbols in the denoted proposition sorted in alphabetic order.
Then, all assignments of
s1 must precede the assignments of
Within each of these blocks of assignments, all assignments of
s2 must precede the assignments of
s2, and so on.
((b --> a) <-> ((! a) --> (! b))) ((y & a) - ->(c |c))
((b --> a) <-> ((! a) --> (! b))) 0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 0 1 ((y & a) - ->(c |c)) 0 0 0 1 0 00 1 0 0 1 0 00 0 0 0 1 1 11 1 0 0 1 1 11 0 0 1 1 0 00 1 1 1 0 0 00 0 0 1 1 1 11 1 1 1 1 1 11
There is no expression like that.
if expression is: