SlideShare a Scribd company logo
Curry-Howard同型を使って
自然演繹からλ計算の項を作る
        chiguri
(A→B) → (B→C) → A → Cを例に
• 自然演繹の証明はこんな感じ



                  [A→B]1    [A]3
                                →E
        [B→C]2        B
                            →E
              C
                      →I3
            A→C
                           →I2
        (B→C) → A → C
                                 →I1
      (A→B) → (B→C) → A → C
型だと思う
• λ計算におけるA→BはAを引数にしてBを返
  す関数の型だから、→Iはlam(関数抽象)、
  →Eはapp(関数適用)に対応
             [A→B]1    [A]3                   [A→B]1   [A]3
                           →E                              app
   [B→C]2        B                  [B→C]2        B
                       →E                              app
         C                                C
                 →I3                              lam3
       A→C                              A→C
                      →I2                              lam2
   (B→C) → A → C                    (B→C) → A → C
                            →I1                               lam1
 (A→B) → (B→C) → A → C            (A→B) → (B→C) → A → C
1とか2とか3じゃまずいから
• 変数っぽくする。1をfに、2をgに、3をxに
  する。
  – この「ラベル=変数」のため、ラベル部分は
    idに相当。
            [A→B]1   [A]3                      f : A→B   x:A
                         app                                    app
  [B→C]2        B                    g : B→C        B
                     app                                 app
        C                                  C
                lam3                                lam3
      A→C                                A→C
                     lam2                                lam2
  (B→C) → A → C                      (B→C) → A → C
                            lam1                                lam1
(A→B) → (B→C) → A → C              (A→B) → (B→C) → A → C
対応してる関数抽象の引数を書
      く
• →I1をfを引数にとる関数抽象だと思う。
   – 1はfと対応してたから。2はg、3はxに対応さ
     せる。
   – 1,2,3のラベルはここで完全消滅。
            f : A→B   x:A                        f : A→B   x:A
                             app                                 app
  g : B→C        B                     g : B→C        B
                      app                                  app
        C                                         C
                 lam3                                             lam
      A→C                                   λx:A. ? : A → C
                      lam2                                              lam
  (B→C) → A → C                        λg:B→C. ? : (B→C) → A → C
                             lam1                                         lam
(A→B) → (B→C) → A → C               λf:A→B. ? : (A→B) → (B→C) → A → C
関数適用の形を作る
   • 上から作る。右上のBに具体的な項が定ま
     る。


             f : A→B   x:A                               f : A→B     x:A
                             app                                           app
   g : B→C        B                            g : B→C        fx:B
                       app                                           app
              C                                           C
                              lam                                           lam
        λx:A. ? : A → C                             λx:A. ? : A → C
                                    lam                                           lam
   λg:B→C. ? : (B→C) → A → C                   λg:B→C. ? : (B→C) → A → C
                                      lam                                           lam
λf:A→B. ? : (A→B) → (B→C) → A → C           λf:A→B. ? : (A→B) → (B→C) → A → C
同様に、上から順にルールと整合
   するように項を構成する。
• Cの項をつけた。



             f : A→B     x:A                               f : A→B    x:A
                               app                                          app
   g : B→C        fx:B                           g : B→C      fx:B
                         app                                          app
              C                                         g (f x) : C
                                lam                                          lam
        λx:A. ? : A → C                               λx:A. ? : A → C
                                      lam                                          lam
   λg:B→C. ? : (B→C) → A → C                     λg:B→C. ? : (B→C) → A → C
                                        lam                                          lam
λf:A→B. ? : (A→B) → (B→C) → A → C             λf:A→B. ? : (A→B) → (B→C) → A → C
• 一番上のlamの本体はその上にある項。




             f : A→B    x:A                              f : A→B    x:A
                              app                                         app
   g : B→C      fx:B                           g : B→C      fx:B
                        app                                         app
          g (f x) : C                                 g (f x) : C
                              lam                                         lam
        λx:A. ? : A → C                         λx:A. g (f x) : A → C
                                    lam                                         lam
   λg:B→C. ? : (B→C) → A → C                   λg:B→C. ? : (B→C) → A → C
                                      lam                                         lam
λf:A→B. ? : (A→B) → (B→C) → A → C           λf:A→B. ? : (A→B) → (B→C) → A → C
もう遷移にはしない。
• 二番目のlamの本体が確定。




                 f : A→B     x:A
                                   app
       g : B→C      fx:B
                             app
               g (f x) : C
                                   lam
        λx:A. (g (f x)) : A → C
                                            lam
  λg:B→C. λx:A. (g (f x)) : (B→C) → A → C
                                            lam
  λf:A→B. ? : (A→B) → (B→C) → A → C
