第14回 プログラムの意味論と検証(3) 不動点意味論 担当:犬塚

Slides:



Advertisements
Similar presentations
SPSSによるHosmer-Lemeshow検定について
Advertisements

1 ソフトウェア工学 200 5 年 5セメスタ. 2 履修にあたって 教科書:「アルゴリズムとデータ構造」 平田富夫著 森北出版 講義:5セメスター開講、専門科目、 K318 、金曜4時限 担当: 草苅 良至 GI511, 2095、 参考書:「プログラミング作法」
レポート書き方. おしいレポート よく調べてある それぞれの、1文の言っていることは正 しい しかし、全体として、何が言いた いのかわからない 内容の重要だが、全体の構成も重 要である.
1 7.時間限定チューリングマシンと クラス P. 2 7 -1.入力サイズ チューリングマシンの入力記号 の長さ を 入力サイズという。 名称:合成数の問題 インスタンス:整数n 問:nは合成数か? 通常は、入力サイズとしてはもっとも短い表現での 長さが利用される。 例えば、次のような合成数の問題における入力サイズは、
7.n次の行列式   一般的な(n次の)行列式の定義には、数学的な概念がいろいろ必要である。まずそれらを順に見ていく。
9.線形写像.
3.多項式計算アルゴリズム べき乗の計算 多項式の計算.
麻雀ゲーム 和島研究室 ソ 小林巧人
5.連立一次方程式.
相関.
1 情報量(2章). 2 物理的概念との対比1(入れ物と中 身) 塩水 塩 データ 情報 情報の量? 塩分の量! 情報の量は見た目ではわ からない。データと情報 は異なる概念。 塩分の量は見た目 ではわからない。 しかし、本質的な もの。
―本日の講義― ・平均と分散 -代表値 -ぱらつき(分散・標準偏差等) ・Excelによる演習
論理回路 第2回 今日の内容 前回の課題の説明 数の体系 – 数の表現 – 代表的な数 – 基数の変換 – 補数.
広告付き価格サービ ス 小園一正. はじめに 世の中には様々な表現方法の広告があり ます。その中でも私たち学生にとって身 近にあるものを広告媒体として取り入れ られている。 価格サービス(無料配布のルーズリー フ)を体験したことにより興味を惹かれ るきっかけとなった。主な目的は、これ.
素数判定法 2011/6/20.
フーリエ係数の性質. どこまで足す? 理想的には無限大であるが、実際に はそれは出来ない これをフーリエ解析してみる.
公開鍵暗号系 2011/05/09.
1章 行列と行列式.
本宮市立白岩小学校. 1 はじめに 2 家庭学習プログラム開発の視点 ① 先行学習(予習)を生かした 確かな学力を形成する授業づく り ② 家庭との連携を図った家庭学習の習慣化.
プログラミングⅠ( 1 組) 第 9 回
フーリエ級数. 一般的な波はこのように表せる a,b をフーリエ級数とい う 比率:
プログラミング入門2 第4回 式文 代入式 論理演算子 ループの脱出、スキップ 情報工学科 篠埜 功.
3.エントロピーの性質と各種情報量.
9.通信路符号化手法1 (誤り検出と誤り訂正の原理)
Excelによる積分.
1 6.低次の行列式とその応用. 2 行列式とは 行列式とは、正方行列の特徴を表す一つのスカ ラーである。すなわち、行列式は正方行列からスカ ラーに写す写像の一種とみなすこともできる。 正方行列 スカラー(実数) の行列に対する行列式を、 次の行列式という。 行列 の行列式を とも表す。 行列式と行列の記号.
計算のスピードアップ コンピュータでも、sin、cosの計算は大変です 足し算、引き算、掛け算、割り算は早いです
線形符号(10章).
1 0章 数学基礎. 2 ( 定義)集合 集合については、 3セメスタ開講の「離散数学」で詳しく扱う。 集合 大学では、高校より厳密に議論を行う。そのために、議論の 対象を明確にする必要がある。 ある “ もの ” (基本的な対象、概念)の集まりを、 集合という。 集合に含まれる “ もの ” を、集合の要素または元という。
10.PとNP完全問題との境界.
複素数.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
1 0章 数学基礎. 2 ( 定義)集合 集合については、 3セメスタ開講の「離散数学」で詳しく扱う。 集合 大学では、高校より厳密に議論を行う。そのために、議論の 対象を明確にする必要がある。 ある “ もの ” (基本的な対象、概念)の集まりを、 集合という。 集合に含まれる “ もの ” を、集合の要素または元という。
信号測定. 正弦波 多くの場合正弦波は 0V の上下で振動する しかし、これでは AD 変換器に入れら れないので、オフ セットを調整して データを取った.
1 9.線形写像. 2 ここでは、行列の積によって、写像を 定義できることをみていく。 また、行列の積によって定義される写 像の性質を調べていく。
通信路(7章).
アルゴリズムとデータ構造 補足資料 7-4 「単純交換ソート exsort.c 」 横浜国立大学 理工学部 数物・電子情報系学科 富井尚志.
3.プッシュダウンオートマトンと 文脈自由文法
6.符号化法(6章).
ビット. 十進数と二進数 十進数  0から9までの数字を使って 0、1、2、3、4、5、6、7、8、9、 10、11、12 と数える 二進数  0と1を使って 0、1、10、11、100、101、11 0、111 と数える.
人工知能特論 II 第 4 回 二宮 崇 1. CCG (COMBINATORY CATEGORIAL GRAMMAR) 組合せ範疇文法 2 今日の講義の予定.
平成22年度 第4回 Let’s Enjoy English 平成22年度 第4回 Let’s Enjoy English 期日:平成22年10月30日 場所:旭川市立北光小学校 基調提言.
アルゴリズムとデータ構造 補足資料14-1 「ハッシュ法」
3.正方行列(単位行列、逆行列、対称行列、交代行列)
年度 情報数理学. 2 履修にあたって 2009 年度 大学院奇数セメスター(前期)開講 K336→ 大学院棟 D 416(次回から)教室: 時限: 火曜日3時限( 12:50 - 14:20 ) 担当 草苅良至 4/21( 火) 休講 → 補講 ?/? ? 時限 D416.
プログラミング演習B ML編 第3回 2010/6/15 (コミ) 2010/6/16 (情報・知能) 住井 ~sumii/class/proenb2010/ml3/
論理回路 第1回. 今日の内容 論理回路とは? 本講義の位置づけ,達成目標 講義スケジュールと内容 受講時の注意事項 成績の評価方法.
Analog “ neuronal ” networks in early vision Koch and Yuille et al. Proc Academic National Sciences 1986.
方程式を「算木」で 解いてみよう! 愛媛大学 教育学部 平田 浩一.
C言語応用 構造体.
3.多項式計算アルゴリズム べき乗の計算 多項式の計算.
プログラミング演習B ML編 第3回 2006/7/4 (通信コース) 2006/7/12 (情報コース) 住井 ~sumii/class/proenb2006/ml3/
HKS Analysis Log Jul 2006 Part1 D.Kawama. 第壱部 HKS Sieve Slit Analysis.
1 中野研究室 4 年ゼミのイロハ 斉藤(修士 2 年) ( 2009 年 ”4 年ゼミのイロハ ” を参考に作りました)
1 プログラミング言語論 第13回 プログラムの意味論と検証 (2) 表示的意味論 担当:犬塚. 2 表示的意味論 denotational semantics  表示的意味論では、プログラムの要素とそれが 意味するものを対応付ける。 変数 式 文 A B … A+2 2B+C A:=A+2 if.
プログラミングⅠ( 2 組) 第 1 回 / pLB1.pptx.
8.任意のデータ構造 (グラフの表現とアルゴリズム)
プログラミング入門2 第3回 複合文、繰り返し 情報工学科 篠埜 功.
リファクタリング支援のための コードクローンに含まれる識別子の変更内容分析 井上研究室 工藤 良介 1.
実験5 規則波 C0XXXX 石黒 ○○ C0XXXX 杉浦 ○○ C0XXXX 大杉 ○○ C0XXXX 高柳 ○○ C0XXXX 岡田 ○○ C0XXXX 藤江 ○○ C0XXXX 尾形 ○○ C0XXXX 足立 ○○
ことばとコンピュータ 2007 年度 1 学期 第 1 回. 2 ことばとコンピュータ 授業科目名:言語情報処理論 授業題目名:ことばとコンピュータ 履修コード: 5067 教室: 323 一学期開講 授業の進め方 – 基本的に講義中心ですすめ,時々コンピュー タを使う.
1 アルゴリズムの高速化. 2 アルゴリズムにおける 大幅な性能アップ 多項式時間アルゴリズム VS 対数時間アルゴリズム (最大公約数の問題) 指数時間アルゴリズム VS 多項式時間アルゴリズム (フィボナッチ数列を求める問題)
音の変化を視覚化する サウンドプレイヤーの作成
プログラミングの基礎知識 プログラミングの手順と重要概念 アルゴリズム. プログラミングの手順 コーディング エディタなどでコードを記述 コンパイル・インタープリタ 実行可能な形に翻訳 デバッグ(虫取り、不具合の調整) 完成!
1 オペレーティングシステム #7 計算機工学 III オペレーティングシステム #7 主記憶管理:主記憶管理基礎 2006/05/26 津邑 公暁.
本文. 考えながら読みましょ う 「いろいろなこと」( 3 行目)は何で すか 「①電話料金はコンビニで支払いをしていま す。いつでも払えますから、便利です。」 「②夕食はコンビニで買います。お弁当やお かずがいろいろありますから。」今、若者に 人気のあるコンビニは、いろいろなことをす るのに非常に便利な場所になった。
11万km上空のかぐやから見た地球. デジタル信号処理 Digital Signal Processing 2010 年度春学期 Spring Semester, 2010 担当者: 栗濱 忠司( Professor ) 第3週第3週.
IIR 輪講復習 #18 Matrix decompositions and latent semantic indexing.
今日の内容 高階関数  関数を値として扱う 関数を引数にとる 関数を返す関数 プログラミングの例題  クイックソート.
地球儀と様々な地図. 1 球体としての地球 こうした現象はあることをイ メージすると理解できる。
Presentation transcript:

第14回 プログラムの意味論と検証(3) 不動点意味論 担当:犬塚 プログラミング言語論 第14回 プログラムの意味論と検証(3) 不動点意味論 担当:犬塚

今日の講義 これまでに簡単なプログラミング言語について、表示的意味論を与えた。 本講義では、再帰呼び出しで定義される関数についての表示的意味を与える。 この理論は不動点意味論と呼ばれる。 この意味論のために導入する領域理論と合わせて、D.Scottが与えた。

再帰 再帰は、基本的な制御構造である。 チューリング機械と同様によく用いられる計算の原理である、帰納的関数論(recursive function theory)では、再帰が基本的制御構造。 他のループも再帰に還元できる。 再帰は、内側の呼出しでサイズの小さなパラメータで呼び出すように書けば確実に停止するので、扱いの容易な制御構造である。

この講義で導入するアイデア 再帰定義を汎関数を用いて再定義する。 再帰的プログラムの意味を、汎関数の不動点として捉える。 再帰的関数の表示的意味としてふさわしい、関数の領域を用意する。 連続関数 領域の上で、汎関数の不動点が存在することを示す =不動点定理

再帰 f (x, y) = (if x=0 then y else f (x-1, 2*y)) f (3,3)=f (2,6)=f (1,12)=f (0,24)=24 g(x,y) = (if x=y then y+1 else g(x, g(x-1, y+1))) g(4,2)=g(4,g(3,3))=g(4,4)=5 g(5,1)=g(5,g(4,2))=g(5,g(4,g(3,3)))=g(5,g(4,4))=g(5,5)=6 g(2,3)=g(2,g(1,4))=g(2,g(1,g(0,5)))=g(2,g(1,g(0,g(-1,6))))=…

