SlideShare a Scribd company logo
1+1=2
Akihiro Shoji a.k.a. alphaKAI(@alpha_kai_NET)
突然ですが
1+1 出来ますか?
• え、2では?
• はい、2ですね。
• 終了… ではなく
気を取り直して
• ここでは、1+1=2を少し変わった視点から見てみ
ましょう
• → ラムダ計算で考えてみよう
ラムダ計算とは
• 簡単に言うとラムダ→λを使って関数をλx. xみた
いに表すこと(ラムダを用いて表した式をラムダ
式といいます)
• すべての計算(手続き)を関数とそれに対する適応
であらわそーみたいな感じ
• すごい簡単な体系でありながら,チューリング
完全
もう少し詳しく言うと
• ラムダ抽象と関数適用からなる計算体系
• チューリング完全であるから,C言語のようなプ
ログラミング言語と同等の計算能力を持つ(チュ
ーリング完全とはどういうことかについては時
間があれば話します)
ラムダ計算の基本-書き方
• よく見慣れた関数: f(x) = 2x + 1
• ラムダ式で書くと: f = λx. 2x + 1
• プログラミング言語的に言うと、式を関数として第一級
関数(関数をオブジェクトとしてあつかう)のような感じ。
• 複数の引き数がある場合は慣例的にまとめることができる
例:λx. (λy. x + y)
ラムダ計算の基本-用語
• 束縛変数と自由変数
• 束縛変数: λx. x ← この場合のx
• 自由変数: λx. x + y ←この場合のy
• 注意: λxy. x + y (=λx. λy. x + y)この場合、x,yと
もに束縛変数
ラムダ計算の用語-その2
• 適用(後に説明するがβ簡約という)
• 簡単に言うと、引き数の変数に値を代入する
こと
• f(x)=2x+1とするとx=2としてf(2)=2×2+1=5
複数の引き数がある場合
• λxy. x + yの場合、yを引き数に持つ`関数`が帰る(
ポイント)
α変換
• (λf. λx. f x)に(λf. λx.f x)を適用する場合、一つ問題が発生
する
• 名前が他の場所と衝突しないかぎり、ラムダ式の変数
名は自由に変えて良い(これがα変換)
• λx.x ≡ λy.y
自然数について
• (0を含む)自然数は, 0とある数のその次の数を返す関数(
後者関数)Succを用いることで次のように定義できる
• ちなみに,数を表す場合,数字を用いなくても一意に識
別可能であれば数とそのシンボルの対応を数字のように
扱うことができる(つまり,数を表すのに必ずしも数字を
使う必要はない)
チャーチ数
• ラムダ計算はすべてを関数として表したいので、数
も関数で表す必要があるので、以下のように定義す
る
• 0 = λfx. x
• 1 = λfx. f x
• 2 = λfx. f (f x)
• 3 = λfx. f (f (f x)) 以下同様にfがふえてく...
Succもラムダ計算で!
• Succをラムダ計算の体系で表すことができれば,自然数全体
を扱うことができそう! →なので,Succを定義します.
• これだけ見てもなんでこれでSuccが定義できるの…?ってなる
と思うので…
• f(n f x)のnにfとxを適用することで,nの最奥のxをf xという構
造に置換することが出来,それによって1増えてる
お待たせしました
• 1 + 1を考えましょう。
• 足し算を行う関数addは次のように定義できます
.
• add := λa.λb.λf.λx. b f (a f x)
• これを使うと....
1+1はこうなる
どうなってんの
• (λa. λb. λf. λx. a f (b f x)) A B
• Bの適用によりb(=B)となり,Bの中のf, xをbの横のf, xで置換して得
られたものを,B’とするとa f B’となる.
• 同じようにしてaの中のfをその横のfと置換した後に,aの最奥にあ
るxをB’で置換することになり,置換して得られたA’は
• λf. λx. f(f(f…f B’))と言うような形になる.ここでB’よりも前にfはaこ
あり,B’はBなので,つまり,その中にはfがbこある.よって,全
体としてはfがA+B個あることになるので,A+Bが計算できる.
• (B’はBと同じ数.Bのf,xとaddのf,xを交換しただけ)
他にも…
• 掛け算やa^b(aのb乗)といった指数計算,更には
引き算,そして,ある数の一つ前を求める前者
関数predも定義できる.
• 興味ある人は是非調べてみてください…
• (なお,うまいことやるとif式を表すことが出来た
り,carとcdr, consも定義できるのでリストを扱
えたりする.)
ご静聴ありがとうござ
いました

