SlideShare una empresa de Scribd logo
1 de 46
ProofSummit




どこでもCoq
  @mzp

   1
2
@mzp

 3
Coqで作ったもの

MessagePack for OCaml




          4
Coqで作ったもの

Coq to Ruby


Coq


      5
def mult
  lambda{|n|lambda{|m|match(n,[:O,
lambda{[:O,[]]}],
                         [:S, lambda{|p|
plus[m][mult[p][m]]}])}}
end

def fact
  lambda{|n|match(n,[:O, lambda{[:S,[[:O,
[]]]]}],
               [:S, lambda{|m|mult[n]
[fact[m]]}])}
end


                      6
どこでも証明したい



    7
8
9
どこにでもあるものとは




http://www.flickr.com/photos/ivyfield/4731067716/

                                      10
どこにでもあるものとは




    空気



http://www.flickr.com/photos/ivyfield/4731067716/

                                      10
どこにでもあるものとは




    空気                    インターネット



http://www.flickr.com/photos/ivyfield/4731067716/

                                      10
どこにでもあるものとは




    空気                    インターネット                 iPhone



http://www.flickr.com/photos/ivyfield/4731067716/

                                      10
どこにでもあるものとは




    空気                    インターネット                 iPhone



http://www.flickr.com/photos/ivyfield/4731067716/

                                      10
OCamlの特徴
二種類のコンパイラ:
‣ バイトコードコンパイラとネイティブコー
  ドコンパイラ

各種アーキテクチャに対応
‣ IA32, PowerPC, AMD64, Alpha, Sparc,
  Mips, IA64, HPPA, Arm

                 11
OCamlの特徴
二種類のコンパイラ:
‣ バイトコードコンパイラとネイティブコー
  ドコンパイラ

各種アーキテクチャに対応
‣ IA32, PowerPC, AMD64, Alpha, Sparc,
                                        !
  Mips, IA64, HPPA, Arm

                 11
http://sha3teely.com/?p=642
12
13
OCamlの特徴
二種類のコンパイラ:
‣ バイトコードコンパイラとネイティブコー
  ドコンパイラ

各種アーキテクチャに対応
‣ IA32, PowerPC, AMD64, Alpha, Sparc,
  Mips, IA64, HPPA, Arm

                 14
OCamlの特徴
二種類のコンパイラ:
                                !
‣ バイトコードコンパイラとネイティブコー
  ドコンパイラ

各種アーキテクチャに対応
‣ IA32, PowerPC, AMD64, Alpha, Sparc,
  Mips, IA64, HPPA, Arm

                 14
15
!




    15
Coq for iOSの構成

              Coq
UIとか
       バイトコードインタプリタ


        iOS


         16
Objective-Cとの連携
   • Cの関数はFFI経由で相互に呼び出
     せる
let _ = Callback.register "eval" eval;;



int ret =
 caml_callback(*caml_named_value("eval"),
                caml_copy_string(s));


                       17
そこまで簡単じゃない!!!




      18
$ file coqtop.byte
coqtop.byte: Mach-O 64-bit executable x86_64




                      19
$ file coqtop.byte
coqtop.byte: Mach-O 64-bit executable x86_64




突然のネイティブコード


                      19
突然のインラインアセンブラ
エンディアンの罠
arm-little-endian
これはlittle-endianのバリエーションで、ARMプロセッサの
特定のモードで使われるものです。倍精度浮動小数点数以外
はlittle-endian と同様に動作します。倍精度浮動小数点数に
ついては、ふたつのリトルエンディアンワードが ビッグエ
ンディアンの順で書き出されます。
http://quruli.ivory.ne.jp/document/gauche_0.9/gauche-refj_118.html




                                                  21
エンディアンの罠
iOSシミュレータ
‣ ARMじゃないので動く

実機 + サンプルプログラム
‣ 浮動小数使わない限り動く

実機 + Coq
‣ 動かない!!!

            22
デモ



23
インターネットもあるじゃ
                                    ん




http://www.flickr.com/photos/ivyfield/4731067716/

                                      24
