シラバス
入学のご案内履修登録
オートマトンと形式言語理論のサムネイル

オートマトンと形式言語理論

[2027年度開講]

科目の概要

この科目では、オートマトンをはじめとする「計算機のモデル」のパラダイムと、「言語」という概念を数学的に定式化した「形式言語」という枠組みの 2 つをテーマとして取り上げ、一見距離のあるこれらの 2 つの間の密接な関係と、この 2 つが織りなす「計算」という現象に肉薄するとともに、具体的なプログラミング言語や計算機の実装方法や規格書などを垣間見ることで、普段はとりたてて詳しく追いかける機会の少ない「計算」「計算機」「プログラミング言語」といったものを掘り下げて「脱・神秘化」(demystify) していく。 さらに、正則言語や文脈自由言語などの言語クラスが持つソフトウェアエンジニアリング領域へのきわめて重大な応用を学ぶことで、実践的技術と理論的直感の両方を培う。

科目情報

履修想定年次
3年次
単位数
2単位
開講Q
1Q、3Q
科目属性
選択
授業の方法
オンデマンド科目
評価方法
確認レポート 50% , 単位認定試験 50%
前提科目
(強く推奨)
なし
後継科目
(推奨)
なし
科目ナンバリング
INF-3-C1-1030-003
到達目標
計算・計算機・プログラミング言語について一段階深く掘り下げて把握し、特に「プログラミング言語や計算機などの規格書を見に行く」という選択肢の存在を意識できるようになる。また、実践的な技術を養った上で、それらを活用して具体的な問題解決ができるようになることを目標とする。
教科書・参考書
[教科書]
  • なし(オリジナル教材)
[参考書]
  • 米田政明,オートマトン・言語理論の基礎,近代科学社,2003
  • 川添愛,白と黒のとびらオートマトンと形式言語をめぐる冒険,東京大学出版会,2013
  • 川添愛,精霊の箱チューリングマシンをめぐる冒険上下,東京大学出版会,2016
  • MichaelSipser(著)・田中圭介・藤岡淳(監訳),計算理論の基礎原著第3版オートマトンと言語,共立出版,2023
  • 丸岡章,計算理論とオートマトン言語理論[第2版]―コンピュータの原理を明かす―,サイエンス社,2021
授業時間外の学修
各回の講義内容は繰り返し見返し、各回二時間ほど復習を行ってください。また、次回の学習内容についてもあらかじめ不明な単語や前提となる知識をWebで調べるなどして各回三時間ほど予習を行ってください。
特記事項
2026年4月1日現在。内容が更新される場合があります。

授業計画

第1回
「構造」vs.「構造を表すための文字列」

第1回開講日時:
順次公開予定

エスケープシーケンスやインジェクション攻撃といった実践的な例とともに、「構造」と「構造を表すための文字列」の違いを意識できるようになる。

第2回
シリアライザと文脈自由文法

第2回開講日時:
順次公開予定

再帰的構造を再帰的シリアライザで文字列に「押し込む」という視座を手に入れるとともに、文脈自由文法や JSON に親しむ。

第3回
シリアライザの単射性

第3回開講日時:
順次公開予定

シリアライザから単射性が失われていることの問題点を理解し、上手いシリアライザを設計する必要性について学ぶとともに、実際に用いられているシリアライザでの工夫について具体例を交えて学ぶ。

第4回
ゲームブック (DFA)・状態遷移図

第4回開講日時:
順次公開予定

豊富な例示で有限オートマトン・形式言語・有限オートマトンによる形式言語の識別といった概念に慣れ親しむ。

第5回
最小 DFA・分身できるすごろく(NFA・ε-NFA)・正則表現

第5回開講日時:
順次公開予定

最小 DFA について学ぶ。NFA と正則表現について学ぶとともに、ε-NFA は正則表現を包摂するのにちょうどいい柔軟さを有した有限オートマトンであることを理解する。

第6回
正則表現・DFA・ε-NFA の能力はすべて同じ

第6回開講日時:
順次公開予定

正則表現と有限オートマトンが持つ密接な関係について学び、有限オートマトンにおいて非決定性は識別能力を拡張させないことを学ぶ。

第7回
regex (いわゆる『正規表現』)

第7回開講日時:
順次公開予定

形式言語理論がもたらした極めて実践的な応用例の一つ、regex を導入し、正則表現との類似点や差異を知る。

第8回
正則言語とその諸性質

第8回開講日時:
順次公開予定

正則言語が正則表現・DFA・ε-NFA のどれを使っても表せるという強力な事実を利用し、諸性質を示す。

第9回
パーサー(構文解析器)という「逆シリアライザ」

第9回開講日時:
順次公開予定

パーサーや BNF といった概念を学ぶとともに、あらゆる文脈自由文法に対して、railroad diagram とも称される「関数呼び出しつきのオートマトン」によるパーサーが実現できることを示す。

第10回
数式の構文解析・再帰下降パーサー・スタック

第10回開講日時:
順次公開予定

中置演算子とカッコを含む数式を再帰下降構文解析で読む。呼び出しスタックの概念に慣れ親しむとともに、後置記法はスタックマシンに対する命令列として解釈できることを学ぶ。

第11回
我々は実は最初からずっと「計算能力」の話をしていたのだ

第11回開講日時:
順次公開予定

「言語クラスの包含関係を調べるというのは、機械クラスの計算能力の強弱を考えることに他ならない」という観点から学びを整理し、一見距離のある「計算機のモデル」と「形式言語」の 2 つの間の密接な関係を今一度整理する。

第12回
そろそろ、動力を持つ解釈者(インタプリタ)の話をしよう

第12回開講日時:
順次公開予定

連続と離散の狭間を垣間見つつ、自身の記述に用いられているプログラミング言語で書かれた任意のプログラムの停止性を正しく有限時間で判定できるプログラムというのはインターフェースが unreasonable である、という視点から、停止性問題をつぶさに観察する。

第13回
そろそろ、時間と効率の話をしよう

第13回開講日時:
順次公開予定

P≠NP 予想が如何に重要であり、いかなる意味付けができるのかを理解する。「計算機のモデル」と「形式言語」との間にある関係性をいま一度整理する。

第14回
集大成「貪欲マッチとキャプチャグループのある regex エンジンの製作」前半戦

第14回開講日時:
順次公開予定

正則表現の言語処理系を実装する。regex と正則表現の違いに今一度立ち返り、regex エンジンを自作することに備える。

第15回
集大成「貪欲マッチとキャプチャグループのある regex エンジンの製作」後半戦

第15回開講日時:
順次公開予定

自分の手で regex エンジンを実装することで、この授業での幅広い学びを実践的な観点から結びつけるとともに、regex エンジンを「脱・神秘化」(demystify) していくことを目指す。

関連科目