2009年8月31日月曜日

【MoL】27 Schemata Extended

ついに、Part III General Theory of Quantification に突入。ここがFOLの本丸か。
なお、なんでQuineのMoLをやっているかというと、実は、AIMAの論理エージェントのところで、FOLに入門するなら古いけどこれが現在でももっともよい、とあったから。確かによい本。でも、英語のネイティブか、英語に結構慣れた人じゃないと、Norvigが言っているほど初心者向けではないと思う。

  • terms は論理学の伝統的にいうと二種類にわかれる。relative と absolute だ。
  • absolute は、今まで取り扱ってきたもの。wicked とか mortal とか。
  • relative は、father とか north とか。これらは、'father of Issac' とか 'north of Boston'というように、他の何かに相対的な意味をもっているというもの。
  • relative terms は absolute terms っぽく使用することができる。例えば、'Abraham is a father' など。ただし、暗黙の existential quantification があると言える。この例でいうと、'there is something of which Abraham is a father'など。

  • 英語では、relative terms である目印は、'of' と 所有の's'である。'father of Issac' や 'Issac's father' など。これらは、元来の「所有」として素朴に使われているのではなく、Issac と father relation にある何か、を表している。

  • さて、以上は伝統的な論理学。ここでは、absolute, relative ではなく、monadic, polyadic (特にdyadic) と呼ぶことにする。
  • monadic terms というのは、それが自然言語にて、名詞として表現されているか、形容詞として表現されているか、動詞として表現されているかに関わらず、論理的には、単に an object に対して、true/false of となるようなものであった。
  • dyadic terms も、言語上の表現については同様に捨象してよい部分があり、とどのつまり、2つのobjects について、true/false of となるものであり、関係を表すものといえる。そこで、dyadic terms を 'Fxy' 'x is F to y' などと書くことにする。
  • 'F' を固定してしまえば、'Fxy'と'Fyx'は原則違うものである。例:'Jesus helps Lazarus', 'Lazarus helps Jesus'.
  • triadic 'Gxyz', tetradic 'Hxyzw' とかもあるよ。自然言語に直すと、'x pays y to z for w' など。

こつこつ。

【MoL】26 Substitution


  • websterによる substitute の意味。(抜粋)
    1 to put or use in the place of another
    2 to take the place of : replace

    日本語でいうと、代替、交代、代用というあたりか。

  • さて、論理学(logical theory)では、the schemata が関心の中心である。
  • しかし最終的に行き着くのは the sentence である。つまり自然言語としてどういうものなのか、ということ。
  • schemata というのは、あくまで sentences を研究するために、それらの logical forms を表現するための仕組みにすぎない。
  • the schemata と それが schematize している the sentences の関係が substitution である。
  • "We get the sentence by substituting in the schema."

  • まず、truth-functional schemata。
  • これは単純。
  • "... just substitute sentences for sentence letters."

  • 次に、Boolean schemata。
  • これも単純。
  • "... substitute general terms for term letters."
  • なお、general terms は objects が true of または false of となるようなものであった。

  • 最後に、quantification。
  • ここで複雑になる。
  • 例えば'Fx'というのは、a variable x を含んでいる未分析な a sentence を表しているからだ。
  • 未分析だからといって、例えば'Fx'と'Fy'にまったく別の sentences を substitute していいというわけではない。'Fx' と 'Fy'に substitute する sentences には共通点がある。
  • 'Fx'と'Fy'は、'Fx'において 'x' が自由出現しているところは'Fy'では'y'になっている。そしてその違いしかない。ざっくり言うとこんな感じ。

    Fx : x is proud of the team.
    Fy : y is proud of the team.

    Fx : x is proud of z
    Fy : y is proud of z

    Fx : x is proud of x
    Fy : y is proud of y

  • ちょっと変わった例、もし、proud of x をいいたいとしよう。すると、
    Fx:x is proud of x
    Fy:y is proud of x
    こうなる。

  • これらを term abstraction を使って、整理してみよう。
  • まず'Fx'じゃなくて、'F'単体を考えることにする。term lettersだ。
  • そして、'F'のterm abstractを考える。上の例は次のようになる。
    {w: w is proud of the team}
    {w: w is proud of z}
    {w: w is proud of x}
  • そしてこれをつかって'Fx'をつくるためにconcretionを実施する。
    {w: w is proud of the team}x <-> x is proud of the team
    {w: w is proud of z}x <-> x is proud of z
    {w: w is proud of x}x <-> x is proud of x
  • さて、term abstracts は今までの真理値分析やらなんやらかんやらで何の役割ももっていなかったが、実はsubstitutionを組み立てるのに中心となる存在だ。
  • term abstractionによる代入のrestrictionsについて。

    • '{w: ∃x(w is proud of x)}' という term abstract について、'Fx'と'Fy'を考える。
      Fx : ∃x(x is proud of x)
      Fy : ∃x(y is proud of x)
      これ、同じものを表していない。
      'Fx' は自分を誇りに思う人がいる、ということをいっており、xについては何もかたっていない。
      'Fy' はxを誇りに思う人があいる、ということをいっている。
    • というわけで、first restriction。
      a term abstract の中でquantifiersが使われている場合、the quantifiersが使っているvariablesは、the abstract の concretion 用 variable としてはいけない。

    • 逆もある。'∀x Fx -> Fy' でまず 'F' に an abstract を substitute することを考えよ。
      ∀x {w: w is proud of the team}x -> {w: w is proud of the team}y
      ∀x (x is proud of the team) ->. y is proud of the team.
      これはよい。

      ∀x {w: w is proud of the x}x -> {w: w is proud of x}y
      ∀x (x is proud of x) ->. y is proud of x.
      これは、だめ。the term abstract の外側の the quantifier に abstract の中の x が捕捉されちゃう。

    • ようするに、abstracts の substitution を考えるときは、quantifiers の variables に捕捉されないように注意せよ、ということ。

  • なんとなく、Quine の論理学において、substitution 周辺がどういう概念整理になっているかは分かった。

    • まず、substitution というのは、schemata を 自然言語(のsentence)に戻すことを指す。または、schemata の利用として、自然言語(のsentence)を作成することを指す。
    • 'p'などの sentence letters は、単に自然言語の sentences で代替(substitute)すればよい。これは substitution。
    • 'F'などの term letters (of Boolean schemata) は、単に自然言語の general terms で代替(substitute)すればよい。これも substitution。
    • 'Fx'などの open sentences は、これを'F''x'と分解し、まず'F'を an term abstract で表し、それを'x'で concretion するもとのする。すなわち、これは substitution だけでなく concretion も含む。

    • substitution とは別に、concretion という概念がある(既出)。Quine の論理学において、variables とは cross-references のための 代名詞 に過ぎない。その代名詞に具体的な name を入れることを、concretion と呼ぶ。(ただし、本に出てくる schemata には、代名詞で concretion していると思えるものもある)

    • され、これらと関係しているのは、interpretation である。
    • interpretation は、ここまででいうと、真理値分析(truth-value analysis)のためのものである。
    • 大枠から言うと、まず、truth-functional schemata の interpretation は、それぞれの sentence letters を実際の sentences に特定することである。なので、上の substitution と同じといっていいのかもしれない。ただし、真理値分析においては、sentences を特定することと、sentence lettersに T または ⊥ に取り替える(supplant)ことは同じであり、真偽値が確定しているものは、これらで代替する。
    • さて、Boolean schemata の interpretation は、universes of discourse と objects を特定した上でできるsentenceをどう真偽値に取り替えるか(supplant)ということである。
      ここで、term letters は objects に対して true/false of となるような言語要素であって、objects を「代入する」というような意味はもっていない。「代入する」を定義していないので、曖昧なのですが、、、
    • variables が bound/unbound(free) というのは、quantifiers に関して、である。なので、プログラミング言語におけるboundとは違うものである。それはどちらかと言えば、interpretationに近い(あくまでどちらかと言えば)。


だんだん自分の中で語彙が整備されてきた感じ。
そういえば、Common Lisp をはじめたときも、語彙が形成されるまではちょっと時間がかかったなぁ。同じようなものか。
こつこつ。

2009年8月30日日曜日

【MoL】25 Validity Again

この章は calculus の手法に関することなので、後日やることにする。
次の章が遂に 'substitution' なので、そっちへ急ごう。プログラム検証論で一番もやもやしていたのが、このあたりなので。

このあたりはプログラム検証論に関わらずもやもやしていて、

  • assignment
  • substitution
  • unification/instatiation
  • term rewriting
  • variable bindings

が、どういう相互関係であるかを精確に捉えられていない。ばらばらにしか理解していない。

こつこつ。

【MoL】24 Prenexity and Purity


  • お、schema のことを formula とも呼ぶんだな。
  • prenex form : monadic quantificational schemata の形態。すべての quantifiers が先頭に来ているもの。
  • pure form : monadic quantificational schemata の形態。quantifiers について、それぞれの a quantifier のスコープの中には、the quantifier がもつ the variable について free occurrences を含むもののみを含むようにしたもの。

  • このような form の変形に、the rules of passage を使う。
    例: a prenex form へ変換。
    p <-> ∀x[Fx -> ∃y(Fy . Gx)].
    p -> ∀x[Fx -> ∃y(Fy . Gx)] . ∀x[Fx -> ∃y(Fy . Gx)] -> p. [paraphrasing a biconditional]
    p -> ∀x[Fx -> ∃y(Fy . Gx)] . ∀z[Fz -> ∃w(Fw . Gz)] -> p. [reletting]
    ∀x[ p ->. Fx -> ∃y(Fy . Gx)] . ∃z[Fz -> ∃w(Fw . Gz) .-> p]. [the rules of passage]
    ∀x∃z[ p ->. Fx -> ∃y(Fy . Gx) : Fz -> ∃w(Fw . Gz) .-> p]. [the rules of passage]
    ∀x∃z[ p -> ∃y(Fx ->. Fy . Gx) . ∃w(Fz ->. Fw . Gz) .-> p]. [the rules of passage]
    ∀x∃z[ ∃y(p ->: Fx ->. Fy . Gx) . ∀w(Fz ->. Fw . Gz :-> p)]. [the rules of passage]
    ∀x∃z∃y∀w(p ->: Fx ->. Fy . Gx :. Fz ->. Fw . Gz :-> p). [the rules of passage]

    例:a pure form への変換。
    ∃x(Fx . p .∨. Fx . Gx).
    ∃x(Fx . p) ∨ ∃x(Fx . Gx). [distributiveness]
    ∃xFx . p . ∨ ∃x(Fx . Gx). [the rules of passage]

    例:a pure form への変換。
    ∀x[∃y(Fx <-> Gy) ∨ ∃yFy] . ∀x(Fx ∨ Gx).
    ∀x∃y(Fx <-> Gy) ∨ ∃yFy . ∀x(Fx ∨ Gx). [the rules of passage]
    ∀x[∃y(Fx . Gy)∨∃y(-Fx . -Gy)] ∨ ∃yFy . ∀x(Fx ∨ Gx). [paraphrasing a biconditional]
    ∀x[Fx . ∃yGy .∨.-Fx .∃y -Gy] ∨ ∃yFy . ∀x(Fx ∨ Gx). [the rules of passage]
    ※[]の中を conjunction normal formに変形
    Fx . ∃yGy .∨.-Fx . ∃y -Gy
    (Fx . ∃yGy) ∨ (-Fx . ∃y -Gy)
    (Fx . ∃yGy) ∨ (-Fx . ∃y -Gy)
    (Fx ∨ (-Fx . ∃y-Gy)) . (∃yGy ∨ (-Fx . ∃y-Gy))
    [(Fx ∨ -Fx) . (Fx ∨ ∃y-Gy)] . [(∃yGy ∨ -Fx) . (∃yGy ∨ ∃y-Gy)]
    Fx ∨ ∃y-Gy . ∃yGy ∨ -Fx . ∃yGy ∨ ∃y-Gy
    ∀x[Fx ∨ ∃y-Gy . ∃yGy ∨ -Fx . ∃yGy ∨ ∃y-Gy] ∨ ∃yFy . ∀x(Fx ∨ Gx).
    ∀x(Fx ∨ ∃y-Gy) . ∀x(∃yGy ∨ -Fx) . ∃yGy ∨ ∃y-Gy .∨ ∃yFy : ∀x(Fx ∨ Gx). [the rules of passage and distributiveness]
    ∀xFx ∨ ∃y-Gy . ∃yGy ∨ ∀x-Fx . ∃yGy ∨ ∃y-Gy .∨ ∃yFy : ∀x(Fx ∨ Gx). [the rules of passage]

  • a monadic quantificational schema は、stacked quantifiers がある限り、impurities を持つ。
  • monadic schemata が closed であるならば、pure にできる。open だとできるとは限らない。

  • これらの話は、monadic な限り必須ではない。これは、'Fxy'といった polyadic schemata を導入するための準備である。

こつこつ。

端末で論理記号がずれる (3)

UnicodeとEmacsの仕様を多少読んでみた。

以前、EastAsian ambiguous width characters が根源、と書いたが、これは少し乱暴だった。

というのは、あたりまえなのですが、論理記号は EastAsian というカテゴリではないから。

端末上のEmacsを多少いじってみてわかったのだが、mathematical symbols と その supplemental なものどもについて、'small'とついているものが、half width であるというのがルールであるとするならば、単純に、Emacsとフォント(X?)の双方がUnicode標準に精確に準拠していないために発生していることがわかった。

で、そういうルールは無いということであれば、根源はEastAsianの場合と同じだ。

これ、keymapやabbrevをつかって ad hoc な解決はできるのだけど、やっぱり根本解決しないと気持ち悪い。しかし curses 含めて対応されるのは時間がかかりそう。。。

そろそろGtkなEmacsに移行すべきかもしれない。

2009年8月27日木曜日

【MoL】23 Rules of Passage. Monadic Schemata (3)


  • quantifiers の結合範囲に関する注意。

    '∃x(Fx -> p)' と '∃x Fx -> p' は違うよ。
    自然言語で言うと、
    There is something x such that if Fx then p.
    If there is something x such that Fx then p.
    という違い。

    '∀x(Fx -> p)' と '∀x Fx -> p' は違うよ。
    自然言語で言うと、
    Everything x is such that if Fx then p.
    If everything x is such that Fx then p.

  • 自然言語において、'any'と'every'の違いというのは、あまり体系的ではないし、謎めいてもいる。
  • しかしながら、ひとつ言えるのは、quantifiers による表現にて対比すると、'any'は結合範囲が広くて、'every'の方が狭いということ。全てのpoemsを the universe of discourse とした例。
    'I do not know any poem.', ∀x-(I know x).
    'I do not know every poem.', -∀x(I know x).
    なるほど。

  • Rules of passage の続き。

    • (9) ∀x-Fx, -∃xFx.

      これは自明。

    • (10) ∃x-Fx, -∀xFx.

      これも自明。

  • 話は進む。'p' のところに'y'を含む an open sentence が来ることも可能だろう。それはもっと外側に'y'に関するan quantifier がある場合だ。自然言語でいうとどういう場合かというと、

    There is someone who, if anyone contributes, will be surprised.

    という場合。なにかしらシニカルな人を表している、ということを補足しておく。さて、これを quantification に変形していく。

    ∃y(if anyone contributes, y will be surprised).
    ∃y(∀x(x contributes -> y will be surprised)).

    なるほど。

  • さて、open sentences について考える。

    • open sentences は terms ではないが、terms のように、いろいろな objects において true of や false of となるものである。
    • そこで、terms のときに導入した the extension of a term という概念を open sentences にも拡張してしまおう。 the extension of an open sentence ということだ。
    • すると、"The extension of an open sentence is the class of all the objects of which the open sentence is true." となる。

  • さらなる拡張。'p'とか'q'というthe schematic letters は、これまで statements を表していたが、これ以降は、open sentences も表すことにしよう。これらを、sentence letters と呼ぶことにする。a statement は a closed sentence だから、sentence つながりということでいいのかなぁ。
  • 'x' すなわち variablesは、'p'と'F'、すなわち sentences や terms と大きな違いがあることに注意せよ。'x' は sentences の中に表われることができる。'p'や'F'は sentences の中に表われることができない。あれ? Fx は an open sentence であり、それゆえ、terms は sentence の中に表われることができると言えるのではないか??? 考える。。。そうか、'Fx' というのは 'x' を含む未分析の a sentence を表わしているという意味ではそうだが、'x' が如く'F'単体をsentences の中で使うことはできないな。そういう意味なら、そうだ。
  • variables についての注意。論理学における variables は数学の variables とは完全に別物である。variables は単に代名詞である。文の中での cross-reference を明示するためだけのものだ。数学のように、それが時間にともなって変化する量を表していたり、方程式を解いて値を求めるべき未知数を表していたりするわけではない。

  • ここまでで、the monadic quantificational schemata が構築できた。整理してみよう。

    • closed sentences 'p' 'q' etc.、open sentences 'Fx' 'Gx' 'Fy' etc. に quantifiers や the truth-functional notations を適用することによって、できるのが、the monadic quantificational schemata である。
    • その validity は、it comes out true under all interpretation in all nonempty universes とする。
    • consistency, implication and equivalence も validity と同様に以前の定義を採用する。
    • term letters の解釈は、objects in the universe それぞれにおいて、to be true of または to be false of となるものである。
    • sentence letters の解釈は、それに真偽値を割り当てることで決まる。
    • free variables については、some objects in the universe を割り当てることを解釈とする。


  • monadic というのは、open sentences が Fx や Gy というように、a variable しか含まないことを差す。まだ、Fxy という表現を許していないということ。


