自己言及とフィードバック

黒木 玄


目次


パラドックスを引き起こす自己言及

パラドックスを引き起こす自己言及の典型的な例は「この文は偽である」です。「この文は偽である」が真であればその文は偽であることになり、「この文は偽である」が偽であればその文は真であることになってしまう。

文 X が X 自身を否定しているとき、 X はパラドックスを引き起こす自己言及文であると言うことにします。

「パラドックスを引き起こす自己言及」と「フィードバック」の違いの説明の都合のために、この事態を

(SR) X = NOT X

と書くことにします。この式は X が X の否定 (NOT X) に等しいことを意味しています。


発振を引き起こすフィードバック

フィードバックとは出力の値を入力に戻すことです。

現実の回路では入力の値が出力の値に反映するまでにある程度時間がかかります。だから、現実的なフィードバックについて考えるときには、このことを常に考慮に入れておく必要があります。

デジタル回路でフィードバックがどのように利用されているかに関してはデジタル回路の本を読めば必ず書いてあるはずです。例えば、私が知っている範囲内では最も易しい入門書

宮井幸男、尾崎進、若林茂、三好誠司共著、『イラスト・図解 デジタル回路のしくみがわかる本』、技術評論社、 1999年(平成11年)7月5日初版第1刷、 2000年2月25日初版第2刷

の37ページ以降にフィードバックを含むデジタル回路の具体例がたくさん書いてあります。

例えば、上の自己言及(SR)に似たフィードバックの例として、

(FB) X(t+1) = NOT X(t)

を考えることもできます。この式は X の時刻 t+1 における真理値は X の時刻 t におけるそれの否定であるという状況を意味しています。例えば、 X(0) が真ならば X(1) は偽になり X(2)は真になり……と真理値が振動することになります。

フィードバック(FB)は自己言及(SR)と違って、パラドックスを引き起こしません。 (SR)は X が X 自身の否定だったのでパラドックスを引き起こしてしまいますが、 (FB)では X(t+1) が X(t+1) 自身ではなく X(t) の否定なので同じ問題は起こりません。自己言及をフィードバックで置き変えてパラドックスを削除したつもりになっても、もとの自己言及の問題は異なる問題としてそのまま残ってしまいます。

そして、上の(FB)のタイプのフィードバックは現実のデジタル回路において制御不能な発振を引き起こすので、困った事態であることに変わりがないと考えることもできます。


RS フリップ・フロップ

以上によって、自己言及はフィードバックは異なる概念であり、自己言及をフィードバックで置き換えてもパラドックスを取り除くことはできないことは、はっきりしたと思います。

しかし、これでお終いにするとフィードバックを含むデジタル回路の面白さを説明したことにならないのでさらに説明を続けることにします。

フィードバックを含まないデジタル回路の出力は入力だけで決まってしまいます。しかし、フィードバックを含むデジタル回路は内部状態(記憶)を持つことができ、出力が入力だけで決定されなくなります。このことを「RSフリップフロップ」を例に説明しましょう。 (上の本の43ページ以降にRSフリップフロップは説明があるのでそちらも参照そて下さい。)

「RSフリップフロップ」を論理式で表現すると次のようになります:

Q(t+1) = S OR NOT P(t),
P(t+1) = R OR NOT Q(t).

S, R を入力と考え、 Q, P を出力と考えます。演算の規則は、

0 OR 0 = 0,
0 OR 1 = 1,
1 OR 0 = 1,
1 OR 1 = 1,
NOT 0 = 1,
NOT 1 = 0

です。 (0 は偽で 1 は真であると考えて良い。)

例えば、入力の S と R を両方 1 にすると出力は振動し確定しなくなります。実際、

Q(t+1) = 1 OR NOT P(t) = NOT P(t),
P(t+1) = 1 OR NOT Q(t) = NOT Q(t)

なので、

Q(t+2) = NOT P(t+1) = NOT Q(t),
P(t+2) = NOT Q(t+1) = NOT P(t)

となり、発振を引き起こすフィードバック(FB)と同様の事態が生じていることがわかります。だから、現実のデジタル回路では入力が S = R = 1 となる事態を避けなければいけません。

これに対して、時刻 t において、

(1) Q = 1, P = 0, S = 0, R = 0

ならば、

Q(t+1) = 0 OR NOT 0 = 0 OR 1 = 1 = Q(t),
P(t+1) = 0 OR NOT 1 = 0 OR 0 = 0 = P(t)

となり、入力 S と R が変化しない限り、出力 Q, P は変化しません。このような状態のことを安定状態と呼ぶことにします。他に

(2) Q = 0, P = 1, S = 0, R = 0

も安定状態です(自分で計算してこのことをチェックせよ!)。(1)と(2)は入力 S, R が等しいのに、出力 P, Q が異なる例にもなっています。(1)の状態のまま R の値を時刻 t に 0 から 1 に変化させてみましょう:

Q = 1, P = 0, S = 0, R = 1 (時刻 t において).

すると、

Q(t+1) = 0 OR NOT 0 = 1,
P(t+1) = 1 OR NOT 1 = 1

Q(t+2) = 0 OR NOT 1 = 0,
P(t+2) = 1 OR NOT 1 = 1

Q(t+3) = 0 OR NOT 1 = 0,
P(t+3) = 1 OR NOT 0 = 1,

Q(t+4) = 0 OR NOT 1 = 0,
P(t+4) = 1 OR NOT 0 = 1,

......

となり、 Q, P の値は Q = 0, P = 1 で安定します。そこで、時刻 t+n (nは2以上)で R の値を 1 から 0 に戻すと、

Q(t+n+1) = 0 OR NOT 1 = 0,
P(t+n+1) = 0 OR NOT 0 = 1,

Q(t+n+2) = 0 OR NOT 1 = 0,
P(t+n+2) = 0 OR NOT 0 = 1,

......

と安定状態(2)になります。以上によって、安定状態(1)において入力 R の値を 0 → 1 → 0 と変化させると安定状態(2)に移ることがわかりました。同様に入力 S を 0 → 1 → 0 と変化させれば安定状態(2)が安定状態(1)に移ります(計算してチェックせよ)。

以上の例から想像できるように、フィードバックをうまく組み合わせることによって、混み入った動作をするシステムを作ることができます。実際、コンピューターはそのようなシステムの例になっています。