論理代数(ブール代数)の多変数へ
  の拡張と応用について(荒井公康著)
     (論理学と代数学の同型性を巡って)
     (ブール代数を非線形重回帰分析すると?)
     (ウィトゲンシュタインもあきらめた
      論理定項の数学的意味を発見!)
     (実験計画法の直交表と論理代数の真理値表の類似性)
     (実験計画法への非線形重回帰分析の適用
                     :材料開発への応用)
     (水溶液の話)
     (避雷器、バリスターの話)
     (科学技術の話)
     (シェファーのストローク:NAND回路への書き換え)
     (命題定理の自動証明)
     (ブール代数と神経回路網の同型性)
     (人工知能のコネクショニズムとの関係)
        
付録:実験計画法の解析手法への応用  
                付論1 付論2 付論3 付論4 付論5
             ニューラルネットワークとの関連 
                ブール代数&神経回路網
                 ブール環

Googleで「ブールの論理代数」のキーワードで検索すると、Wi
kipediaについで、2番目と3番目に私のサイトが出てくる。多
分、読者も増えてのことと思い、嬉しく思っている。なにか認めて頂い
たようで、大変に嬉しい。
数学科以外の学科で教えられる数学は、線形理論が多いので、わかりに
くいかも知れないが、論理関数や論理変数に使われる、0,1という数
字を普通の数字と考えて、重回帰分析をすると、ブールの論理代数(ブ
ール代数)は極めて非線形な数式となることが分かる。排他的論理和な
どを表す多変数のブール代数を表す数式を見たことのある人はいないは
ずである。論理和ならばあるかもしれない。このような数学は、実験計
画法などの解析にも威力を発揮する。実験計画法で問題にされる交互作
用も非線形項を考慮したもので、実験結果を非線形項を考慮した数式で
まとめれば、予測計算などに極めて有効な手段となる。非線形ならば偏
微分という操作が可能になるので、最適化方向も見つけやすくなる。線
形の式では精度が落ちるし、平均値としての最適化方向しか明らかにな
らない。実験水準に応じた最適化方向を見出すには、非線形分析をしな
ければならない。よく知られているブール代数の公理系が、一般の代数
と異なるのは、論理(演算)というものが、数式で表すと、極めて非線
形なためである。非線形の数学は難しく、私にも専門外でよく分からな
いが、私の投稿がきっかけになればと願っている。新しい数学の一分野
に発展すればよいと願っている。
排他的論理和などは、線形分離不可能で、人工的なニューラルネットワ
ークでは、中間層を挿入し、バックプロパゲーションの手法で、問題の
解決を行っているが、学習に時間がかかる。ここでは、そのようなこと
も関係している。

論理関数の基本的なものに論理和OR、論理積AND、排他的論理和E
-ORなどがある。2変数の場合、

     論理和OR        論理積AND 
      A  B  A∨B    A  B  A∧B
       1  1   1     1  1   1 
    1  0   1     1  0   0
    0  1   1     0  1   0
    0  0   0     0  0   0

      排他的論理和
    A  B  A●B
    1  1   0
    1  0   1
    0  1   1
    0  0   0

        含意→(ならば)
    A  B  A→B
    1  1   1
    1  0   0
    0  1   1
    0  0   1

含意の論理関数は理解しにくいかも知れないが、A→Bは
「(Aでない)∨B」や、A∧(Bでない)」ことはない、などに翻
訳できる。これらの論理関数は通常の四則演算で表すことができる。
(ブール環)

         A∨B=a+b-ab   A∧B=ab  A●B=a+b-2ab
          A→B = 1-a+b-(1-a)b = -a+ab+1

 次に、変数の数を増やしていく。
       A∨B∨C=a+b+c-ab-bc-ca+abc
       A∨B∨C∨D=a+b+c+d-ab-ac-ad-bc-bd-cd
                          +abc+acd+abd+bcd-abcd
            ・・・・・・・・・

         A●B●C=a+b+c-2ab-2ac-2bc+4abc
       A●B●C●D=a+b+c+d-2ab-2ac-2ad-2bc-2bd-2cd
                          +4abc+4acd+4abd+4bcd
                          -8abcd
            ・・・・・・・・

         A∧B∧C=abc

これらが成立していることは容易に確かめられるが、直接証明するのは
難しい。しかも、任意の論理関数に応用するのに役立たない。一般に
n変数では2のn乗個の項が出てくるが、これらの項の係数を別の方法
で求めることを考える。排他的論理和の場合、

        n=2の時
           a  b   ab         a●b
           1 1 1 1  a1      0
           1 0 0 1  a2  =   1
           0 1 0 1  a3      1
           0 0 0 1  a4     0
             ↑      ↑
            行列   項の未知係数

この連立方程式を解く(この連立方程式はそのままでは解けない。重回
帰分析の場合と同じように正規方程式を求めると解ける)と、a1=1
,a2=1,a3=-2,a4=0となり、確かに

           a●b=a+b-2ab

となっていることがわかる。同じ手法で任意の多変数論理関数を加減乗
法で表現できる。下に示したLispプログラムは4変数の場合の任意
の論理関数の計算式を求めるためのものである。例えば次のような出鱈
目な論理関数に対して次の計算式が得られる。

            a  b  c  d           論理関数F
            0 0 0 0            1
            0 0 0 1            0
            0 0 1 0            1
            0 0 1 1            1
            0 1 0 0            1
            0 1 0 1            1
            0 1 1 0            0
            0 1 1 1  →          1
            1 0 0 0            0
            1 0 0 1            0
            1 0 1 0            0
            1 0 1 1            1
            1 1 0 0            0
            1 1 0 1            1
            1 1 1 0            0
            1 1 1 1            1

論理関数Fは、なんと

    F=-a-d+ad-bc+bd+cd+abc-abcd+1.0

と表される。このような論理関数の種類は 2^(2^4)=65536 通りある
(4変数の場合)。これはニューラル・ネットワークが行っているこ
と等価である。学習時間は現実には必要ない利点もある。応用範囲は
極めて広いものと考えられる。

今までは、変数値も論理関数値も1、0の値に限っていたが、実数値
に拡張することにより、任意の多変数非線形関数を近似的に表現可能
である。多変数非線形関数の最適化という難問にもぶつかるが、私は
個人的に材料開発において材料特性と組成成分の関係をこの方式で求
め、最適化によって成果を挙げた経験がある。

