非正格関数対适用可能融合変换.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
非正格関数に対して適用可能な融合変換 酒井 政裕 政策?メディア研究科 修士課程2年 発表の流れ 背景 純粋関数型言語 融合変換 現実の言語での問題 本研究の問題意識、アプローチ、結果 始代数が存在しない場合 始代数の存在条件 Haskellへの適用 まとめ 純粋関数型言語 数学的な関数に基づく 入力だけから出力が決定される 副作用がないため、値が同じである式を自由に置き換え可能 特徴と利点 強い型付け, 高階関数, 遅延評価 高いレベルでの柔軟性や信頼性を提供 代表的な言語: Haskell Haskellプログラムの例 素数列挙 (エラトステネスのふるい) sieve (p:xs) = [ x | x ← xs, x `mod` p ≠ 0 ] primes = map head (iterate sieve [2..]) 純粋関数型言語 (cont’d) 非常に宣言的?抽象的な記述が可能 その分、ナイーブに実行すると性能が悪い ? 最適化が重要 融合変換 融合変換 (cont’d) 複数のパスからなるプログラム わかりやすい 中間データ構造が生成されるため、効率が悪い これを単一のパスに変換 中間データ構造を生成しないことで空間効率を向上 これまで離れていたコードが接することにより、更なる最適化が適用可能に ? 時間効率も向上 主に(純粋)関数型言語で用いられる最適化 融合変換例 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] 融合変換の理論 変換には複数のプログラムの等価性が必要 背景となる理論 普遍性 (圏論) 前提: データ型の普遍性 = 条件を満たす関数がただ一つ存在する 同じ条件を満たす関数は全て等しい パラメトリシティ (多相ラムダ計算) 以降では主に普遍性を扱う データ型の普遍性 帰納的に定義されるデータ型 自然数, (有限)リスト, (有限)木 型上の演算 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 始代数の普遍性を利用して変換を行うことが出来る 始代数の性質を用いる変換 cata-Fusion (fold-Promotion) h°φ = ψ°F(h) ? h°fold(φ) = fold(ψ) 始代数の性質を用いる他の変換 short-cut deforestation 忘却関手 |?|: Alg(F)→C の極限錘としての始代数の性質 Θ:?X.(FX→X)→(C→X) ? fold(φ)°build(Θ) = Θ(φ) hylomorphism 始代数と終余代数が一致する場合 fold(φ)°unfold(ψ) = fix (λh. φ°F(h)°ψ) 現実の言語における問題 通常の数学の場合とは異なり、 現実のプログラミング言語では 停止しない計算 ⊥(ボトム) も考慮する必要がある 関数 f が正格 ? f(⊥)=⊥ 純粋関数型言語では非正格な関数が存在 e.g) ifte(b,t,e) = if b then t else e データ型は一般に 正格な関数に制限した場合には始代数 非正格な関数が存在する場合には始代数とは限らない 現実の言語における問題 (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 は非正格 ? リストの始代数としての性質が使えない ? 融合変換が適用可能か明らかではない 本研究の問題意識 非正格な関数に対しては、融合変換を本当に適用できないのか? もし適用可能だとしたら、どのような場合に適用可能なのか? 本

文档评论(0)

44422264 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档