もう遷移にはしない。
• 最後のlamの本体が確定。




                          f : A→B     x:A
                                            app
                g : B→C      fx:B
                                      app
                        g (f x) : C
                                            lam
                 λx:A. (g (f x)) : A → C
                                                     lam
           λg:B→C. λx:A. (g (f x)) : (B→C) → A → C
                                                           lam
λf:A→B. λg:B→C. λx:A. (g (f x)) : (A→B) → (B→C) → A → C
完成
• λf:A→B. λg:B→C. λx:A. (g (f x))が求める項。
     – 型環境が必要な場合は、lamなどの規則に対応
       するものを下から順に作る。


                          f : A→B     x:A
                                            app
                g : B→C      fx:B
                                      app
                        g (f x) : C
                                            lam
                 λx:A. (g (f x)) : A → C
                                                     lam
           λg:B→C. λx:A. (g (f x)) : (B→C) → A → C
                                                           lam
λf:A→B. λg:B→C. λx:A. (g (f x)) : (A→B) → (B→C) → A → C
ちょっと補足
• 変数は、関数の形をしていたらfやgをつけ
  ることが慣習上多い。
 – 別に強制ではない。a,b,cでも可。
• 逆に、関数の形をしていない場合はxやyを
  つけることが多い。
 – これまたあくまで多いだけ。

More Related Content

What's hot

深入淺出C語言
深入淺出C語言深入淺出C語言
深入淺出C語言Simen Li
 
『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算MITSUNARI Shigeo
 
gitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたgitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたTakako Miyagawa
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~Hideki Tsunashima
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向Shinya Takamaeda-Y
 
TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介Takeo Imai
 
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロdigitalghost
 
「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料
「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料
「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料Ken'ichi Matsui
 
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化についてマルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化についてFixstars Corporation
 
系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言鍾誠 陳鍾誠
 
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]Kohei KaiGai
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
関数プログラマから見たPythonと機械学習
関数プログラマから見たPythonと機械学習関数プログラマから見たPythonと機械学習
関数プログラマから見たPythonと機械学習Masahiro Sakai
 
一階述語論理のメモ
一階述語論理のメモ一階述語論理のメモ
一階述語論理のメモKeisuke OTAKI
 
台大電機中的數學
台大電機中的數學台大電機中的數學
台大電機中的數學Chun-Ju Lai
 
Maxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミングMaxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミングNVIDIA Japan
 

What's hot (20)

一般グラフの最大マッチング
一般グラフの最大マッチング一般グラフの最大マッチング
一般グラフの最大マッチング
 
使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan
 
深入淺出C語言
深入淺出C語言深入淺出C語言
深入淺出C語言
 
『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算『データ解析におけるプライバシー保護』勉強会 秘密計算
『データ解析におけるプライバシー保護』勉強会 秘密計算
 
gitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたgitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみました
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
 
TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介
 
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料
「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料
「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料
 
圏とHaskellの型
圏とHaskellの型圏とHaskellの型
圏とHaskellの型
 
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化についてマルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
 
系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言
 
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
関数プログラマから見たPythonと機械学習
関数プログラマから見たPythonと機械学習関数プログラマから見たPythonと機械学習
関数プログラマから見たPythonと機械学習
 
一階述語論理のメモ
一階述語論理のメモ一階述語論理のメモ
一階述語論理のメモ
 
台大電機中的數學
台大電機中的數學台大電機中的數學
台大電機中的數學
 
Maxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミングMaxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミング
 

More from Sosuke MORIGUCHI

More from Sosuke MORIGUCHI (10)

Summerseminar2019
Summerseminar2019Summerseminar2019
Summerseminar2019
 
PEGの回文っぽいExpression
PEGの回文っぽいExpressionPEGの回文っぽいExpression
PEGの回文っぽいExpression
 
Linear logic (and Linear Lisp)
Linear logic (and Linear Lisp)Linear logic (and Linear Lisp)
Linear logic (and Linear Lisp)
 
fibsを読む
fibsを読むfibsを読む
fibsを読む
 
ProofSummit2014 : VSTでCの検証
ProofSummit2014 : VSTでCの検証ProofSummit2014 : VSTでCの検証
ProofSummit2014 : VSTでCの検証
 
Nagoya Matsuri 2013 ぐだぐだAgda
Nagoya Matsuri 2013 ぐだぐだAgdaNagoya Matsuri 2013 ぐだぐだAgda
Nagoya Matsuri 2013 ぐだぐだAgda
 
ProofSummit2013 べらべらAbella
ProofSummit2013 べらべらAbellaProofSummit2013 べらべらAbella
ProofSummit2013 べらべらAbella
 
A/F/C-orientation
A/F/C-orientationA/F/C-orientation
A/F/C-orientation
 
Proof Summit 2012
Proof Summit 2012Proof Summit 2012
Proof Summit 2012
 
Cartesian Closed Category
Cartesian Closed CategoryCartesian Closed Category
Cartesian Closed Category
 

