Relaxed Dependency Analysis

Slides:



Advertisements
Similar presentations
組合せ最適化輪講 2.3 連結性 川原 純. 2.3 連結性 内容 – グラフ上の節点をすべてたどるアルゴリズム 計算機上でのグラフの表現 – 強連結成分を求めるアルゴリズム トポロジカル順序を求める方法も – k- 連結、 k- 辺連結について – 2- 連結グラフの耳分解について.
Advertisements

オレと型推論と 少年オッカムル 関数型言語 OCaml 再帰関数 リスト プログラミングの基礎 ダイクストラ法 Windows で文字化け F# モジュール ファンクタ 副作用 アキュームレータ.
わんくま同盟 福岡勉強会 #4 yield について るーごん. わんくま同盟 福岡勉強会 #4 自己紹介 日本一人口が少ない県に住んでいます。 一昨年まで、ちょっと福岡に住みました。 仕事は主に dbMAGIC 。 プログラミング言語はよく分かりません。 好きなもの ポケモン、ファイブマン、ジェットマン、
ML 演習 第 1 回 佐藤 春旗, 山下 諒蔵, 前田 俊行 May 30, 2006.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
ソフトウェア基礎科学 授業資料: 論理関係(logical relations)のお話
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
Pattern Recognition and Machine Learning 1.5 決定理論
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
データ構造と アルゴリズム 理工学部 情報システム工学科 新田直也.
2006/10/12 山下 諒蔵 佐藤 春旗 前田俊行 大山 恵弘 佐藤 秀明 住井 英二郎
詳解TCP/IP TCPタイムアウトと再転送 れにうむ.
型宣言 (Type Declarations)
型宣言(Type Declarations)
haXeでオリジナルコンポーネント作り WCAN mini Vol 小笠原
論理式の表現を数学的に取り扱いやすくするために代数学の助けを借りる.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
アルゴリズムとデータ構造 2011年6月13日
MSBuild 色々出来るよ 2011/04/02 お だ.
条件式 (Conditional Expressions)
模擬国内予選2014 Problem C 壊れた暗号生成器
データ構造と アルゴリズム 知能情報学部 新田直也.
~sumii/class/proenb2010/ml4/
Cubic Residue and Cubic Root Modulo p
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
エージェントアプローチ 人工知能 7章・8章 B4 片渕 08/07/18.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
プログラミング言語論 第12回 関数型プログラミング 情報工学科 篠埜 功.
論文紹介: A Second Look at Overloading
機密情報/個人情報/特定個人情報等の 開示を伴う案件に関する依頼事項 株式会社エクサ デリバリー業務改革推進部 2016年12月.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
PROGRAMMING IN HASKELL
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
ソフトウェア制作論 平成30年10月3日.
PROGRAMMING IN HASKELL
第5章 特徴の評価とベイズ誤り確率 5.5 ベイズ誤り確率の推定法 [1] 誤識別率の偏りと分散 [2] ベイズ誤り確率の上限および下限
国立情報学研究所 ソフトウェア研究系 助教授/
 型推論1(単相型) 2007.
Java8について 2014/03/07.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
XMLゼミ 3.5 DTD M2 正木 裕一.
 型推論3(MLの多相型).
アルゴリズムとプログラミング (Algorithms and Programming)
アルゴリズムとデータ構造 2012年6月11日
国立情報学研究所 ソフトウェア研究系 助教授/
Type Systems and Programming Languages ; chapter 13 “Reference”
コレクション・フレームワーク データベース論 第7回.
PROGRAMMING IN HASKELL
~sumii/class/proenb2009/ml4/
ロールを基にした構造進化の表現 Role based Evolution Dependency Structure Matrix
PROGRAMMING IN HASKELL
全体ミーティング 2010/05/19 渡邊 裕貴.
~sumii/class/proenb2010/ml5/
extern の意味 (C プログラミング演習,Visual Studio 2019 対応)
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
知識ベースの試作計画 ●●●研究所 ●●●技術部 稲本□□ 1997年1月.
PROGRAMMING IN HASKELL
Haskell Programming Language
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
 型理論の初歩 2007 fall.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
プログラミング言語論 プログラミング言語論 演習7 解答と解説 演習7 解答と解説 1.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
2007/6/26(通信コース)2007/6/27(情報コース) 住井
Presentation transcript:

Relaxed Dependency Analysis 〜Haskell 2009年末の集い〜 酒井 政裕

酒井 政裕 自己紹介 Blog: ヒビルテ Twitter: @masahiro_sakai 2001年末ごろにHaskellに遭遇 好きな関数: unfoldr

背景: Haskellの型推論の流れ 依存関係(の強連結成分)で定義をグループ化 末端のグループから順に型推論 例: 以下では b, c の型をまず推論し、その結果を使って a の型を推論 a = … b … b = … c … c = … b … a b c

Relaxed Dependency Analysis 依存関係の定義の変更 Haskell98では、aがbを参照していれば、 aはbに依存していた Haskell2010では、bに型宣言がある場合には、 aがbを参照していても、依存とはみなさない 効果 より多相的な型を推論出来るようになる これまで型宣言が必要だったのが、不要になることがある

例: Haskell98の場合 f :: Eq a ⇒ a → Bool f x = (x == x) ∨ g True ∨ g “Yes” g y = (y ≤ y) ∨ f True fとgは相互に依存しているので、同時に型推論 g が二通りの型で使われている Bool → Bool String → Bool ⇒ 型エラー f g

例: Haskell2010の場合 × f :: Eq a ⇒ a → Bool f x = (x == x) ∨ g True ∨ g “Yes” g y = (y ≤ y) ∨ f True fには型宣言があるので、 gはfには依存しない gを先に型推論して、 g :: ∀a. Ord a ⇒ a → Bool fの型推論では、gの型変数aをBoolとStringに具体化 f g ×

何が起こっているのか? Haskellの基づいているHindley-Milnerのアルゴリズムでは、ある定義グループの型推論の最後の段階で型を多相的にする。 なので、先に型推論が済んでいる部分は、型が多相的な型になっているので、それを任意に具体化出来る。 一方、型推論中の部分は、型が多相的になっていないので、複数の型で使うことが出来ない。

おまけ: Hindley-Milner 型推論の例 f x = let g y = (x,y) in g True の型推論 x :: α とおく g y = (x,y) の型推論 y :: β とおいて g :: β → (α,β) βに関して汎化して g :: ∀t. t → (α, t) (※ 前提に含まれる α に関しては汎化しない) g True では、g の型変数 t を Bool に具体化して、 g True :: (α, Bool) f :: α → (α, Bool) αに関して汎化して、f :: ∀u. u → (u, Bool)