Download (direct link):
19LOOM: MacGregor (1991); CLASSIC: Patel-Schneider et al. (1991); KRIS: Baader and Hollunder (1991); FaCT: Horrocks (2002). CycL: Lenat and Guha (1991) is another language that is based on logic, but more accurately on first-order predicate logic, a type of logic that we will discuss later in this chapter.
Logic and Logics
Logic is sometimes supposed to underlie all of mathematics and science. Some say that logic also underlies all of natural language. We will remain agnostic on these pronouncements and will just say that logic usually and definitely should underlie all models and modeling languages. Why? Because if we are serious about defining languages that can both represent the knowledge of the world according to the perspective of the human being and be machine-interpretable at the semantic level (i.e., machines and their software can interpret human semantics and knowledge at our human level of understanding), then those knowledge representation languages and the knowledge they represent must be supported by formally powerful tools only representable by logic. Otherwise our knowledge—if represented in nonlogically underpinned ways—will remain arbitrarily interpretable by our software, the condition that holds today, where the semantics of our data and systems are embedded inde-cipherably and inextricably in our imperative programming code.
This state of affairs is the primary reason, by far, why human beings are reduced to interacting with computers at the computer level rather than the human level: We sink to having to interpret 0s and 1s, UIDS, SchdUpdDs, GOTOs, and DO-LOOPS, for the semantics of our data and systems, rather than having our systems use data that is interpreted semantically and interact at our level, in terms of People, Places, Things, Events, and Locations.
The history of software in general is a history of the general evolution of our programming languages upward to our human level. Think about so-called third-, fourth-, fifth-, and sixth-generation languages. Our programming languages have been evolving upward to meet our human knowledge/conceptual level. Structured programming languages—languages to support ways of logically modularizing and encapsulating programming constructs according to ways humans decompose problems—and object-oriented languages—the last major shift in programming language to using surrogates of real-world human objects—and more recently agent-oriented languages—the shift upward from those programming language surrogates of real-world human objects to real-world human tasks—have demonstrated to all of us this nearly inexorable fact: Our programming languages and their representations have moved and need to move up to our human level, in order for us to get computers to do things as we want them to.
Going downward and adapting our human requirements and modes of operation and interpretation to the machine level makes us inefficient, misunderstood, and ineffective. Our software projects have to recapitulate each time the knowledge that could have been represented correctly or near-correctly the first time. We reinvent the wheel each day on each project, on every project, across the world. We have 10 million ways now of doing the same thing! Isn't
that enough? Let's start to do things better. Let's shift to the explicit representation of knowledge about the world using ontologies, which are grounded in firm logics that enable knowledge to be interpreted directly by machines. Let's enable our machines to interact at our human conceptual level.
In this section, therefore, we will look at the kinds of logics that exist. These logics are the machinery behind our Semantic Web languages (and, as some folks propose, even human natural languages) that enable those languages to express a rigorous, unambiguous (depending on context), and semantically rich human-level knowledge that in turn is machine-interpretable.
The first type of logic we'll briefly look at is propositional logic. Propositional logic is the simplest kind of logic. It enables you to formally express simple semantic truths about the world—simple states of affairs usually called propositions. A proposition is just some expression (sometimes also called a statement) in logic about the world or some part of the world that is either true or false or, in certain logics, that has three truth values (true, false, unknown) unknown. Table 8.7 is a simple example of an expression in ordinary propositional logic with two truth values (refer back to Figure 8.1 to check these statements).
This example displays the English version of the propositions on the left and the propositions formalized in propositional logic on the right. We see that the proposition "John is a management employee" is formalized as p and the proposition "John manages an organization" as q in propositional logic. The entire structure on the left- (or the right-) hand side is called a proof, with assertions above the solid line and a conclusion below the line. The way to read a proof is this: If the assertions are held to be true, it follows logically from them that the conclusion is true—and true by reason of a logical inference rule, here the rule modus ponens.