インターネットもあるじゃ
                                    ん




    空気



http://www.flickr.com/photos/ivyfield/4731067716/

                                      24
インターネットもあるじゃ
                                    ん




    空気                    インターネット



http://www.flickr.com/photos/ivyfield/4731067716/

                                      24
インターネットもあるじゃ
                                    ん




    空気                    インターネット                 iPhone



http://www.flickr.com/photos/ivyfield/4731067716/

                                      24
インターネットもあるじゃ
                                    ん




    空気                    インターネット                 iPhone



http://www.flickr.com/photos/ivyfield/4731067716/

                                      24
インタネットといえば
           Javascript
Coq    +    js_of_ocaml   =   Coq on JS




                25
やってみた

$ js_of_ocaml -pretty coqtop.byte
# wait for a minutes

$ ls *.js
coqtop.js

$ wc -l coqtop.js
  269151 coqtop.js


                26
やってみた

$ js_of_ocaml -pretty coqtop.byte
# wait for a minutes

$ ls *.js
coqtop.js

$ wc -l coqtop.js
            !
  269151 coqtop.js


                26
on Firefox
フリーズ




       27
on Google Chrome




       28
on Google Chrome




       28
on node.js




    29
on node.js




    29
あきらめた!!




   30
まとめ
Coq for iPhone作りまし
た

Coq on JSは無理でした


        31

Más contenido relacionado

Similar a どこでもCoq

130329 04
130329 04130329 04
130329 04openrtm
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4openrtm
 
お手軽マイコンを用いた
水槽管理システム
あくあたんの紹介
お手軽マイコンを用いた
水槽管理システム
あくあたんの紹介お手軽マイコンを用いた
水槽管理システム
あくあたんの紹介
お手軽マイコンを用いた
水槽管理システム
あくあたんの紹介Mizuno Osamu
 
vImageのススメ(改訂版)
vImageのススメ(改訂版)vImageのススメ(改訂版)
vImageのススメ(改訂版)Shuichi Tsutsumi
 
20130315 abc firefox_os
20130315 abc firefox_os20130315 abc firefox_os
20130315 abc firefox_osTomoaki Konno
 
OpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler OverviewOpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler Overviewnothingcosmos
 
Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料Takako Miyagawa
 