再帰と汎関数 再帰的関数定義 f (x,y) = (if x=0 then y else f (x - 1, 2 * y)) この再帰的な関数定義は、汎関数 G=lj x y. (if x=0 then y else j (x - 1, 2 * y)) を用いると、次の方程式として書くことができる。   f = G( f )

練習 次の再帰的関数定義を、汎関数を用いて書き直せ。 g(x,y) = (if x=y then y+1 else g(x-1, y+1)) Γ=λψxy. (if x=y  then y+1 else ψ(x-1, y+1)) としたとき、 g=Γ(g)

Gの不動点 は次の関数を不動点として持つ。 f = lxy. 2xy = lxy.(if x=0 then y else 2x-12*y) G1=lj xy.(if x=0 then y else j(x-1, 2*y)) は次の関数を不動点として持つ。 f = lxy. 2xy G1 ( f ) = lxy.(if x=0 then y else f (x-1, 2*y)) = lxy.(if x=0 then y else 2x-12*y) = lxy.(if x=0 then 2xy else 2xy) = lxy. 2xy =f

2つの不動点 G2=ljxy. (if x=y then y+1 else j(x, j(x-1, y+1))) 次の汎関数は少なくとも2つの不動点をもつ。 G2=ljxy. (if x=y then y+1 else j(x, j(x-1, y+1))) f1 = lxy. x+1 G2 (f1) = lxy.(if x=y then y+1 else f1(x, f1 (x-1, y+1))) = lxy.(if x=y then x+1 else x+1) =f1 f2 = lxy.(if x≧y then x+1 else y-1) G2 (f2) = lxy.(if x=y then y+1 else f2(x, f2 (x-1, y+1))) = lxy.(if x=y then y+1 else f2(x, {if x-1≧y+1 then x else y})) = lxy.(if x=y then y+1 else f2(x, {if x≧y+2 then x else y})) = lxy.(if x=y then y+1 else {if x≧y+2 then x+1 else if x≧y then x+1 else y-1})) = lxy.(if x≧y then x+1 else y-1)=f2

