SlideShare a Scribd company logo
1 of 26
Download to read offline
1
非正格関数に対して
適用可能な融合変換
酒井 政裕
政策・メディア研究科
修士課程2年
2
発表の流れ
背景
純粋関数型言語
融合変換
現実の言語での問題
本研究の問題意識、アプローチ、結果
始代数が存在しない場合
始代数の存在条件
Haskellへの適用
まとめ
3
純粋関数型言語
数学的な関数に基づく
入力だけから出力が決定される
副作用がないため、値が同じである式を自由に
置き換え可能
特徴と利点
強い型付け, 高階関数, 遅延評価
高いレベルでの柔軟性や信頼性を提供
代表的な言語: Haskell
4
Haskellプログラムの例
素数列挙 (エラトステネスのふるい)
sieve (p:xs) = [ x | x ← xs, x `mod` p ≠ 0 ]
primes = map head (iterate sieve [2..])
図は日経ソフトウェア2006年6月号
「Haskellによる関数プログラミング入門」より借用
5
純粋関数型言語 (cont’d)
非常に宣言的・抽象的な記述が可能
その分、ナイーブに実行すると性能が悪い
⇒ 最適化最適化最適化最適化がががが重要重要重要重要
6
融合変換
融合!!
7
融合変換 (cont’d)
複数のパスからなるプログラム
わかりやすい
中間データ構造が生成されるため、効率が悪い
これを単一のパスに変換
中間データ構造を生成しないことで空間効率を向上
これまで離れていたコードが接することにより、更なる
最適化が適用可能に ⇒ 時間効率も向上
主に(純粋)関数型言語で用いられる最適化
8
融合変換例
double, square, map は以下のような関数
double x = 2*x, square x = x*x
map f [x1, x2, x3, …] = [f x1, f x2, f x3, …]
変換前: map square ∘ map double
[1, 2, 3] ↦ [2, 4, 6] ↦ [4, 16, 36]
変換後: map (square∘double)
[1, 2, 3] ↦ [4, 16, 36]
9
融合変換の理論
変換には複数のプログラムの等価性が必要
背景となる理論
普遍性 (圏論)
前提: データ型の普遍性
= 条件を満たす関数がただ一つ存在する
同じ条件を満たす関数は全て等しい
パラメトリシティ (多相ラムダ計算)
以降では主に普遍性を扱う
10
データ型の普遍性
帰納的に定義されるデータ型
自然数, (有限)リスト, (有限)木
型上の演算 F の最小不動点
圏論的な定義
関手F: 型Xを型 F(X) へ、
関数 h:X→Y を F(h):F(X)→F(Y) へ写す
F代数: 型Xと関数φ: F(X)→X の組 (X, φ)
F始代数 (μF, in):
任意の代数 (X, φ) への準同型がただただただただ一一一一つつつつ存在存在存在存在する代数
fold(φ): μF→X
始代数の普遍性を利用して変換を行うことが出来る
普遍性
11
始代数の性質を用いる変換
cata-Fusion (fold-Promotion)
h∘φ = ψ∘F(h) ⇒ h∘fold(φ) = fold(ψ)
両辺とも
(μF, in) から
(Y, ψ) への
準同型であり、
これはただ一つ
存在する
12
始代数の性質を用いる他の変換
short-cut deforestation
忘却関手 |・|: Alg(F)→C の極限錘としての始代
数の性質
Θ:∀X.(FX→X)→(C→X)
⇒ fold(φ)∘build(Θ) = Θ(φ)
hylomorphism
始代数と終余代数が一致する場合
fold(φ)∘unfold(ψ) = fix (λh. φ∘F(h)∘ψ)
13
現実の言語における問題
通常の数学の場合とは異なり、
現実のプログラミング言語では
停止しない計算 ⊥(ボトム) も考慮する必要がある
関数 f が正格 ⇔ f(⊥)=⊥
純粋関数型言語では非正格な関数が存在
e.g) ifte(b,t,e) = if b then t else e
データ型は一般に
正格な関数に制限した場合には始代数
非正格な関数が存在する場合には始代数始代数始代数始代数とは限らない
無限ループなどが
書けてしまうため
14
現実の言語における問題 (cont’d)
以下のような、リスト上の関数を考える
f :: [Int] → [Int]
f xs = 0 : (case xs of
[] → []
(y:ys) → y : (f ys))
f [1, 2, 3] = [0, 1, 0, 2, 0, 3, 0]
f ⊥ = (0 : ⊥) ≠ ⊥ なので f は非正格
⇒ リストの始代数としての性質が使えない
⇒ 融合変換が適用可能か明らかではない
空リストの場合と
consの場合とで
場合分け
15
本研究の問題意識
非正格な関数に対しては、融合変換を本当
に適用できないのか?
もし適用可能だとしたら、どのような場合に適
用可能なのか?
16
本研究の結果
1. 多項式関手であっても始代数が存在しないこと
があることを確認
2. 始代数が存在するための条件を証明
3. その条件をHaskellのデータ型に対して適用し、
一般的なデータ型の多くに適用可能であることを
示した
4. 入れ子データ型の場合にも同様であることを示し
た
17
1. 始代数が存在しない場合
問題
融合変換の幾つかの論文では、多項式関手の始代数が
存在することを前提としている
結果
多項式関手であっても始代数が存在しないことがあること
を示した。(例: 恒等関手Id, 直積関手×)
考察
これらの論文は厳密性に問題がある
ではこれらの論文での変換はどこまで正しいのか?
18
2. 融合変換が可能な条件
問題点
一般にはデータ型は始代数にはならない
そのため融合変換が適用できない
本研究のアプローチ
データ型が始代数になるための条件であり、
十分多くのデータ型に適用可能なものを探す
その条件を満たすデータ型に対しては変換が可
能になる
19
2. 融合変換が可能な条件 (cont’d)
補題
関手 F: C→D と G: D→C が与えられたとき、
FG: D→D の始代数が存在することと、
GF: C→C の始代数が存在することは同値。
定理
任意のhに対してF(h)が正格 ⇒ Fの始代数が存在
この場合には始代数の性質に基づいた変換を行う
ことが可能
20
3. Haskellへの適用
典型的な再帰的データ型
data List a = Nil | Cons a (List a)
List A は F(X) = 1 + A×X の最小不動点
分離直和(separated sum)の形になっている
任意の f, g に対して f+g は正格
任意の f に対して F(f) = id + id×f も正格
List A は F の始代数とみなせる
21
3. Haskellへの適用 (cont’d)
分離直和の形になっていない型
正格性フラグ (合体直和を使って解釈する必要)
関数型
それらを追跡し始代数として解釈可能か判定
始代数として解釈できない例:
data List’ a = Nil’ | Cons’ a !(List’ a)
22
3. Haskellでの簡単な変換例
リスト上の非正格な関数の例
f :: [Int] → [Int]
f xs = 0 : (case xs of
[] → []
(y:ys) → y : f ys)
f [1, 2, 3] ⇒ [0, 1, 0, 2, 0, 3, 0]
f ∘ map (+1)
各要素に1を足したリストにfを適用
これが変換可能であることがわかった
23
3. Haskellでの簡単な変換例 (cont’d)
F(X) = Maybe (A,X) とする
map (+1) を fold を使って表現
map (+1) = fold phi where
phi x = case x of
Nothing → []
Just (a,r) → (a+1) : r
以下のpsiが f∘phi = psi∘F(f) を満たす
psi x = 0 : (case x of
Nothing → []
Just (a,r) → (a+1) : r)
融合(cata-Fusion): f ∘ map (+1) = f ∘ fold phi = fold psi
fold psi を展開した再帰的定義:
f’ xs = 0 : (case xs of
[] → []
(a:ys) → (a+1) : (f’ ys))
24
4. 入れ子データ型の場合
入れ子データ型
型引数が右辺で変化するデータ型
e.g) 完全バランス木
data PTree a = PZero a | PSucc (PTree (a,a))
単純な関手の不動点としては解釈できない
高階の関手 H(F)(X) = X + F(X×X)
の不動点として解釈
任意の関手Fに対して H(F)(h) が正格ならば、
入れ子データ型は H の始代数として解釈可能
25
まとめ
多項式関手であっても始代数が存在しない
場合があることを示した。
始代数が存在するための条件で、十分適用
範囲の広い条件を示した
Haskellのデータ型に対して適用した
26
今後の展望
始代数の普遍性だけでなく、パラメトリシティを対象に
パラメトリシティは普遍性よりも強い性質
パラメトリシティから、データ型が始代数であることを示すことが出来る
非正格な関数が存在する場合には、パラメトリシティも完全には成り
立たず、特定の部分が正格な関数に制限される。
パラメトリシティを対象とすることで、より多くの変換を対象に
非正格な関数と正格な関数を区別し扱う体系への適用
直観主義論理と直観主義線形論理のモデルの間の随伴関
手を用いたモデル
より精緻な結果が得られないか?

