論理とプログラム2001


*まず「論理とプログラム2000年度」( ここ)を参照してください。
とくに最初に4年生への注意があります。また、レポートの課題や 試験問題の解答などもあります。


4月10日:注意事項配布;再帰的構造を命題論理の論理式によって説明;
(「情報系の数学入門」2章の2・1[1],[2],[3]に対応)
計算可能な関数についてのChurchの提唱;再帰的関数の定義
(2章の2・4[1])

4月17日:再帰的関数の定義おさらい。部分再帰的関数。
f(x,y)=x+yの再帰的定義。演習問題:x*y, x^y の再帰的定義。
2・6:帰納法 再帰的な構造について、構造の単純なものから複雑なものへと 証明を移行させること。
例:数学的帰納法


4月24日:掛け算が再帰的であること。構造帰納法、重みによる帰納法、
(命題論理の式の真理値の確定を例に説明、回文による説明は各自読んで
おくこと)、計算帰納法

連絡事項: 質問用紙を配布した。5月8日に各人一問のみ、質問を書いて
提出のこと。(講義内容について分からないこと、さらに疑問に思うこと、などを
具体的に書いてください)

5月8日:述語論理の言語、論理式の定義(教科書通り)、いくつかの例題。

演習問題 1999年度の「抽象化の技法」および2000年度の「論理とプログラム」
に演習問題や課題があります。まずそれらを試してください。
ここではもう少し加えます。
演習問題2001-1 以下の文章を述語論理の論理式として表せ。(後日解答をつけます)
(1) 馬は動物である。
(2) すべての馬は耳をもっている。
(3) すべての馬は動物の耳をもっている。
(4) 誰かが私を愛してる。
(5) 首都はどこかの国の町である。  (6) 愛することができる者は幸いなり。
(7) 善人が往生するのだから、まして悪人は往生する。
(8) 関数 f はく間 [0,1] 上で連続である(一様連続である)。
(9) [0,1] 区間上の連続関数 f はその区間で最大値をとる。
多少意味のはっきりしない文章もあります。自分ではっきりした文章に
解釈してください。また、論理式は一通りではありません。人によって ちがっていいのです。

5月15日:関数記号をもつ言語;項の定義;数学の概念の論理式による表現
例 関数の連続性と一様連続性(テキスト参照)、数列の収束、コーシー列

質問用紙回収(本日欠席の場合には来週受け付ける)


5月22日:質問への解答:再帰的構造の例と構造帰納法。
欠席した人は、再帰的構造として、部屋のユニットを接続してマンションを
作っていくことをイメージしてください。正確な例としては論理式の構成。
構造帰納法は論理式について「真理値がちょうど一つ決まる」を、
論理式を作ってゆく順に示す、という例を考えてください。

5月29日: 述語記号とは性質や関係を表す文字列。変数は個体を表す。
項数とは引数の個数。
限量子「すべて」と「ある」の説明。
例 「人は誰にでも好きな花がある」:(all x)(H(x)=>(exists y)(Fl(y) and L(x,y)))
この式と(exists y)(Fl(y) and (all x)(H(x)=>L(x,y)))とのちがい。
逆に論理式が与えられたときにそれに意味を与えることができる。
変数の範囲(実数、とか人、とか)を指定し、述語記号に意味を与える。
論理式で書いておけば汎用できる。それに使用者が意味を与えて使うことができる。
参照:述語論理の式の例:p.131 [3.11], p.133 [3.12]
文章を式で表現する例:p.138 [3.14]
数学の命題を式で表す例:p.139 [3.16]
文章を式で表す演習問題:このページの演習問題2001-1。

