A logical language is designed to make reasoning formally explicit. As a result, it can capture aspects of natural language which determine whether a set of sentences is consistent. As part of this approach, we need to develop logical representations of a sentence φ that formally capture the truth-conditions of φ. We’ll start off with a simple example:
[Klaus chased Evi] and [Evi ran away].
Let’s replace the two sub-sentences in Example 10-8 by φ and ψ respectively, and put
& for the logical operator corresponding
to the English word and: φ
& ψ. This structure is the logical form of Example 10-8.
Propositional logic allows us to represent just those parts of linguistic structure that correspond to certain sentential connectives. We have just looked at and. Other such connectives are not, or, and if..., then.... In the formalization of propositional logic, the counterparts of such connectives are sometimes called Boolean operators. The basic expressions of propositional logic are propositional symbols, often written as P, Q, R, etc. There are varying conventions for representing Boolean operators. Since we will be focusing on ways of exploring logic within NLTK, we will stick to the following ASCII versions of the operators:
>>> nltk.boolean_ops() negation - conjunction & disjunction | implication -> equivalence <->
From the propositional symbols and the Boolean operators we can build an infinite set of well-formed formulas (or just formulas, for short) ...