More Related Content

What's hot

Probabilistic Graphical Models 輪読会 Chapter5
Probabilistic Graphical Models 輪読会 Chapter5Probabilistic Graphical Models 輪読会 Chapter5
Probabilistic Graphical Models 輪読会 Chapter5Daiki Shimada
 
アルゴリズムとデータ構造10
アルゴリズムとデータ構造10アルゴリズムとデータ構造10
アルゴリズムとデータ構造10Kenta Hattori
 
PRML 2.3.9-2.4.1
PRML 2.3.9-2.4.1PRML 2.3.9-2.4.1
PRML 2.3.9-2.4.1marugari
 
Nips yomikai 1226
Nips yomikai 1226Nips yomikai 1226
Nips yomikai 1226Yo Ehara
 
すごいHaskell読書会
すごいHaskell読書会すごいHaskell読書会
すごいHaskell読書会Kosuke Usami
 
Ikeph 2-20140730
Ikeph 2-20140730Ikeph 2-20140730
Ikeph 2-20140730GM3D
 
111127.lsj143.田川 japanese conjugation and dm
111127.lsj143.田川 japanese conjugation and dm111127.lsj143.田川 japanese conjugation and dm
111127.lsj143.田川 japanese conjugation and dmTakumi Tagawa
 
Introduction of introduction_to_group_theory
Introduction of introduction_to_group_theoryIntroduction of introduction_to_group_theory
Introduction of introduction_to_group_theoryshima o
 
