# Fifty Shades of J/Chapter 16

Thinking by numbers

### Principal Topics

#: (anti-base) b. (Boolean), |: (transpose), syllogism, predicate, Boolean verbs, tautology, contradiction.

### Seek Truth and Expand Knowledge

Two overriding goals of scientific method are to seek truth and to expand knowledge – this article shows how do both, admittedly in the restricted context of propositions and binary relations.

### Propositions and definitions

First consider propositions such as

 No Vector reader eats haggis All Americans are Vector readers No American ever rejects haggis

Each of these has the form of a subject and a predicate connected by a copula (‘is’), for example the subject of the first is a Vector reader and the predicate is a haggis eater. Such propositions include an implicit quantifier (“For all ..”) or (“There exists ...”), and are assertions of which a clear binary judgement can be made, true or false. If three such propositions are such that the third (called the conclusion) is logically deducible from the first two (called the premisses), the resulting set is called a syllogism. In the English language the word ‘predicate’ has two meanings. Examples of the second meaning are

 A He is a Vector reader B He is an American C He eats haggis

In this sense a predicate is an assertion containing a variable (in these examples ‘he’) and thus true/false judgements are variable dependent. A list of columns representing as binary digits the numbers from 0 to 2y is given by

```   binlist=:monad : '|:#:i.2^y'
]t3=.binlist 3
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
```

The columns of t3 collectively represent all possible selections of 3 binary digits with repetition allowed. In another view t3 is a list of lists, each of which contains 2y binary digits in equal proportions of 0s and 1s. Use these lists to model predicates and define verbs which select from the top level 3-list

```   A=:0&{
B=:1&{
C=:2&{
A t3
0 0 0 0 1 1 1 1
```

### The Boolean Verbs

b. is an unusual quantity. It is not an adverb but behaves somewhat like one, only its argument is an integer (noun) rather than a verb. b. is the common basis of a set of strongly related verbs which perform binary calculations. b. with no argument means 0 b. , so for practical purposes a numeric argument must be present as in

```   and=:1 b.
or=:7 b.
(1 and 0);(1 or 0)
┌─┬─┐
│0│1│
└─┴─┘
```

Each binary verb such as and and or has a 2 by 2 truth table with four entries, e.g.

```   0 1 and/0 1
0 0
0 1
```

so that there are a total of 24=16 distinct truth tables whose ravels correspond to the binary representations of 0 to 2y and provide the numbering scheme for the arguments of b.

```   binlist 4
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
```

A list of the regularly used binary verbs is

```   and=:1 b.
or=:7 b.
imp=:13 b.        NB. implies
eq=:9 b.          NB. equals
xor=:6 b.         NB. exclusive or (same as not equal)
nand=:14 b.       NB. not and
nor=:8 b.         NB. not or
```

```   true=:15 b.       NB. all 1s regardless
false=:0 b.       NB. all 0s regardless
left=:3 b.        NB. ignore right argument
right=:5 b.       NB. ignore left argument
```

Combining these with the selection verbs above gives, e.g.

```   (A and B)t3
0 0 0 0 0 0 1 1
```

which is a ravelled (that is flattened) 3-dimensional truth table for A,B and C.

### The Special Case of ‘not’

