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:

Example 10-8.

[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) ...

Start Free Trial

No credit card required