読者諸氏の経験に基づいて、応用されることを希望する。数学的にも
面白いテーマであり、更に考察を進めるつもりである。

これに対して、

     F = A1a+A2b+A3c+A4d+A5  (A1~A5は定数)

の如き回帰式で近似しようとするのは、間違いである。また、変数 a
,b,c,d 以外の変数は自然科学では厳密に固定できるが、人間や社会を
対象とした場合は、そような理想化は不可能である。ある要因につい
て調べているつもりでも他の考慮外の要因の効果の排除は原理的に不
可能である。言い換えれば、人間や社会に対しては一つの要因につい
て偏微分することは不可能なのである。また要因間には相互作用があ
り、一つの要因を調べれば、多数の他の要因が関与してきて、どの要
因が関与しているかの正確な把握は、人間や社会を対象とした場合、
不可能である。

;;; 
;;; c:\\program files\\acl62\\kaiki.cl 
;;; 
(defun read-sentence () 
  (let ((input (make-string-input-stream (read-line)))) 
    (unwind-protect 
     (progn 
      (do ((word (read input nil) (read input nil)) 
         (sentence nil))
         ((not word) (return (reverse sentence))) 
         (push word sentence))) 
       (close input)))) 
        
(defun set-data ()   (setf a (make-array '(16 16) :initial-element nil))   (setf a2 (make-array '(16 17) :initial-element nil))   (setf b (make-array '(16 1) :initial-element nil))   (setf n (make-array '(16 1) :initial-element nil))   (setf (aref n 0 0) 'a)   (setf (aref n 1 0) 'b)   (setf (aref n 2 0) 'c)   (setf (aref n 3 0) 'd)   (setf (aref n 4 0) 'ab)   (setf (aref n 5 0) 'ac)   (setf (aref n 6 0) 'ad)   (setf (aref n 7 0) 'bc)   (setf (aref n 8 0) 'bd)   (setf (aref n 9 0) 'cd)   (setf (aref n 10 0) 'abc)   (setf (aref n 11 0) 'acd)   (setf (aref n 12 0) 'abd)   (setf (aref n 13 0) 'bcd)   (setf (aref n 14 0) 'abcd)   (setf (aref n 15 0) "") ;;; ;;;  a:0 b:1 c:2 d:3 ;;;   (setf (aref a 0 0) 0) (setf (aref a 0 1) 0) (setf (aref a 0 2) 0) (setf (aref a 0 3) 0)   (setf (aref a 1 0) 0) (setf (aref a 1 1) 0) (setf (aref a 1 2) 0) (setf (aref a 1 3) 1)   (setf (aref a 2 0) 0) (setf (aref a 2 1) 0) (setf (aref a 2 2) 1) (setf (aref a 2 3) 0)  (setf (aref a 3 0) 0) (setf (aref a 3 1) 0) (setf (aref a 3 2) 1) (setf (aref a 3 3) 1)   (setf (aref a 4 0) 0) (setf (aref a 4 1) 1) (setf (aref a 4 2) 0) (setf (aref a 4 3) 0)   (setf (aref a 5 0) 0) (setf (aref a 5 1) 1) (setf (aref a 5 2) 0) (setf (aref a 5 3) 1)   (setf (aref a 6 0) 0) (setf (aref a 6 1) 1) (setf (aref a 6 2) 1) (setf (aref a 6 3) 0)   (setf (aref a 7 0) 0) (setf (aref a 7 1) 1) (setf (aref a 7 2) 1) (setf (aref a 7 3) 1) (setf (aref a 8 0) 1) (setf (aref a 8 1) 0) (setf (aref a 8 2) 0) (setf (aref a 8 3) 0)   (setf (aref a 9 0) 1) (setf (aref a 9 1) 0) (setf (aref a 9 2) 0) (setf (aref a 9 3) 1)   (setf (aref a 10 0) 1) (setf (aref a 10 1) 0) (setf (aref a 10 2) 1) (setf (aref a 10 3) 0)   (setf (aref a 11 0) 1) (setf (aref a 11 1) 0) (setf (aref a 11 2) 1) (setf (aref a 11 3) 1)   (setf (aref a 12 0) 1) (setf (aref a 12 1) 1) (setf (aref a 12 2) 0) (setf (aref a 12 3) 0)   (setf (aref a 13 0) 1) (setf (aref a 13 1) 1) (setf (aref a 13 2) 0) (setf (aref a 13 3) 1)   (setf (aref a 14 0) 1) (setf (aref a 14 1) 1) (setf (aref a 14 2) 1) (setf (aref a 14 3) 0)   (setf (aref a 15 0) 1) (setf (aref a 15 1) 1) (setf (aref a 15 2) 1) (setf (aref a 15 3) 1) ;;; 定数項   (do ((i 0 (1+ i)))      ((> i 15))    (setf (aref a i 15) 1)) ;;; ab   (do ((i 0 (1+ i)))      ((> i 15))    (setf (aref a i 4) (* (aref a i 0) (aref a i 1)))) ;;; ac   (do ((i 0 (1+ i)))      ((> i 15))    (setf (aref a i 5) (* (aref a i 0) (aref a i 2)))) ;;; ad   (do ((i 0 (1+ i)))      ((> i 15))    (setf (aref a i 6) (* (aref a i 0) (aref a i 3)))) ;;; bc   (do ((i 0 (1+ i)))     ((> i 15))    (setf (aref a i 7) (* (aref a i 1) (aref a i 2)))) ;;; bd   (do ((i 0 (1+ i)))      ((> i 15))    (setf (aref a i 8) (* (aref a i 1) (aref a i 3)))) ;;; cd   (do ((i 0 (1+ i)))      ((> i 15))    (setf (aref a i 9) (* (aref a i 2) (aref a i 3)))) ;;; abc   (do ((i 0 (1+ i)))      ((> i 15))    (setf (aref a i 10) (* (aref a i 0) (aref a i 1) (aref a i 2)))) ;;; acd   (do ((i 0 (1+ i)))     ((> i 15))    (setf (aref a i 11) (* (aref a i 0) (aref a i 2) (aref a i 3)))) ;;; abd   (do ((i 0 (1+ i)))      ((> i 15))    (setf (aref a i 12) (* (aref a i 0) (aref a i 1) (aref a i 3)))) ;;; bcd   (do ((i 0 (1+ i)))      ((> i 15))    (setf (aref a i 13) (* (aref a i 1) (aref a i 2) (aref a i 3)))) ;;; abcd   (do ((i 0 (1+ i)))      ((> i 15))    (setf (aref a i 14) (* (aref a i 0) (aref a i 1) (aref a i 2) (aref a i 3)))) ;;; ;;; ;;;  (do ((j 0 (1+ j)))    ((> j 15))    (do ((i 0 (1+ i))      (s 0))    ((> i 15) (setf (aref a2 0 j) s))     (setf s (+ s (aref a i j))))) ;;; ;;; ;;;   (do ((l 0 (1+ l)))     ((> l 14))    (do ((j 0 (1+ j)))       ((> j 15))      (do ((i 0 (1+ i))          (s 0))         ((> i 15) (setf (aref a2 (1+ l) j) s))         (setf s (+ s (* (aref a i l) (aref a i j)))))))) ;;; ;;; ;;; (defun input-1-or-0 ()   (do ((i 0 (1+ i)))     ((> i 15))    (format t "~%No.~a~%" (1+ i))    (setf (aref b i 0) (car (read-sentence))))) (defun solve-aux ()   (input-1-or-0)   (do ((i 0 (1+ i))     (s 0))    ((> i 15) (setf (aref a2 0 16) s))     (setf s (+ s (aref b i 0))))   (do ((l 0 (1+ l)))      ((> l 14))     (do ((i 0 (1+ i))        (s 0))        ((> i 15) (setf (aref a2 (1+ l) 16) s))       (setf s (+ s (* (aref a i l) (aref b i 0)))))))
(defun convert-l-to-a ()   (prog ()    (set-data)   (solve-aux)    (do ((k 0 (1+ k)))      ((> k 15))      (setf w (aref a2 k k))       (setf k1 (1+ k))      (do ((j k1 (1+ j)))        ((> j 16))         (setf (aref a2 k j) (/ (aref a2 k j) w)))       (do ((i 0 (1+ i)))          ((> i 15))         (cond ((not (equal i k))              (setf w (aref a2 i k))             (do ((j k1 (1+ j)))                ((> j 16))                (setf (aref a2 i j) (- (aref a2 i j) (* (aref a2 k j) w) )))))))     (do ((i 0 (1+ i)))        ((> i 15))       (format t "~%No.~a ~a~a" (1+ i)             (float (aref a2 i 16)) (aref n i 0))))
ここで実験計画法への分散分析に替わる回帰分析の応用を考える。一部
実施計画で直交表L16(2-15)を用いた場合に、全ての交互作用が求まる
ように実験の割り付けを行うと、次のような実験配置になる。

    a    b    c   d   e         実験結果No.
    0   0   0   0   0          1
    0   0   0   1   1          2
    0   0   1   0   1          3
    0   0   1   1   0          4
    0   1   0   0   1          5
    0   1   0   1   0          6
    0   1   1   0   0          7
    0   1   1   1   1          8
    1   0   0   0   1          9
    1   0   0   1   0          10
    1   0   1   0   0          11
    1   0   1   1   1          12
    1   1   0   0   0          13
    1   1   0   1   1          14
    1   1   1   0   1          15
    1   1   1   1   0          16

この実験配置に対して、上のプログラムを少し修正して計算すると次の 形の回帰式が得られる。

実験結果=A1a+A2b+A3c+A4d+A5e     +A6ab+A7ac+A8ad+A9ae      +A10bc+A11bd+A12be      +A13cd+A14ce     +A15de      +A16 係数A1からA16は次のプログラムで求まる。 10 'The name of this program is L16 20 CLS :SCREEN 4 30 LOCATE 5,5 :INPUT "Enter the name of data." A$ 40 N=16 50 M=15 60 DIM B(50),R(50,25),A(50,25),B$(50),C(50,25) 70 X=16 80 ' 90 FOR I=1 TO 16 :A(I,16)=1 :NEXT I 100 A(1,1)=0:A(1,2)=0:A(1,3)=0:A(1,4)=0:A(1,5)=0 110 A(2,1)=0:A(2,2)=0:A(2,3)=0:A(2,4)=1:A(2,5)=1 120 A(3,1)=0:A(3,2)=0:A(3,3)=1:A(3,4)=0:A(3,5)=1 130 A(4,1)=0:A(4,2)=0:A(4,3)=1:A(4,4)=1:A(4,5)=0 140 A(5,1)=0:A(5,2)=1:A(5,3)=0:A(5,4)=0:A(5,5)=1 150 A(6,1)=0:A(6,2)=1:A(6,3)=0:A(6,4)=1:A(6,5)=0 160 A(7,1)=0:A(7,2)=1:A(7,3)=1:A(7,4)=0:A(7,5)=0 170 A(8,1)=0:A(8,2)=1:A(8,3)=1:A(8,4)=1:A(8,5)=1 180 A(9,1)=1:A(9,2)=0:A(9,3)=0:A(9,4)=0:A(9,5)=1 190 A(10,1)=1:A(10,2)=0:A(10,3)=0:A(10,4)=1:A(10,5)=0 200 A(11,1)=1:A(11,2)=0:A(11,3)=1:A(11,4)=0:A(11,5)=0 210 A(12,1)=1:A(12,2)=0:A(12,3)=1:A(12,4)=1:A(12,5)=1 220 A(13,1)=1:A(13,2)=1:A(13,3)=0:A(13,4)=0:A(13,5)=0 230 A(14,1)=1:A(14,2)=1:A(14,3)=0:A(14,4)=1:A(14,5)=1 240 A(15,1)=1:A(15,2)=1:A(15,3)=1:A(15,4)=0:A(15,5)=1 250 A(16,1)=1:A(16,2)=1:A(16,3)=1:A(16,4)=1:A(16,5)=0 260 FOR I=1 TO 16 270    A(I,6)=A(I,1)*A(I,2) 280    A(I,7)=A(I,1)*A(I,3) 290    A(I,8)=A(I,1)*A(I,4) 300    A(I,9)=A(I,1)*A(I,5) 310    A(I,10)=A(I,2)*A(I,3) 320    A(I,11)=A(I,2)*A(I,4) 330    A(I,12)=A(I,2)*A(I,5) 340    A(I,13)=A(I,3)*A(I,4) 350    A(I,14)=A(I,3)*A(I,5) 360    A(I,15)=A(I,4)*A(I,5) 370 NEXT I 380 B$(1)=" 1" :B$(2)=" 2" :B$(3)=" 3" :B$(4)=" 4" 390 B$(5)=" 5" :B$(6)=" 6" :B$(7)=" 7" :B$(8)=" 8" 400 B$(9)=" 9" :B$(10)="10" :B$(11)="11" :B$(12)="12" 410 B$(13)="13" :B$(14)="14" :B$(15)="15" :B$(16)="16" 420 FOR I=1 TO 16 430    PRINT "B(";I;")=";:INPUT B(I) 440 NEXT I 450 FOR J=1 TO 16 460     S=0 470     FOR I=1 TO 16 :S=S+A(I,J) :NEXT I 480     R(I,J)=S 490 NEXT J 500 ' 510 FOR L=1 TO 15 520     FOR J=1 TO 16 530     S=0 540     FOR I=1 TO 16 :S=S+A(I,L)*A(I,J) :NEXT I 550     K=L+1 :R(K,J)=S 560     NEXT J 570 NEXT L 580 S=0 590 FOR I=1 TO 16 :S=S+B(I) :NEXT I 600 R(1,17)=S 610 FOR L=1 TO 15 620     S=0 630     FOR I=1 TO 16 :S=S+A(I,L)*B(I) :NEXT I 640     K=L+1 :R(K,17)=S 650 NEXT L 660 ' 670 FOR K=1 TO 16 680    W=R(K,K) 690    K1=K+1 700    FOR J=K1 TO 17 710        R(K,J)=R(K,J)/W 720    NEXT J 730    FOR I=1 TO 16 740        IF I=K THEN 790 750        W=R(I,K) 760        FOR J=K1 TO 17 770            R(I,J)=R(I,J)-R(K,J)*W 780        NEXT J 790    NEXT I 800 NEXT K 810 CLS 820 PRINT "*****";A$;"*****" 830 PRINT "A(n,1)X(1)+A(n,2)X(2)+ ........ +A(n,m-1)X(m-1) +A(n,m)X(m)+A(n,m+1)" 840 PRINT " A(1) A(2) A(m-1) A(m) A(m+1) 850 PRINT "m=";16 860 FOR I=1 TO 16 :PRINT "A(";I;")=";R(I,17) :NEXT I 870 END ここでA1~A16は計算によって得られる定数である。こうして得られた実 験式は忠実に実験結果を反映しており、最急傾斜法や遺伝的アルゴリズ ム(GA)などの非線形最適化手法を適用することにより、実験対象の 特性の制御に有効に使える。また要因間の相互作用も明らかになり、分 析的にも有意義である。要因 a を単位当たり動かした時の効果は上式 を a で偏微分すればよい。計算式Faは    Fa=A1+A6b+A7c+A8d+A9e となる。A6,A7,A8,A9はそれぞれ要因 a と要因 b,c,d,eとの相互作用の 大きさの目安となる。同様にbの場合はFb=A2+A6a+A10c+A11d+A12e、cの 場合はFc=A3+A7a+A10b+A13d+A14e、dの場合はFd=A4+A8a+A11b+A13c +A15e、eの場合はFe=A5+A8a+A12b+A14c+A15dが偏微分値である。この場 合、最急傾斜法による最適化方向は、5次元ベクトル(Fa Fb Fc Fd Fe)で表される。 以上は脳のモデルとされる神経回路網を数学的に見直したものである。 要因ないし変数を一個の神経細胞と見なせば脳はこのようなアナログの ネットワークから構成されており、デジタルを含む世界を弁別するよう に自己組織化するものと思われる。係数は正負の値を取り、神経細胞間 の結合の強さの目安である。今までの計算はアナログとデジタルを結び 、論理と代数をつなぐものである。 以上は数式を使って計算することは、論理的に思考することに等しいこ とを示す一例である。計算には論理が組み込まれているのである。 付論1:化学と数学と非線形性について 濃硫酸には強力な脱水作用があり、これは硫酸分子と水の分子が強く結 合するためで、水をふ含まない炭水化物からも、水素原子と酸素原子を 2対1の比率でうばい、それらを黒く炭化します。濃硫酸は空気中の水分 を吸収するため、乾燥剤として利用され、小生も学生の時、実験系に乾燥 した空気を送り込むために、硫酸のトラップを作ったことがあります。硫 酸と水とが混合すると激しく発熱し、多量の硫酸に水をそそぐと、加えた 水が沸騰し硫酸をとびちらせるので危険で、多量の水に硫酸を少しずつ加 えて希釈しなければならないことは、よく知られています。熱力学では溶 解熱という概念があり、普通1モルの物質が液体に溶解するときに発生ま たは吸収する熱量のことを言います。気体が液体や水に溶解する時は発熱 が多いようです。硫酸、水酸化ナトリウム、エタノールなどが水に溶解す る時は発熱、食塩、塩化アンモニウムの場合は吸熱となり、物質により異 なります。また、溶液に溶媒を加えてうすめた時の、溶質1モル当たりの 熱量の変化を希釈熱といい希釈熱は溶液の濃度がうすいほど小さくなりま す。希釈熱は電解質、高分子溶液において、溶液中の電解質イオンや高分 子などの溶質ー溶質、溶質ー溶媒間の相互作用に関する情報をふくんでい るので、物理化学の溶液論では重要な量です。以上は辞書にも書いてある ことでしょう。さて、溶解熱では積分溶解熱(integral heat of solution)と微分溶解熱(differential heat of solution) とを区別する必要があります。いままで熱量という言葉を使ってきました が、厳密に言うとエンタルピーという言葉を使う必要があります。硫酸の 話に戻りますが、硫酸を絶えず攪拌しながら水にゆっくりと注いでいくと 溶液はだんだんと暖かくなりますが、終わりに近づいてかなり濃厚な溶液 に硫酸を加えるようになると加熱速度はずっと遅くなります。n1モルの水 に1モルの硫酸を加えた時のエンタルピー変化を、特定の最終組成の溶液 を作るための硫酸1モルあたりの積分溶解熱と呼びます。この値は溶液の 濃度が小さいほど大きくなり、硫酸の場合、-96.19kJ/モルに収束します。 この極限値を無限希釈への積分溶解熱 integral heat of solution to infinitedilution)と呼びます。 積分溶解熱を硫酸と水のモル比に対してプロットすると、グラフが得られ ます。このグラフのある組成での勾配が微分溶解熱と呼ばれます。ある組 成の溶液に対して、溶質を無限小変化させたときの積分溶解熱変化を微分 溶解熱と考えてもよいです。化学の中にも随分と数学的概念が入っていま す。これは、一般に現象が非線形であるためでしょう。硫酸水溶液といっ た単純な系でさえ、濃度によって振る舞いが異なります。 付論2:送変電システムに組み込まれる機能性セラミックの組成計算 小生が、T社にいた時に従事していた仕事ですが、これは「避雷器」とい う装置に関するものでした。「雷」という言葉が入っていますが、避雷針 とか雷と直接関係のあるものではありません。送変電システムでは、変圧 器、遮断器、断路器、避雷器などが、主に構成要素になっています。避雷 器とは、送変電系統において、交流系統電圧が印加された状態で、雷サー ジ電圧が伝播してきた場合、直ちにこれを放電して線路の電圧を機器耐電 圧以内に制限し、かつ雷サージのエネルギーを十分放出するとともに、機 圧による続流は、これを遮断する自復能力を有し、開閉サージに対しても 動作責務の範囲内で十分エネルギーを処理するものです。系統を保護する ため、毎相対地間に接続される避雷器は異常電圧を一定値以内に抑制する 能力があるため、系統の絶縁構成を決定する基準となります。簡単に言う と、避雷器は、発電所や変電所や電信柱の変圧器などを、異常電圧から保 護する装置です。低い電圧に対しては絶縁体として振る舞いますが、高い 電圧に対しては、抵抗が急激に抵抗値が低くなり、放電するような装置で す。異常電圧が発生する理由ですが、落雷、遮断器の作動、送電線の地絡 事故などが挙げられます。落雷があると、異常電圧が発生し、それが送電 線に伝播します。遮断器というのは、超大型のスイッチのようなもので、 小さな回路でも、スイッチを点けたり離したりすると火花が飛びますが、 大電力では電力を遮断するだけで、高度な技術を要します。大電力では、 遮断しても、アークの続流が空気中を継続して流れ、これを切断するため には、強力な空気流を吹き付けるとか、磁場を掛けるとかして、吹き消さ なければならないのです。実際、何十年も大型のスイッチ(遮断器)を開 閉する技術を開発するため、毎日遮断機をつけたり離したりといった部門 もありました。もちろん手動ではなく、遠隔操作です。大電力を無理やり 遮断した時も異常電圧が発生します。送電線はもちろん金属ですし、大地 も導体ですから、送電線と大地とは、大きな容量のコンデンサを形成し、 大量の電荷を蓄えています。したがって、何かの原因で送電線が切れて、 大地に接地すれば、電荷が放出され異常電圧が発生します。これらの異常 電圧から、変電所などの設備を絶縁破壊から守るのが「避雷器」なのです 。これだけのことをする装置ですから、さぞや高度で複雑な装置だろうと 思われるかも知れませんが、実際は大型のバリスターと呼ばれる機能性セ ラミックを積み重ねた単純な装置です。小生はこのバリスターの、いろい ろな特性を制御する仕事をやっていました。バリスターとは非直線抵抗体 とも呼ばれ、オームの法則には従わない抵抗体です。電圧が低い状態では 絶縁体として振舞うのですが、電圧が高くなるにつれて、急激に抵抗値が 低くなっていくような、不思議な抵抗体です。主成分ZnOにBi2O3, Sb2O3,NiO,Co2O3,MnO,Cr2O3,SiO2、 Al2O3,B2O3,Ag2Oなどを添加して作ります。10種類程度 の酸化物の成分ですから、随分と複雑な系です。これらの成分の濃度を動 かして、特性を制御していました。話としては単純に聞こえるかもしれま せんが、労力のいる作業で、4~5個の成分を動かした場合、成分間の相 互作用があるので、計算機を使わないと解析できませんでした。この時、 実験計画法というものを多用しました。(既に説明しましたね。)避雷器 用のバリスターは、優れた電気的特性、課電寿命特性(長時間電圧が印加 されても熱暴走しない)、放電耐量特性(大電流が流れても破壊しない)、 が要求されます。電気的特性としては、なるべく非直線性の強いバリスタ ーが求められます。避雷器には系統電圧が常時印加されるために、漏れ電 流が流れるのですが、これが発熱原因となって、さらに抵抗が低くなり、 更に発熱し、・・・と悪循環に陥り、熱暴走しないことが求められます。 これが課電寿命特性です。また、大型のバリスターであるために、不均一 になりがちで、抵抗の低いところに電流が集中し発熱することにより、高 温を発し、周りに熱応力を生ずるために、大電流が流れた時に破壊してし まうバリスターもあります。これが、放電耐量特性です。なるべく均一性 の高いバリスターを作る技術が求められます。 以上が、大体、T社で従事していた仕事の内容です。私自身も理科系であ りながら、入社するまで、「避雷器」なるものの存在さえ知りませんでし た。理科系とは本当に広く深い世界だと思います。バリスター自身は、特 に小型のものは、あらゆる機器に組み込まれているといっても過言ではあ りません。高い電圧に耐えられない部品の前には、必ずバリスターが使わ れます。 付論3:科学技術の営みの実際について 不可知論とは、辞書によれば、「意識に与えられる感覚的経験の背後にあ る実在は論証的には認識できないという説。そういう実在を認める立場と 、その有無も不確実とする立場がる。」とあります。不可知論が上記のよ うなものだとすれば、自然科学は全く正反対の方向で考えています。まず 、素朴実在論を前提にしており、実在を論証しようとするわけではありま せん。そんなことが不可能なのは自明です。まず実在を無条件に認め、実 在ないし、そこから派生する現象を把握し記述するのが自然科学であり、 その知見を応用するのが技術です。不可知論が上記のもののようなものな らば、観念論の一種であり、自然科学の実在論とは対立するものです。観 念論と実在論は両立しません。どちらかを破棄しなければなりません。独 我論、不可知論などの観念論を聞いて、理解できないわけではありません が、現実離れした話にしか聞こえません。もしこのような主張ばかりなら ば、哲学は百害あって一利なしの、危険な学問でしょう。
何故このようなことを言ったかというと、ある哲学系MLで、量子力学に おける観測問題を不可知論と勘違いした挙句、奇妙な問題提起がなされた からです。量子力学における観測問題はハイゼンベルクの不確定性原理か ら派生する現象で、数式で示すことができます。科学技術の営みの本質に ついては、このページを全部読んで頂ければ、自明と思いますが、注意を 喚起するためにも、ここで補足しておきたいと思います。 付論4:シェファーのストローク(縦棒演算)について シェファー(H.M.Sheffer)は、1913年に、唯一つの論理 記号を用いて、否定、論理積、論理和、含意、双条件を表す方法を導いた 。p|qは、p、qがともに真のときにかぎって偽となる、天邪鬼な演算 である。         p  q   p|q         1  1    0         1  0    1         0  1    1         0  0    1 別の表現では         p|q = ¬(p∧q) = ¬p∨¬q シェファーのストロークを使うと 否定は ¬p = p|p 論理和は p∨q = (p|p)|(q|q) となることは、真理表を使ってもわかるが、次のようにしても導くこと ができる。    p|p = ¬p∨¬p = ¬p    (p|p)|(q|q) = (¬p)|(¬q)  = (¬¬p)∨(¬¬q)  = p∨q 良く知られているように、論理積、含意、双条件は否定と論理和で表され るから、それらをシェファーのストロークで表すことができる。良く分か らなかったかも知れないが、現代的な言葉で言えば、シェファーのストロ ークとはNAND回路のことである。上に書いたことは、昔の記号論理学 の教科書に書いてあることである。上のことを現代的な言葉で言い直せば 、次のようになる。NAND回路の入力側を一つにまとめてしまうと NOT回路になる。NAND回路の出力をNOT回路で反転すれば AND回路になる。NAND回路一つとNOT回路二つでOR回路を作る ことができる。論理回路を設計するときにはデジタルICを使うが、論理 回路の種類が多いと、ICもその種類だけそろえなければならない。しか し、NAND回路のICが一種類あれば、AND回路やOR回路、NOT 回路をNAND回路の組み合わせで構成でき、部品の種類が少なくて済み 、とても便利である。 このように、ある論理記号をもとにとって、他の 論理演算、従って論理式を表すということは、論理的な問題であるととも に、計算機の製作の上でも重要な課題のひとつであった。  シェファーのストロークに関しては、ヴィトゲンシュタインの「論理哲 学論考」などにも言及がある。 論理哲学論考5・511 すべてを包括し、世界を反映する論理が、かくも特殊なかぎ針と運針でこ と足りるのはなぜか。ひとえにこれらすべてが、限りなく精巧な網目細工 へと、世界を映す巨大な鏡へと、編みあげられるからだ。  任意の論理回路のNAND回路への変換は、下記のLisp関数で行え る。再帰を用いている。 (defun rewrite (l)  (cond ((atom l) l)    ((equal (first l) 'NAND)      (list 'NAND         (rewrite (second l))        (rewrite (third l))))     ((equal (first l) 'NOT)      (rewrite (list 'NAND (second l) t)))     ((equal (first l) 'AND)      (rewrite (list 'NOT             (list 'NAND (second l) (third l)))))     ((equal (first l) 'OR)      (rewrite (list 'NAND             (list 'NOT (second l))             (list 'NOT (third l)))))     ((equal (first l) 'XOR)      (rewrite (list 'AND             (list 'OR (second l) (third l))             (list 'OR                (list 'NOT (second l))                (list 'NOT (third l))))))     (t (list 'error l)))) バッククォートを使うと、次のようにもっと簡潔簡明に書ける。 (defun rewrite (l)   (cond ((atom l) l)      ((equal (first l) 'NAND)      `(NAND ,(rewrite (second l)) ,(rewrite (third l))))      ((equal (first l) 'NOT)      (rewrite `(NAND ,(second l) t)))      ((equal (first l) 'AND)      (rewrite `(NOT (NAND ,(second l) ,(third l)))))      ((equal (first l) 'OR)      (rewrite `(NAND (NOT ,(second l)) (NOT ,(third l)))))      ((equal (first l) 'XOR)      (rewrite `(AND (OR ,(second l) ,(third l)) (OR (NOT ,(second l)) (NOT ,(third l))))))      (t `(error ,l))))

命題論理の定理の自動証明も次のように簡潔に記述される。 (defun and-or-not (s)  (cond ((atom s) s)     ((equal (first s) 'NOT)     `(NOT ,(and-or-not (second s))))     ((equal (first s) 'AND)     `(AND ,(and-or-not (second s))        ,(and-or-not (third s))))     ((equal (first s) 'OR)     `(OR ,(and-or-not (second s))       ,(and-or-not (third s))))     ((equal (first s) '->)     `(OR (NOT ,(and-or-not (second s)))          ,(and-or-not (third s)))))) (defun de-morgan (s)  (cond ((atom s) s)     ((equal (first s) 'NOT)      (move-not (second s)))     ((equal (first s) 'AND)     `(AND ,(de-morgan (second s))        ,(de-morgan (third s))))     ((equal (first s) 'OR)     `(OR ,(de-morgan (second s))        ,(de-morgan (third s))))))
(defun move-not (s)  (cond ((atom s) `(NOT ,s))     ((equal (first s) 'NOT)      (de-morgan (second s)))     ((equal (first s) 'AND)     `(OR ,(move-not (second s))        ,(move-not (third s))))     ((equal (first s) 'OR)     `(AND ,(move-not (second s))        ,(move-not (third s))))))
;;; ;;; (prove '(OR a (NOT a)) ===> (OR a (NOT a)) ;;; (prove '(AND (-> a a) (-> b b))) ===> (AND (OR (NOT a) a) (OR (NOT b) b))) ;;; (defun prove (s)   (de-morgan (and-or-not s))) 付論5 ブール代数&神経回路網(ニューラルネットワーク) 以下、a,b,c,dは0または1の値をとる論理変数とする。また、次のよう に基底項を定義する。 n=2(変数の数が2の場合)の時 {a b ab} n=3(変数の数が3の場合)の時 {a b c ab ac bc abc} n=4(変数の数が4の場合)の時 {a b c d ab ac ad bc bd cd abc abd acd bcd abcd} このように基底項を定義すると任意のブールの論理代数の論理関数は      基底項の線形結合+定数項(1または0) で表される。n=2の場合の例を以下に挙げる。 論理和 A∨B=a+b-ab 論理積 A∧B=ab 排他的論理和 A●B=a+b-2ab 否定論理積 A NAND B=-ab+1 否定論理和 A NOR B=¬(A∨B) =¬A∧¬B =(1-a)(1-b)              =-a-b+ab+1 含意 A⇒B=¬A∨B=(1-a)+b-(1-a)b=-a+ab+1 n=3,n=4の場合の例をいくつか挙げると A∨B∨C=a+b+c-ab-bc-ac+abc A∨B∨C∨D=a+b+c+d-ab-ac-ad-bc-bd-cd             +abc+acd+abd+bcd             -abcd A●B●C=a+b+c-2ab-2bc-2ac+4abc A●B●C●D=a+b+c+d-2ab-2ac-2ad-2bc-2bd-2cd             +4abc+4acd+4abd+4bcd             -8abcd A∧B∧C=abc A∧B∧C∧D=abcd ここで、基底項について説明する。n=4の時、基底項は {(a b c d) (ab ac ad bc bd cd) (abc acd abd bcd) (abcd)} となる。このうち(ab ac ad bc bd cd)は4つの変数(a b c d)から 二つの異なる変数を選んだ場合の数で、全部で4から2個を選ぶ場合の 数4C2=4!/2!2!=6通りある。同様に(abc acd abd bcd)は4つから3 つを選ぶ場合の数で4!/3!=4通りある。 論理変数と神経細胞は同じではないが、共に0,1の値をとるものと抽 象化することにより、類比的に考察することができる。即ち、神経細胞 も0、1の値をとると仮定することができる。様々な論理関数が   基底項の線形結合+定数項(0または1) で表されることが分かったが、このうち、論理変数の積の形で現れる非 線形項は何を表すのであろうか。有名なヘッブの規則によれば、神経細 胞どうしで同時に発火する確率が高いほど、お互いの結合が強くなる。 すなわち、非線形項はヘッブの規則を表したものと考えられる。例えば 、ばらばらな神経細胞a,b,c,dがあったとすると、線形項と非線形項の組 み合わせにより、様々なパターンの論理関数が現れる。最初に、ばらば らな神経細胞がいくつかあった時に、学習、連合、条件付け、環境との 相互作用などにより、ヘッブの規則が適用され、非線形項が変化するこ とにより、神経細胞のアンサンブルの挙動が変化していくのである。 神経細胞の集団の挙動には、分子の集団などの運動とは異なり、ヘッブ の規則が適用され、非線形項の出現により、様々なパターンが現れるよ うである。 逆に、神経細胞が三つあるとする。それをa,b,cで表す。a,b,c個別では そのまま出力し、ヘッブの法則によりa,bの結合、c,bの結合、a,b,cの 結合が生まれ、全体としてそれらが抑制的に働くと仮定した場合の挙動 を示すためには、       a+b+c-ab-cb-abc の計算をすることになる。具体的には ________a__b__c__-ab_ -cb__ -abc_______ a+b+c-ab-cb-abc ________0__0__0___0_____0______0___________________0 ________0__0__1___0_____0______0___________________1 ________0__1__0___0_____0______0___________________1 ________0__1__1___0____-1_____ 0____ ______________1 ________1__0__0___0_____0______0___________________1 ________1__0__1___0_____0______0___________________2 ________1__1__0__-1 ____0______0___________________1 ________1__1__1__-1 ___-1 ____-1___________________0 のように論理関数のような挙動を示す。このように「基底項の線形結合 +定数項(1または0)」が全て論理関数になるわけではない。論理関 数になるためには、抑制性と興奮性の結合のバランスが必要である。 a,b,c,dなどは神経細胞ひとつの出力として考えてきたが、a,b,c,dなど には、アンサンブルとして論理関数として振舞う集団を代入することが できる。例えば、論理積A∧BのAに「P⇒Q]、Bに「Q⇒P」を代 入すれば、双条件と呼ばれる論理関数が現れる。すなわち、 A∧B=ab=(P⇒Q)∧(Q⇒P)=(-p+pq+1)(-q+pq+1) =pq-pq-p-pq+pq+pq-q+pq+1=-p-q+2pq+1=P⇔Q 論理変数ではなく、神経細胞の場合も類比的に考えることが可能である。 ここで、p^2=p,q^2=qとなることに注意。 次に、最も基本的な推論形式 P∧(P⇒Q)⇒Q も次のように証明で きる。    「P∧(P⇒Q)⇒Q」=1-p(1-p+pq)+p(1-p+pq)q                   =1-(p-p+pq)+(p-p+pq)q               =1-pq+pq=1 となり、この推論形式は恒真式(トートロジー)になることが分かる(三 段論法・肯定式)。他の推論形式も同様に計算される。 すべての大脳新皮質では神経細胞は層状に(I-VI層)配列されている 。神経結合は主として層に対して垂直に形成されるが、結合の様式は層に よって規定される。つまり、細胞がどの層にあるかによって、細胞が入力 を受け、出力を送る部位が大局的に規定される。信号を送り出す細胞(遠 心性細胞)はIII、V、VI層にあるが、III層は上位の大脳皮質に 、V層は大脳以外の下位の神経核に、VI層は下位の大脳皮質と中継核に それぞれ信号を送る。またIV層には中継核から信号を受ける細胞があり 、他の層の細胞はIV層の細胞を経由して信号を間接的に受ける。たとえ ば映像の形と運動の情報をそれぞれ伝えるXとY系の視神経の興奮性視覚 信号は単純型と複雑型に並列的に入力されることが示されている。また単 純型から複雑型への直列的な抑制結合があることも示され、興奮性と抑制 性神経回路の相互作用の結果として反応選択性が生れるとする考え方が提 案されている(並列モデル)。 ジョーク】脳の男女差
男性の脳の重さが女性の脳の重さよりも重いと知った時、私は思わず「勝 った!」と思ったが、イルカや象の例もあるので、脳の重さは決定打では なさそうだ。右脳と左脳を連絡する脳梁や前交連という部分は、男性より 女性のほうが大きいという。つまり、女性は右脳と左脳とで情報を男性よ りも上手くやりとりし、脳全体としてのパフォーマンスを向上させ、容量 を補っているらしい。分かりやすくするため、極端な式で表すと 男脳パワー = 右脳パワー + 左脳パワー  ー 0.06*(右脳パワー*左脳パワー) 女脳パワー = 右脳パワー + 左脳パワー  + 8956*(右脳パワー*左脳パワー) くらいになっているようだ。大きく分けて言うと、右脳は感情、左脳は論 理を司るので、女性がときとして見せる矛盾と不可解さも上の式で近似的 に理解できるかもしれない。ノーベル章を受賞した根岸英一さんが、教育 でも競争を重視するように提案したのも、女性を牽制してのことではなか ろうか。競争に興味を示すのは女性よりも男性に多いから、競争を強調す れば、まだ男性が優位に立てるとの計算があるのではないか。それが証拠 に、科学技術関連予算を巡る事業仕分けでも、「世界一じゃなくてはいけ ないんですか?」とふと本音を漏らした女性議員がいたではないか。いや 、男である私自身も、「世界一」派ではなく「オンリーワン」派なので、 世界一の連発はあまりよく分からないのだが。つまらないことでも、オン リーワンならば競わずしてナンバーワンだと思うのだが、ちと不精か。一 面から見れば、あの仕分けは男性原理と女性原理の対立に見えた。女性の 社会への進出は目覚しいものがある。その勢いで私のような人間は肩身の 狭い思いをしなければならない世の中になった。一般的に言って男性が暮 らしにくい世の中になったとは言えるようだ。 以上は、人工知能のコネクショニズムに近い考え方を述べてきた。以下で は、古典的人工知能の基本的考え方について述べる。 記号はどこにあるのか?古典的記号主義、計算主義を巡って ゲーデルの数学的実在論と関係あるのだが、私が作った自動作曲システム を構成する、音楽で使われる記号、ひいては音楽の記号体系はどこにある のだろうか?これらは、人間の脳内にあるのではない。あくまで、外界に 実在するもので、記憶として一部脳内にあるに過ぎないのではないか。音 楽自体も音楽の記号体系も、外界にあり、双方に対して、人間の脳は解釈 系として機能する。世界内の存在を解釈する時に、人間は自分の知識に基 いて解釈すると考え勝ちだが、あくまで、知識は人間の外界にある(あっ た)ものであり、人間の解釈対象は「存在自体」と「理論や知識」に二重 化されているのではないか。存在を記号体系化したものが理論や知識であ り、存在理解とは存在自体の記号体系に対する解釈である。記号体系は教 育や観察・発見によってもたらされる。人間は存在を直に解釈するのでは なく、存在を表すとされる記号体系を解釈するのではないか。そして、そ の記号体系は外界と記憶として脳内に存在する。 Dijkstara(1972)の次の言葉がある。プログラミング言語 Lispに関するものである。 Lispは冗談に『計算機を誤用するための最も賢い方法』であると言わ れてきた。この描写は大変な賛辞であると思う。この言葉によってLis pの持つ完全に自由な雰囲気が伝わってくるからであるーーーーLisp は、われわれの最も才能のある人々が以前は不可能であった思考を行う手 助けをしてきたのである。」Lispは、マッカーシーがリスト・データ 構造の基本要素を極限まで簡略化し、その上の計算モデルを計算の理論で 知られるラムダ計算に基いて構成し、設計したプログラミング言語である 。いずれにせよ、記号の取り扱いや記号を組み合わせて複雑な知識を表現 し、計算機上でそれらを操作するのに適した言語である。私は自分の作っ た自動作曲システムのことを言うのは、自慢するためではなく、他に経験 も業績もないのと、今考えてみれば、古典的記号主義、計算主義に立った システムであるからである。私は自動作曲システムを作るのに、音楽を分 析したのではなく、ジャズ理論の記号体系を分析し、それを応用したから である。私には音楽理論は分かるが、音楽が理解できるという自信はない 。黒崎政男によると、ライプニッツは普遍記号学を構想し、ホッブスの 「思考するとは計算することである」というテーゼを発展させ、「思考の アルファベット」たる少数の基本概念から、計算という記号操作によって すべての真理を演繹的の構築しようとしていた。つまりそれは、記号体系 が特にうまく作られたならば、記号間の関係や秩序が、事物間の関係や秩 序に対応する、という発想に基いており、記号の側の操作だけで事実や事 象の知識に到達しようというものであった。この普遍記号学、およびこの 記号主義と感覚、直感などの連関をめぐるライプニッツの思索は、今日の AI(人工知能)の計算主義をめぐる議論の原型をなしており、AIの根 本問題に対する貴重な示唆を与えている。 このライプニッツの説は、記号体系をジャズの理論体系とすれば、音楽と いう事象について、そのまま当てはまる。音楽を知らずとも、ジャズの理 論で使われる記号を操作するだけで、作曲編曲なども可能であるというこ とである。これは、記号操作の主体が、人間であろうと計算機であろうと 、変わらない事実である。古典的人工知能の考え方は次のようなものであ る。心の構造を知識の構造と考え、さらに知識は記号の形式系として最も よく表現されると考える。認知は記号として表象された知識の上での形式 的操作として理解される。古典的人工知能のパラダイムを特徴付けるため には計算主義に基く必要がある。古典的人工知能を特徴付ける計算主義で は、知識は常にそれがどのように用いられるかという、処理過程の観点か ら扱われ、知識の表現ないし記述は、知識処理のアルゴリズムと不可分の 関係にある。知識表現の方式として現在の人工知能で常用されている、意 味ネットワーク、フレーム、プロダクション規則、論理式などいずれでも 、知識を要素とその組み合わせからなる記号で表現し、それらを操作する ための形式的規則/アルゴリズムを定義すると、知識の計算が実現する。 記号で表現された要素が、心的構造においては概念、命題などに対応し、 その上での操作(計算)が、認知、思考、推論、理解、記憶などに対応す る。知識、ひいては心の本質は、形式的操作の対象となるような「記号」 の概念でとらえることができる、という主張に対しては批判がある。その 批判の多くは、人間の知識や認知のもつ状況依存性や身体性、イメージ性 、アナログ性、技能性などに関わるもので、こうした批判を建設的に取り 込んで、より豊かな記号概念にたつ古典的人工知能が十分に可能であると 主張されている。古典的計算主義に対する克服は、コネクショニズムに基 く計算観で試みられている。概念の分散表現の考え方は、記号なき知識表 現を可能にするもので、古典的な知識観に対する改変をせまっている。
トップページに戻る