SlideShare a Scribd company logo
Enviar búsqueda
Cargar
私を SKI に連れてって
Denunciar
Compartir
Susisu
Seguir
•
2 recomendaciones
•
2,170 vistas
1
de
66
私を SKI に連れてって
•
2 recomendaciones
•
2,170 vistas
Denunciar
Compartir
Descargar ahora
Descargar para leer sin conexión
Ciencias
型無しラムダ計算とSKIコンビネータ計算の概説、Lazy K の紹介
Leer más
Susisu
Seguir
Recomendados
Coqチュートリアル por
Coqチュートリアル
Yoshihiro Mizoguchi
3.1K vistas
•
36 diapositivas
コサインクラスタリング por
コサインクラスタリング
osamu morimoto
2.8K vistas
•
8 diapositivas
Monad tutorial por
Monad tutorial
Hideyuki Tanaka
13.3K vistas
•
79 diapositivas
[DL輪読会] Hybrid computing using a neural network with dynamic external memory por
[DL輪読会] Hybrid computing using a neural network with dynamic external memory
Yusuke Iwasawa
2.8K vistas
•
50 diapositivas
ラムダ計算入門 por
ラムダ計算入門
Eita Sugimoto
33.7K vistas
•
39 diapositivas
明日使えないすごいビット演算 por
明日使えないすごいビット演算
京大 マイコンクラブ
63.4K vistas
•
60 diapositivas
Más contenido relacionado
La actualidad más candente
音楽波形データからコードを推定してみる por
音楽波形データからコードを推定してみる
Ken'ichi Matsui
2.2K vistas
•
40 diapositivas
3次元の凸包を求める por
3次元の凸包を求める
abc3141
4.8K vistas
•
24 diapositivas
異常検知と変化検知 第4章 近傍法による異常検知 por
異常検知と変化検知 第4章 近傍法による異常検知
Ken'ichi Matsui
19.3K vistas
•
55 diapositivas
[Tokyor08] Rによるデータサイエンス第2部 第3章 対応分析 por
[Tokyor08] Rによるデータサイエンス第2部 第3章 対応分析
Yohei Sato
3.7K vistas
•
64 diapositivas
高度に最適化された移植可能なメモリマネージャ por
高度に最適化された移植可能なメモリマネージャ
DADA246
8K vistas
•
31 diapositivas
グラフデータの機械学習における特徴表現の設計と学習 por
グラフデータの機械学習における特徴表現の設計と学習
Ichigaku Takigawa
8.8K vistas
•
32 diapositivas
La actualidad más candente
(20)
音楽波形データからコードを推定してみる por Ken'ichi Matsui
音楽波形データからコードを推定してみる
Ken'ichi Matsui
•
2.2K vistas
3次元の凸包を求める por abc3141
3次元の凸包を求める
abc3141
•
4.8K vistas
異常検知と変化検知 第4章 近傍法による異常検知 por Ken'ichi Matsui
異常検知と変化検知 第4章 近傍法による異常検知
Ken'ichi Matsui
•
19.3K vistas
[Tokyor08] Rによるデータサイエンス第2部 第3章 対応分析 por Yohei Sato
[Tokyor08] Rによるデータサイエンス第2部 第3章 対応分析
Yohei Sato
•
3.7K vistas
高度に最適化された移植可能なメモリマネージャ por DADA246
高度に最適化された移植可能なメモリマネージャ
DADA246
•
8K vistas
グラフデータの機械学習における特徴表現の設計と学習 por Ichigaku Takigawa
グラフデータの機械学習における特徴表現の設計と学習
Ichigaku Takigawa
•
8.8K vistas
純粋関数型アルゴリズム入門 por Kimikazu Kato
純粋関数型アルゴリズム入門
Kimikazu Kato
•
6.6K vistas
OCaml-MPST / Global Protocol Combinators por Keigo Imai
OCaml-MPST / Global Protocol Combinators
Keigo Imai
•
475 vistas
[DL輪読会]Discriminative Learning for Monaural Speech Separation Using Deep Embe... por Deep Learning JP
[DL輪読会]Discriminative Learning for Monaural Speech Separation Using Deep Embe...
Deep Learning JP
•
923 vistas
Glibc malloc internal por Motohiro KOSAKI
Glibc malloc internal
Motohiro KOSAKI
•
62.1K vistas
代数的データ型をラムダ計算の中で表現する方法 por syamino
代数的データ型をラムダ計算の中で表現する方法
syamino
•
7.6K vistas
Linuxのsemaphoreとmutexを見る por wata2ki
Linuxのsemaphoreとmutexを見る
wata2ki
•
3K vistas
第8回Language and Robotics研究会20221010_AkiraTaniguchi por Akira Taniguchi
第8回Language and Robotics研究会20221010_AkiraTaniguchi
Akira Taniguchi
•
256 vistas
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた- por Deep Learning JP
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
Deep Learning JP
•
36.2K vistas
単純ベイズ法による異常検知 #ml-professional por Ai Makabi
単純ベイズ法による異常検知 #ml-professional
Ai Makabi
•
7.1K vistas
サポートベクトルデータ記述法による異常検知 in 機械学習プロフェッショナルシリーズ輪読会 por Shotaro Sano
サポートベクトルデータ記述法による異常検知 in 機械学習プロフェッショナルシリーズ輪読会
Shotaro Sano
•
5.4K vistas
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介 por Preferred Networks
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
•
10K vistas
PRML 第4章 por Akira Miyazawa
PRML 第4章
Akira Miyazawa
•
13.7K vistas
深層学習の判断根拠を理解するための 研究とその意義 @PRMU 2017熊本 por Takahiro Kubo
深層学習の判断根拠を理解するための 研究とその意義 @PRMU 2017熊本
Takahiro Kubo
•
14.9K vistas
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 por Ken'ichi Matsui
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
Ken'ichi Matsui
•
96K vistas
Destacado
Anajae's Networking presentation por
Anajae's Networking presentation
Anajae Lamb
197 vistas
•
20 diapositivas
Dip IT por
Dip IT
YongHan Lim
122 vistas
•
1 diapositiva
Exposición capitulo II por
Exposición capitulo II
Verito Aldana D'Garcia
341 vistas
•
16 diapositivas
Cd por
Cd
MattR298
138 vistas
•
1 diapositiva
RACT 2 Review - ALL4 por
RACT 2 Review - ALL4
All4 Inc.
408 vistas
•
4 diapositivas
How to package github softwares por
How to package github softwares
Ryo ONODERA
502 vistas
•
8 diapositivas
Destacado
(13)
Anajae's Networking presentation por Anajae Lamb
Anajae's Networking presentation
Anajae Lamb
•
197 vistas
Dip IT por YongHan Lim
Dip IT
YongHan Lim
•
122 vistas
Exposición capitulo II por Verito Aldana D'Garcia
Exposición capitulo II
Verito Aldana D'Garcia
•
341 vistas
Cd por MattR298
Cd
MattR298
•
138 vistas
RACT 2 Review - ALL4 por All4 Inc.
RACT 2 Review - ALL4
All4 Inc.
•
408 vistas
How to package github softwares por Ryo ONODERA
How to package github softwares
Ryo ONODERA
•
502 vistas
BCAA por YongHan Lim
BCAA
YongHan Lim
•
197 vistas
Presentacion de un producto al mMercado por Jaime Guallan
Presentacion de un producto al mMercado
Jaime Guallan
•
213 vistas
Report tqm por Angel Segovia
Report tqm
Angel Segovia
•
1.7K vistas
NetBSD on Google Compute Engine (en) por Ryo ONODERA
NetBSD on Google Compute Engine (en)
Ryo ONODERA
•
871 vistas
新生Lagopus2017(仮称) por Masaru Oki
新生Lagopus2017(仮称)
Masaru Oki
•
1.5K vistas
Onieで遊んでみようとした話 por Masaru Oki
Onieで遊んでみようとした話
Masaru Oki
•
3.7K vistas
план 1 заняття por znannademcenko
план 1 заняття
znannademcenko
•
539 vistas
Similar a 私を SKI に連れてって
Introduction to Categorical Programming (Revised) por
Introduction to Categorical Programming (Revised)
Masahiro Sakai
6.4K vistas
•
53 diapositivas
Introduction to Categorical Programming por
Introduction to Categorical Programming
Masahiro Sakai
1.7K vistas
•
33 diapositivas
たのしい関数型 por
たのしい関数型
Shinichi Kozake
6.2K vistas
•
94 diapositivas
yieldとreturnの話 por
yieldとreturnの話
bleis tift
7.4K vistas
•
72 diapositivas
Ekmett勉強会発表資料 por
Ekmett勉強会発表資料
時響 逢坂
948 vistas
•
68 diapositivas
F#で関数型言語に触れてみよう por
F#で関数型言語に触れてみよう
wof moriguchi
8.1K vistas
•
46 diapositivas
Similar a 私を SKI に連れてって
(20)
Introduction to Categorical Programming (Revised) por Masahiro Sakai
Introduction to Categorical Programming (Revised)
Masahiro Sakai
•
6.4K vistas
Introduction to Categorical Programming por Masahiro Sakai
Introduction to Categorical Programming
Masahiro Sakai
•
1.7K vistas
たのしい関数型 por Shinichi Kozake
たのしい関数型
Shinichi Kozake
•
6.2K vistas
yieldとreturnの話 por bleis tift
yieldとreturnの話
bleis tift
•
7.4K vistas
Ekmett勉強会発表資料 por 時響 逢坂
Ekmett勉強会発表資料
時響 逢坂
•
948 vistas
F#で関数型言語に触れてみよう por wof moriguchi
F#で関数型言語に触れてみよう
wof moriguchi
•
8.1K vistas
虚数は作れる!Swift で学ぶ複素数 por Taketo Sano
虚数は作れる!Swift で学ぶ複素数
Taketo Sano
•
42.2K vistas
Lispでやる記号微分 por Keiichi Watanabe
Lispでやる記号微分
Keiichi Watanabe
•
1.2K vistas
モナドハンズオン前座 por bleis tift
モナドハンズオン前座
bleis tift
•
5.7K vistas
言語処理系入門3 por Kenta Hattori
言語処理系入門3
Kenta Hattori
•
715 vistas
たのしい高階関数 por Shinichi Kozake
たのしい高階関数
Shinichi Kozake
•
11.8K vistas
命令プログラミングから関数プログラミングへ por Naoki Kitora
命令プログラミングから関数プログラミングへ
Naoki Kitora
•
3.8K vistas
関数プログラミング入門 por Hideyuki Tanaka
関数プログラミング入門
Hideyuki Tanaka
•
21.8K vistas
(define)なしで再帰関数を定義する por blackenedgold
(define)なしで再帰関数を定義する
blackenedgold
•
2.4K vistas
代数トポロジー入門 por Tatsuki SHIMIZU
代数トポロジー入門
Tatsuki SHIMIZU
•
3.1K vistas
Ekmett勉強会発表資料 por 時響 逢坂
Ekmett勉強会発表資料
時響 逢坂
•
16.7K vistas
言語処理系入門5 por Kenta Hattori
言語処理系入門5
Kenta Hattori
•
427 vistas
Haskell勉強会 in ie por maeken2010
Haskell勉強会 in ie
maeken2010
•
1.4K vistas
Scala 初心者が米田の補題を Scala で考えてみた por Kazuyuki TAKASE
Scala 初心者が米田の補題を Scala で考えてみた
Kazuyuki TAKASE
•
5.7K vistas
化学科自主ゼミ1 por Hiroki Sato
化学科自主ゼミ1
Hiroki Sato
•
693 vistas
私を SKI に連れてって
1.
私を SKI に連れてって 201x年m月d日
第3回 OUCC LT会 のつもりだったけど長すぎてボツ
2.
お前誰って人のための すしす Twitter: @susisu2413 GitHub: susisu
3.
本日の予定 λ計算入門 SKIコンビネータ入門 Lazy K の紹介
4.
λ計算入門
5.
λ計算とは "計算"を関数とその適用でモデル化 したもの 関数型言語の理論的基盤 ここでは型無しλ計算を紹介します 型付きもあるんだよ
6.
λ式 変数 a, b,
c, ..., x, y, z, ... λ抽象 λx.x, λx.λy.(x y), ... 関数適用 (f x)
7.
λ式 λx.λy.* は λx
y.* と略記する 関数適用の括弧は曖昧でない場合は 省略する x y = (x y) 関数適用は左結合 f x y = ((f x) y)
8.
α-変換 λ抽象の束縛変数名は重要ではない 例えば λx.x =
λy.y 束縛変数名を別の名前に置き換える 操作をα-変換と呼ぶ α-変換で同じλ式にできるなら等価
9.
β-簡約 要はただの関数適用の評価 λ抽象内部の束縛変数を全て引数で 置き換える 例えば (λx.f x)
y = f y β-簡約で同じλ式にできるなら等価
10.
η-変換 どんな引数に対しても同じ結果にな るならば、それらは同じといっても いいよね (外延的等価性) 例えば f
= λx.f x これらの間の変換をη-変換と呼ぶ η-変換で同じλ式にできるなら等価
11.
Quiz 1. λx.x y
= λy.y y ? 2. (λx.λx.x y) y = λy.y y ? 3. λx.x = (λx y z.x z (y z)) (λx y.x) (λx y.x) ?
12.
Answer 1. No 2. No 3.
Yes
13.
λ計算 λ式と変換・簡約の規則をまとめて λ計算と呼ぶ λ計算はチューリング完全 どんな手続き (プログラム) もλ式 で表現できる
14.
Q. どう計算するの 入力 x
が与えられるとする 手続きを表すλ式 p をうまく選べば、 例えば y = p x で出力が得られる y を変換・簡約すれば解読できそう
15.
Q. 数値とかどうするの 数値がなければ、λ式を使えばいい じゃない 真理値がなければ、λ式を使えば リストがなければ、λ式を
16.
Church数 λ式で自然数を表わすひとつの方法
17.
Church数 0 := λf
x.x 1 := λf x.f x 2 := λf x.f (f x) ...
18.
Church数 次の自然数を求める関数 Succ Succ :=
λn f x.f (n f x) 足し算 Add Add := λa b f x.a f (b f x) 掛け算はどうなるか考えてみよう
19.
Church数 掛け算 Mul Mul :=
λa b f x.a (b f) x
20.
Church数 前の自然数を求める関数 Pred Pred :=
λn f x. n (λg h.h (g f)) (λy.x) (λy.y) ただし Pred 0 = 0 キリがないのでこれ以上はやめる
21.
Church真理値 True := λx
y.x False := λx y.y If := λp x y.p x y = λp.p
22.
Church真理値 AND, OR, NOT And
:= λp q.p q False Or := λp q.p True q Not := λp.p False True
23.
述語の例 Church数 n が
0 かどうか調べる 0 = λf x.x だった IsZero := λn. n (λx.False) True だんだんとプログラムが書ける気が してきませんか?
24.
Church対 リストや木構造は対 (pair) の連鎖 で表現できる [1,
2, 3] = (1, (2, (3, 空))) 対をλ式で表現できればいいよね
25.
Church対 対をつくる関数 Cons Cons :=
λx y c.c x y かんたん!べんり!
26.
Church対 対の前後を取り出す関数 Car, Cdr Car
:= λp.p (λx y.x) Cdr := λp.p (λx y.y)
27.
Church対 空 (リストの終端) は? 好きなものを使えば良い False
が一般的っぽい?
28.
Quiz 入力 x が
2 つのChurch数 a, b の Church対で与えられる 出力 y = p x が、a = 0 なら y = b、 それ以外なら y = a * b となる p を書いてみよう Succ などこれまでに定義したものは 使ってもよい
29.
Answer 例: λx.IsZero (Car
x) (Cdr x) (Mul (Car x) (Cdr x))
30.
繰り返し処理 繰り返し処理を関数で表現したい時 は、再帰的な関数を書けばいい f(0) = 1,
f(n) = n * f(n - 1) けれどλ計算では"再帰的な定義"が できないので、単純には書けない
31.
関数の不動点 関数 f に対して、f
x = x となる ような x を f の不動点と呼ぶ
32.
Fix 関数 f を引数にとり、その不動点を 返す関数
Fix が存在したとする Fix f = f (Fix f) f = λx n. IsZero n True (x (Pred n)) Fix f n は n 回の空ループになる
33.
Fix Fix があれば、繰り返し処理を表現 することが出来る このような関数 Fix
をなんとかλ式 だけで表現できないか?
34.
Fix できる! Fix := λf.(λx.f
(x x)) (λx.f (x x)) 実際に Fix f = f (Fix f) となるか 確かめてみるとよいです
35.
λ計算のまとめ λ計算は、計算を関数とその適用で モデル化したもの チューリング完全 数値も真理値もリストもλ式で表現 できる 繰り返し処理だってできちゃう
36.
SKIコンビネータ入門
37.
コンビネータ計算とは ! 高階関数 (コンビネータ) を用いて計算 を行う λ計算と同じく、簡約が存在 (P
x y z ...) = E 簡約の結果 E は、コンビネータ P の 定義による
38.
コンビネータの例 B x y
z = x (y z) C x y z = x z y W x y = x y y
39.
コンビネータの例 S x y
z = x z (y z) K x y = x I x = x 実は I = S K K とも書ける
40.
SKIコンビネータ計算 S、K、I の 3
つのコンビネータを、 "基底"として用いる 他のコンビネータは S、K、I の組み 合わせで表現する スキーとは関係がない
41.
SKI で何ができるか SKIコンビネータ計算はチューリング 完全 λ抽象と相互に変換することができる SKI→λ は自明 λ→SKI
については Wikipedia の 「コンビネータ論理」のページを 見るとよいかも
42.
SKI でChurch数 0 :=
KI 1 := I 2 := S(S(KS)K)I ... Succ := S(S(KS)K)
43.
SKI でChurch真理値 True :=
K False := KI If := I
44.
SKI でChurch対 Cons :=
S(S(KS)(S(KK)(S(KS) (S(K(SI))K))))(KK) 笑っちゃうよね
45.
SKI で Fix
(Y) Fix よりも、不動点コンビネータ Y と呼ぶことが多い (きがする) Y := SSK(S(K(SS(S(SSK))))K)
46.
Quiz Church数の掛け算、足し算を SKI で 書いてみよう 足し算の方が難しくなるはず
47.
Answer Mul = S(KS)K Add
= S(KS)(S(K(S(KS))) (S(KK)))
48.
SKI のまとめ S, K,
I という 3 つのコンビネータ と適用だけで計算をする チューリング完全 λ抽象と相互に変換できる データも表せるし、繰り返し処理も できる
49.
だんだん自分の SKI 力がどれほどのものか 確かめたくなってきましたよね?
50.
Lazy K
51.
こころ 夏目漱石
52.
精神的に向上心のないものは馬鹿だ
53.
精神的に向上心のないものは馬鹿だ Eager K
54.
Lazy K とは SKIコンビネータ計算をベースにした 言語 遅延評価、故に
Lazy 対義語: Eager, Strict こころの K とは関係がない
55.
遅延評価 結果に必要のない部分を評価 (計算) しないための仕組み 例えば K
x y = x の y は必要ない ので、評価を省略したい
56.
遅延評価 ほとんどのプログラミング言語では、 引数は適用の前に評価される Lazy K では、引数はそれ自身が関数 として適用に使われるまで評価が遅延 される
(使わなければ評価されない) これによって、Yコンビネータによる 停止するループや、無限の長さをもつ リストが実現できる
57.
入力 入力は文字コードをChurch数で表現 したものの、Church対によるリスト で与えられる 入力の終端はChurch数 256 256 =
SII(SII(S(S(KS)K)I)) ただし"リストの終端"ではない
58.
出力 入力 X とプログラム
P に対して、 出力は Y = P X 出力も文字コードをChurch数で表現 したものの、Church対によるリスト 出力の終端も 256 以上のChurch数
59.
記法 Lazy K には
4 つの記法がある コンビネータ計算 …… S(KI)I unlambda …… ``s`kii Iota …… * と i だけ Jot …… 0 と 1 だけ
60.
記法 (その他) 空白、改行は無視される # の後は改行までコメント 空ファイルは
I
61.
Lazy K 処理系 http://esoteric.sange.fi/essie2/ download/lazy-k.zip Windows
用のバイナリ同梱 GCC でコンパイルするときは lazy.cpp にパッチを当てる https://gist.github.com/ susisu/831e06af2ddee14938c8
62.
Lazy K 処理系 実行はファイルから、または
-e で 直接プログラムを指定 $ lazy <file> $ lazy -e <program>
63.
Lazy K 処理系 ためしになにか動かしてみる $
lazy eg/calc.lazy $ lazy -e SKK 中身を見るともっとたのしい SKI を組み合わせて、君だけの最強 プログラムを作ろう!
64.
Lazy K の闇は深い
65.
参考文献 大体 Wikipedia を読めばいいと思う ラムダ計算 コンビネータ論理 SKIコンビネータ計算 不動点コンビネータ
66.
参考文献 The Lazy K
Programming Language https://tromp.github.io/cl/lazy- k.html ↑の日本語訳 http://legacy.e.tir.jp/wiliki?%CB %DD%CC%F5%3A%A5%D7%A5%ED %A5%B0%A5%E9%A5%DF %A5%F3%A5%B0%B8%C0%B8%ECLazy_K