講義url: …yamanaka/lecture/automata/automata01.pdf講義の進め方と成績 成績:...
TRANSCRIPT
オートマトンと言語理論
第1回(ガイダンス)
山中克久
講義URL: http://www.kono.cis.iwate-u.ac.jp/~yamanaka/Lecture/Automata/index.html
講義の進め方と成績
講義形態: 座学 (スライド and 板書)
丸岡 章 = 著
教科書: 計算理論とオートマトン言語理論
(ポイントを絞って教科書の内容を説明していきます)
科目名: 形式言語とオートマトン
時間: 水曜1限 (8:40~10:10)
対象: 3年生
講義全体の流れ
4/15: 講義を理解するために必要な数学的知識 4/22: 有限オートマトンの定式化と認識能力 5/8: 非決定性有限オートマトンの定式化と認識能力 5/13: 正規表現と有限オートマトンが認識する言語の関係 5/20: 有限オートマトンの限界 5/27: 正規言語の性質 6/3(出張で移動予定): 有限オートマトンの簡単化 6/10: 中間試験(正規言語) 6/17: 文法と文脈自由文法 6/24: 文脈自由文法の標準形 7/1: 文脈自由文法の限界 7/8: プッシュダウンオートマトンと文脈自由文法の関係 7/15: 文脈自由言語の性質 7/22: チューリング機械と計算可能性 7/29(出張で移動予定): 期末試験
講義の進め方と成績
成績: 以下のことを考慮して判定
中間テスト(50%)+ 期末テスト(50%) の合計点 (全体のバラツキを考慮するが,基本的には6割以上)
出席(足切りに使うのみ,1/3 以上の欠席は不合格)
受講のポイント
予習・復習 ⇒人間は忘れやすい・・・
申し訳ないのですが前の方に座ってください ⇒ スライドの文字が小さいことが多々あります
例題・演習問題 など,自分で書いて解く
⇒ パズル感覚で「意外とおもしろいんじゃん!!」 という気持ちになれます
分からなくなったら定義に戻る ⇒ 分からなくなるのは当然, 重要なのは,分からないことを解決しようとする努力!!
証明することに慣れる
本講義で学ぶもの: オートマトン
オートマトン 状態の変化を表したもの ≒ 要は
電球のスイッチの例
ON
OFF
電気が ついていない
電気が ついている
便利なオートマトン Part 1
制御のシステムを設計するときに便利 !! 例:
自動販売機を制御したい
100円玉と50円玉しかない世界を考える
(話を簡単にするために,以下を仮定)
場合1: 100円玉1枚 & 50円玉1枚 → おつり0円
150円のジュースを売っている
場合2: 100円玉2枚 & 50円玉1枚 → おつり50円
50
0
100
50
50 100
150 50
200
100
100
ジュース & おつり0円
ジュース & おつり50円
オートマトン で表現:
便利なオートマトン Part 2
文字列を処理するときに便利!! 例:
C言語 プログラムソース中のコメント部分を全て消したい
“/*” と “*/” で囲まれた部分をコメントとみなす
/********************************* Enumerating All Ladder Lotteries By K. Yamanaka, 16th, Apr. 2010 *********************************/ #include<stdio.h> /* Structures */ /* A vertex */ typedef struct vertex{ struct vertex *up; struct vertex *down; struct vertex *left; struct vertex *right; int line, routeNum; } vertex; ・・・
#include<stdio.h> typedef struct vertex{ struct vertex *up; struct vertex *down; struct vertex *left; struct vertex *right; int line, routeNum; } vertex; ・・・
便利なオートマトン Part 2
文字列を処理するときに便利!! 例:
C言語 プログラムソース中のコメント部分を全て消したい
“/*” と “*/” で囲まれた部分をコメントとみなす
‘/’ 0 1
(1文字読み込むごとに状態が変化していくオートマトンを考える)
‘*’ 2
3
‘*’ ‘/’
その他の 文字(出力) その他の
文字(出力) その他の文字 (出力しない)
4 その他の文字 (出力しない)
EOF
Start
以上が導入でした
続いて,今日の講義内容に入っていきます
集合:「もの」の集まりのことを集合という 集合を構成しているものを要素という
自然数からなる 集合N
1 2
3 4 5
6 8 7
0 -1
3.14
集合
例: 自然数を集めたものは,自然数からなる集合という 自然数からなる集合を {1,2, … } と書く
無限集合:無限個の要素からなる集合
有限集合:有限個の要素からなる集合
空集合: 0個の要素からなる集合
※1 同じ要素は出現しない({1,1,2,3}はナシ) ※2 順番は考慮しない({1,2,3} = {3,2,1})
集合A中の,どの要素も集合Bの中に含まれるならば,A を B の部分集合という
部分集合
このとき,A は N の部分集合であるといい,A ⊆ N と書く
自然数からなる集合を N = {1,2, … } とする 1, 2, 3, 4, からなる集合を A とする
自然数からなる 集合N
5
6 8 7
0
-1
3.14
部分集合:
集合A 1
2 3 4
とくに,A ≠ N の場合, A は N の真部分集合であるといい,A ⊊ N と書く
{共通,和,差,補} 集合
共通集合(積集合): 集合Aと集合Bの両方に含まれる要素からなる集合
A B A B A B
和集合: 集合A,または,集合B に含まれる集合 差集合: 集合Aに含まれ,かつ,集合Bに含まれない要素からなる集合 補集合: 集合Aに含まれない要素からなる集合
A A A∪B A ∩ B
U
A – B (A \ B)
冪(べき)集合,直積
冪集合: Aの部分集合すべてからなる集合をAの冪(べき)集合という
A={1,2,3} ならば その冪集合P(A)は: P(A) = {Φ, {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}}
直積: 集合Aと集合Bの直積A×B は A×B = { (a,b) | a ∊ A, b ∊ B} と定義される
A = {1,2},B = {u,v,w}ならば, A×B = {(1,u), (1,v), (1,w), (2,u), (2,v), (2,w)}
系列
集合Σ上の系列:
Σ={0,1} としたとき,Σ上の系列の例: 0, 1, 01, 10, 111000, 10101001001, etc
Σ中の要素を並べたもの
Σ*: Σ上の系列すべてからなる集合
Σ={0,1} としたとき, Σ* = {ε, 0, 1, 00, 01, 10, 11, 000, 001, …}
連接: 2つの系列を繋げること,“・” という記号を使う
A = a1a2 … an,B = b1b2 … bm を2つの系列とする. このとき,A・B = a1a2 … anb1b2 … bm である
命題と証明
基本的な証明方法を紹介
対偶
背理法
数学的帰納法
命題
命題: 記号や文章で1つの主張を表したもので,正しい(真)か,正しくない(偽)がはっきりしているもの
命題の例: 「nは6で割り切れる」
(n を自然数とする)
「nは3で割り切れる」 「nは2で割り切れる」
命題ではない例: 「彼は背が高い」 (「背が高い」の基準が曖昧)
対偶
命題 P と P’ について「P が成り立つならば Q が成り立つ」とき,P ⇒ Q と書く. P ⇒ Q に対して,Q ⇒ P を対偶という
P ⇒ Q が真ならば,Q ⇒ P も真であり,逆もまた同様
対偶の例:
P(n): nは6で割り切れる Q(n): nは3で割り切れる
P(n) ⇒ Q(n) は真 Q(n) ⇒ P(n) も真 nが6で割り切れるならば, nは3でも割り切れる
nが3で割り切れないならば, nは6でも割り切れない
背理法
示したいことの反対を仮定して,矛盾を導く証明方法
「矛盾が導かれるということは,もともとの仮定が間違っていたんだ,つまり示したいことが成り立つんだ!」 という論法
P ⇒ Q を示したいとする 1. P と Q を仮定する 2. 矛盾を導く
背理法による証明の手順
3. P ⇒ Q が導けたことになる ※なぜこれで正しいのかは教科書を参照してください
例2.2(背理法による証明)
主張
素数は無限個存在する
証明 素数の個数は有限個であると仮定
このとき,p1p2・・・pm+1 は素数である 全ての素数を p1,p2, … , pm とする
これは,全ての素数がm個であることに矛盾 よって,素数の個数は有限個ではない(無限個である)
数学的帰納法
自然数 n をパラメータとする命題をP(n) とする 1. P(1)が真であることを示す 2. 任意の n > 1 について,P(n)が真であると 仮定したとき,P(n+1)も真であることを示す
数学的帰納法による証明手順
P(1)が真である P(2)が真である P(3)が真である
例2.4
P(n)を「n3 – n は 3 で割り切れる」とする 主張
n≧1 について P(n) が成立することを示せ
証明 数学的帰納法で証明する n=1 のとき 13 – 1 = 0 なので P(1) は真である P(n) が真と仮定する
(n+1)3 – (n+1) = (n3+3n2+3n+1) – (n+1) = (n3 – n) + 3n2 + 3n
仮定より n3 – n = n(n2 – 1) は 3 で割り切れるので, (n+1)3 – (n-1) も 3 で割り切れる
練習問題
練習問題3
S がある無限集合 U の有限部分集合であれば, S の補集合 T は無限集合であることを示せ
背理法で証明しましょう
練習問題1
A = {a1,a2, … , an} の冪集合をP(A)とする. P(A)の要素数 |P(A)| はいくつになるか?
練習問題2
A = {a1,a2, … ,an},B = {b1,b2, … ,bm} とする. AとBの直積の要素数 |A×B| はいくつになるか?