More Related Content

PPTX
1+1=2の話
KEY
ラムダ計算入門
PPTX
(Lambdaだけで) 純LISPのような ナニかを作る
PDF
プログラミングHaskell(第2章)
PDF
たのしい関数型
PDF
関数型都市忘年会『はじめての函数型プログラミング』
PDF
Scalaで萌える関数型プログラミング[1.1.RC1]
PDF
Material
1+1=2の話
ラムダ計算入門
(Lambdaだけで) 純LISPのような ナニかを作る
プログラミングHaskell(第2章)
たのしい関数型
関数型都市忘年会『はじめての函数型プログラミング』
Scalaで萌える関数型プログラミング[1.1.RC1]
Material

What's hot (16)

PDF
[Basic 10] 形式言語 / 字句解析
ODP
Haskell
ODP
Javascriptで学ぶ Functional Programming
PDF
HiroshimaJUG の 「Java8 Lambda ハンズオン with すごい広島」 を5分で振り返る
PDF
数学プログラムを Haskell で書くべき 6 の理由
PDF
Lispでやる記号微分
PPTX
情報科学シケスラ Fibonacci
PDF
TypeScript & 関数型講座 第3回 関数型入門
PDF
関数型プログラミング in javascript
ODP
(define)なしで再帰関数を定義する
PDF
Scala 初心者が米田の補題を Scala で考えてみた
PDF
Japalisp -Lisp like language for Numeric computation with natural Japanese la...
PDF
Usp友の会勉強会、ジャクソン構造図の巻(後編)
PPTX
今日からはじめる微分方程式
PDF
私を SKI に連れてって
PDF
とぽろじー入門(画像なし版)
[Basic 10] 形式言語 / 字句解析
Haskell
Javascriptで学ぶ Functional Programming
HiroshimaJUG の 「Java8 Lambda ハンズオン with すごい広島」 を5分で振り返る
数学プログラムを Haskell で書くべき 6 の理由
Lispでやる記号微分
情報科学シケスラ Fibonacci
TypeScript & 関数型講座 第3回 関数型入門
関数型プログラミング in javascript
(define)なしで再帰関数を定義する
Scala 初心者が米田の補題を Scala で考えてみた
Japalisp -Lisp like language for Numeric computation with natural Japanese la...
Usp友の会勉強会、ジャクソン構造図の巻(後編)
今日からはじめる微分方程式
私を SKI に連れてって
とぽろじー入門(画像なし版)
Ad

Similar to 1+1=2の話(coinsのOCのLTで話したやつ) (11)

PDF
型無しラムダ計算の基礎(JOI2018夏季セミナー)
PDF
F#の基礎(嘘)
PDF
Cartesian Closed Category
PDF
計算の概念
PDF
圏論とプログラミング読書会#2 資料
PPTX
Introduction to lambda calculation
PPTX
「型の理論」と証明支援システム -- COQの世界
PDF
Lambda calculus
PDF
ラムダ計算と関数型言語を学ぶ
PDF
シャミノ計算
PDF
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
型無しラムダ計算の基礎(JOI2018夏季セミナー)
F#の基礎(嘘)
Cartesian Closed Category
計算の概念
圏論とプログラミング読書会#2 資料
Introduction to lambda calculation
「型の理論」と証明支援システム -- COQの世界
Lambda calculus
ラムダ計算と関数型言語を学ぶ
シャミノ計算
ラムダでウィザード 滅せよ手続き、とチャーチは言った (※言ってません)
Ad

1+1=2の話(coinsのOCのLTで話したやつ)