Relaxed Dependency Analysis
Relaxed Dependency AnalysisRelaxed Dependency Analysis
Relaxed Dependency AnalysisMasahiro Sakai
 
PRML輪講用資料10章(パターン認識と機械学習,近似推論法)
PRML輪講用資料10章(パターン認識と機械学習,近似推論法)PRML輪講用資料10章(パターン認識と機械学習,近似推論法)
PRML輪講用資料10章(パターン認識と機械学習,近似推論法)Toshiyuki Shimono
 
言語処理のための機械学習入門#2
言語処理のための機械学習入門#2言語処理のための機械学習入門#2
言語処理のための機械学習入門#2Shintaro Nomura
 
正則列の証明問題
正則列の証明問題正則列の証明問題
正則列の証明問題政孝 鍋島
 
2次関数と表現行列と内積
2次関数と表現行列と内積2次関数と表現行列と内積
2次関数と表現行列と内積政孝 鍋島
 
Probabilistic Graphical Models 輪読会 Chapter 4.1 - 4.4
Probabilistic Graphical Models 輪読会 Chapter 4.1 - 4.4Probabilistic Graphical Models 輪読会 Chapter 4.1 - 4.4
Probabilistic Graphical Models 輪読会 Chapter 4.1 - 4.4Yoshinari Fujinuma
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたKazuyuki TAKASE
 
融合変換による最適化の理論的基盤と正当性 (2006-06-27)
融合変換による最適化の理論的基盤と正当性 (2006-06-27)融合変換による最適化の理論的基盤と正当性 (2006-06-27)
融合変換による最適化の理論的基盤と正当性 (2006-06-27)Masahiro Sakai
 
融合変換による最適化の理論的基盤と正当性 (2006-06-20)
融合変換による最適化の理論的基盤と正当性 (2006-06-20)融合変換による最適化の理論的基盤と正当性 (2006-06-20)
融合変換による最適化の理論的基盤と正当性 (2006-06-20)Masahiro Sakai
 
mathemaical_notation
mathemaical_notationmathemaical_notation
mathemaical_notationKenta Oono
 
[アルゴリズムイントロダクション勉強会] ハッシュ
[アルゴリズムイントロダクション勉強会] ハッシュ[アルゴリズムイントロダクション勉強会] ハッシュ
[アルゴリズムイントロダクション勉強会] ハッシュRei Takami
 

What's hot (20)

Probabilistic Graphical Models 輪読会 Chapter5
Probabilistic Graphical Models 輪読会 Chapter5Probabilistic Graphical Models 輪読会 Chapter5
Probabilistic Graphical Models 輪読会 Chapter5
 
アルゴリズムとデータ構造10
アルゴリズムとデータ構造10アルゴリズムとデータ構造10
アルゴリズムとデータ構造10
 
PRML 2.3.9-2.4.1
PRML 2.3.9-2.4.1PRML 2.3.9-2.4.1
PRML 2.3.9-2.4.1
 
Nips yomikai 1226
Nips yomikai 1226Nips yomikai 1226
Nips yomikai 1226
 
すごいHaskell読書会
すごいHaskell読書会すごいHaskell読書会
すごいHaskell読書会
 
Ikeph 2-20140730
Ikeph 2-20140730Ikeph 2-20140730
Ikeph 2-20140730
 