汎関数によって定義される関数 関数hについて x = h(x)の解 を、不動点(fixed point)という。 再帰的に定義される関数は、汎関数Gの方程式 f = G( f ) の解と考えられる。つまり、 Gの不動点である。 疑問点: どんなGは不動点をもつことが保証できるのか? 2つ以上の不動点を持つことはないのか?2つ以上不動点をもつ場合、どれが定義される関数なのか?

無限個の不動点をもつ汎関数の例 G3=lj x. (if x=0 then 1 else j(x+1)) この汎関数は、以下のものすべてを不動点として持つ。 f0= lx.(if x=0 then 1 else 0) f1= lx.(if x=0 then 1 else 1) f2= lx.(if x=0 then 1 else 2) f3= lx.(if x=0 then 1 else 3) … さらに、次の部分関数も不動点と見なせる。 fu = lx.(if x=0 then 1 else 未定義) 実際には、上のG3 に対応する次のプログラムではfuがまさに、このプログラムの意味にふさわしい。 f(x) = (if x=0 then 1 else f (x+1))

部分関数 A B プログラムとしての関数は、その計算が停止しない場合、 未定義(undefined)であると考えられる。 即ち、プログラムの意味は、未定義の部分を含んだ関数  =部分関数(partial function)として与えなければならない。 未定義の箇所のない関数は全域関数(total function)。 A B × × × 未定義

定義域、値域の拡張 D D+ 関数の定義域、値域には未定義要素も含めて考えるのが便利である。 そこで、集合Dに対して次の集合を定義することにする。 D+=D∪{wD} こうした集合を領域(domain)という。 D D+ wD

自然な拡張 未定義を明示的に扱うため、部分関数の扱いを再構成する。 定義域A、値域Bの部分関数 f : A→B f (x) ; f (x) が定義されているとき f+(x) = wB ; x= wA か、または f (x)が未定義のとき f+ は f の自然な拡大(natural extension)という。 A B A+ B+ × × × × × × 未定義 wA wB

領域の上の半順序関係 T F wBool 領域D+上で、未定義の値から定義の値への順序 を考える。 すなわち、x, y ∈D+について、 領域D+上で、未定義の値から定義の値への順序  を考える。 すなわち、x, y ∈D+について、 x=wD,またはx=y のときそのときに限りx  y 例 Bool={T, F}としたとき、Bool+={T, F, wBool}で、次のハッセ図で表される順序をもつ。     T      F        wBool

2引数の関数 f(x,y)=x+yのような2引数関数の定義域に対する領域を与える。 D1×D2に対応する領域は次のとおり。 (D1×D2)+=D1+×D2+ (A×B)+上の半順序を次のとおり定義する。 (x, y), (x’, y’) ∈(D1×D2)+について、 x   x’ かつ y y’ のとき、そのときに限り(x, y) (x’, y’) 例 Bool={T, F}のとき、 (Bool×Bool)+ ={(T,T),(T,F),(T,wBool),  (F,T),(F,F),(F,wBool),  (wBool,T),(wBool,F),(wBool,wBool)} これは右のハッセ図で表される順序をもつ。 (T,T) (T,F) (F,T) (F,F) (T,wBool) (wBool,T) (F,wBool) (wBool,F)          (wBool,wBool)}

関数の単調性 通常通り定義された関数は領域上の順序に関して単調性をもつ。 単調性(monotonic): x yのとき、f(x) f(y) 例 通常、関数の引数が未定義なら関数の返り値は未定義。 f : N×N → N, f(x, y)= x+y f+:(N×N)+ →N+, f+(x, y)= x+y f+は について単調である。 (∵) (x, y) (x’, y’)とする。 x, yがどちらもwNでなければ(x, y)=(x’, y’)。よってf+(x, y) f+(x’, y’) x, yのどちらかがwNなら f+(x, y)=wNなのでやはりf+(x, y) f+(x’, y’)

