PARENTS:
 LOGIC WORKSHOP 
 WORKSHOPS 
 ARCHIVE 

===============================================================================
Exact Two-dimensional Propositional Calculus.
---------------------------------------------
Propositional Calculus encompasses operands and operators. Operands are 
statements with which we associate a variable "certainty".

For Exact Calculus certainty may take one of two values: "true" and "false", 
symbolized respectively with "1","0".
For simplicity's sake we shall say that a statement is true, or that its value 
is 1, always implying the certainty of the statement.

For two-dimensional Calculus operators operate on two operands and have a 
certainty variable being function of those of both operands. As for operands, 
we shall say "operator is true/false", implying by it its certainty.

For example operator "and" is true if and only if both operands are true, which 
may be symbolized for a couple of operands p,q as follows:

and(p,q)
1   1 1
0   1 0
0   0 1
0   0 0

For above 4 combinations of p,q we have clearly 16 operators (o1-o16) listed 
below:

p q  o1  o2  o3  o4  o5  o6  o7  o8
1 1  0   1   1   1   0   0   0   1   
1 0  1   0   1   1   0   1   1   0      
0 1  1   1   0   1   1   0   1   0      
0 0  1   1   1   0   1   1   0   1  

p q  o9  o10 o11 o12 o13 o14 o15 o16
1 1  1   1   0   0   0   1   0   1     
1 0  0   1   0   0   1   0   0   1       
0 1  1   0   0   1   0   0   0   1       
0 0  0   0   1   0   0   0   0   1

Following operators are particularly important: (Lists of their certainties may 
be more concisely shown as horizontal strings.)

operator                  horizontal string
--------                  -----------------
o14: and                             1000 
o4:  or                              1110
o7:  orr, exclusive or, either or    0110
o2:  implica1ion                     1011
o8:  equivalence                     1001

Operators may in turn become operands, which allows chains of operations, known 
as "inference chains", or shortly "inferencing" as shown in the simple example:

orr( (and(p,q)),(or(r,s)) )
          1 0       1 0
      0          1       
1

Inferencing may extend over thousands of operations. Certainties of the lowest 
level (p,q,r,s) may be factual and inferencing determines their logical 
consequences.

Besides the above mentioned binary operators the Calculus encompasses a unary 
operator "not" which operates on one operand and negates its certainty replacing 
1 by 0 and vice versa:

not(p)
0   1
1   0

Besides the essential symbols, i.e.  operators, operands and brackets, we shall 
introduce for convenience expressions, explained in the following example.

===============================================================================
Example of Calculus' operations.

An expression marked "En" encompasses a main operator followed by bracketed 
structure of operators/operands. Expression has an associated certainty string 
which it shares with the main operator. En, Em having identical strings are 
equal and marked En=Em. Otherwise, they are not equal and marked En!=Em. 
"=" symbol is also used to associate expression with its main operator: 
E1=and(pq).

Operators and expressions can become in turn operands and searching, 
for instance, the solution of:

(1) if and(pq) implies or(pq) then X(pq) where X is an unknown operator.

We may write it in form of expressions:

E1=imp(and(pq).or(pq)) 
E2=X(pq)
E3=and(pq)  
E4=or(pq)
thus E1=imp(E3,E4)

We evaluate expressions starting by those in brackets:

E3=and(pq)
1..1...11
0..0...10
0..0...01
0..0...00

E4=or(pq)
1..1..11
1..1..10
1..1..01
0..0..00

E1=imp(E3,E4)
1..1...1..1
0..0...0..1
0..0...0..1
1..1...0..0

Now, by equalizing E1 with E2 we may search X.

E1=E2=X(pq)
1..1..1.11
0..0..0.10
0..0..0.01
1..1..1.00

Looking up the operators table we see that X=eq and we can write the solution 
of (1):

if and(pq) implies or(pq) then q is equivalent to p

The same chain of operations could be written without simplification by E3, E4 
in one step:

E1=imp(and(pq).or(pq))=E2=eq(pq)
1..1...1...11..1..11...1..1..11
0..0...0...10..1..10...0..0..10
0..0...0...01..1..01...0..0..01
1..1...0...00..0..00...1..1..00

It's more difficult, but with a little practice it becomes very easy to write 
directly such summaries even for much more complex expressions. However, when 
in doubt, it's advisable to follow Descartes and to decompose a complex 
expression into several simple ones.

Let's note: Calculus tells us that if and(pq) implies or(pq) then p and q 
are equivalent.

Result by no means obvious and quite useful for instance in programming where 
we can replace "imp(and(pq).or(pq))" with much simpler "eq(pq)".

Similarly:
if(and(pq)) does not imply (or(pq)) then p and q are mutually exclusive:

E1=not(imp(and(pq).or(pq)))=E2=orr(pq)
0..0...1...1...11..1..11....0..0...11
1..1...0...0...10..1..10....1..1...10
1..1...0...0...01..1..01....1..1...01
0..0...1...0...00..0..00....0..0...00

===============================================================================
EXERCISE B
 
Many beginning programmers replace intuitively and wrongly
E1=and(not(p),not(q)) with E5=not(and(pq))
 
It's difficult to explain them their error without help of the Calculus and 
very easy to do it using Calculus.
 
1.Show the error.
 
2.Find correct X in E1=E2=not(X(pq)).
 
First using intermediary expressions E3=not(p)  E4=not(q) and afterwards 
without them.
 
===============================================================================
EXERCISE C
 
A theorem of Calculus says that any operator may be constructed from any two  
other ones with optional help of "and" and "not".
 
Example:
--------
Show that "imp" may be constructed from
"eq" and "or".
 
E1=imp(pq) = E2=or(eq(pq),and(not(p),q))
1..1...11....1..1..1..11..0...0...1..1
0..0...10....0..0..0..10..0...0...1..0
1..1...01....1..1..0..01..1...1...0..1
1..1...00....1..1..1..00..0...1...0..0
 
Thus E1=E2    QED
 
Exercise:
---------
Show that "orr" may be constructed from "or" and "and":

===============================================================================

PARENTS:
 LOGIC WORKSHOP 
 WORKSHOPS 
 ARCHIVE