111127.lsj143.田川 japanese conjugation and dm
111127.lsj143.田川 japanese conjugation and dm111127.lsj143.田川 japanese conjugation and dm
111127.lsj143.田川 japanese conjugation and dm
 
Introduction of introduction_to_group_theory
Introduction of introduction_to_group_theoryIntroduction of introduction_to_group_theory
Introduction of introduction_to_group_theory
 
Relaxed Dependency Analysis
Relaxed Dependency AnalysisRelaxed Dependency Analysis
Relaxed Dependency Analysis
 
PRML輪講用資料10章(パターン認識と機械学習,近似推論法)
PRML輪講用資料10章(パターン認識と機械学習,近似推論法)PRML輪講用資料10章(パターン認識と機械学習,近似推論法)
PRML輪講用資料10章(パターン認識と機械学習,近似推論法)
 
言語処理のための機械学習入門#2
言語処理のための機械学習入門#2言語処理のための機械学習入門#2
言語処理のための機械学習入門#2
 
正則列の証明問題
正則列の証明問題正則列の証明問題
正則列の証明問題
 
Hastie_chapter5
Hastie_chapter5Hastie_chapter5
Hastie_chapter5
 
2次関数と表現行列と内積
2次関数と表現行列と内積2次関数と表現行列と内積
2次関数と表現行列と内積
 
Probabilistic Graphical Models 輪読会 Chapter 4.1 - 4.4
Probabilistic Graphical Models 輪読会 Chapter 4.1 - 4.4Probabilistic Graphical Models 輪読会 Chapter 4.1 - 4.4
Probabilistic Graphical Models 輪読会 Chapter 4.1 - 4.4
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
 
融合変換による最適化の理論的基盤と正当性 (2006-06-27)
融合変換による最適化の理論的基盤と正当性 (2006-06-27)融合変換による最適化の理論的基盤と正当性 (2006-06-27)
融合変換による最適化の理論的基盤と正当性 (2006-06-27)
 
融合変換による最適化の理論的基盤と正当性 (2006-06-20)
融合変換による最適化の理論的基盤と正当性 (2006-06-20)融合変換による最適化の理論的基盤と正当性 (2006-06-20)
融合変換による最適化の理論的基盤と正当性 (2006-06-20)
 
mathemaical_notation
mathemaical_notationmathemaical_notation
mathemaical_notation
 
[アルゴリズムイントロダクション勉強会] ハッシュ
[アルゴリズムイントロダクション勉強会] ハッシュ[アルゴリズムイントロダクション勉強会] ハッシュ
[アルゴリズムイントロダクション勉強会] ハッシュ
 

More from Masahiro Sakai

DeepXplore: Automated Whitebox Testing of Deep Learning
DeepXplore: Automated Whitebox Testing of Deep LearningDeepXplore: Automated Whitebox Testing of Deep Learning
DeepXplore: Automated Whitebox Testing of Deep LearningMasahiro Sakai
 
Towards formal verification of neural networks
Towards formal verification of neural networksTowards formal verification of neural networks
Towards formal verification of neural networksMasahiro Sakai
 
関数プログラマから見たPythonと機械学習
関数プログラマから見たPythonと機械学習関数プログラマから見たPythonと機械学習
関数プログラマから見たPythonと機械学習Masahiro Sakai
 
Writing a SAT solver as a hobby project
Writing a SAT solver as a hobby projectWriting a SAT solver as a hobby project
Writing a SAT solver as a hobby projectMasahiro Sakai
 
RClassify: Classifying Race Conditions in Web Applications via Deterministic ...
RClassify: Classifying Race Conditions in Web Applications via Deterministic ...RClassify: Classifying Race Conditions in Web Applications via Deterministic ...
RClassify: Classifying Race Conditions in Web Applications via Deterministic ...Masahiro Sakai
 
SAT/SMT solving in Haskell
SAT/SMT solving in HaskellSAT/SMT solving in Haskell
SAT/SMT solving in HaskellMasahiro Sakai
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
Introduction to Max-SAT and Max-SAT Evaluation
Introduction to Max-SAT and Max-SAT EvaluationIntroduction to Max-SAT and Max-SAT Evaluation
Introduction to Max-SAT and Max-SAT EvaluationMasahiro Sakai
 
Aluminum: Principled Scenario Exploration through Minimality
Aluminum: Principled Scenario Exploration through MinimalityAluminum: Principled Scenario Exploration through Minimality
Aluminum: Principled Scenario Exploration through MinimalityMasahiro Sakai
 