練習 g : N×N → N, g(x, y)= if x=0 then x else x+y も単調性を持つことを確認せよ。 この場合は、もう少し場合わけが必要。 (x, y)   (x’, y’)とする。 1) x= wNのとき 2) x= 0 のとき 3) xが0, wNのどちらでもなく、y = wN のとき 4) xが0, wNのどちらでもなく、 y もwN 以外の値のとき

計算される関数の候補 我々の表示的意味論として考えるべき関数は、単調な関数だけでよい。 単調でない関数は不自然である: ある引数が未定義であるかどうかで、答えが変わるのはおかしい。 そこで、 (D1→D2)+={ f + | f + : D1 + →D2 + は単調}

関数の間の順序 汎関数も同様の議論で扱うには、汎関数の定義域=関数の集合にも順序を導入する必要がある。 f1, f2 ∈(D1→D2)+について、   任意の x∈D1+で f1(x)  f2(x)であるときそのときに限り、 f1   f2 つまり、f1   f2 であるとは、                      f1が未定義でない限り f1(x)=f2(x)であるということ。   ( f1(x)が未定義の場合は、 f2(x)はどんな値を持ってもよい)

鎖、一意な極限 D+の要素の(無限)列 x0, x1, x2,…が x0 x1 x2 ・・・   となるとき、この列をD+の鎖 (chain) という。 D+の鎖 x0, x1, x2,… に対し、つぎの x をこの鎖の 一意な極限(unique limit) という。 xi  x , i=0, 1, … y が xi y , i = 0, 1,… をみたすなら x   y (xは鎖のどの要素より大きく、そういうものの中で一番小さい) 鎖 x0, x1, x2,… の一意な極限を lim xi  と書く。 i →∞

領域の性質 これまで検討してきた関数の領域は次の性質D+を持つ。 ここで改めて、上の性質を持つとき 領域 ということにする。 D+は   に関して半順序集合である。 D+は最小の要素を持つ。 D+のすべての鎖が、一意な極限をもつ。 こうしたことは、(D1×D2)+、(D1→D2)+にも言える。 ここで改めて、上の性質を持つとき 領域 ということにする。

連続 D1+、D2+を領域、 f :D1+→D2+を単調な関数とする。 このとき、D1+の任意の鎖、 x0, x1, x2,…を考えると、 f は単調であるので、 f (x0), f (x1), f (x2),…も鎖である。 D2+は領域なので、任意の鎖は一意な極限をもつ。 このとき次が成立つ場合、 f は 連続(continuous) であるという。 f ( lim xi) = lim f (xi) i →∞ i →∞

解析での連続と、ここでの連続 ここで用いた連続の概念は、特別のものでない。 普通に用いる連続の概念は、実はここで述べた連続の特別なケース。 通常連続は次のように定義される。 R(実数)の点列a0, a1, a2,…は次のとき極限aを持つ。 任意のe >0に対して、あるNがあり、すべての i>N で |a-ai|<e。 関数 f : R→Rが連続であるとは、極限をもつ任意のRの点列a0, a1, a2,…に対し、f (lim ai) = lim f (ai)。 i →∞ i →∞

不動点定理 D+を領域、f : D+→D+を連続関数とする。 このとき f は、 x = lim f n(wD) ただし、wDはD+の最小要素。 さらに、この x は最小の不動点である。 n →∞

不動点定理の証明(1) まず f i(wD) f i+1(wD)を i に関する数学的帰納法で示す。 i =0 の場合、wDは最小要素なので wD  f (wD)。 f i (wD)   f i+1(wD)ならば f の単調性から f i+1(wD) f i+2(wD) したがって、 wD  f (wD)   f 2(wD) ・・・ 示された。 したがってこれらは鎖となり、一意な極限 x =lim f i(wD)がある。 すると、 f の連続性から、 f (lim f i(wD))=lim f i+1(wD)= lim f i(wD) つまり、xは不動点である。 i →∞ i →∞ i →∞ i →∞

不動点定理の証明(2) つぎに x が最小の不動点であることを示す。 y を f のある不動点とする。 するとwDは最小要素なので wD  y。 f の単調性から f (wD) f (y)=y 同様に任意の i についてf i (wD) yである。 したがって、極限の性質より x =lim f i (wD) y                                    (以上) i →∞

まとめ 再帰的プログラムの意味を与える不動点意味論を紹介した。 再帰的プログラムは汎関数の不動点として定義できる。 関数が不動点を持つための定理=不動点定理を利用して、再帰定義が定義するものを明らかにすることができる。 不動点定理が述べる最小不動点は確かに、プログラムの動きと一致する。