演習問題2001-2:上の二つの論理式に各人意味を与えてみる。
また演習問題2001-1で求めた論理式に自分で意味を与える。
6月5日:論理式に意味を与えるためには 1. 変数がとる値の集合、2. 述語記号が
表す関係(または性質)、の二点を決める。これを「論理式の解釈」という。
論理式の意味を考えることを「意味論」という。
どんな解釈でも真になる式を恒真、どんな解釈でも偽になる式を矛盾、適当に 解釈すれば真になる式を充足可能という。
命題論理の論理式の形をした恒真、充足可能、矛盾、は述語論理でも同じ 性質をもつ。
述語論理特有の恒真な式の例:(forall x)(P(x)=>(exists y)P(y))
矛盾の例:(exists x)(P(x) and (forall y) notP(y))

第二回質問受け付け:質問用紙を配布しました。6月12日に質問をうけとって
19日に回答します。なお、19日にレポートの課題を渡します。

演習問題2001-1の解答(偶数番号のみ。これは一例です。人によって論理式は 異なってよい)
(2) H(x): x は馬である。 E(y): y は耳である。 B(y,x): y は x に所属している (ついている)
(forall x)(H(x)=>(exists y)(E(y) and B(y,x)))
(4) Human(x): x は人である。 Love(x,y): x は y を愛している。 Mary: 発言者Maryを表す定記号(あなた自身のなまえを書いてください。)
(exists x)(Human(x) and Love(x,Mary))
(6) AbletoLove(x): x は愛することができる。 Fortunate(x): x は幸いである。
(forall x)(Human(x) and AbletoLove(x)=>Fortunate(x))
(8) はすでに扱ったので、(9)の解答:I(x): x は[0,1]区間の実数である。
Ineq(a,b): a (exists x)(I(x) and (forall y)(I(y)=>Ineq(f(y),f(x)))

6月12日:(forall x)(P(x)=>(exists y)P(y))の恒真性の証明。
場合わけによる。1.(exists y)P(y)が正しいとき。2. 1. でないとき。
1. の場合は => の右辺が真なので、(...)の中が任意の x について正しい。
2. の場合には任意の x について P(x) が偽なので、=> の左辺が偽。ゆえに
(...)の中が常に正しい。
出現と有効範囲について(pp133-134)。テキストをていねいに読んでおくこと。
論理体形について(p.118)。論理式の意味でなく初期状態(公理)と変形規則
(推論規則)によって変形していって到達できる(証明可能、定理)かどうかを
問う。このほうがはっきりしている。
完全性定理:論理式が恒真であることと証明可能なことは同値である。
(証明可能な論理式については)自動証明のプログラムが書ける。

質問票受取り。


第2回質問回答(教室で回答しない分のみ)

その一:再帰的関数の(5)と(6)がよくわからない。
定義の読み方を書きます。
(5) f[x_,y_] := If[x=0,h[x,y],g[f[x-1,y],x,y]]
x,y は入力値です。x=0のとき、h[0,y]を出力(つまりf[0,y]の値はh[0,y])。
x>0のとき(つまりx=0でないとき)、f[x,y]の値は g[f[x-1,y],x,y]である。
すなわちf[x,y]の計算をf[x-1,y]の計算に「帰着」させる。こうしてx-1,x-2,...
とxの値を小さくしていってしまいに 0 のときに直接h[0,y]の値を得る。それを使って,br> 逆にf[1,y],f[2,y],...,f[x-1,y],を計算していき、最後にf[x,y]を得る。
これはMathematicaの再帰的定義(recursion)(計算)の一つの形と全く同じ。
(6) f[x_,y_] := If[g[x,y]=0,y,f[x,y+1]]
g[x,y]の値が0になる、y以上の最小のyの値を求める。g[x,y]=0ならば、出力はy、
そうでなければ次はゼロになるかもしれない、という期待でf[x,y+1]を計算しようとする。
(6)の定義をf[x,y+1]にあてはめると、
f[x,y+1]=If[g[x,y+1]=0, y+1,f[x,y+2]]となる。もしg[s,y+1]=0ならば答えはy+1,
そうでなければy+2を試す。こうしてどこかでg[x,z]=0となれば、その最初のzが答え。
実際にはg[x,z]が決してゼロにならなければ計算はいつまでも続くが答えは出ない。

そのニ:真と偽があるのに恒真と言いきれるもの(論理式)があるのか?
例 (forall x)(P(x)=>(exists y)P(y)); A or notA

その三:「人は誰でも誰かを愛するが、愛する相手が自分を愛しているとは 限らない」
これを表す論理式の成り立ちがわからない。
まずこの文章は二つの文章を「かつ」で結んでいる。
「人はだれでも誰かを愛する」(これをAとおく)
「愛する相手が自分を愛しているとは限らない」(これをBとおく)
A:ここで必要なのは「・・・は人である」と「・・・は***を愛する」である
・・・や***を変数x,yなどで表す。「x は人である」を H(x)、「x は y を愛する」
をL(x,y)とおく。「人は誰でも」は 「どんな x についても x が人ならば」という
意味だから、(forall x)(H(x)=>...)。「x が誰かを愛する」は、誰か、とは人の
ことだから、(exists y)(H(y) and ***)となる。***は「x が y を愛する」だから
L(x,y)。...にこれ全体をいれると
(forall x)(H(x)=>(exists y)(H(y) and L(x,y)))
B:これは「愛する相手が自分を愛する」を否定している。それで最後に not を
つけることにして、「・・・」の部分を論理式にする。
自分と相手と2種類の人がいるので、前者を x 、後者を y とおく。
「・・・」は「x が y を愛するならば、y が x を愛する」(これをCとおく)
ということである。 x も y も人であることが要請されているので、C
の前提に「x が人で、y が人である」を加える。ここで x も y も誰でよいので
「すべての x とすべての y について」である。したがって全体は
(forall x)(forall y)(H(x) and H(y) and L(x,y)=>L(y,x))であり、これ全体の
前に not をつければできあがり!

forall や exists の使い方がよくわからない。
このことに限りませんが、まずテキストをじっくり読んでください。
次にノートで該当するところをじっくり読んでください。
そうして理解したら同じことをテキストを見ないで自分で考え直してください。
なにごとも自分で時間をかけて、手を動かして(文字通り手間隙かけて)
勉強する以外に最終的に理解することはできないのです。
その上で、具体的な疑問があれば質問してください。


6月19日:質問への解答
3.4[1],[2] 命題論理の体系 P 、証明の再帰的(帰納的)定義

レポート課題配布


6月26日:命題論理の体系Pと(それを含む)述語論理の体系Sのおさらい。
PでもSでも、論理式が証明可能ならば恒真(公理と推論をチェックすれば示せる
これを体系の健全性という。
逆に恒真ならば証明可能(完全性)。Pについては”ワンのアルゴリズム”を使えば
"admissible"な推論(NJ)(プリント配布):P(またはS)の証明で、
いくつかの公理と推論を省略して書く。各結合子についてI(導入)とE(除去)
がある。"admissible"な推論全体を体系NJという。
排中律 (A or notA)はPで証明でき、排中律をNJに加えた体系をNKと呼ぶ。


7月3日:仮想プログラム言語F_0(ラムダ計算系)の定義、その実行(計算) 規則
配布物2枚

レポート回収


期末試験について:2000年度の論理とプログラムの最後に問題と コメントが載っています。
勉強の参考にしてください。後で本年度の問題について
もう少しく詳しく書きます。


期末試験用勉強のための一口アドヴァイス
1 文章を述語論理の論理式で表す  
2 命題論理の体系Pにおける証明の部分的構成(穴埋め問題)
3 公理に対するF_0のプログラム
4 自由課題:この講義のどの部分でもよいから、一つのテーマについて
  数行で論述せよ。

レポートの解答は ここ


期末試験のための質問の時間および場所: 7月9日13:30ー14:30 第一研究室棟829(八杉研究室)
7月10日14:00ー14:50 計算機科学研究所棟C2情報 処理教室
講義終了後教室でもいいです。
../
/
Last modified: Sun Jul 8 12:51:11 JST 2001