代数的実数とCADの実装紹介
代数的実数とCADの実装紹介代数的実数とCADの実装紹介
代数的実数とCADの実装紹介Masahiro Sakai
 
How a CDCL SAT solver works
How a CDCL SAT solver worksHow a CDCL SAT solver works
How a CDCL SAT solver worksMasahiro Sakai
 
萩野服部研究室 スキー合宿 2012 自己紹介(酒井)
萩野服部研究室 スキー合宿 2012 自己紹介(酒井)萩野服部研究室 スキー合宿 2012 自己紹介(酒井)
萩野服部研究室 スキー合宿 2012 自己紹介(酒井)Masahiro Sakai
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介Masahiro Sakai
 
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...Masahiro Sakai
 
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...Masahiro Sakai
 
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...Masahiro Sakai
 
自然言語をラムダ式で解釈する体系PTQのHaskell実装
自然言語をラムダ式で解釈する体系PTQのHaskell実装自然言語をラムダ式で解釈する体系PTQのHaskell実装
自然言語をラムダ式で解釈する体系PTQのHaskell実装Masahiro Sakai
 
Whole Program Paths 等の紹介@PLDIr#3
Whole Program Paths 等の紹介@PLDIr#3Whole Program Paths 等の紹介@PLDIr#3
Whole Program Paths 等の紹介@PLDIr#3Masahiro Sakai
 

More from Masahiro Sakai (20)

DeepXplore: Automated Whitebox Testing of Deep Learning
DeepXplore: Automated Whitebox Testing of Deep LearningDeepXplore: Automated Whitebox Testing of Deep Learning
DeepXplore: Automated Whitebox Testing of Deep Learning
 
Towards formal verification of neural networks
Towards formal verification of neural networksTowards formal verification of neural networks
Towards formal verification of neural networks
 
関数プログラマから見たPythonと機械学習
関数プログラマから見たPythonと機械学習関数プログラマから見たPythonと機械学習
関数プログラマから見たPythonと機械学習
 
Writing a SAT solver as a hobby project
Writing a SAT solver as a hobby projectWriting a SAT solver as a hobby project
Writing a SAT solver as a hobby project
 
RClassify: Classifying Race Conditions in Web Applications via Deterministic ...
RClassify: Classifying Race Conditions in Web Applications via Deterministic ...RClassify: Classifying Race Conditions in Web Applications via Deterministic ...
RClassify: Classifying Race Conditions in Web Applications via Deterministic ...
 
ゼロピッチ: MOOC
ゼロピッチ: MOOCゼロピッチ: MOOC
ゼロピッチ: MOOC
 
SAT/SMT solving in Haskell
SAT/SMT solving in HaskellSAT/SMT solving in Haskell
SAT/SMT solving in Haskell
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
Introduction to Max-SAT and Max-SAT Evaluation
Introduction to Max-SAT and Max-SAT EvaluationIntroduction to Max-SAT and Max-SAT Evaluation
Introduction to Max-SAT and Max-SAT Evaluation
 
Aluminum: Principled Scenario Exploration through Minimality
Aluminum: Principled Scenario Exploration through MinimalityAluminum: Principled Scenario Exploration through Minimality
Aluminum: Principled Scenario Exploration through Minimality
 
代数的実数とCADの実装紹介
代数的実数とCADの実装紹介代数的実数とCADの実装紹介
代数的実数とCADの実装紹介
 
How a CDCL SAT solver works
How a CDCL SAT solver worksHow a CDCL SAT solver works
How a CDCL SAT solver works
 
Omega test and beyond
Omega test and beyondOmega test and beyond
Omega test and beyond
 
萩野服部研究室 スキー合宿 2012 自己紹介(酒井)
萩野服部研究室 スキー合宿 2012 自己紹介(酒井)萩野服部研究室 スキー合宿 2012 自己紹介(酒井)
萩野服部研究室 スキー合宿 2012 自己紹介(酒井)
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介
 
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
“Adoption and Focus: Practical Linear Types for Imperative Programming”他の紹介@P...
 
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
 
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
 
自然言語をラムダ式で解釈する体系PTQのHaskell実装
自然言語をラムダ式で解釈する体系PTQのHaskell実装自然言語をラムダ式で解釈する体系PTQのHaskell実装
自然言語をラムダ式で解釈する体系PTQのHaskell実装
 
Whole Program Paths 等の紹介@PLDIr#3
Whole Program Paths 等の紹介@PLDIr#3Whole Program Paths 等の紹介@PLDIr#3
Whole Program Paths 等の紹介@PLDIr#3
 

非正格関数に対して適用可能な融合変換