Curry-Howard同型から単純型付ラムダ計算の項を作る

  • 2. (A→B) → (B→C) → A → Cを例に • 自然演繹の証明はこんな感じ [A→B]1 [A]3 →E [B→C]2 B →E C →I3 A→C →I2 (B→C) → A → C →I1 (A→B) → (B→C) → A → C
  • 3. 型だと思う • λ計算におけるA→BはAを引数にしてBを返 す関数の型だから、→Iはlam(関数抽象)、 →Eはapp(関数適用)に対応 [A→B]1 [A]3 [A→B]1 [A]3 →E app [B→C]2 B [B→C]2 B →E app C C →I3 lam3 A→C A→C →I2 lam2 (B→C) → A → C (B→C) → A → C →I1 lam1 (A→B) → (B→C) → A → C (A→B) → (B→C) → A → C
  • 4. 1とか2とか3じゃまずいから • 変数っぽくする。1をfに、2をgに、3をxに する。 – この「ラベル=変数」のため、ラベル部分は idに相当。 [A→B]1 [A]3 f : A→B x:A app app [B→C]2 B g : B→C B app app C C lam3 lam3 A→C A→C lam2 lam2 (B→C) → A → C (B→C) → A → C lam1 lam1 (A→B) → (B→C) → A → C (A→B) → (B→C) → A → C
  • 5. 対応してる関数抽象の引数を書 く • →I1をfを引数にとる関数抽象だと思う。 – 1はfと対応してたから。2はg、3はxに対応さ せる。 – 1,2,3のラベルはここで完全消滅。 f : A→B x:A f : A→B x:A app app g : B→C B g : B→C B app app C C lam3 lam A→C λx:A. ? : A → C lam2 lam (B→C) → A → C λg:B→C. ? : (B→C) → A → C lam1 lam (A→B) → (B→C) → A → C λf:A→B. ? : (A→B) → (B→C) → A → C
  • 6. 関数適用の形を作る • 上から作る。右上のBに具体的な項が定ま る。 f : A→B x:A f : A→B x:A app app g : B→C B g : B→C fx:B app app C C lam lam λx:A. ? : A → C λx:A. ? : A → C lam lam λg:B→C. ? : (B→C) → A → C λg:B→C. ? : (B→C) → A → C lam lam λf:A→B. ? : (A→B) → (B→C) → A → C λf:A→B. ? : (A→B) → (B→C) → A → C
  • 7. 同様に、上から順にルールと整合 するように項を構成する。 • Cの項をつけた。 f : A→B x:A f : A→B x:A app app g : B→C fx:B g : B→C fx:B app app C g (f x) : C lam lam λx:A. ? : A → C λx:A. ? : A → C lam lam λg:B→C. ? : (B→C) → A → C λg:B→C. ? : (B→C) → A → C lam lam λf:A→B. ? : (A→B) → (B→C) → A → C λf:A→B. ? : (A→B) → (B→C) → A → C
  • 8. • 一番上のlamの本体はその上にある項。 f : A→B x:A f : A→B x:A app app g : B→C fx:B g : B→C fx:B app app g (f x) : C g (f x) : C lam lam λx:A. ? : A → C λx:A. g (f x) : A → C lam lam λg:B→C. ? : (B→C) → A → C λg:B→C. ? : (B→C) → A → C lam lam λf:A→B. ? : (A→B) → (B→C) → A → C λf:A→B. ? : (A→B) → (B→C) → A → C
  • 9. もう遷移にはしない。 • 二番目のlamの本体が確定。 f : A→B x:A app g : B→C fx:B app g (f x) : C lam λx:A. (g (f x)) : A → C lam λg:B→C. λx:A. (g (f x)) : (B→C) → A → C lam λf:A→B. ? : (A→B) → (B→C) → A → C
  • 10. もう遷移にはしない。 • 最後のlamの本体が確定。 f : A→B x:A app g : B→C fx:B app g (f x) : C lam λx:A. (g (f x)) : A → C lam λg:B→C. λx:A. (g (f x)) : (B→C) → A → C lam λf:A→B. λg:B→C. λx:A. (g (f x)) : (A→B) → (B→C) → A → C
  • 11. 完成 • λf:A→B. λg:B→C. λx:A. (g (f x))が求める項。 – 型環境が必要な場合は、lamなどの規則に対応 するものを下から順に作る。 f : A→B x:A app g : B→C fx:B app g (f x) : C lam λx:A. (g (f x)) : A → C lam λg:B→C. λx:A. (g (f x)) : (B→C) → A → C lam λf:A→B. λg:B→C. λx:A. (g (f x)) : (A→B) → (B→C) → A → C
  • 12. ちょっと補足 • 変数は、関数の形をしていたらfやgをつけ ることが慣習上多い。 – 別に強制ではない。a,b,cでも可。 • 逆に、関数の形をしていない場合はxやyを つけることが多い。 – これまたあくまで多いだけ。