[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by 朱義文
[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by  朱義文[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by  朱義文
[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by 朱義文CODE BLUE
 
A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020
A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020
A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020SORACOM,INC
 
201110 03
201110 03201110 03
201110 03openrtm
 
OpenCLに触れてみよう
OpenCLに触れてみようOpenCLに触れてみよう
OpenCLに触れてみようYou&I
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23Masashi Shibata
 
インフラ野郎AzureチームOCP Summit US 2017号外
インフラ野郎AzureチームOCP Summit US 2017号外インフラ野郎AzureチームOCP Summit US 2017号外
インフラ野郎AzureチームOCP Summit US 2017号外Toru Makabe
 
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)objc2swift (自動変換の野望)
objc2swift (自動変換の野望)Taketo Sano
 

Similar a どこでもCoq (20)

PCL
PCLPCL
PCL
 
130329 04
130329 04130329 04
130329 04
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
 
お手軽マイコンを用いた
水槽管理システム
あくあたんの紹介
お手軽マイコンを用いた
水槽管理システム
あくあたんの紹介お手軽マイコンを用いた
水槽管理システム
あくあたんの紹介
お手軽マイコンを用いた
水槽管理システム
あくあたんの紹介
 
vImageのススメ(改訂版)
vImageのススメ(改訂版)vImageのススメ(改訂版)
vImageのススメ(改訂版)
 
20130315 abc firefox_os
20130315 abc firefox_os20130315 abc firefox_os
20130315 abc firefox_os
 
OpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler OverviewOpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler Overview
 
Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料
 
GTC Japan 2017
GTC Japan 2017GTC Japan 2017
GTC Japan 2017
 
[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by 朱義文
[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by  朱義文[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by  朱義文
[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by 朱義文
 
Driverについて
DriverについてDriverについて
Driverについて
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020
A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020
A2 SORACOM API使いこなしレシピ集 | SORACOM Technology Camp 2020
 
201110 03
201110 03201110 03
201110 03
 
OpenCLに触れてみよう
OpenCLに触れてみようOpenCLに触れてみよう
OpenCLに触れてみよう
 
Reconf_201409
Reconf_201409Reconf_201409
Reconf_201409
 
Microblaze loader
Microblaze loaderMicroblaze loader
Microblaze loader
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
 
インフラ野郎AzureチームOCP Summit US 2017号外
インフラ野郎AzureチームOCP Summit US 2017号外インフラ野郎AzureチームOCP Summit US 2017号外
インフラ野郎AzureチームOCP Summit US 2017号外
 
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)objc2swift (自動変換の野望)
objc2swift (自動変換の野望)
 

Más de Hiroki Mizuno

OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法Hiroki Mizuno
 
#NGK2012B Excelによる設計書について
#NGK2012B Excelによる設計書について#NGK2012B Excelによる設計書について
#NGK2012B Excelによる設計書についてHiroki Mizuno
 
Coq for Moblie Phone @ ML名古屋
Coq for Moblie Phone @ ML名古屋Coq for Moblie Phone @ ML名古屋
Coq for Moblie Phone @ ML名古屋Hiroki Mizuno
 
Darcs紹介@20120423-scmbc
Darcs紹介@20120423-scmbcDarcs紹介@20120423-scmbc
Darcs紹介@20120423-scmbcHiroki Mizuno
 
CoqによるMsgPackの証明
CoqによるMsgPackの証明CoqによるMsgPackの証明
CoqによるMsgPackの証明Hiroki Mizuno
 
「Frama-Cによるソースコード検証」 (mzp)
「Frama-Cによるソースコード検証」 (mzp)「Frama-Cによるソースコード検証」 (mzp)
「Frama-Cによるソースコード検証」 (mzp)Hiroki Mizuno
 
20110424 action scriptを使わないflash勉強会
20110424 action scriptを使わないflash勉強会20110424 action scriptを使わないflash勉強会
20110424 action scriptを使わないflash勉強会Hiroki Mizuno
 
Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Coq to Rubyによる証明駆動開発@名古屋ruby会議02Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Coq to Rubyによる証明駆動開発@名古屋ruby会議02Hiroki Mizuno
 
証明駆動開発のたのしみ@名古屋reject会議
証明駆動開発のたのしみ@名古屋reject会議証明駆動開発のたのしみ@名古屋reject会議
証明駆動開発のたのしみ@名古屋reject会議Hiroki Mizuno
 
NGK忘年会 2010 / CoqからRubyへ
NGK忘年会 2010 / CoqからRubyへNGK忘年会 2010 / CoqからRubyへ
NGK忘年会 2010 / CoqからRubyへHiroki Mizuno
 
From Coq to Ruby / CoqからRubyへ
From Coq to Ruby / CoqからRubyへFrom Coq to Ruby / CoqからRubyへ
From Coq to Ruby / CoqからRubyへHiroki Mizuno
 
OCamlAPISearchの紹介
OCamlAPISearchの紹介OCamlAPISearchの紹介
OCamlAPISearchの紹介Hiroki Mizuno
 
Proove Mark&Sweep GC with Coq
Proove Mark&Sweep GC with CoqProove Mark&Sweep GC with Coq
Proove Mark&Sweep GC with CoqHiroki Mizuno
 
CoqでGCの証明をしてみたよ(LT)
CoqでGCの証明をしてみたよ(LT)CoqでGCの証明をしてみたよ(LT)
CoqでGCの証明をしてみたよ(LT)Hiroki Mizuno
 

Más de Hiroki Mizuno (17)

OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法
 
#NGK2012B Excelによる設計書について
#NGK2012B Excelによる設計書について#NGK2012B Excelによる設計書について
#NGK2012B Excelによる設計書について
 
Sml#探検隊
Sml#探検隊Sml#探検隊
Sml#探検隊
 
Coq for Moblie Phone @ ML名古屋
Coq for Moblie Phone @ ML名古屋Coq for Moblie Phone @ ML名古屋
Coq for Moblie Phone @ ML名古屋
 
Darcs紹介@20120423-scmbc
Darcs紹介@20120423-scmbcDarcs紹介@20120423-scmbc
Darcs紹介@20120423-scmbc
 
CoqによるMsgPackの証明
CoqによるMsgPackの証明CoqによるMsgPackの証明
CoqによるMsgPackの証明
 
「Frama-Cによるソースコード検証」 (mzp)
「Frama-Cによるソースコード検証」 (mzp)「Frama-Cによるソースコード検証」 (mzp)
「Frama-Cによるソースコード検証」 (mzp)
 
20110424 action scriptを使わないflash勉強会
20110424 action scriptを使わないflash勉強会20110424 action scriptを使わないflash勉強会
20110424 action scriptを使わないflash勉強会
 
Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Coq to Rubyによる証明駆動開発@名古屋ruby会議02Coq to Rubyによる証明駆動開発@名古屋ruby会議02
Coq to Rubyによる証明駆動開発@名古屋ruby会議02
 
証明駆動開発のたのしみ@名古屋reject会議
証明駆動開発のたのしみ@名古屋reject会議証明駆動開発のたのしみ@名古屋reject会議
証明駆動開発のたのしみ@名古屋reject会議
 
NGK忘年会 2010 / CoqからRubyへ
NGK忘年会 2010 / CoqからRubyへNGK忘年会 2010 / CoqからRubyへ
NGK忘年会 2010 / CoqからRubyへ
 
From Coq to Ruby / CoqからRubyへ
From Coq to Ruby / CoqからRubyへFrom Coq to Ruby / CoqからRubyへ
From Coq to Ruby / CoqからRubyへ
 
SacalaZa #1
SacalaZa #1SacalaZa #1
SacalaZa #1
 
CoqUn2010
CoqUn2010CoqUn2010
CoqUn2010
 
OCamlAPISearchの紹介
OCamlAPISearchの紹介OCamlAPISearchの紹介
OCamlAPISearchの紹介
 
Proove Mark&Sweep GC with Coq
Proove Mark&Sweep GC with CoqProove Mark&Sweep GC with Coq
Proove Mark&Sweep GC with Coq
 
CoqでGCの証明をしてみたよ(LT)
CoqでGCの証明をしてみたよ(LT)CoqでGCの証明をしてみたよ(LT)
CoqでGCの証明をしてみたよ(LT)
 

どこでもCoq

Notas del editor

  1. \n
  2. おしらせ。\n・ProofGeneralさんがかわいらしくなりました。\n・うしろでシールくばってるのでもらってください。\n
  3. \n
  4. \n
  5. \n
  6. oh...\n
  7. \n
  8. まあ最初の選択肢はこれですね。\nたった53円でどこでも証明できる!\nやったね!\n
  9. ぐぬぬ\n
  10. \n
  11. \n
  12. \n
  13. \n
  14. ・ごぞんじの通りCoqはOCamlで書かれています。\n・OCamlの特徴は2種類のコンパイラがあること、各種アーキテクチャに対応していること\n・Armに対応してる!!\n
  15. おっとApple様はObjectiveC以外を許可していないぜ\n
  16. ぐぬぬ\n
  17. \n
  18. \n
  19. 偉大なる先人\nCがちっちゃい気がするけど、たぶん気のせい\n
  20. このうちバイトコードインタプリタはocamlrunのコードをXcodeにD&DしてやればOK\nただバイトコード版のCoqは通常生成されないのでちょっと工夫が必要。\n
  21. そのあたりは適当にコンパイルオプションをいじってやります。\nあとobj cとの連携はffiつかいます。\n
  22. ぐぬぬ\n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. js_of_ocaml使えばCoq on Javascriptが実現できるんじゃね?\n
  33. \n
  34. \n
  35. \n
  36. 期待の星,node.js\nonlyとは...\nsyntaxとは...\n
  37. ぐぬぬ\n
  38. \n