‘not’ is dealt with separately because unlike the other binary verbs it is monadic. A compound verb such as not A is a hook in which the result of the selection verb must be processed by monadic -. (not) and not by dyadic -. (less). Imposing such a constraint is one of the main uses of [: (cap)

```   not=:[:-.]
(not A)t3
1 1 1 1 0 0 0 0```

Note: without cap the meaning of not A is all but the list A

```   (-. A)t3
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
```

It is now possible to compose logical expressions such as

```   (B imp(not C))t3
1 1 1 0 1 1 1 0
```

and to define a complex predicate involving three basic predicates as a verb to be applied to t3

```   P1=.(A imp(not B))and(B imp A)and(B imp C)
P1 t3
1 1 0 0 1 1 0 0
```

It is useful to be able to obtain the columns of t3 which correspond to 1 (truth) and 0 (falsity) through

```   T=:adverb : '#"1~x'          NB. truth adverb
(P1 T t3);P1 F t3
┌───────┬───────┐
│0 0 1 1│0 0 1 1│
│0 0 0 0│1 1 1 1│
│0 1 0 1│0 1 0 1│
└───────┴───────┘
```

where the first box defines the A, B and C attributes of individuals for whom the three propositions which began this article are consistent, and similarly the second box gives the attributes of those for whom the joint propositions are false.

### Sorites

A sorites is a series of propositions in which the predicate of one is the subject of the next, and the final proposition (conclusion) can be inferred from the rest. Lewis Carroll delighted in constructing nonsense sequences of this sort such as

 No ducks waltz All my poultry are ducks None of my poultry waltz

As before construct predicates such as:

 A It is a duck B It waltzes C It is one of my poultry

To confirm that this is a syllogism and thus a sorites, define

```   P2p=.(A imp(not B))and(C imp A)    NB. p=premisses
P2c=.C imp (not B)                 NB. c=conclusion
```

Then apply P2c to those elements of t3 for which P2p is true

```   P2c P2p T t3
1 1 1 1
```

which establishes that the set is indeed a syllogism. However same test applied to the earlier set of propositions at the head of this article fails

```   P1p=.(A imp (not C)) and (B imp A)
P1c=.B imp C
P1c P1p T t3
1 1 1 0
```

and the individual which causes failure of the syllogism test is identified by

```   P1p T t3
0 0 1 1
0 0 0 1
0 1 0 0
```

that is a Vector-reading American who does not eat haggis.

### Some Technicalities

The list above covers eleven binary verbs. The remaining five in the set are less immediately interesting :

```   not_left=:12 b.    NB. ignore right argument
not_right=:10 b.   NB. ignore left argument
not_imp=:2 b.      NB. not of (x implies y)
imp_not=:11 b.     NB. (not x) implies (not y)
not_imp_not=:4 b.  NB. not of imp_not
```

There are 16 fundamental arguments 0 to 15 for b.. To these 16 may be added or subtracted without affecting the result so that the permissible argument range covers _16 to 31. 32, 33 and 34 are also valid but relate specifically to bit/byte arithmetic (that is modulo two arithmetic discarding remainders), namely 32 (=rotate), 33 (shift) and 34 (signed shift).

The discussions so far have been analytic, that is they have consisted in testing combinations for consistency, which does not in itself increase knowledge. However synthetic information concerning relationships which are not directly connected in a single proposition amounts to advancing knowledge from what is already known, and can be obtained by defining

```   AB=:0 1&{
AC=:0 2&{
BC=:1 2&{    NB. etc., and

]t2=.binlist 2
0 0 1 1
0 1 0 1
```

whose columns (as rows) correspond in order to the marginal value combinations in the ‘flat’ representation of any of the 16 two by two truth tables. t2 is used to establish the presence (or absence) of its columns in pairs of rows of a larger truth table, thereby obtaining relationships between the corresponding propositions

```   whatrel=:monad : '2 #.t2 e.&|:y'
P3p=.(A eq B) and (B eq (not C))
whatrel AC P3p T t3
6
```

6 is the b. number for not equal and so the required relation is A eq (not C)as is reasonably obvious anyway. For the first set of propositions the B/C relation is given by

```   whatrel BC P1p T t3
14
```

that is by B nand C, or equivalently

```
CB=:2 0&{
whatrel CB P1p T t3
13
```

that is C imp B.

These are demonstrated by

```   P4p=.(A eq B)or (B eq (not A))
whatrel AB P4p T t2
15
P5p=.(A eq B)and (A xor B) NB.xor=synonym for not equals
whatrel AB P5p T t2
0```

### Further possibilities

Applying the syllogism test to

 All men are good All men are loyal All women are bad

using

 A It is a man B It is good C It is loyal

gives

```   P6p=.(A imp B) and (A imp C)
P6c=.(not A) imp (not B)
P6c P6p T t3        NB. syllogism test
1 1 0 0 1
```

which fails for the reasonably obvious reason that the premisses say nothing about women (i.e. not-men). Also there is no explicit connection between goodness and loyalty

```   whatrel BC P6p T t3
15
```

that is, goodness and loyalty are synonymous for men (tautology). However

```   P6=.(A imp B) and (A imp C) and ((not A)imp(not B))
whatrel BC P6 T t3
13                      NB. says goodness implies loyalty
whatrel CB P6 T t3
11                      NB. says disloyalty implies badness
```

These last two results do not rule out the possibility of badness and loyalty occurring together (in a woman) as is made explicit by

```    P6p T t3
0 0 0 0 1
0 0 1 1 1
0 1 0 1 1
```

Makes you think…!!

### Code Summary

```binlist=:monad : '|:#:i.2^y'        NB. bin nos to 2^y in cols
A=:0&{                              NB. select first
B=:1&{
C=:2&{
and=:1 b.
or=:7 b.
imp=:13 b.                          NB. implies
eq=:9 b.                            NB. equals
xor=:6 b.                           NB. exclusive or
nand=:14 b.                         NB. not and
nor=:8 b.                           NB. not or
true=:15 b.                         NB. all 1s regardless
false=:0 b.                         NB. all 0s regardless
left=:3 b.                          NB. ignore right argument
not_left=:12 b.                     NB. ignore right argument
not_right=:10 b.                    NB. ignore left argument
not_imp=:2 b.                       NB. not of (x implies y)
imp_not=:11 b.                      NB. (not x) implies (not y)
not_imp_not=:4 b.                   NB. not of imp_not
right=:5 b.                         NB. ignore left argument