しまった。本が分解してきた。。。結構な古本だからなぁ。修復キットとかあるのかなぁ。

こつこつ。

【MoL】23 Rules of Passage. Monadic Schemata (2)


  • さて、Rules of passage の確認

    • (1) ∃x(p . Fx), p . ∃xFx.

      これは先のエントリで確認した。

    • (2) ∀x(p . Fx), p . ∀xFx.

      これは'∀'が'∃'から構成したものだからいけそうだな。念のため確認しよう。変形していってみる。

      ∀x(p . Fx).
      -∃x-(p . Fx).
      -∃x(-p ∨ -Fx). [DeMorgan's law]
      -∃x-p ∨ -∃x-Fx. [distributiveness of quantification]
      p ∨ ∀Fx.

      あれ? おかしい。そうか distributiveness of quantification は、

      ∃ は alternation
      ∀ は conjunction

      という組み合わせでしか成立しないんだ。やり直し。

      ∀x(p . Fx).
      ∀xp . ∀xFx. [distributiveness of quantification]
      p . ∀Fx.

      身もフタもないような。。。まあ、いいや。

    • (3) ∃x(p ∨ Fx), p ∨ ∃xFx.

      確認する。

      ∃x(p ∨ Fx).
      ∃xp ∨ ∃xFx. [distributiveness of quantification]
      p ∨ ∃xFx.

    • (4) ∀x(p ∨ Fx), p ∨ ∀xFx.

      確認する。

      ∀x(p ∨ Fx).
      -∃x-(p ∨ Fx).
      -∃x(-p . -Fx). [DeMorgan's law]
      -(-p . ∃x-Fx). [(1)]
      p ∨ -∃x-Fx. [DeMorgan's law]
      p ∨ ∀xFx.

    • (5) ∃x(p -> Fx), p -> ∃xFx.

      確認する。

      ∃x(p -> Fx).
      ∃x(-p ∨ Fx).
      ∃x(-p ∨ Fx).
      -p ∨ ∃xFx. [(3)]
      p -> ∃xFx.

    • (6) ∀x(p -> Fx), p -> ∀xFx.

      確認する。

      ∀x(p -> Fx).
      ∀x(-p ∨ Fx).
      -p ∨ ∀xFx. [(4)]
      p -> ∀xFx.

    • (7) ∃x(Fx -> p), ∀xFx -> p.

      お、反転してる。確認する。

      ∃x(Fx -> p).
      ∃x(-Fx ∨ p).
      ∃x-Fx ∨ p. [(3)]
      -∀xFx ∨ p.
      ∀xFx -> p.

    • (8) ∀x(Fx -> p), ∃xFx -> p.

      確認する。

      ∀x(Fx -> p).
      ∀x(-Fx ∨ p).
      ∀x-Fx ∨ p. [4)]
      -∃x--Fx ∨ p.
      -∃xFx ∨ p.
      ∃xFx -> p.


こつこつ。

2009年8月26日水曜日

論理の2つの切り口

Quineを読んでいる中での大きな気づきとして、自然言語と論理と数理論理の関係が自分なり掴めてきたということがある。

論理というのは、もともとは自然言語およびそれを使った思考の探求であったのだ。もちろん言葉ではその事は知っていたのだが、このQuineの自然言語と論理の対応に対するねちっこさというかなんというかは、体験してみないとわからない理解をくれた。思考がなんであるかの探求とは、狭義の哲学と言ってよいだろう。

ただし、もともと、という話をすると実は少々ややこしいかもしれない。もともとで言えば、数学と哲学はとても近かったし、物理学と哲学だってとても近かった。昔は物理学のことを自然哲学と呼んだ。

違う観点で気づきを述べるなら、それは、

  • 言語哲学
  • 論理学
  • 数理論理学

の違いが自分のなかで見えてきたということだ。上に行くほど、人間の思考というものを自然言語と論理を丹念に調べながら探求する姿勢であり、下に行くほど数学的になる、ということ。

ここで、数学的にというのは、いわゆる公理主義的なということである。すなわち、それが現実の何を表しているかは捨象しちゃってもよい、ということだ。なので、上の方のように、自然言語との対応の精査などは必要とせず、公理からどういうシステムが生まれるかをごりごりやってしまう、ということ。

物理学と数学は数学が抽象化を進めたときに一旦分離したが、分離することによって数学はより強力なツールと化して、物理学に戻ってきた。

同じことが自然言語と数理論理にも当て嵌るようだ。

【MoL】23 Rules of Passage. Monadic Schemata


  • さて、quantification というのは、次のように生まれていた。

    • Boolean existence schemata ∃F
    • a term abstract {x: Fx}
    • この2つを組み合わせて、∃{x: Fx}
    • '∃'についても'{x:'についても、それが使われるときはいつも'∃{x:'の形にできるから、
    • その形にすることを前提として、'∃{x:'をひとつのprefix '∃x' としてしまう。
    • quantification ∃x(Fx)

  • ここで、'∃x'を使える範囲を拡張しよう。
  • まず、Fx は何であったか。an open sentence であった。
  • すなわち上のような生まれた経緯では、quantifier ∃xの後ろに来れるのはxを含む open sentences だけとなる。
  • ここで、x を含まない、さらに言うと free variables を含まない closed sentences (statements) も来れるようにしてしまおう、というのがここでの拡張。
  • 例えば、'p' を an statement とすると、

    ∃x(p . Fx).

    などだ。

  • これを上のような生まれの経緯で意味を探ってみよう。
    ∃x(p . Fx).
    ∃{x: p . Fx}. (この変形に無理があるかな)
    ∃(p . F). (an statement と an term が同居しているのが気持ち悪い。)
    ...
    この探り方は、駄目な気がする。statements に∃をつけることなんて今までやってないし。

  • では、quantification された後の解釈の仕方から探っていこう。

    • ∃x(Fx) はどう解釈すべきか。
    • まず、∃{x: Fx}の解釈は、{x: Fx}は a general term ということであった。そしてこれは、the term F と coextensive なのであった。すなわち、{x: Fx} ≡ F である。さらに、{x: Fx}y ≡ Fy であり、これはan statement なのであった。ということは、{x: Fx}は、a general term を、an universe of discourse におけるan object x と真偽計算に使われるFxで表していると言える。あ、このレベルでいけるかも。いってみる。
    • すると、{x: p . Fx}という拡張は、an object x と真偽計算に使われる p . Fxにて some general term を表しているのだが、その真偽計算において、pの真偽値は、an object x の取り方によらない。よってこれは、p . {x: Fx} と equivalent である。あ、駄目だ、これも a statement . a term だ。そんなもの今まで出てきてない。
    • ∃x(Fx)の読み方にチャレンジしてみよう。
    • さて、term abstraction の読み方は上のとおりであるとすると、quantification の読み方はどうか。
    • まず、∃x(Fx)の全体としてはa Boolean existence schemaである。すなわち、それ単体としてもan Boolean statement schema であり、真偽値をとる他のもの(例えば、a statement 'p')とともにtruth-functionsの部品となることができる。
    • ここで、Fxはthe statement の真偽計算に使われるものであり、形式としてはstatementsと同格だがxを含んでいるためan open sentence なのであった。
    • ここで、真偽計算につかうものをp . Fx と拡張する。'p'も'Fx'もsentencesに属しているのいい感じ。
    • ただし、真偽計算にあたって、pはxによらず固定値である。
    • ということは、∃x(p . Fx) は p . ∃x(Fx) と equivalent である。

    • なるほど。やっぱり quantification というのは重要であり、

      a Boolean existential schema = ∃ + a general term

      という分解では、ここでやっている拡張はできなくて、

      a Boolean existential schema = a quantifier + an open sentence

      とすることによって、

      a statement . a Boolean existence schema = a quantifier + (the statement . an open sentece)

      という変形を辻褄が合う形で導入できるのだ。

      で、このように quantifiers が statements を通過する変形に関するルールが、"Rules of passage"であり、この章の主題。

  • うーん。ここまで、本の上では、5行で記述されている。それを理解するのに50行以上。頭が悪いと苦労が多いが、まあ、仕方なし。


こつこつ。

2009年8月25日火曜日

【MoL】22 Quantification


  • 'All men are mortal.' は '∀{x: man x -> mortal x}.' と書ける。

    変形して確認してみる。

    ∀(man -> mortal)
    -∃-(man -> mortal)
    -∃-(-man ∨ mortal)
    -∃ man-mortal

    ほんとだ。

  • 'Some books are boring.' は '∃{x: book x . boring x}.'と書ける。

    変形して確認してみる。

    ∃{x: book x . boring x}.
    ∃ book . boring.

    ほんとだ。

  • さて、ちょっと考えてみると、functors '∃' '∀' が使われるのは term abstracts の前に限られるし、term abstracts はその前に'∃'とか'∀'がこなければ話が進まないことがわかる。
  • '∃'はもともとBoolean term schemata の前につけて、Boolean existence schemata をつくる、というのが定義だったのであり、'∃F' は '∃{x: Fx}' と常に書き換えられるから。
  • ということは、'∃{x:' と '∀{x:' はいつもこの組合わせで存在するのだから、これを単なる prefix にしちゃおう。'∃x' '∀x'とか。
  • すると先のschemataは、次のように書ける。
    ∀x(man x -> mortal x).
    ∃x(book x . boring x).
  • この prefixes '∃x' '∀x' '∃y' などを量化子 (quantifiers) と呼ぶ。そしてこれが neoclassical logic の焦点である。
  • 量化子を使ったスタイルに移行すると、'FG'だとか'F∨G'などのBoolean compoundsは表れなくなる。そのかわりterm letters は常にvariablesを伴って表れるようになる。'Fx' 'Gy'など。
  • これ以降、'Fx' は「free variable x を含むが、それ以上の構造は未分析な an open sentence」を表すと考えることにする。
  • ここで 量化 を導入することは、今までの論理にとって何の足しにもならない。
  • それは、今まではまだ'book'のような absolute or monadic terms のみを考えているからだ。
  • 先々、'uncle' のような relative or dyadic terms を考えるときに量化子は真価を発揮する。
  • ここではその準備のために量化子を使ったスタイルをはじめている。

  • このあと、有限個のobjectsを含むuniversesにおける、'∧' '∨' と '∃' '∀' の対応を説明。


今日はここまで。

こつこつ。

【MoL】21 The Bound Variable

Quineは言語哲学方面なんだな。それで語彙が科学系と違うのか。

  • さあ、ついに束縛変項(bound variables)だ。
  • general terms というのは、名詞句的なものでも、形容詞的なものでもなんでもと、非常に幅広いものが範疇に入るものだった。
  • ここで、複雑な構造をもつ statements についても、それがan objectに関するものであれば、the object が some general term を属性に持つというように取り扱えるようにしたい。
  • 例えば、
    (1) "Tom used to work for the man who murdered the second husband of Tom's youngest sister."

    というのは、何がTomの属性となるtermかということはすぐにはわからない。ちょっと考えてみると、

    (2) "former employee of own youngest sister's second husband's second husband's murder"

    と考えられる。英語にはもっと便利な書き振りがあって、

    (3) "who used to work for the man who murdered the second husband of his youngest sister"

    のように関係節を使うと(1)からストレートに書ける。ただしここで、'his'のcross-referenceの問題が発生している。
    whoが二つあるけどどっちを参照するのか、ということ。

    そこで、ちょっと数学くさいが、'such that'という機構を使う。

    (4) "x such that x used to work for the man who murdered the second husband of x's youngest sister"

    2つめのwhoもsuch thatに替えると、

    (5) "x such that x used to work for the man y such that y murdered the second husband of x's youngest sister"

  • このようなxやyを、bound variables と呼ぶ。
  • さて、'who'、'which'、'that'、'x such that' などをつかった関係節によって、(1)の文からa general term を分離できたのだ。書き直してみる。

    "Tom is x such that x used to work for the man y such that y murdered the second husband of x's youngest sister"

  • これでTomというobjectについて、a general term を predicate している statement になった。
  • この分離の過程にて関係節を作ることは、'Tom'というnameを消すことによって、何かが抽出(abstracted)されたのだ。
  • それは何かというと、それが a general term だ。an abstract object では無いことに注意せよ。というのは、これは an (abstract) object では無いから、あらゆるobjectsに対して true of と成りえるものである。

  • 'x such that ...x...'という構成を'{x:...x...}'と表現することにする。この表現のことを、term abstraction と呼ぶ。
  • term abstractionによって特定されたa general term のことを、an abstract と呼ぶ。

  • さて、以上の組み立てから一般的に、

    {x: ...x...}y <-> ...y...

    である(とする)。このreductionのことを、concretion (具体化?) と呼ぶ。
  • term abstraction と今までの表記をつなぐ。
    前項の簡単なケースでは次のように書いていいだろう。

    {x: x is wise} ≡ wise

    ということは、

    {x: Fx} ≡ F.
    {x: Xx}y <-> Fy.

    であるということだ。
  • さて、bound variables に関わる用語の定義を。まず、bound variables が、どこで、束縛されているかというとそれは abstract たる'{x: x is wise}'の中である。何に、束縛されているかというと、prefix たる'x:'によってである。すると'x is wise'というの範囲でみればxは束縛されていない、ここでは'x'は free であるといい。
  • また'{x: x is wise}'を an open sentence と呼ぶ。これは真にも偽にもならない。 この'x'は自然言語における代名詞の役割を果たしており、自然言語でいえば a dangling pronoun (ぶらぶら代名詞)を含むようなものである。
  • open sentences の dangling pronouns を具体的な名前(names)で置き換えたものを、 closed sentences または statements と呼ぶ。これは真偽値をとる。

  • term abstraction を使うと、今まで出てきた Boolean term schemata の異なる表現が可能になる。
    例:FG ≡ {x: Fx . Gx}. F -> G ≡ {x: Fx -> Gx}.

  • Fyというのは、yという an object に対する predication の表記であった。それを term abstraction に適用したのが、{x: ...x...}y であった。ここで、predication について、別の表記を導入する。
    y ∈ {x: ....x...} .<-> ...y...

  • 集合論との関係。集合論でも、∈ と abstract を使う。集合論では、...x... であるようなobjectsすべてを含むclassを{x:...x...}と書く。ここで定義したterm abstract は、現時点では、この集合論の考えとは無関係であることに注意せよ。
  • 現時点では、というのは、集合論を導入せねばならなくなったときには、∈ と abstract は二重の役割をもつことになる。集合論では、classes を objects とみなし、term abstraction は class abstraction の機能を担っていく。


次はついに、quantification、量化だ!

こつこつ。

【MoL】20 Some Boolean Incidentals (2)

私にとっては衝撃的なお話。

  • Quineの主張。(かなり意訳)

    • ブール代数 (Boolean Algebra) は駄目だ。
    • ブール論理は、ここでやったようにclassesを持ち出さなくても単なるtermsに関する論理として組み立てられるものだ。
    • 集合論を持ち出してブール論理をブール代数でやるのが 'new math' の名のもとに巷では流行っているが、集合論無しでもブール論理を組み立てられるのだから、それは鉈で豆腐を切るようなものだし、集合論無しで組み立てられるというブール論理の特性を隠蔽している。
    • そして、terms で組み立てた場合は、truth-functionsをそのまま使うことができて、truth-functional schemata との関係も明確である。それ自体理論の接続性からいってよいことだが、さらに副産物として、truth-functional schemata の知識がそのまま使えるし、各種技法もそのまま使える。
    • 論理において、集合論が必要になるのはもっと先である。思考の経済から言っても、不要な概念を導入すべきではない。
    • 集合論を初等教育で導入することが流行っているようであるが、集合論というのはかなり厄介でごついものである。
    • そんな難しくて正確な理解に時間がかかるものを、たいして説明せずに、しかも必要もないのに導入するというのはおかしいのでなはないか。

  • これ、数学が集合論を基礎とした構造主義につきすすんでいる時代だから、当時は異端だったんだろうなぁ。今は、圏論も基礎になりえるということで、理解は得られるとは思うけど。
  • Boolean term schemata とか Boolean existence schemata とか Boolean sentence schemata とか、見慣れないものがいろいろ出て来て理解に時間がかかっていたのだが、それをやらされていた理由がわかった。Quineは、後で種明し、というのが多いのか?
  • 現在の評価としては、ブール代数は代数構造としてそれ自身の価値がある、そして、ブール論理を言語と論理の文脈でやるならBoolean logic of termsが適しているということかな。ただし、数理論理学の文脈では集合論の理解が前提になっているので、がんがん集合論でいってしまっていると。
  • 思考の経済のために不要な概念は入れない、概念を絞っておいた方が理論の安全性が高い、というのは、SchemeのR5RSあたりの心持ちと似ている。


こつこつ。

2009年8月24日月曜日

【MoL】20 Some Boolean Incidentals


  • 怒涛の記号&用語導入。おもしろそう。
  • truth-functionsでは、単一の記号だけですべて構築できるのにいろいろな記号を導入した。それが便利だった。Boolean schemataにもいろいろ記号を導入しよう。

    • '∀F' : 'all is F'
      ∀F <-> -∃-F.
    • 'F ⊆ G' : inclusion
      F ⊆ G .<-> ∀(F -> G) <-> -∃(F-G).
    • 'F ≡ G' : coextensiveness
      F ≡ G .<-> ∀(F <-> G) <->. F⊆G . G⊆F <->. -∃(F-G) . - ∃(-FG).
    • 'F ⊂ G' : proper inclusion
      F ⊂ G .<->. F ⊆ G . - (G ⊆ F) <->. -∃(F-G) . ∃(-FG).
    • '≡'と'⊆'は、term schemataにも定義できる。

  • おお!functorという用語の導入。
  • functor: ある種の記号の名前。どういうものかというと、文法的な何かに付与されると、同じ種類の文法的な何かになるというもの。例えば、negationはfunctorである。a term schema に negation をつけると、a term schema になる。など。
    原文引用: "A functor is a sign that attaches to one or more expressions of given grammatical kind or kinds to produce an expression of a given grammatical kind."
  • なので、truth-functionsからはじまって、上で導入した記号もすべてfunctors。
  • copula: ある種のfunctorの名前。copulaは連結詞のこと。連結子とは主部と述部をつなげる語。'⊆'、'⊂' と '≡' がcopulasであり、'⊆' は 英語の 'are' を意味する。
  • 注意: 'F ⊆ G' と 'F -> G' は別物。'F ≡ G' と 'F <-> G' は別物。

  • この後、ブール代数に対する衝撃的なお話が、、、衝撃的すぎて、今は書けない。後日書こう。この本やっぱりすごいな。

こつこつ。

【MoL】19 Tests of Validity (2)

つづき。


    • existential conditionalの導入。the antecedent が a Boolean existence schema か a conjunction of Boolean existence schemataであり、consequence が a Boolean existence schema である conditional のこと。
    • (iv)
      原文まま引用。
      "An existential conditional is valid if and only if the Boolean term schema in one of the existence schemata in the antecedent implies the Boolean term schema in the consequent."
    • これは前章の法則(ix)と法則(vi)の組み合わせそのもの。

    • (v)
      原文まま引用。
      "A conjunction of Boolean statement schemata of any of the forms covered in (i)-(iv) is valid if and only if each of them comes out valid under the tests (i)-(iv)."
    • これは、truth functions とその validity の定義から自明。

  • さて、続いて全てのBoolean statement schemataが(i)-(v)に帰着できることを確認する。
  • まず、truth-functionsのところでやった、equivalent なもので interchange しても schemata の validity や implication は変わらない、というのは Boolean statement schemata においても成立する。これは Boolean statement schemata というのは素材が Boolean existence schemata である truth-functional な compound でしかないので自明。
  • さて、このことを確認した上で、Boolean statement schemata の変換手順を明確にする。

    • a Boolean statement schema があるとする。それをSと呼ぶ。
      例:-∃G-H . ∃FG . -> ∃FH.
    • Sを構成する Boolean existence schemata をそれぞれ a single statement letter と考えて('p'や'q')、Sを conjunctional normal form に変換する。
      例:-p . q . -> r.
      -(-p . q) ∨ r.
      p ∨ - q ∨ r.
      ∃G-H ∨ -∃FG ∨ ∃FH.
    • existence schemata における分配則を利用して、'∃'がひとつになるようにまとめる。
      例:-∃FG ∨ ∃(G-H ∨ FH).
    • conditionalに戻す。これはexistential conditionalである。
      例:∃FG -> ∃(G-H ∨ FH).


論理学って、予想してたより遥に難しいなぁ。「学」が付くものがそんなに簡単な訳ないか。

Still plodding away.

【MoL】19 Tests of Validity


  • この章の目的は、Boolean statement schemataのvalidity テスト方法を確立すること。
  • 方針は次のとおり。

    • Boolean existence schemataのvalidityがBoolean term schemataのvalidityに帰着できる5つの形態を明確にする。
    • 任意のBoolean statement schemataが前項にある5つの形態に帰着できることを確認する。

  • まず、5つの形態

    • (i)
      まず原文まま引用。
      "A Boolean existence schema is valid if and only if its term schema is valid."

      • これは前章の法則(v)。
      • 自分で再構成してみる。'if'は自明。'only if' は its term schema が not valid であるとする。するとterm schema を false とする interpretation がひとつは存在することになり、ひとつ存在することは universes をある意味伝搬して、ひとつ以上の objects を含む任意の universes においてthe term schema を false とする interpretation が存在することになる。ゆえに後者が not valid であれば、前者も not valid 。

    • (ii)
      まず原文まま引用。
      "The negation of a Boolean existence schema is valid if and only if the term schema is inconsistent."

      • これは前章の法則(vi)に由来。
      • 自分で構成してみる。
        まず、"the negation is valid if and only if the existence schema itself is inconsistent"が言えるかどうか。
        基本から確認する。Boolean existence schemata というのは、それ自身、Boolean statement schemata である。別の言い方をすると、'∃' をterm schemataに付与すると、statement になるということだ。
        さて、negation たる'-'は、truth-functionである。真理値をとるものを引数にとり、真偽値を反転して返す。Boolean statement schemata を組み合わせて、あらたな Boolean statement schemata をつくるためのものと考えても害は無い。
        今、Boolean statement schemata の validity のテスト方法を組み立てている最中なので、この 'the negation of a Boolean existence schema' という a Boolean statement schema のvalidityについて考えるには、'∃'や'-'の定義や動機に立ち返るしかない。
        立ち返ると、'a Boolean existence schema' が 'there are at least one hoge'であるとするなら、'a Boolean existence schema is valid' は、" 'there are at least one hoge' is valid" ということであり、'the negation of a Boolean existence schema' は、'there are no hoge'であり、'the negation of a Boolean existence schema is valid' は、" 'there are no hoge' is valid "ということである。
        Boolean statement schemata の validity の定義は、any nonempty universes の any interpretation にて true ということだから、" 'there are no hoge' is valid" であるならば、'there are at least one hoge'というのはinconsistentである。これで'only if'は正しいようだ。

        ここで「正しい」と言っているのが、どういう論理に基づいているかということを考えると、論理学って本質的に閉じていて、無矛盾かどうかしか判断基準が無い体系だよね。観測までスコープに入れて、人工知能として考えればまた違うけど。

        では、'if'はどうか。ああ、これは'only if'のように読み解けば、自明ですね。
      • すると、もともとのお題は、
        "The existence schema is inconsistent if and only if the term schema is inconsistent."
        になる。
      • これは前章の法則(vi)に由来する。
      • 自分なりに確認してみる。
        法則(vi)は、"The existence schema is consistent if and only if the term schema is inconsistent."ということだった。これが正しいならば、お題が正しいのは自明と思えるが、丁寧に考えてみる。existence schemata と term schemata のそれぞれについて、consistent と inconsistent がどういう関係にあるかをその定義に基づいて確認すればよいだろう。
        まず term schemata の consistent と inconsistent の関係はどうか。a term schema が consistent であるということは、some universes の some interpretations にてそれが true となる、ということである。
        さて、term schemata が inconsistent であるということがどういうことかというと、本を読み返してみると、明示的な定義は無い。では、truth functions のときのconsistency と inconsistency の関係から類推して妥当な定義を考えると、a term schema が inconsistent であるというとは、any universe の all interpretations にて、それが false となるということである。
        これら定義であれば、a term schema が consistent であれば inconsistent ではないし、逆も成り立つ。

        次に existence schemata の consistency と inconsistency がどうかというと、'there are at least one' が付くということと、universes が nonempty に限定されるということ以外は、term schemata と同じと考えてよいだろう。するとこれもやはり truth-functional な意味で、negation の関係にある。
        よって、法則(vi)が正しいときお題が正しいとすることまたその逆が正しいとすることは、正しい。(メタメタメタ?)

    • (iii)
      まず原文まま引用。
      "An alternation of negations of Boolean existence schemata is valid if and only if one of those negations meets the above validity test.

      • まず、Boolean existence schemata においても、'the alternation of negations' は 'the negation of conjunctions'である。このことは後で確認する。
      • するとお題は、"A negation of conjunctions of Boolean existence schemata is valid if and only if one of those negations meets the above validity test."になる。
      • これは前章の法則(viii)から導くことができる。
      • まず、alternation と conjunction について。

        • ∃(F∨G) <->. ∃F ∨ ∃G は正しい。
        • まず∃(F∨G)がtrueということは、(F∨G)がtrue ofとなるobjectが存在するということだから、このとき∃F ∨ ∃Gもいずれかがtrue of となるobjectsが存在すると言える。よって右から左はOK。
        • 左から右もOKと思えるので、OK。
        • 次に、-∃(F ∨ G) <-> -(∃F ∨ ∃G) <->. -∃F . - ∃G は正しい。
        • まず、-∃(F ∨ G) と -(∃F ∨ ∃G)は、先のものの negation なので、これは正しい。
        • -(∃F ∨ ∃G) と-∃F . - ∃G について言うと、前者は "-( 'there are at least one object that is true of F' ∨ 'there are at least one object that is true of G')"ということであり、後者は、"-('there are at least one object that is true of F') and -('there are at least one object that is true of G)"ということである。後者のnegationは文章に組み入れることができて、"'there are no object that is true of F' and 'there are no object that is true of G"となる。後者がtrueならば、FもGも該当するobjectがまったく存在しないので、前者のnegation前はfalseとなり、前者はtrueとなる。後者がfalseならば、FまたはGもしくは双方に該当するobjectsが存在するので、前者のnegation前はtrueであり、前者はfalseとなる。■

      • さて次に、法則(viii)からお題を変換したものが導かれるかどうか。

        • 法則(viii)を再掲。"A conjunction of Boolean existence schemata is consistent so long as each of them separately is consistent."

          • これ自体の理解を確認。自分なりに組み立てる。まず、'each of them separately is consistent'にできるならば、'each of their term schemata separately is consistent'である。これは法則(vi)。すると、いまthemと言っているのがn個あるとしたら、n個のobjectsを含むsome universesにて、それぞれをtrueにするinterpretationが存在する。よってそのconjunctionたるthe term schemaもtrueとなる。すると、再度法則(vi)にて、the existence schemaもconsistentになる。■

        • だんだん慣れてきた!
        • で、法則(viii)によれば、one of them is inconsistentであれば、a conjunction of Boolean existence schemata is inconsistent となる。
        • one of them is inconsistent ということは、one of their negations is validということ。
        • a conjunction of Boolean existence schemata is inconsistent ということは、a negation of conjunction of Boolean existence schemata is valid ということ。
        • よって、so long asがiffと同じならば、■




こつこつ。

2009年8月22日土曜日

【MoL】18 Boolean Schemata (6)


  • 法則(viii)

    • これも難しそう。まず原文まま引用。
      "A conjunction of boolean existence schemata is consistent so long as each of them separately is consistent."
    • どういう状況を指しているかというと、例えば、F-G、G-H、-FH、という3つのterm schemataがあるとする。するとこれらは個別にconsistentであったとしてもこれらのconjunctionはinconsistentである。3つのterm lettersそれぞれについて、否定も含んでいるからだ。にも関わらず、∃F-G、∃G-H、∃-FHがそれぞれconsistentであれば、これらのconjunctionはconsistentになるということ。
    • ああ、これは法則(iv)そのものだ。難しくなかった。
    • ちょっとややこしいのは逆に、term schemataの場合はinconsistentになる、ということ。法則(iv)によれば、それぞれconsistentになるならば、3つ(以上)のobjectsを含むuniverseにて、F-Gがtrue of x1であり G-Hがtrue of x2であり -FHがtrue of x3であるようにはできる。しかし、F-GG-H-FHがtrue ofとなるobjectは存在しない。なぜかというとそれぞれのobjectはa term letterに対して、true ofかnot true ofのいずれかしかなりえない。そしてこのschemataには全てのlettersの肯定と否定が現われている。なので、真には成り得ない。

  • 法則(ix)

    • まず原文まま引用。
      "A Boolean existence schema is implied by a conjunction of Boolean existence schemata only if it is implied by one of them in isolation"
    • これ、このisolationっていうのが掴めない。説明を追ってみる。
    • 状況の設定。

      • Boolean term schemata 'A','A1',...,'An'がある。
      • それらに対するBoolean existence schemata '∃A','∃A1',...,'∃An'がある。
      • '∃A1',...,'∃An'のそれぞれは個別にはどれひとつも、'∃A'をimplyしないとする。

    • さて、Boolean existence schemataとBoolean term schemataはimplyの関係については等価だから、ここで'∃A1'が'∃A'をimplyしないことから、'A1'が'A'をimplyしないと言える。
    • ということは、'A1-A'がconsistentであると言える。なぜか? 'A1'が'A'をimplyしないということは、'-A1A'がnot validであるということ。これがnot validということは'A1-A'がtrueとなるinterpretationが存在するということだから言える。
    • すると、'A1-A',...,'An-A'はみなconsistentになる。
    • さて、法則(iv)によって、x1,...,xnをobjectsにもつuniversesのinterpretationとして'A1-A' true of x1, ... , 'An-A' true of xnを同時に実現するものが存在する。
    • このinterpretationにおいて、'A'はx1,...,xnのいずれにおいてもtrueにならない。よって、'∃A'はfalseである。一方、'∃A1',...,'∃An'はすべてtrueとなる。
    • これは、'∃A1. ... . ∃An'というconjunctionがtrueだが、'∃A'はfalseという状況である。よって、conjunction '∃A1. ... . ∃An'は'∃A'をimplyしない。
    • ここでわかったのは、先の状況の設定であればこういう結論になるということ。
    • このわかったことの対偶をとると、
      "conjunction '∃A1. ... .∃An'は'∃A'をimplyする"
      ならば
      "'∃A1',...,'∃An'のうちのどれかが個別に、'∃A'をimplyする"
    • ということ。
    • やっかいだな。。。

  • 可変世界(changeable universes)というのは、DeMorganが1846には発案していたんだな。

やはり18章には一週間かかった。限量子への道程は遠い。
こつこつ。

2009年8月20日木曜日

【MoL】18 Boolean Schemata (5)


  • 法則(vi)

    • まず原文まま引用。
      "A Boolean existence schema is consistent if and only if its term schema is consistent."
    • まず後者が真なら前者も真と言っているのが法則(i)。なので、'if'はOK。
    • 次に後者が偽であることは、its term schemaがinconsistentであるということだから、それはterm schemaをTとするinterpretationがまったく存在しないとことであり、すると前者も偽となる。よって、'only if'もOK

  • 法則(vii)

    • まず原文まま引用。
      "One Boolean existence schema implies another if and only if the one term schema implies the other."
    • まず'if'。これは法則(vi)と同様にOK。
    • 次に'only if'。後者が偽であるということであり、このとき法則(iii)は、前者が偽であることの直接的な説明である。よってOK。


こつこつ。

【MoL】18 Boolean Schemata (4)


  • 法則(v)

    • まず原文まま引用。
      "A Boolean existence schema is valid if and only if its term schema is valid."
    • えっと、字面としては簡単。訳すまでもない。しかし意味の理解は慎重を要する。
    • まず、例となる記号をいれよう。
      "A Boolean existence schema ∃FG is valid if and only if its term schema FG is valid."
    • 言葉を端折ろう。
      "∃FG is valid if and only if FG is valid."
    • if and only ifはメタメタとすると、
      " '∃FG is valid' if and only if 'FG is valid' . "
    • '∃FG is valid'の意味は、おそらくboolean statement schemataにおけるvalidの定義を適用できて、
      "∃FG is counted valid when they come out true under all interpretation in all nonempty universes."
      これをV1とする。
    • 'FG is valid'は明示的に定義されていて、
      "A valid term schema FG, then, is one that will come out true of all objects of any chosen universe under all interpretations, within that universe, of its term letters."
      これをV2とする。
    • さてV1が真であるとするとV2も真であるか?
      。。。これは分からない。
    • ではV2が真であるとするとV1も真であるか?
      これは言える。なぜか。

      • V2は、あらゆるuniversesにおいて、あらゆるinterpretationにおいて、そのterm schemaはtrueである、ということである。いいかえると、interpretationによって、そのterm schemaを構成するterm letters(例ではFとG)が指すobjectsはいろいろありえるが、どの指し方に置いてもtrueということ。
      • V1は、あらゆるuniverses (nonempty)において、あらゆるinterpretationにおいて、そのexistence schemaがtrueである、ということである。いいかえると、interpretationによって、そのexistence schemaを構成するterm schemaはに出てくるterm letters(例ではFとG)が指すobjectsはいろいろありえるが、その中にはterm schemaがtrueとなる指し方が少なくとも一つはあるということ。
      • V2が真ならば、V1が真なのは自明かな。

    • では、V2が偽であるとするとV1も偽であるか?
      これも言える。

      • V2が偽であるということは、単純に見ると、ある単一のuniverseのある単一のinterpretationにて偽であるのがミニマムなケースと思えるが、それで済まず、偽であるinterpretationはある意味伝搬して、たくさん発生してしまう。それが先の法則(ii)。すなわち、あるterm schemaが偽になるということは、そのterm schemaを構成するterm lettersそれぞれに、Tだか⊥だかを割り当ててそのterm schema全体を⊥にする組み合わせが存在するということであり、そうであるなら、1つ以上のobjectsを含むuniverseにおいては、そのよう(term schemaが偽となるよう)にterm lettersが真偽を取るinterpretationというのは必ず存在することになる。
      • これは、V1が偽となることの直接的な説明である。

    • この法則(v)は、一見existence schemaのvalidityとterm schemaのvalidityの間には、言明として論理的強弱がありそうだが、実は'if and only if'である(用語に構わなければ'等価である')ということを述べているんだな。


こつこつ。

2009年8月19日水曜日

【MoL】18 Boolean Schemata (3)


  • boolean existence schemataの導入。"∃"という記号は"there are","there is at least one"を表し、'∃FG'などと使う。このように'∃'の後ろにa boolean term schemaを付けたものをboolean existence schemataと呼ぶ。
  • boolean statement schemataの導入。boolean existence schemataを部品としてtruth functionalに構成したものをboolean statement schemataと呼ぶ。例:-∃FG-H → ∃F-G.
  • boolean existence schemataのvalidityの定義。noempty universeに限定しているところがミソ。
  • boolean existence schemataのconsistencyの定義。これもnoempty universe限定。

  • ここから、term schemataとboolean existence schemataの関係に入っていく。これ、感覚を掴むのに多少考察が必要。


こんなにいろいろな種類のschemataが存在することに驚いている。論理学について、たいして理解していなかったことの証左か。。。

こつこつ。

【MoL】18 Boolean Schemata (2)

現在、論理力を上げることに集中し、その他の勉強は休止中。
論理にある程度強くないと、他のものをやっても無駄に思えたため。

  • 前回は、boolean term schemataを導入した。導入とは、記法と解釈の定義のことだ。
  • 解釈としては、universesとobjectsを使った。universesをひとつに固定すると、それに含まれるobjectsが決り、そこでboolean term schemataの解釈とは、それらobjectsのなかのこれこれのobjectsについて'is true of'になるものですよ、ということであった。
  • この解釈を利用して、boolean term schemataのvalidity、consistency、implyを定義した。
  • また、boolean term schemataはsentence schemataでは無いが、真理値分析の対象に成り得て、Tや⊥に書換えることができる。
  • さて、続き。
  • 法則(i)

    • これも訳すのが難しいのでまず原文まま引用。
      "If a Boolean term schema is consistent, then in any universe containing a given object there is an interpretation of term letters that makes the schema come out true of that object."
    • 日本語で表現してみる。
      とあるbooean term schemaがconsistentであるとする。ならば、任意のuniverse (ただし含まれるobjectは1つだけ)において次のことが成り立つ。そのschemaを構成するterm lettersの解釈にはいろいろなものがありえるが、先のschemaをTにする解釈が必ず存在する。
    • これは、とあるschemaはconsistentということなので、それを構成するterm lettersにTだか⊥だかを入れる組み合わせてにて、そのとあるschemaをTにするものが存在することに依る。その組み合わせを、各term lettersにおけるa given objectsの解釈にしてしまえばよいから。

  • 法則(ii)

    • まず原文まま引用。
      "If a Boolean term schema is not valid, then in any universe containing a given object there is an interpretation of term letters that makes the schema come out false of that object."
    • あ、これは法則(i)が理解できるなら、簡単だ。なので日本語に訳さない。

  • 法則(iii)

    • まず原文まま引用。
      "If one Boolean term schema fails to imply another, then in any universe containing a given object there is an interpretation of term letters that makes the one schema true of that object and the other false of it."
    • これも同上。

  • 法則(iv)

    • (i)の一般形
    • まず原文まま引用。
      "If A1,...,An are Boolean term schemata and eatch of them separately is consistent, then in any universe containing distinct objects x1,...,xn there is an interpretation of term letters that simultanuously makes A1 true of x1, and A2 true of x2, and so on."
    • あ、これも簡単。


刻む。こつこつ。

2009年8月18日火曜日

【MoL】18 Boolean Schemata


  • No F are G. のようなstatementsを考えはじめたのがPart II。
  • これは、Part Iのschemataでは表現できない。
  • さて、FとかGは、自然言語でいうと名詞にあたる。論理学ではgeneral termsと言う。
  • このFとかGは、いろいろなobjectsにおいて、'is true of'となるようなものである。論理学用語としては'is true of'のところを'denotes'と言う。
  • 記法の導入。あるobject xがFであることをFxと書くことにする。
  • すると、FxとかGxは、Part Iの真理関数的表現の素材になれて、次のようなstatementを構成できる。
    Fx.-Gx.V.Gx→Hx.
    すなわちFxは、sentence schemataの新種である。
    これをxを括り出して、次のように略記する。
    [F-GV(G→H)]x.
  • この略記の結果でてきた-GとかG→Hとか(つまりxが略記された状態)を boolean term schemata と呼ぶ。
  • 例えば、Fが黒いということを表し、Gが白鳥であるということを表すなら、FGは黒い白鳥を表し、F-Gは黒くて白鳥では無いものを表す。
    注意:swans *or* blackは、FVGだが、これはswans *and* black thingsを表す。swans *and* blacは、FGだが、swans *or* blackではなく単にblack swansを表す。
  • validity、consistencyなどの概念は、truth functionalのものをそのまま採用できる。次のような感じ。

    • まず、'[F∨-F]xがvalidである'、の別の記法として'F∨-Fがvalidである'を許す。
    • さて、'Fv-F'がvalidである、ということはこのterm schemaが

      • 何らかのtermであるということなのだが、
      • それがどんなtermであるかというと、
      • 対象としてるschema(この例ではF∨-F)に現われる全ての文字(この例ではFのみ)に対する任意のinterpretationにおいて、
      • 任意のobjects x について'is true of'となるようなterm
      • ということ。


  • さて、ここで'文字の任意のinterpretation'って何ですか? と。それは次のように考える。

    • まず、今論理的に取り扱おうとしているuniverse of discourse (お話の世界?)というものを考える。話題とか観点とかのニュアンスなのかなぁ。
    • いずれにしても、termsを解釈するということは、話題の特定がまず必要という程度に理解しておく。
    • で、universe of discourseを決めるということは、すなわち、その議論に出てくるobjectsを決める(特定する)ということだよ、と。
    • その上で、文字'F'のinterpretationとは、前行で特定したobjectsの中で、'F'が'is true of'となるobjects達のことである。

  • 解釈が定義できたので、validも定義できる。

    • A valid term schemaとは、
    • 任意のchosen universeにおける
    • 全てのobjectsについて、
    • そのterm schemaにどのようなinterpretationを採用しても、
    • 'is true of'となるようなschemaである。
    • 原文は、、、
      "A valid term schema, then, is one that will come out true of all objects of any chosen universe under all interpretations, within that universe, of its term letters."

  • consistentも定義できる。原文まま引用。
    "A consistent term schema is true of some objects of some universes under some interpretations of its term letters."
  • implyも定義できる。原文まま引用。
    "One term schema implies another when, in every universe of discourse, every interpretation makes the second schema come out true of everything that the first comes out true of."
  • さて、boolean term schemataは、構造としてはPart Iのtruth-functional schemataと同じなので、validityやconsistencyやimplicationを検査するのにPart Iのtruth-value analysis を使える。'p'や'q'の代わりに'F'や'G'があるという感じ。真理値分析においては'F'や'G'のところにTや⊥を入れる。'F'は'Fx'(sentence schema)の略記であることに立ち戻れば、これも不自然はない?

いちおう逐語的には理解したけど、イメージはもやもやしている。
この章、ごつい。この章だけで一週間かかるかもしれない。

こつこつ。

【MoL】17 Limits of These Methods


  • ベン図の改良(C.I.lewis)。存在を×印ではなく、棒線で表す。
  • ベン図の限界。termsが5つ以上だと図を書くのがかなり難しい。
  • お、Lewis Carrollの例だ。
  • さて、このような限界があるので、もっと包括的な方法を作らなければいけない。
  • その方法は次のようなものを含む。

    • termsを表現できるschemata。
    • 'all'とか'some'を表現できるschemata。
    • decision procedure (決定手続き): validityを検査するための、機械的な手順。
    • これによって、syllogismsは、premisesからconclusionへのimplication testとして確認できる。


こつこつ。

【MoL】16 Syllogisms

Syllogisms、あまり好きじゃない。なんでだろう。

  • Syllogismsというのは、2つのcategorical statementsから1つのcategorical statementが論理的に導かれることに対する理論というか整理というか。なので、2つのcategorical statementsがベン図上で論理的な何かを示していても、それが4つのcategorical statementsのいずれかで表現できなければ、それはsyllogismsではvalidなsyllogismを構成できない。
  • syllogismsのvalidityは、ベン図で検査できる。
  • There are Gなどの存在に関するstatementを前提に加えれば、結論にcategorical statementを置くことができる場合もある。これらをreinforced syllogismsと言う。

こつこつ。

【MoL】15 VENN'S DIAGRAMS


  • おお、ベン図というのはもともとは集合論ではなく、論理学のために発案されたものなんだな。Venn's diagram (wikipedia)
  • この歳になって、ベン図の本来の記法と意味を初めて知った。。。orz

    • 白地は、その領域について何も知らない、ということ。
    • 斜線は、その領域についてobjectsが存在しない、ということ。
    • ×印は、その領域についてobjectsが存在する、ということ。

  • categorical statementsはすべてベン図で表現できる。
  • ベン図で図示してみると、categorical statementsどうしの関係がいろいろわかってくる。


体調が悪いが、こつこつ。

2009年8月17日月曜日

端末で論理記号がずれる (2)

Webで調べた。Unicodeでいうと、

EastAsian ambiguous width characters

というところが問題の根源らしい。

Emacs上での対応状況は、

[mule-ja-2009:09575]

以下のスレッドにくわしい。

2009年8月15日土曜日

【MoL】14 Categorical Statements


  • general terms 導入。自然言語から、抽象化。
  • なるほど、命題論理について、それはそれで正しいとして、さらにそのサブストラクチャーを探求していくというスタンスか。原子が原子核と電子から成る、というように。
  • termsとclassesの違い

    • これは今まで意識したことはなかった。勉強になる。
    • termsというのは個々のobjectsに対して、'is true of'/'is not true of'となるもの。例えば'Greek'は私においてはis not true ofであり、ギリシャ人の具体的な何某においてはis true ofとなるもの。
    • classesはtermsのextensionのこと。the extension of the term 'Greek'がthe class of Greek personsである。
      例えば、term 'ケンタウロス'は、それがis true ofであるものは現実には存在しない。すなわちextensionはempty classであると言う。例えば、'naural satellite of the earth'は月をただ一つのメンバーとするclassであると言う。

  • このようにtermsとclassesは関連した概念だが、termsを考えるときにclassesは必須ではない。termsは、is true of が個々のobjectsで成り立つかということだけだから。

こつこつ。

【MoL】Part I 完了

Part 1 Truth Functions の自分なりの再構築が終わった。Quineの主張にしたがって、implicationを判定する技法の習得を主体とした。問題を結構ごりごり解いた。やはり問題をやることは重要。理解の度合いとしては、70%くらいかなぁ。しかしスキルとして身に付けることが大事なので、今後も繰り返し問題を解いていきた。

さて、Part II General Terms and Quantifiers へ。

2009年8月13日木曜日

【MoL】implication と equivalence の関係


  • 再構築するなかで、Quineの記述が多少自分にとって弱いと思ったところ。
  • P.62の次の部分。
    "S1 implies S2 if and only if S1 is equivalent to the conjunction of S1 and S2"
  • これを自分なりに理解し、文章にする。

    • まず、'S1 implies S2'は、schemataに対するメタな言明である。
    • 具体的には、'S1 -> S2'がvalidである、ということ。
    • 同様に、'S1 is equivalent to the conjunction of S1 and S2'は、'S1 <-> S1S2'がvalidである、ということ。
    • よって、先の全体は、このメタな言明どうしの関係を示しているので、少なくともメタ、見方によってはメタメタな言明。
    • メタメタというのは、
      " 'S1->S2'がvalidである" であるならば、かつ、その場合に限り、" 'S1<->S1S2'がvalidである" である。
      ということ、メタメタはメタに集約してもいいかもですが、まあこういう見方もできる。
    • そこで、この言明が正しい(ここでの正しいとは何だ?)の確認をする。
    • 'S1 implies S2'ということは、'S1 -> S2'がvalidである、ということだったから、このschemaが常にTとなるということであった。これはS1とS2の取り得る値を制限しており、
      S1 S2
      T T
      F T
      F F
      しか起りえないというとである。さて、S1とS2がこういうものであれば、
      S1 S2 S1<->S1S2
      T T T<->TT
      F T F<->FT
      F F F<->F
      から、S1<->S1S2はvalidであることがわかる。
      次にS1とS1S2がequivalentであるということは、S1<->S1S2がvalidであるということであり、真理値分析により、S1とS2は、
      S1 S2
      T T
      F T
      F F
      しか起りえないということである。これは上の真理値表と等しいので、このとき'S1->S2'もvalidである。
    • すなわち、このメタメタ言明は、メタ言明によって真理値表のとりうる値を制約していることがポイントなのだ。
    • ただし、メタメタ言明がiffなので、結局Tとなる解釈が完全に両者一致していますよ、ということになるから、'S1->S2 . <-> . S1 <-> S1S2'というbicondtionalがvalidかどうかを確かめてもこのことは確認できる。Quineはこのように説明しているが、上の真理値の制限については言及していない。
    • また、ここで真理値の制限と書いて、解釈の制限と書かなかったのは理由がある。
    • 解釈の制限と言ってしまうと、validって何なのさ、となってしまう。なので、ここで、S1とS2の組と取りうる真理値が制限されているのは、あくまでこれらschemataが原始論理式(pとかqとか)から構成されていて、それらがとりうる解釈をすべて網羅してもS1とS2は真理関数としてのoutputとして制限されている、ということである。
    • うむ。すっきりした。

  • ただし、ここでの私の理解は実戦的にはたいして意味はない。実戦的に意味があるのは、
    'p->q'が'p<->pq'とequivalentなので、これら2つのschemataを、真理値分析においていつでも入れ替えることができる、ということだろう。さて、equivalentはsubstitutionで壊れないから、より一般的には、'S1->S2'と'S1<->S1S2'をいつでも入れ替えていいよ、ということ。

2009年8月11日火曜日

【MoL】13 Axioms


  • 数学や物理に論理を適用するときは、それらの分野の公理を決めて定理が論理的に含意するかどうか、とやるよ。
  • 論理自体も、自分自身の公理を立てて組み立てる流派もあるよ。
  • その流派では、公理として認めるtheorem(自動的にvalidとするschemaのこと)をたて、形式的推論規則でそれを変形していろいろなtheorem(validであるschemaのこと)を生成(証明)する、というやり方。いわゆる形式的理論に近いな。
  • 例:ルカシビッツの公理系
    公理1 p -> q .->: q -> r .->. p -> r
    公理2 p -> .-p -> q
    公理3 -p -> p . -> p
    推論規則1 [modus ponens] p->qが定理であると知れているとする。pが定理であるなら、qも定理としてよい。
    推論規則2 [substitution] ある定理のあるletterを、すべてなんらかのschemaに入れかえたものは、定理である。
  • 例:ルカシビッツの別の公理系
    公理 p|.q|r:|::s|.s|s:|:.s|q.|:p|s.|.p|s
    推論規則1 [modus ponens] a|.b|cのaがtheoremなら、cもtheorem。
    推論規則2 [substitution] 上に同じ。
  • 公理一つというのはすごいな。おそらく、命題論理が演算子ひとつで構築できることと関係しているのだろう。
  • completeの概念の導入。公理系と推論規則の選び方はいろいろあるが、それらが全てのvalidなschemaを証明できるときcompleteであるという。
  • 公理的な論理というのはそれ。十分に整備された論理を、数学とか物理に適用する、ということや、そのための技法はそれとは別のこと。Quineは、命題論理については後者が大事というスタンスのようだ。
  • 命題論理で公理的手法をやっておくことは、他の形式的手法の訓練になるとshefferは言うが、Quineは懐疑的である。その2つは、全然別物じゃん、と。なので、Quineとしては、この本で、命題論理におけるimplicationの技法をひたすら説明してきたぞと。なぜなら、命題論理を何かに適用しようとしたら、重要なのはimplicationだから。
  • この本、1950が初版で、第4版(最終版)が1982。今読んでいるのは、最終版。最終版まで、この内容が残っているということは、Quineは命題論理を形式的に扱うのが相当嫌だったんだなぁ。


今日は時間切れ。
これでPart Iたる命題論理が完了。

明日から自分の頭の中で命題論理を再構築してみる。

こつこつ。

【MoL】12 Duality


  • dualityの概念の導入。
  • pqとpVqはduals。
    p q pq
    F F F
    F T F
    T F F
    T T T
    この真理値表ですべてのTとFを反転すると
    p q
    T T T
    T F T
    F T T
    F F F
    これはpVqの真理値表に他ならない。だからduals。
  • 真理値表を全部反転しなくても、最後の列だけ反転して、それを上下反転して確かめることもできる。ほんとだ!
  • なので、self-dualなschemaというのは真理値が上下に対称であるかどうかで判別できる。なるほど。
  • first law of duality
    Sがconjunctionとalternationとnegationとからできているとする。Sのconjunctionをalternationに、alternationをconjunctionに入れ替えたものをS'とする。SとS'はdualsである。
  • second law of duality
    Sの全てのlettersにnegationをかけて、さらに全体をnegationすると、それはもとのもののdualである。
  • この観点でいうとドモルガンの法則はdualityの原理である。
  • third law of duality
    schemaがvalidなのは、そのdualがincosistentなときであり、逆も成り立つ。
  • まあ、そりゃそうだ。
  • fouth law of duality
    S1 implies S2ならば、dual of S2 implies dual of S1 が成り立つ。
  • いわゆる、対偶も成立、というやつか。
  • fifth law of duality
    (S1 and S2 equivalent) if and only if (dual of S1 and dual of S2 equivalent)


こつこつ。

【MoL】11 Simplification


  • alternation normal formを、より短い表現に等価(equibalent)変換していくことをsimplificationと言う。その技法の紹介。
  • simplificationにはうまいアルゴリズムは存在しない。よって、技法と経験を駆使してやるしかない。


こつこつ。

【MoL】10 ALTERNATION NORMAL FORM


  • alternation normal schemata 導入。
  • これ、昔どこかでやったなぁ。
  • developの概念導入。


新しい知見はなし。

こつこつ。

【MoL】9 Equivalence


  • "Thus, just as implication is validity of the conditional, so equivalence is validity of the biconditional." なるほど!!
  • 必要条件、十分条件という言葉を自分の中で使おうとすると、とたんに混乱する。おそらく、正式には、A implies Bのとき、AはBの十分条件であると言い、BはAの必要条件であると言う、のだろう。ただ、必要って何ですか? 十分って何ですかというと、この定義以上に意味は無いので、まあ使わないほうがいいかな、と。必要や十分の言葉の意味にひっぱられると混乱する。ちなみにAはBの必要十分条件である(またはこの逆)、ということは、AとBがequivalentである、ということの別の表現です。
  • interchange導入。
  • first law of interchange
    'p <-> q' implies ' ...p... .<->. ...q...'
  • second law of interchange
    S1とS2がequivalentであるとする。
    なんか新しいschema Sを考える。
    Sのある部分schemaをS1に変えたものをS1'とする。
    Sのある部分schemaをS2に変えたものをS2'とする。
    S1'とS2'はequivalentである。
  • third law of interchange
    schemaの一部をその一部とequivalentなschemaにinterchangeすることは、consistencyとvalidityに関するあらゆる性質を保存する。付随して、implicationとequivalenceに関するあらゆる性質も保存する。
  • equivalentによるinterchangeというのは真理値分析の手間を大幅に削減するツールとなりえる。(本人の能力次第だが)

【MoL】8 Words into Symbols


  • 自然言語の日常的な文章を論理表現に変える技術のお話。
  • A only if B が、if A then Bと同じ意味というのがどうも慣れない。
  • そうか。only ifが〜である場合に限って、であるとするとAがtrueになるのはBがtrueになるときだけ、という言明であり、真理値表でいえば、
    A B
    F F
    F T
    T F
    T T <-ここだけがTという言明。
    ということだ。これは->の定義に等しいな。
  • 論理表現に変換するときには、節の中身を変項する必要があることもある。
  • 形式的論理というのは、記号を中心におき、抽象の世界の可能性を探っている。しかし、Quineのような論理学は、自然言語の中の論理というものの方に軸足がある。どちらも両足なのだが、軸足がどっちかというバランスが違う。


こつこつ。

2009年8月10日月曜日

【MoL】7 IMPLICATION


  • logicの醍醐味は、科学において、または日常の会話において、推論が正しいかどうかの判定につかえるということ。
  • logicというのは、follow logically、「論理的に導かれるでしょ」ということに対する、さまざま装置と工夫と言ってもよい、と。
  • そこで重要な概念は imply。
  • "implication is validity of the conditional" なるほど!!
  • ->は、あくまでif-thenの近似たるconditionalであって、そのものはimplicationでは無い。if S1 then S2がvalidであるときにそれをS1 implies S2と言う、と。これはすっきりした定義。
  • ただし、Whitehead&Russellでさえ->そのものをimplicationと呼んでいる、とのこと。うむぅ。


ここで時間切れ。
こつこつ。

【MoL】6 CONSISTENCY AND VALIDITY


  • interpretationをベースにして、schemaのconsistent, inconsistent, validを定義。
  • validは、トートロジのこと。inconsistentの定義は、validのnegation。consistentは、validでもinconsistentでも無いこと。
  • ここら辺の用語の選択、下手じゃないかなぁ。
  • validなschemaは、言明としては無内容である。validなschemaというのは、それ自体が目的ではなくて、それがいろいろな手段になることが重要だ、とのこと。なるほど。
  • 例えば、真理値分析をスピードアップできる。
  • validなschemaへの別のschemaの代入は、validityを維持する。consistentなschemaは性質が変化してしまう。


こつこつ。

【MoL】5 TRUTH-VALUE ANALYSYS


  • Quineは、論理言明のための表現をschemata(単数はschema)と呼ぶ。最近の用語ではメタ言語が該当するのかな。
  • 真理値、正式に登場。記法は、
    真:T
    偽:⊥
  • 解釈(interpretation)登場。
  • 真理値分析という木構造を書くことによって、真理値関数を調べる。真理値表よりも効率がよい。これは便利!
  • ドット記法の良さがわかった。手書きで真理値分析していくときに、"( )"よりも"."の方が圧倒的に楽。
  • 真理値分析はQuine発明とのこと。


こつこつ。

【MoL】4 GROUPING


  • 自然言語の文の中のグルーピングは、実に様々な文法規則を援用して実行されている。これはこれ自体精緻なもの。
  • しかし誤解するときもあるし、曖昧なときもある。
  • logicでは、括弧を使うので無問題。うむ。
  • しかし、括弧は邪魔だよね。うぅ。
  • そこで強化記号というのを導入する。これがすごい。

    • 基本は演算子の優先度で結合。
    • 優先度を落したい(すなわち文の区切りとしては大きくしたい)ところに"."をいれる。
      たとえば、
      p q V r
      は優先度から、
      (p q) V r
      だが、
      p . q V r
      とすると、
      p (q V r)
      を意味する。これlispに使えるかなぁ。
    • 演算子にもつけられるので、
      p -> q . r .V s

      ((p -> q) r) V s
      となる。慣れるとすぐ読める。
    • ":"という"."よりもさらに弱い(文の区切りとしては大きく)記号もある。
      これを使うと、例えば、
      s V (p (q -> r) <-> (p V q) r)t
      は、
      s V: p . q -> r .<->. p V q . r : t
      となる。あれ?括弧がある方が見ためでいえばコンパクトかも。

  • さらにŁukasiewicz の記法。
  • これは前置記法なので、Lispと親和性がありそう。
    例えば、
    s V (p (q -> r) <-> (p V q) r)t
    は、
    AsKEKpCqrKApqrt
    となる。negationはN/1、conjunctionはK/2とかのarityになって、arity以上の文字が続く場合は、それをrestとして引数にしちゃうということ。listで書くと、

    (A s
    (K (E (K p
    (C q r))
    (K (A p q)
    r))
    t))

    こんな感じ。arityを固定すると、こんなことができるんだなぁ。
  • ドット記法は、Peanoが発明して、Whitehead&Russellに引き継がれたものらしい。


こつこつ。

【MoL】3 THE CONDITIONAL


  • 相変わらず、古語が多い。。。
  • implicationと言わず、conditionalなんだな。理由がありそう。
  • conditionalは直接法のif-thenの近似。
  • 自然言語のif-thenとの差、特に仮定法についての記述が丁寧。
  • 英語文法でいうと直接法と仮定法にifは別れる。論理学としては、それぞれmaterial if とcotrafactual if が対応するが、contrafactual if はlogicに適合しない。仮定法だから、if A then BのAはfalseのものについて話をしているから。
  • biconditionalも導入。


こつこつ。

【MoL】2 TRUTH FUNCTIONS


  • この段階で真理値が出てくることからも、入り方は、形式的な本ではない。自然言語から抽出してく過程にて説明する本。
  • truth-functionというのを天下りに与えるのではなく、truth-functionalなものだけをlogicでは扱う理由を丁寧に説明。truth-functionalでないものは、まずそのtruth-valueを合意形成できないことが現実的に多いということ。


こつこつ。

【MoL】1 NEGATION, CONJUNCTION AND ALTERNATION


  • negation, conjunction と alternationを導入。
  • とても丁寧な導入。
  • alternationはdisjunctionのこと。disjunctionと言い出したのはWhitehead&Russellらしい。
  • 排他的orと非排他的orと、英文のorについての説明がわかりやすい。
  • 記法が現代とは違う。ペアノの記法とパースの記法の流れをくんでいるらしい。
    negation:- または文字の上にバー
    conjunction: pq
    alternation: pVq


こつこつ。

【MoL】INTRODUCTION

この本については、基礎訓練なので、特に勉強になったことや感想などを書いていく。

まずはイントロダクション。


  • 英語がさすがに古風。こんなに辞書を引いたのは久しぶり。
  • この序文の考え方、AIMAの人工知能の考え方に似ている。
  • 物理、数学、論理の関係について全体像を示す。
  • この序文、一読の価値はあるのでは。


こつこつ。

2009年8月9日日曜日

"Methods of Logic"を読む

プログラム検証論を読むにつれ、記号論理に習熟しないと駄目だと感じた。基礎訓練が足りていない感じ。そこで、W.V.Quineの、

Methods of Logic

を読むというか基礎訓練の第一歩とすることにした。

こつこつ、スキルを上げていきたい。

【JT】4 クラスとオブジェクト (その4)


** 入れ子のクラス
- 入れ子クラス:Javaでは、クラスの中で別のクラスを
定義できる。これはCLOSではできないような。
- 入れ子クラスは二種類ある。
- static
- 非static (内部クラスとも呼ばれる)
*** なぜ入れ子のクラスを使うのか
- 入れ子クラスを使う3つの理由
- クラスのグループ化
- あるクラスが、別のあるクラスにとってのみ意
味をもつときにグループ化として使える。
- カプセル化
- まあ、そうなんですが。。。
- メンテナンスの容易性
- クラス定義とその利用箇所が近くなるので。
- うーん。いまいち、入れ子クラスの有用性がわから
ない。。。
*** staticな入れ子のクラス
- 特になし。
*** 内部クラス
- 特になし。
*** 内部クラスの例
- お、例を書いてみると有用性が見えてきた。自分な
りのまとめを。
- まず、クラスが概念的に大きなものであるとき、
メソッドをフラットに並べるのではなく、分類し
たいという内部概念が発生することがあるのだろ
う。そのときそれを入れ子クラスで表現する。
- 付随的な効果として、名前空間の整理があるだろう。
前項のような概念構造とのときにクラス内フラット
に、もしくはトップレベルにその名前が存在する
のはよろしくない。
- また、同じことの違う側面だが、Javaではデータ構
造をクラスで表現するので、ある処理の内部で、そ
して内部のみで必要なようなデータ構造がでてくる
こともある。するとクラスをニーズがあるまさに
その局所で定義できた方がよい。
- 内部クラスには、他のメンバと同じように修飾子を
つけることができ、意味も同じ。
- ローカル内部クラスと匿名内部クラス
- ローカル内部クラス
- メソッドの中でクラスを定義。
- 匿名内部クラス
- ローカル内部クラスで名前が無いもの。
*** 入れ子クラスのまとめ
- スコープという言葉がでてくるが、ここでいうスコー
プがなんなのかの定義がないので正直理解できない。
- チュートリアルとしては、入れ子クラスは簡単な紹
介のみというスタンスのようなので、先に進む。
*** 設問と演習:入れ子のクラス
**** 設問
- 1.
- 学習素材がWebに置かれることもあるんだな。
- http://java.sun.com/docs/books/tutorial/java/javaOO/QandE/Problem.java
- あ、そうか。この本もともとオンライン版がある
んだ。
- さて、答は、staticな入れ子クラスからインスタ
ンス変数を参照するにはオブジェクト参照を介さ
ねばいけない。
- 2.
- a.
Box.Filter
- b.
Box.AccessibleBox
- c.
java.awt.Container.AccessibleAWTContainer
- d.
Box.Filter
- e.
new javax.swing.Box.Filter(min,pref,max);
// min pref max はDimensionクラスのインスタンス。
**** 演習
- こうなった。
InnerClass2 $ java Class1
InnerClass1: getString invoked.
InnerClass1: getAnotherString invoked.
InnerClass2 $
- う、何を言いたいのが掴めない。
** 列挙型
- 列挙型(enum type)は型である。
- 列挙型は定数を複数含んでいる。定数の集合のよう
なもの。
- 定義の例は次のとおり。

public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

- 列挙型は自動的にクラスでもある。(暗黙のうちに
java.lang.Enumを継承している。)よって、public な
上記Dayは、Day.javaにて定義しなければいけない。
- 列挙はこのままで配列なわけではない。staticメソッ
ドvaluesによってそれが得られる。
- うぉ。こういう風にデータ記述とfinalとコンストラ
クが連携するのか。。。
public enum Planet {
MERCURY (3.303e+21, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6);

private final double mass;
private final double radius;
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
...
}
- listとsymbolがあればいいじゃん、とも思ってしま
う。
*** 設問と演習:列挙型
**** 演習
- 1. こんな感じ?
Rank.java
---
public enum Rank {
ACE (1),
TWO (2),
THREE (3),
FOUR (4),
FIVE (5),
SIX (6),
SEVEN (7),
EIGHT (8),
NINE (9),
TEN (10),
JACK (11),
QUEEN (12),
KING (13);
private final int number;
Rank(int number) {
this.number = number;
}
public int getNumber() {
return number;
}
}
---

Suit.java
---
public enum Suit {
DIAMOND, SPADE, HEART, CLUB
}
---

Card.java
---
public class Card {
private Rank rank;
private Suit suit;

Card(Rank rank, Suit suit) {
this.rank = rank;
this.suit = suit;
}
Card() {
this(Rank.ACE, Suit.DIAMOND);
}

public Rank getRank() {
return rank;
}
public Suit getSuit() {
return suit;
}
}
---
- 2. こんな感じ?
Deck.java
---
public class Deck {
private Card[] cards = new Card[52];
Deck() {
int i = 0; // index of cards
for (Suit s : Suit.values()) { // iterate for suits
for(Rank r : Rank.values()){ // iterate for ranks
cards[i] = new Card(r, s);
i++;
}
}
}

public void showCards() {
for(Card card : cards) {
System.out.println("suit:" + card.getSuit() + ", " +
"rank:" + card.getRank() + ", " +
"rank in number:" + card.getRank().getNumber());
}
}
}
---

PlayingCardsDemo.java // これは無変更
---
class PlayingCardsDemo {
public static void main(String[] args) {
Deck myDeck = new Deck();
myDeck.showCards();
}
}
---
** 注釈
- 注釈(annotation)はプログラムのメタデータである。
- コードの動作に直接は影響を及ぼさない。
- 注釈を利用するもの
- コンパイラ
エラー検出、警告抑止。
- 配備ツール
配備時のコード生成
- 実行時のインタラクション
注釈は実行時にも参照可能。
- 注釈は、各種宣言に付与できる。
- 例をいくつか。

@Author(
name = "Hoge Piyo",
date = "2009/8/9"
)
class MyClass() {}

@SuppressWarnings(value = "unchecked")
void myMethod() {}
*** ドキュメンテーション
- 注釈は型を持つ。
- 注釈の型は、Javaであらかじめ定義されているもの
と、ユーザが定義するものがある。
- ここでは、ユーザ定義の方法を示す。
- 例えばクラスのドキュメンテーションを注釈で実施
する。
- クラス前文型を定義する

@interface ClassPreamble {
String author();
String date();
int currentRevision() default 1;
}

- 使う。

@ClassPreamble {
author = "Hoge Piyo",
date = "2009/8/9",
currentRevision = 3
}
public class Puyo {
// Class codes
}

- Javadocで生成されたドキュメントにこの情報を入れ
るには、@ClassPreambleの定義を次のようにする。

import java.lang.annotation.*;

@Documented
@interface ClassPreamble {
String author();
String date();
int currentRevision() default 1;
}

- うーん。Javaってこういう風にどんどん構文や意味
が増えていくのかなぁ。。。
*** コンパイラが使用する注釈
- 言語仕様にて定義済みの注釈型。いずれもコンパイ
ラが使う。
- @Deprecated
これがついているものを使うとコンパイル時に警
告がでる。
- @Override
スーパークラスのメソッドをオーバーライドする
ことを明示する。これがなくてもオーバーライド
するが、オーバーライドする対象がスーパークラ
スに無いとコンパイルエラーになるので、エラー
の予防にはなる。
- @SuppressWarnings
警告表示を抑制する。警告には、"deprecated"と
"unchecked"の2つのカテゴリがあり、これを指定
できる。
- 例
@SuppressWarnings("deprecation")

@SuppressWarnings({"deprecation",
"unchecked"})
*** 注釈の処理
- 注釈プロセッサは、注釈に基づくアクションを実行す
る。位置的には、Cのマクロプロセッサみたいなもん
かなぁ。
- JDK6.0では、注釈プロセッサ(名前はapt)がJavaコン
パイラに組み込まれている。
- 注釈情報を実行時に利用するためには注釈型の定義
時に指定が必要。
- 例
import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@interface SomeAnnotationForRuntime {
// ...
}
*** 設問と演習:注釈
**** 設問
- 1. うーん。わからない。javadocを書いていないこ
と?
- 2. コンパイルしたけど、何もおこらない。

AnnotationProblems $ javac Closable.java
AnnotationProblems $

- 3. なるほど。これを抑制するには、インターフェイ
スの@Deprecatedを外すしかない。
@SuppressWarningsはメソッドの定義時に対しては効
かないようだ。


この程度ちょこっと進むのにも、4時間くらいかかる。。。
なんとかならんかなぁ。

こつこつ。

【DbiD】9 論理を少々

Relational Calculusを本書ではリレーショナル計算と訳しています。
Webを調べると、関係論理という訳語がより一般的なようです。

さて、関係代数は、集合論の演算子を主体に組み立てられていました。

関係論理では述語論理の語彙と意味を主体に組み立てられています。

集合論自体がその演算子の定義に内包表記と論理表現を使っていますので、まあ、これも可能と思います。

関係代数と関係論理は理論として等価となるように設計されているようです。
これは関係完備(relational complete)という用語の定義そのもので、関係論理は関係完備である、ということです。

さて、関係論理は述語論理ですが、一階述語論理そのものではありません。
例えば、限量子としてUNIQUEがあります。
また、部分集合を簡易に利用するためのRANGE OVERという語彙があります。
記述力として一階述語論理以下の理論と思いますが、形式的理論としては別物です。
(論理的語彙は一階述語論理以外のものもあるが、一階述語論理にて記述可能ということ)

関係代数との比較でいうと、タプルは登場しません。データは、述語、定項と変項で表現されます。
その点、Prologに、より近いのかもしれません。

これにて、読了、です。


さて、ぐだぐだな感じでの読了は初めてなのですが、いくつかアドバイスを。

  • C.J.Dateのリレーショナルモデルを学ぶなら、この本は適していません。完全な記述ではありませんし、エクスカリバー的なノイズに溢れています。
  • リレーショナルモデルを学ぶなら、C.J.Dateのものだけでなく、他のものも学ぶべきであろうことを感じました。
  • リレーショナルモデル自体は、おもしろいものですし、有用なものと思います。
  • もし、この本を読む場合は、訳書より原書がいいと思います。


こつこつ。

【DBiD】8 リレーショナルモデルとは何か

いままでの内容のまとめです。
新規のことはほとんどありません。

リレーショナルモデルの厳密な定義を示すということですが、
あまり厳密ではありません。

リレーショナルモデルのコンセプトや動機をまとめる、
といった方が適切でしょう。

訳書と肌が合わないので、原書を読みました。

こつこつ。

2009年8月8日土曜日

【検証論】5 ホーア論理の数学 (その7)


*** 5.2.4 相対完全性定理
**** 再度自分なりに「十分な記述能力を持つ」を確認する
- どうもしっくりこない。この最弱前条件と十分な記
述能力を持つということが。そこで、再度自分なり
に確認する。
- まず、最弱前条件と呼ばれる、状態の集合の定義。

pwpI(P,B) = {p|∀p'.(ExecI'(P,p,p') => I’,p' |= B}

- これはわかる。
- 次に、表明Aが状態集合Sを表現する、ということの定
義。

S = {p| I,p |= A}

であるとき、表明Aは状態集合Sを表現する、と言う。

- 注意点。Sを表現するAはたくさんある。あるAが表現
しているとして、Aと同値な表明はすべて表現してい
ると言える。
- 注意点。∀p.(I,p |= A' => I,p |= A)となるA'があ
るなら、次が成り立つ。

∀p.(I,p |= A' => p ∈ S}

違う言葉でいうと、前者をみたす状態の集合は、後
者を満たす状態の集合の部分集合である。
- さて、任意のプログラムPと表明Bについて、
pwpI'(P,B)を表現する表明が存在するとき、
PHL(PV,AV,I)は十分な記述能力を持つという。
- このこと自体はそんなに理解は難しくない。
- このことを形式的に書いてみよう。
∀P∀B∃A∀.(I,p |= A => p∈pwpI(P,B) )
- ところで、とある{A}P{B}について

PHL(PV,AV,I) |= {A}P{B}

が成立する、ということの定義は、

∀p∀p'.(I',p |= A => (ExecI'(P,p,p') => I',p' |= B))

であった。ここでI'は解釈Iのうち表明に関する部分。
以降、Iは解釈の対象の部分に文脈によって限るものとする。
- これは、十分な記述能力を持つことの定義に似てい
る。どのくらい似ているか調べてみる。
- 十分な記述能力をもつことの形式的記述を展開してみる、

∀P∀B∃A∀p.(I,p |= A => p∈pwpI(P,B) )



∀P∀B∃A∀p.(I,p |= A => p∈{p''|∀p'.(ExecI(P,p'',p') => I,p' |= B} )

である。さて、pが集合に属するということは、その
内包表記の条件を満たすのでこの後の部分は集合表
記を外すことができる。

∀P∀B∃A∀p.(I,p |= A => ∀p'.(ExecI(P,p,p') => I,p' |= B} )

前半はp'を含まないので、p'の限量子は前に出すこ
とができる。

∀P∀B∃A∀p∀p'.(I,p |= A=> (ExecI(P,p,p') => I,p' |= B} )

これは完全であることの言明とほぼ同値である。違う
のは、PとBを先に固定したときに、それに対応するA
が必ず存在するという情報が入っていることだ。

これが重要なポイントだ。


- では、ここでこまごまやってきたことはどういう価
値があるのか、まとめてみる。
- まず、新しく「状態集合を表現する言明」という概念
を導入した。それをつかって、伴意の後半を満たす
状態集合を最弱前条件として定義した。さらに、最
弱前条件を表現するAをホーア論理が持つとき(十分
な記述能力があるとき)、伴意するということは、

∀P∀B∃A∀p.(I,p |= A => p∈pwpI(P,B) )

と同値であることがわかった。
- これによって、完全性を示すということは、

伴意 => 形式的に証明可能

を示すということであったが、それをホーア論理が
十分な記述力を持つときは、

∀P∀B∃A∀p.(I,p |= A => p∈pwpI(P,B) )
=> 形式的に証明可能

を示せばよいということになることがわかった。
- だいたいわかった。だけど本に記載されている次の論
理式は理解できない。

I |= {A}P{B} <=> I |= A => pwp(P,B) (5.8)

- とりあえず、これは無視する。上のように自分なり
に理解した形で相対完全性定理の証明をこころみる。
(5.8)を理解しないと証明できないとわかったら、理
解を試みる。
**** 閑話休題
- 相対完全性定理の証明を読み、自分でも書きつつ考
える。
- おおすじは理解できた。
- しかし代入性や項書換えのところがスキルが足りなく
ておいつかない。
- これをちゃんとやるには、項書換えについてそこそ
こ訓練しないと駄目な気がする。形式的言語の取り
回しスキルが全般的に足りていない。
- 相対完全性定理をちゃんとやるのは将来の課題として
先に進む。


のろのろ。

【JT】4 クラスとオブジェクト (その3)


** クラス詳説
*** メソッドから値を返す
- 呼び出し元に制御を返す場合分け
- メソッド内にて実行する文が無くなった。
- return文の実行として。
- メソッド内で例外がスローされた。
- 呼び出し元に値を返す。
- 呼び出し元に返す値の型は、メソッド宣言にて指
定する。
- 呼び出し元への値の返却は、return文で実施する。
- return文に付与する式や値の型と、戻り値型は一
致しなければならない。
- ただし、戻り型がクラスの場合、returnするものの
型はそのサブクラスでもよい。これはメソッドの値
返却の話題ではなく、クラスシステムの話題じゃな
いかなぁ。
- この技法を共変戻り型(covariant return typeと
いう。
- また、戻り型がvoidのときは、return文を省略して
もよい。return文を入れるときは、式を記述しない
return;とする。
*** キーワードthisを使う
- キーワード this はカレントオブジェクトを表す。
- 使用例:シャドウイングの回避

public class Point {
public int x = 0;
public int y = 0;

public Point(int x, int y) {
this.x = x;
this.y = y;
}
}

- おもしろい。thisは現在の文脈におけるグローバル
環境を指す、みたいなもんだな。
- 使用例:同一クラス内の別コンストラクタを指す

public class Rectangle {
private int x, y;
private int width, height;

public Rectangle() {
this(0,0,0,0);
}

public Rectangle(int width, int height) {
this(0,0,width,height);
}

public Rectangle(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
}
*** クラスのメンバーへのアクセスを制御する
- この本、用語の運用がいまいちなところがある。{修
飾子,アクセス修飾子}について、その関係をちゃんと
説明せずに、同じキーワードについて入り乱れて使っ
ている。
- アクセス制御:アクセス修飾子などを用いてアクセ
スを制御する機構をアクセス制御と呼ぶ。
- アクセス制御による制御は、対象を2階層に分類して
いる。
- トップレベル :クラス等
- メンバーレベル:クラスのメンバー等
- トップレベルにおけるアクセスレベル

| アクセス修飾子 | パッケージ | 全世界 |
|----------------+------------+--------|
| public | Y | Y |
| 修飾子なし | Y | N |


- メンバーレベルにおけるアクセスレベル

| アクセス修飾子 | クラス | パッケージ | サブクラス | 全世界 |
|----------------+--------+------------+------------+--------|
| public | Y | Y | Y | Y |
| protected | Y | Y | Y | N |
| 修飾子なし | Y | Y | N | N |
| private | Y | N | N | N |

- クラスは、そのメンバーが属するクラス。
- パッケージは、そのメンバーが属するクラスが属
するパッケージ。
- サブクラスは、そのメンバーが属するクラスのサ
ブクラス。
- このアクセス制御というのはどういう風に位置付け
たらいいか。
- まず、Javaでは、Common Lispと異なり、名前空間
はクラス毎である。(Common Lispはパッケージ毎)
- そこで名前の可視性の定義はクラス毎(及びそれ以
上)となる。
- そのような違いがあるだけで、アクセス制御が名
前の可視性の指定であるという点は、Javaと
Common Lispに違いはない。
*** インスタンスメンバーとクラスメンバー
- キーワード static を紹介する。
- クラス変数
- フィールドの宣言にあたり、修飾子 static をつ
けるとクラス変数になる。(つけなければインスタ
ンス変数)
- クラス変数を宣言するとメモリが確保される。その
メモリが、クラス変数の名前が指す場所であり、値
が格納されている。その固定的な束縛は、そのクラ
スの任意のインスタンスに含まれている。
- クラス変数はインスタンスがひとつも存在しなく
ても利用可能。
- 例

public class Bicycle {
private int cadence;
private int gear;
private int speed;
private int id;
private static int numberOfBicycles = 0;

public Bicycle(int startCadence,
int startSpeed,
int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
id = ++ numberOfBicycles;
}
public int getID() {
return id;
}
}

- クラス変数に、当該クラス外からアクセスすると
きなどは、

クラス名.単純名

という構文が使える。インスタンスがあるときは、
インスタンスの参照経由でもアクセスできる。
- クラスメソッド
- メソッドの宣言において、修飾子staticをつける
とクラスメソッドになる。
- クラスメソッドは、そのクラスのインスタンスが
一つも存在しなくとも利用できる。
- 変数とメソッドの参照ルール
- IM : インスタンスメソッド
- IV : インスタンス変数
- CM : クラスメソッド
- CV : クラス変数
- 縦軸は文脈。(参照する側)
- 横軸は参照されるもの。

| | IM | IV | CM | CV |
|----+----------------------+----------------------+--------+--------|
| IM | 単純名 | 単純名 | 単純名 | 単純名 |
| CM | オブジェクト参照経由 | オブジェクト参照経由 | 単純名 | 単純名 |

- 本では文章で書いてあるから複雑かな、と思って
しまうが、表にすると至ってシンプル。
- 定数
- 修飾子 static と修飾子 final を両方同時に宣言
することによって、定数を表現することがある。
- 修飾子 final はその変数が変更不可能であること
を指示し、変更処理の対象になっていると、コン
パイラがエラーとなる。
*** フィールドを初期化する
- この項、次のものがでてくる。
- static初期化ブロック
- 初期化ブロック
- finalメソッド
- 正直、ここの説明で理解することは難しそうなので割
愛。
*** クラスとオブジェクトのまとめ
*** 設問と演習:クラス
**** 設問
- 1.
- a. x
- b. y
- c.
a.y = 5
b.y = 6
a.x = 2
b.x = 2
**** 演習
- 1. こんな感じ?

Card.java
---
public class Card {
private int rank; // [1,13]
private String suit; // "Diamond", "Spade", "Heart", "Club"

Card(int rank, String suit) {
this.rank = rank;
this.suit = suit;
}
Card() {
this(1,"Diamond");
}

public int getRank() {
return rank;
}
public String getSuit() {
return suit;
}
}
---

Deck.java
---
public class Deck {
private Card[] cards = new Card[52];
Deck() {
String[] suits = {"Diamond", "Spade", "Heart", "Club"};

for(int i=0;i<4;i++) { // index of suits
for(int j=0;j<13;j++){ // index of rank
cards[j + i * 13] = new Card(j + 1, suits[i]);
}
}
}

public void showCards() {
for(Card card : cards) {
System.out.println("suit:" + card.getSuit() + ", " +
"rank:" + card.getRank());
}
}
}
---

PlayingCardsDemo.java
---
class PlayingCardsDemo {
public static void main(String[] args) {
Deck myDeck = new Deck();
myDeck.showCards();
}
}
---

*** 設問と演習:オブジェクト
**** 設問
- 1. Rectangleオブジェクトを生成していない。
- 2. Pointオブジェクト : 1, Rectangleオブジェクト : 1
- 3. 参照を0にする。
**** 演習
- 1. こんな感じ?
public class SomethingIsWrong {
public static void main(String[] args) {
Rectangle myRect = new Rectangle();
myRect.width = 40;
myRect.height = 50;
System.out.println("myRect's area is " + myRect.area());
}

}
- 2. こんな感じ?
public class NumberHolderDemo {
public static void main(String[] args) {
NumberHolder myNum = new NumberHolder();
myNum.anInt = 10;
myNum.aFloat = 1.03F;
System.out.println("#<Class myNum: anInt=" + myNum.anInt +
", aFloat=" + myNum.aFloat + ">");
}
}


この章、長い!
こつこつ。

2009年8月7日金曜日

本日の基礎トレ


  • 微積分 :Calculus
    (21/596)
    ※問題のうち、*と**はやらない。

  • 線形代数:線型代数
    (38/333)

  • 位相空間:はじめよう位相空間
    (26/182)

  • 計算練習:コンピュータの数学
    (10問)
    ※問題数ベースの進捗管理表を時間があるときに作成する。

  • 凡例 赤:やらなかった。黄:やったけど有意に進まず。青:やって進んだ。


疲れているときは、やはり進まない。

のろのろ。

【JT】4 クラスとオブジェクト (その2)


** オブジェクト
- Javaでは、オブジェクトを数多く生成する。オブジェ
クトは、メソッドを使って相互に作用する。
- これってどういう風に解釈したらいいかな。
- データがたくさんある、ということは他の言語で
も往々にしてあることだ。
- オブジェクトは単なるデータではなくて、メソッ
ドをもっているから、その中には環境やスコー
プが存在する。
- やっぱりクロージャがたくさんあります、とい
うのとほぼ同じかな。
- オブジェクトの生成から消滅までをオブジェクトラ
イフサイクルと呼ぶ。
*** オブジェクトを生成する。
- クラスを青写真にしてオブジェクト生成する。
- 流れ
- オブジェクトを参照する変数を宣言する
- 変数のためのメモリが確保され、
- 変数が生成される。
- オブジェクトを生成する (= クラスをインスタンス
化する)
- new演算子を使う。
- メモリが確保される。
- コンストラクタが初期化する。
- そのメモリ領域への参照を返す。
- オブジェクトへの参照を変数に格納する。
- ふむ。Javaのオブジェクトというのは、どこかプロ
グラム内蔵方式に似ているな。それをプロセッサアー
キテクチャの上ではなく言語の中に実装している、
という。
*** オブジェクトを使う。
- フィールド
- 単純名
- オブジェクトの内部では、フィールド定義の際
につけた名前だけで参照できる。この名前を単
純名と呼ぶ。
- オブジェクト参照を利用して
- オブジェクトの外部からフィールドにアクセス
するには、

オブジェクト参照.単純名

という構文となる。オブジェクト参照の位置に
は、オブジェクトの参照を返す式ならなんでも
入ることができる。
- メソッド
- オブジェクト参照を利用して
- 次の形式となる。

オブジェクト参照.単純名(引数リスト)

- メソッドを呼び出すということは、オブジェクト
にメッセージを送っているとも考えられる。
- ガベージコレクタ
- オブジェクトは、それに対する参照が存在しなく
なった時点で、ガベージコレクションの対象とな
る。


こつこつ。

【DBiD】7 データベース設計理論 (その5)


** 7.4 正規化を支持する2つの理由
- 正規化の目標と達成
- うまく表現する。直感的に理解しやすく、将来の
変更に耐える。
- 達成していると考えられている。
- 冗長性を削減する。
- 正規化はよい出発点ではあるが、課題はある。
- 正規化だけですべての冗長性を回避できるわ
けではなく、設計にはヒューリスティックな
部分がる。
- 冗長性の削減と従属性の維持は競合すること
がある。
- 従属性の維持の目標
- FDを制約の表現として重視して、FDが維
持されるような分解に限る立場。正規化
はFDやJDを分解して消失せしめ、多重関
係制約に移行するものであるから、そも
そも対立している。
- 冗長性の削減によって、更新不整合を回避する。
- 前項と同じである。
- 整合性制約の記述と適用が簡潔となるようにする。
- 5NFにもっていくことによって、少なからぬ制約
がキーの一意性に帰着され、別途制約を書く必
要が無くなる。ゆえに効果的と言える。
- 正規化の位置付け
- よい評価
- 上記の目標をある程度達成している。
- まず正規化することを目指すべきである。その
上で、それでできないことに対処すべきである。
- 注意点
- JD以外の制約は表現できない。
** 7.5 直交性
- 直交性の原理 (訳書は誤訳なので私家版)

AとBが同じデータベースの異なる関係変数であるとす
る。AとBからそれぞれA1,...,AmおよびB1,...,Bnへの
無損失分解が存在するとする。このとき、AiとBjに同
じタプルが存在してはならない。

- 直交性の位置付け
- 正規化は、ひとつの関係変数に着目して、その中
の冗長性を削減する。直交性は、複数の関係変数
に跨る冗長性を削減することによって、正規化を
補完する。
- 直交性は、正規化ではケアできない冗長性のケア
をすることがある。例えば、次の3つの関係変数が
あるとする。

関係変数: S
関係:
| SNO | SNAME | STATUS | CITY |
|-----+-------+--------+--------|
| S1 | Smith | 20 | London |
| S2 | Jones | 10 | Paris |
| S3 | Blake | 30 | Paris |
候補キー:{SNO}

関係変数: SX
関係:
| SNO | SNAME | STATUS |
|-----+-------+--------|
| S1 | Smith | 20 |
| S2 | Jones | 10 |
| S3 | Blake | 30 |
候補キー:{SNO}

関係変数: SY
関係:
| SNO | SNAME | CITY |
|-----+-------+--------|
| S1 | Smith | London |
| S2 | Jones | Paris |
| S3 | Blake | Paris |
候補キー:{SNO}

ここで、SからSX,SYへの分解は、

- SX,SYは5NFであり、
- 無損失分解であり、
- 従属性を維持しており、
- Sの復元にはSX,SYの双方が必要である。

すなわち、正規化の観点から言えば、文句のつけ
ようがない分解である。しかるに、SNO,SNAMEに
は冗長性がある。これを禁止するのが直交性の原
理である。
** 7.6 物理設計の注意点
- リレーショナルモデルは物理モデルについては言及
しない。
- 物理設計は論理設計に従うべきである。現状、逆に
なっていることが散見される。
- 次のような概念のマッピングを盲目的に使わないほ
うがよい。

| リレーショナルモデル | 物理ファイル |
|----------------------+--------------|
| 基底関係変数 | 物理ファイル |
| 属性 | フィールド |
| タプル | レコード |

このマッピングは物理モデルの一例である。
- また、この物理モデルはあまり良くない。特に、デー
タ独立性をほとんど実現していない点。
- DateとしてはTransRelational Modelを推している。
** 7.7 まとめ
- データベース設計における理論的な部分は、正規化
と直交性である。
- 論理的な設計プロセスは次のとおり。
- 関係変数述語を定義する。
- 前項から関係変数と制約を立案する。制約は、
FD、MVDまたはJDとなる。
- データベースはアプリケーションから独立すべきで
ある。
- データベースはそれ自体が現実の状況と意味をあ
らわすものである。そのことをしっかり作り込む
べきである。
- アプリケーションは、将来必要となる未知のもの
を含めて、そこから情報と意味を得て、自身の文
脈で解釈をして処理をする。それはいろいろあり
得るので、そこにデータベースを依存させるべき
ではない。
- 正規化と直交性を実施することは、リレーショナルモ
デルにおいて、必須ではない。すなわち、正規化が
完全になされていない、または直交性を維持してい
ない関係変数もリレーショナルモデルの範疇である。


やっと7章を完了。
本体で1章、付録で1章。トータルあと2章!

こつこつ。

2009年8月6日木曜日

【JT】4 クラスとオブジェクト


* 4 クラスとオブジェクト
- 特になし。
** クラス
- BicycleとMountainBikeの例を再掲。
*** クラスを宣言する
- クラス宣言には次のものが含まれる。
- 修飾子
- (クラスの)名前
- 親クラスの名前
- インターフェイスの名前
- クラス本体 (波括弧で括る)
- クラス本体には次のものが含まれる。
- フィールドの宣言
- コンストラクタの宣言
- メソッドの宣言
*** メンバー変数を宣言する
- メンバー変数(aka フィールド)の宣言には次のものが
含まれる。
- アクセス修飾子
- 型
- 名前 (変数名)
- アクセス修飾子
- フィールド宣言にはアクセス修飾子がある。(ローカ
ル変数およびパラメータには無い)
- アクセス修飾子を一部紹介
- public : すべてのクラスからアクセス可能。
- private : 当のクラスからのみアクセス可能。
*** メソッドを定義する
- メソッドの宣言には次のものが含まれる。
- 修飾子
- 戻り型
- (メソッドの)名前
- パラメータリスト (丸括弧で括る)
- 例外リスト
- メソッド本体 (波括弧で括る)
- シグネチャ
- メソッドの名前とパラメータの型を合わせてシグ
ネチャと呼ぶ。
- 例
calculateAnswer(double, int, double)
- メソッドオーバーロード
- Javaでは、シグネチャでメソッドを判別する。す
なわち、名前が同じでパラメータリストが異なる
ものが存在でき、それらは別のメソッドであると
認識される。
- ちょっとCLOSのgeneric functionsのdispatchに似
ているような。
*** クラスのコンストラクタを作る
- コンストラクタの宣言には次のものが含まれる。
- 修飾子
- (コンストラクタの)名前 (ただしクラス名と同一
であることが必須)
- パラメータリスト (丸括弧で括る)
- 例外リスト?
- メソッド本体 (波括弧で括る)
- コンストラクタもオーバーロードする。
- コンストラクタのシグネチャの話はこの本には出て
きていない。あるのか?
- デフォルトコンストラクタ
- コンストラクタ宣言が無い場合、自動的に作成さ
れる。
- 具体的には、スーパークラスの引数なしコンスト
ラクタである。
*** メソッドやコンストラクタに情報を渡す
- varargs(aka 可変引数,可変長引数)もある
- 例
public PrintStream printf(String format, Object... args)
- argsはObjectの配列になる。
- パラメータの名前とシャドウイング
- パラメータの名前は、メソッド本体やコンストラ
クタ本体においてユニークでなければいけない。
- フィールドと名前がかぶった場合はそれをシャド
ウイングする。
- 基本データ型は値渡し
- オブジェクトは参照渡し
- 配列はどうなんだろう? newするから参照渡しかなぁ。


こつこつ。

【DBiD】7 データベース設計理論 (その4)


** 7.3 結合従属性と第五正規形
- 第五正規形は結合従属性(JD)と呼ばれるものの総正
規形である。
- 結合従属性の定義
原文ままではなく、私家版。

A1,...,Anを関係変数Rの見出しの部分集合達であるとす
れば、Rの妥当な値であるすべての関係が、Aiを使った
その値の射影達の結合(A1,...,Anの全部を結合)に等し
い場合、そしてその場合に限り、RはA1,...,Anとの間に
結合従属性を満たすという。A1,...,Anとの結合従属性
を☆ { A1,...,An }と表記する。

- FDとJDの関係
- JDの定義は無損失分解に関する言明でもある。無損
失分解の観点で言うと、関係変数RがJD ☆{A,B,C}
をみたすということは、関係変数Rを、
- Aを見出しとする関係変数
- Bを見出しとする関係変数
- Cを見出しとする関係変数
に無損失分解可能であるということである。
- 関係変数Rが特定のFDを満たすということは、特定
の射影に無損失分解できるという定義であったか
ら、すべてのFDはJDでもある。

- 上位キーとJD (暗示)
- まず、上位キーを領域(入力)とするFDは常に存在
するものであった。
- すると、すべてのFDはJDでもあるわけだから、上
位キーを射影達(部分集合達)に含むJDも常に存在
することになる。
- 特に{A1,...,An}におけるすべてのAiが上位キーな
らば、☆{A1,...,An}である。このとき☆
{A1,...,An}は、上位キーによって暗示されるとい
う。(暗示はたぶん含意のことだな)
- 自明なJD
- { A1,...,An }のうちのいずれかのAiが見出しその
ものである場合、☆{ A1,...,An }である。これを
自明なJDと呼ぶ。
- 語彙の整理ができたところで、5NFの定義。(私家版)

関係変数Rは、Rによって満たされるJDのすべてがRのも
つ上位キーによって暗示される場合に、そしてその場合
に限り、5NFである。

- これはおもしろい。というのは、先に、1NF-5NFを予
習したときには、1NF-3NF,BCNFのグループと4NF,5NF
のグループは違う話題であり、後者は関連を表わす
テーブルに関するものだ、ということであった。
しかし、ここでのDateのような5NFの定義の仕方をす
れば、それは前者のグループも含んだ表現になって
いるということだ。

- BCNFと5NFに関する定理 (原文まま引用)

RがBCNFの関係変数であり、複合キー(複数の属性か
らなるキー)を持たないとすれば、Rは5NFである。

- 5NFは、理論的には、非常に重要である。結合従属性
に関する完全な正規形は5NF以外ないからだ。実用的
には、BCNFになった時点で5NFになっているのがほと
んどなので、あまり価値は無い。

- なお、5NFは別名として射影/結合正規形(PJNF)と呼
ばれることもある。

- Dateは6NFを提唱している。ここでは割愛しとく。


次回は7.4 正規化を支持する2つの理由。
だんだんおもしろくなってきた。

こつこつ。

2009年8月5日水曜日

【JT】3 Javaプログラミング言語の基礎 (その4)


** フロー制御文
- ソースファイル内の文は出現順に に(上から下の順)
に実行される。これは意味論に関することだな。
- この流れを変更するのがフロー制御文
*** if文とif-else文
- if文
- 構文
if (ブール型の値を返す式) 文
- 実行パス:1 (増えない)
- if-else文
if (ブール型の値を返す式) 文 else 文
- 実行パス:2
*** switch文
- switch文
- 構文
switch (整数型の値を返す式) switchブロック

switchブロックはBNFで書くとしてもかなり複雑な
文法なので割愛。
- 実行パス:無制限?
*** while文とdo-while文
- while文
- 構文
while (ブール型の値を返す式) 文
- do-while文
do ブロック while (ブール型の値を返す式)
*** for文
- for文
- 構文
for (初期化式; 継続条件式; インクリメント式) 文
- 実行パス:1
- 拡張for文
- 構文
for (型名 変数名 : 配列またはコレクション) 文
*** 分岐文
- break文
- 構文
break;
break ラベル;
- 意味
break単体は、最も内側のループのブロックから脱
出する。ラベル付きbreakは、そのラベル以降に出
現する最初のループのブロックから脱出する。
- continue文
- 構文
continue;
- 意味
ループ内において、continue以降の処理をスキッ
プする。
- return文
- 構文
return;
return 式;
- 意味
メソッドの呼び出し元に戻る。式が与えられてい
れば、その値を呼び出し元への返却値とする。
*** フロー制御文のまとめ
- 特になし。

*** 設問と演習:フロー制御文
**** 設問
- 1. if
- 2. switch
- 3. do-while 末尾
- 4. for (;;)
- 5. while (true)
**** 演習
- 1.
- a. second string
- b. second string\nthird string
- c. こんな感じ?
class IfDemo {
public static void main (String[] args) {
int aNumber = 3;
if (aNumber >= 0)
if (aNumber == 0) System.out.println("first string");
else System.out.println("second string");

System.out.println("third string");
}
}
- d. こんな感じ?
class IfDemo {
public static void main (String[] args) {
int aNumber = 3;
if (aNumber >= 0) {
if (aNumber == 0) {
System.out.println("first string");
} else {
System.out.println("second string");
}
}
System.out.println("third string");
}
}


こつこつ。

【DBiD】7 データベース設計理論 (その3)


** 7.2 関数従属性とボイスコッド正規化
- 2NF,3NF,BCNFは関数従属性(FD)の概念に基づいている。
- FDの定義。(原文まま引用)

A,Bを関係変数Rの見出しの部分集合であるとすれば、Rの
妥当な値であるすべての関係において、Aに同じ値を持
つ2つのタプルがBにも同じ値を持つ場合に限り、関係変
数Rは関数従属性A -> Bを満たす。
- Aがキー(見出しの部分集合)のとき、A'⊃Aとなる
A'(見出しの部分集合)を上位キーと呼ぶ。
- A'⊇AかつB⊇B'ならばA' -> B'も自動的に成り立つ。
- ここでAがキーならばA'は上位キーであり、キーと非
キーの関係とから、上位キーから任意の部分集合(of
見出し)へのFDが成立することがわかる。
- 見出し⊇A⊇BのときA->Bは常にFDである。これは必
ず成り立つので、自明なFDと呼ぶ。
- BCNFの定義 (原文の定義は曖昧なので私家版)

関係変数Rは、Rによって満たされるすべての非自明FD A
-> B において、AとなるのがRの上位キーのみである場合
に、そしてその場合のみに、BCNFである。

- BCNFでないものをBCNFにする(これをBCNF化と呼ぶ)、
ということは、なんらかのFDを排除する、ということ
である。FDを排除する、ということがどういうことか
という、BCNFにする過程で、ある関係がそれよりも属
性数の少い関係達に分解されることにより、FDが関係
達から消失し、そのかわりに、多重関係変数制約が発
生するということである。

- BCNF化する際には関係変数の分解が発生する。
- 分解処理の実体は、射影にすぎない。
- BCNF化の分解にあたっては、分解後の関係変数達を
結合すると、分解前の関係変数に戻るようにする。
このような分解の仕方を無損失な分解と呼ぶ。

- 1NF,2NF,3NFはBCNFに包含されている。またBCNFはFD
について包括的である。よって1NF,2NF,3NFは歴史的
なものと考えてよく、理論的にも実践的にもBCNFを
考えればよい。
- RVAを含めれば、あらゆる関係は少なくとも1NFであ
り、非正規形テーブルなどは存在しない。
- RVAを避けた方が賢明なのはベース関係についての教
訓であり、仮想関係や結果として返る関係については、
どんどん使えばよい。


こつこつ。

本日の基礎トレ


  • 微積分 :Calculus
    (20/596)
    ※問題のうち、*と**はやらない。

  • 線形代数:線型代数
    (38/333)

  • 位相空間:はじめよう位相空間
    (26/182)

  • 計算練習:コンピュータの数学
    (10問)
    ※問題数ベースの進捗管理表を時間があるときに作成する。

  • 凡例 赤:やらなかった。黄:やったけど有意に進まず。青:やって進んだ。


Calculusが演習ゾーンを抜けた!

のろのろ。

2009年8月4日火曜日

【検証論】5 ホーア論理の数学 (その6)

最弱前条件がわからない理由がわかった。

- わかった。そもそも表明の強い弱いのちゃんとした
定義がこの本でなされていないのだ。だから弱いの
かどうかがわからないのだ。この文脈からすると、
弱いの定義は、

「A => Bのとき、BがAより弱いと言う」

ということだろう。

これならば、pwp(P,B)が最弱であることは自明。


次回は相対完全性定理。
こつこつ。

本日の基礎トレ


  • 微積分 :Calculus
    (18/596)
    ※問題のうち、*と**はやらない。

  • 線形代数:線型代数
    (38/333)

  • 位相空間:はじめよう位相空間
    (26/182)

  • 計算練習:コンピュータの数学
    (9問)
    ※問題数ベースの進捗管理表を時間があるときに作成する。

  • 凡例 赤:やらなかった。黄:やったけど有意に進まず。青:やって進んだ。


すべて演習ゾーン。。。
のろのろ。

【DBiD】7 データベース設計理論 (その2)


*** 各種正規化の基本情報

- 正規形の種類
- 非正規形
- 第1正規形 (1NF)
- 第2正規形 (2NF)
- 第3正規形 (3NF)
- ボイスコッド正規形 (BCNF)
- 第4正規形 (4NF)
- 第5正規形 (5NF/PJNF)

- 非正規形の例

注文テーブル
| 注文番号 | 注文日時 | 商品ID | 商品名 | 単価 | 数量 | 金額 | 合計金額 | 消費税 | 顧客ID | 名前 | 電話番号 | 支払い方法 |
|----------+----------+--------+------------+--------------+-------+--------------+----------+--------+--------+----------+--------------+------------|
| 101 | 2009-8-1 | 1 3 5 | 砂糖 塩 米 | 500 500 1000 | 1 1 1 | 500 500 1000 | 2000 | 100 | P02 | 山田花子 | 03-4567-8901 | クレジット |
| 102 | 2009-8-1 | 6 | 味噌 | 700 | 1 | 700 | 700 | 35 | P05 | 田中太郎 | 012-345-6789 | 代引 |
| 103 | 2009-8-2 | 6 5 | 味噌 米 | 700 1000 | 1 2 | 700 2000 | 2700 | 135 | P10 | 鈴木一浪 | 04-5678-9012 | クレジット |


- これが第一正規形でない理由
- 商品IDや商品名などについて、単一のフィールド
に複数の値が入っている。これを繰返しグループ
と呼ぶ。繰返しグループがあると非正規形である
と見做す。

- 第一正規形を作る手順
- 1. テーブルにキーを設定する。
- 2. テーブルの繰返しグループを別のテーブルに分
離する。
- 3. 導出項目を削除する。

- 第一正規形の例

注文テーブル
| 注文番号 | 注文日時 | 顧客ID | 名前 | 電話番号 | 支払い方法 |
|----------+----------+--------+----------+--------------+------------|
| 101 | 2009-8-1 | P02 | 山田花子 | 03-4567-8901 | クレジット |
| 102 | 2009-8-1 | P05 | 田中太郎 | 012-345-6789 | 代引 |
| 103 | 2009-8-2 | P10 | 鈴木一浪 | 04-5678-9012 | クレジット |
キー : 注文番号

注文明細テーブル
| 注文番号 | 商品ID | 商品名 | 単価 | 数量 |
|----------+--------+--------+------+------|
| 101 | 1 | 砂糖 | 500 | 1 |
| 101 | 3 | 塩 | 500 | 1 |
| 101 | 5 | 米 | 1000 | 1 |
| 102 | 6 | 味噌 | 700 | 1 |
| 103 | 6 | 味噌 | 700 | 1 |
| 103 | 5 | 米 | 1000 | 2 |
キー:{注文番号,商品ID}

- これが第二正規形でない理由
- 部分関数従属が存在する。部分関数従属とは、キー
の一部で確定する非キー属性が存在するというこ
と。
- ここでは、キーの一部である商品IDが決まれば商
品名と単価は決まってしまうということ。

- 第二正規形の例

注文テーブル
| 注文番号 | 注文日時 | 顧客ID | 名前 | 電話番号 | 支払い方法 |
|----------+----------+--------+----------+--------------+------------|
| 101 | 2009-8-1 | P02 | 山田花子 | 03-4567-8901 | クレジット |
| 102 | 2009-8-1 | P05 | 田中太郎 | 012-345-6789 | 代引 |
| 103 | 2009-8-2 | P10 | 鈴木一浪 | 04-5678-9012 | クレジット |
キー : 注文番号

注文明細テーブル
| 注文番号 | 商品ID | 数量 |
|----------+--------+------|
| 101 | 1 | 1 |
| 101 | 3 | 1 |
| 101 | 5 | 1 |
| 102 | 6 | 1 |
| 103 | 6 | 1 |
| 103 | 5 | 2 |
キー:{注文番号,商品ID}

商品テーブル
| 商品ID | 商品名 | 単価 |
|--------+--------+------|
| 1 | 砂糖 | 500 |
| 3 | 塩 | 500 |
| 5 | 米 | 1000 |
| 6 | 味噌 | 700 |
キー:{商品ID}

- これが第三正規形でない理由
- 推移関数従属がある。推移関数従属とは非キーど
うしの間に関数従属性があること。
- この例では、注文テーブルについて、顧客IDが決
まれば、名前などは定まる、というところ。

- 第三正規形の例

注文テーブル
| 注文番号 | 注文日時 | 顧客ID | 支払い方法 |
|----------+----------+--------+------------|
| 101 | 2009-8-1 | P02 | クレジット |
| 102 | 2009-8-1 | P05 | 代引 |
| 103 | 2009-8-2 | P10 | クレジット |
キー : 注文番号

顧客テーブル
| 顧客ID | 名前 | 電話番号 |
|--------+----------+--------------|
| P02 | 山田花子 | 03-4567-8901 |
| P05 | 田中太郎 | 012-345-6789 |
| P10 | 鈴木一浪 | 04-5678-9012 |
キー : 顧客ID


注文明細テーブル
| 注文番号 | 商品ID | 数量 |
|----------+--------+------|
| 101 | 1 | 1 |
| 101 | 3 | 1 |
| 101 | 5 | 1 |
| 102 | 6 | 1 |
| 103 | 6 | 1 |
| 103 | 5 | 2 |
キー:{注文番号,商品ID}

商品テーブル
| 商品ID | 商品名 | 単価 |
|--------+--------+------|
| 1 | 砂糖 | 500 |
| 3 | 塩 | 500 |
| 5 | 米 | 1000 |
| 6 | 味噌 | 700 |
キー:{商品ID}

- これがボイスコッド正規形でない理由
- 理由はない。これはボイスコッド正規形でもある。
- 第三正規形のほとんどがボイスコッド正規形でも
ある。

- 第三正規形だがボイスコッド正規形ではない例

注文明細テーブル
| 注文番号 | 商品ID | 数量 | 商品検査担当 |
|----------+--------+------+--------------|
| 101 | 1 | 1 | たろう |
| 101 | 3 | 1 | じろう |
| 101 | 5 | 1 | さぶろう |
| 102 | 6 | 1 | しろう |
| 103 | 6 | 1 | ごろう |
| 103 | 5 | 2 | とめきち |
キー:{注文番号,商品ID}

- 次のビジネスルールとする。
- 一つの注文番号には複数の商品が含まれる。
- 商品検査担当各人は、各自担当する商品IDはひ
とつとする。ひとつの商品IDについて、複数の
商品検査担当がいることはある。
- 一つの注文番号に同じ商品が複数個含まれると
きは、同じ商品IDについては一人の商品検査担
当者が担当する。

- このテーブルがBCNFでない理由。
- 非キー属性からキー属性への関数従属がある。
- すなわち、商品検査担当が決まると、商品IDが
決まる。

- BCNFの例

注文明細テーブル
| 注文番号 | 数量 | 商品検査担当 |
|----------+------+--------------|
| 101 | 1 | たろう |
| 101 | 1 | じろう |
| 101 | 1 | さぶろう |
| 102 | 1 | しろう |
| 103 | 1 | ごろう |
| 103 | 2 | とめきち |
キー:{注文番号,商品ID}

商品検査担当テーブル
| 商品検査担当 | 商品ID |
|--------------+--------|
| たろう | 1 |
| じろう | 3 |
| さぶろう | 5 |
| しろう | 6 |
| ごろう | 6 |
| とめきち | 5 |
キー:{商品検査担当}

- さて、この例が第四正規形でない理由
- これは第四正規形ではない。
- 第四正規形はテーブルの全ての属性がキーである
場合、すなわち、テーブル間の関連を規程するテー
ブルについての話だからだ。第五正規形も同じ。
- この例はそもそもそういうテーブルが無いので、
第四正規形ではない。

- 第四正規形ではない例

チーム-メンバ-道具関連テーブル
| チーム名 | メンバー名 | 道具名 |
|----------+------------+--------------|
| サクラ | 鈴木 | ポンポン |
| サクラ | 田中 | ポンポン |
| モモ | 佐々木 | バトン |
| サクラ | 鈴木 | ユニフォーム |
| モモ | 山本 | ユニフォーム |
| サクラ | 田中 | ユニフォーム |
| モモ | 山本 | バトン |
| モモ | 佐々木 | ユニフォーム |
キー:{チーム名,メンバー名,道具名}

- これは、現実を調べると、チーム名が決まれば、
メンバーがもつべき道具は決まるという状況であ
るとする。

チーム-メンバ-道具関連テーブル
| チーム名 | メンバー名 | 道具名 |
|----------+------------+--------------|
| サクラ | 鈴木 | ポンポン |
| サクラ | 鈴木 | ユニフォーム |
| サクラ | 田中 | ポンポン |
| サクラ | 田中 | ユニフォーム |
| モモ | 佐々木 | バトン |
| モモ | 佐々木 | ユニフォーム |
| モモ | 山本 | バトン |
| モモ | 山本 | ユニフォーム |
キー:{チーム名,メンバー名,道具名}

- そこで次のように分解するのが第四正規化。

チーム-メンバ関連テーブル
| チーム名 | メンバー名 |
|----------+------------|
| サクラ | 鈴木 |
| サクラ | 田中 |
| モモ | 佐々木 |
| モモ | 山本 |
キー:{チーム名,メンバー名}

チーム-道具関連テーブル
| チーム名 | 道具名 |
|----------+--------------|
| サクラ | ポンポン |
| サクラ | ユニフォーム |
| モモ | バトン |
| モモ | ユニフォーム |
キー:{チーム名,道具名}

- さて、第五正規化も関連テーブルについてである。
第四正規化とは別の状況についての正規化である。

チーム-会場-演目関連テーブル
| チーム名 | 会場 | 演目 |
|----------+------+----------------|
| チームA | 東京 | ポンポンダンス |
| チームA | 東京 | ブレイクダンス |
| チームB | 福岡 | チアリーダ |
| チームA | 静岡 | ポンポンダンス |
| チームB | 東京 | ブレイクダンス |
キー:{チーム名,会場,演目}

- この状況だとキーのすべての属性が決まらないとデー
タを投入できない。そこで決まった情報から投入で
きるようにするにはどういう分割をすればいいかと
いうのが第五正規化。答は次のとおり。

チーム-会場関連テーブル
| チーム名 | 会場 |
|----------+------|
| チームA | 東京 |
| チームB | 福岡 |
| チームA | 静岡 |
| チームB | 東京 |
キー:{チーム名,会場}

チーム-演目関連テーブル
| チーム名 | 演目 |
|----------+----------------|
| チームA | ポンポンダンス |
| チームA | ブレイクダンス |
| チームB | チアリーダ |
| チームB | ブレイクダンス |
キー:{チーム名,演目}

会場-演目関連テーブル
| 会場 | 演目 |
|------+----------------|
| 東京 | ポンポンダンス |
| 東京 | ブレイクダンス |
| 福岡 | チアリーダ |
| 静岡 | ポンポンダンス |
| 東京 | ブレイクダンス |
キー:{会場,演目}

- 以上で正規形の羅列はおしまい。

- さて、テーブルをなぜ正規化するかというモチベー
ションは次のとおり。
- データライフサイクルの問題
- 適切に正規化されていないと、データの登録や削
除が煩雑になったり、テーブルのデータが揃わな
いので部分的な情報を登録できなかったりなど
の支障がでる。
- 重複更新
- データ生存期間中であっても、適切に正規化さ
れていないことにより、ひとつの情報について
複数のテーブルや行を更新しなければいけない
ことが発生する。


うーん。これに時間をとられすぎた。
こつこつ。

【JT】3 Javaプログラミング言語の基礎 (その3)


** 式、文、ブロック
*** 式
- 演算子は式の中で(のみ)使える。
- 式は文の主たる構成要素である。
- 式は値を返す。値には型がある。
- 式の例
1 + 2
1 * 2 * 3
(x + y) / 2
result = 1 + 2
value1 == value2
"Value :" + someVar
*** 文
- 文は完結した実行単位である。
- 式をセミコロンで終端すると文になるものがある。
これを式文と呼ぶ。式文になりえるのは次のもので
ある。
- 代入式
- ++や--を使った式
- メソッド呼び出し
- オブジェクト生成式
- 式文以外の文は二種類ある。
- 宣言文
double aValue = 3.14;
- フロー制御文
後述。
*** ブロック
- 0個以上の文を波括弧で囲んだもの。
- 文が許される場所にはどこでも使える。
- 例
if (condition) {
var1 = 1;
var2 = 2;
}
else {
var1 = 0;
var2 = 3;
}
*** 設問と演習:式、文、ブロック
**** 設問
- 1. 式
- 2. 文
- 3. ブロック
- 4. 複合
- 5. ;
- 6. 波括弧
**** 演習
- 1. 代入式
- 2. ++や--。
- 3. メソッド呼び出し
- 4. オブジェクト生成


こつこつ。

2009年8月3日月曜日

本日の基礎トレ


  • 微積分 :Calculus
    (16/596)
    ※問題のうち、*と**はやらない。

  • 線形代数:線型代数
    (38/333)

  • 位相空間:はじめよう位相空間
    (26/182)

  • 計算練習:コンピュータの数学
    (8問)
    ※問題数ベースの進捗管理表を時間があるときに作成する。

  • 凡例 赤:やらなかった。黄:やったけど有意に進まず。青:やって進んだ。


のろのろ。