# Basic Logic: Satisfiability is Truth Enough

At Tau.net, we aim at empowering users with truth, but this is a very lofty goal; it is so lofty that if we insist on absolute truth, then we might end up empty-handed. So, we need to compromise on how much truth is truth enough in Logical AI.

Taken from the viewpoint of reasoning and argumentation, validity — “absolute truth” — is characteristically what we are looking for. Take, for instance, the following example of an argument, where (1) and (2) are called the premises and (3) is the conclusion:

(1) If the government tops the rising energy prices, then social unrest will be avoided.

(2) Social unrest will not be avoided.

(3) Then, the government does not top the rising energy prices.

This, like any argument, only makes sense if it is valid, i.e. if its premises are true, then the conclusion must be necessarily true. How can we find out if it is valid? We show you how.

There are only two atomic propositions or statements in this argument: “The government tops the rising energy prices” and “Social unrest will be avoided”. If we formalize them as *p* and *q*, respectively, then we can formalize the whole argument in this way:

(1) IF *p* THEN *q*

(2) NOT-*q*

(3) Then NOT-*p*

And this can be even further abstracted as

{IF *p* THEN *q*, NOT-*q*} ⊨ NOT-*p*

where you can see the symbol ⊨ for logical consequence featuring again. Now, we build a truth table for the formula

“IF [(IF *p *THEN *q*) AND (NOT-*q*)], THEN NOT-*p*”

where [(IF *p *THEN *q*) AND (NOT-*q*)] is called the antecedent and NOT-*p* is the consequent:

As you can see, the truth table for the main connective (IF… THEN) is constituted only by 1’s, so this is a valid argument. Actually, we don’t even have to build the truth table, because any argument with this form — called *modus tollens *or denying the consequent — is always valid. **Any argument, no matter how long or intricate, can be interpreted with a truth table to check for validity, even if distinguishing the premise and the conclusion is not so easy at first.** You can try with the following argument:

*Rhinos in Kenya are threatened with extinction because poachers are killingthem for their horn. Since the rhino has no natural predators, it does notneed its horn to survive. Thus, there should be an organized program to capture rhinos in the wild and remove their horn. Such a program would eliminate the incentive of the poachers.*

Unfortunately, validity is not always a tangible aim, and we often have to satisfy ourselves with contingencies, i.e. logical formulas that are true in some rows and false in other rows of the truth table. We then say that such a formula is (only) satisfiable.

This result — appropriately called *satisfiability *— is the case especially when individual variables like *x*, *y*, etc. are involved, and truth tables are no longer useful to check for validity. Suppose you are asked to interpret the statement “*x* — *y* = 3” over the set of the natural numbers {1,2,3,…}. This statement is true only when, for instance, *x* = 6 and *y* = 3, or *x* = 27 and *y* = 24. Of course, if we have for example *x* = 8 and *y* = 3, then this statement is false. So, it is a satisfiable statement over the natural numbers. Also, if we consider *x* = -6 and *y* = -9, then the statement is not true, even if we have (-6) — (-9) = 3, because the numbers -6 and -9 are not natural numbers. We then say that the statement “*x* — *y* = 3” is satisfiable* *in a given interpretation: it is either true or false depending on the assignment to the individual variables *x* and *y *and the domain we chose to work with (e.g., the natural numbers).

Interestingly, in logical AI more often than not we are interested in the symbol ⊨ from the humble viewpoint of satisfiability, rather than from the haughty viewpoint of validity or “absolute truth”. We’ll tell you why in a future article in this series.