SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Coqでsprintf

upcamp 2012 にて
Coqでsprintf
• printf(“%s : %dn”, “Coq”, strlen(“Coq”));
• 第二引数以降の型が、第一引数に依存!
• 依存型のわかりやすい例
Coqでsprintf
•   printf(“%s : %dn”, “Coq”, strlen(“Coq”));
•   第二引数以降の型が、第一引数に依存!
•   依存型のわかりやすい例
•   sprintf “Hello”
    – (string)型を返して欲しい
• sprintf “There are %d pens.”
    – (Z -> string)型を返して欲しい
• 引数によって戻り値の型が異なる
Coqでsprintf
• Coqにおける文字・文字列
 – 文字(ascii) : 8ビットのタプル
 – 文字列(string) : asciiからなるリスト構造
• Coqにおける整数
 – 自然数(nat) : ペアノの公理による非負整数
 – 整数(Z) : 2進数表現による整数
toStringの実装
• Zからstringへ変換
• 一般的な再帰で書く
• 停止性証明が必要なので、Fixpointではな
  くFunctionで書く
• 一部を証明モードで補完したいので、
  FunctionではなくProgram Fixpointを使う
関数定義の命令
                         証明モードを併用しな 証明モードを併用する
                         い
単なる定義                    Definition             Program Definition
構造帰納法による定義               Fixpoint{struct x}     Program Fixpoint{struct x}
停止性証明による定義               Function{wf lt x}      Program Fixpoint{wf lt x}
(1)
停止性証明による定義              Function{measure f x} Program Fixpoint{measure f x}
(2)
※1 Functionでは、定義直後に停止性証明の証明モードに入る。証明終了後に
余帰納法
実際に関数が定義される。            CoFixpoint            Program CoFixpoint
※2 Programでは、定義後にObligation命令(Obligation 1 や Next Obligation) を使っ
てプレースホルダーの証明をするモードに入る。証明終了後に実際に関数が定
義される。場合によっては全て自動で証明されてしまう。
※3 Fixpoint{struct x}では、引数xの構造について単調減少な再帰呼び出しのみ許
可される。CoFixpointでは、戻り値の構造について単調減少な再帰呼び出しの
み許可される。
toStringの実装
• 非負整数Nから文字列への変換関数
• 再帰呼び出しでNの値が単調減少
toStringの実装
• 整数から文字列への変換関数
toStringの実装
• 実行例
sprintfの実装の準備
• 型と値のペアを定義する
sprintfの実装の準備
• {| TV_T := nat ; TV_V := 10 |}
• {| TV_T := string ; TV_V := “Hello” |}
sprintfの実装
• sprintf_impl
  – 書式文字列に対する再帰で書く
  – 構造帰納法なので停止性証明は不要
     • “%04d”などの複雑な書式文字列に対応したい場合、
       停止性証明を導入する必要性が生じそう
sprintfの実装
• 帰納法&マッチング
sprintfの実装
• 実行例
• sprintf “Hello, world!”
  – → “Hello, world!”
• sprintf “%d + %d = %d” (1) (2) (1+2)
  – → “1 + 2 = 3”
• sprintf “Hello, %s!” “Masaki”
  – → “Hello, Masaki”
おまけ
emacsで:wしたら強制終了するマクロを作るっていうネタあるんですけど
使う人居ますか
[2012/08/11 22:28:45] qnighy (原 将己): vimでC-x C-sしたら強制終了ってい
う逆のネタもあります
おまけ
• 「VimでEmacsの保存コマンド→死亡」
  を実装してみました
おまけ
• といっても以下の2つを実行するだけ
• :map <C-x><C-s> :qall!<Enter>
• :map! <C-x><C-s> :qall!<Enter>

• SLでは物足らないあなたに…

Weitere ähnliche Inhalte

Was ist angesagt?

形式手法とalloyの紹介
形式手法とalloyの紹介形式手法とalloyの紹介
形式手法とalloyの紹介
Daisuke Tanaka
 
ループその3
ループその3ループその3
ループその3
TENTO_slide
 
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
Yosuke Onoue
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
えぴ 福田
 

Was ist angesagt? (20)

形式手法とalloyの紹介
形式手法とalloyの紹介形式手法とalloyの紹介
形式手法とalloyの紹介
 
Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法
 
Async design with Unity3D
Async design with Unity3DAsync design with Unity3D
Async design with Unity3D
 
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
 
ループその3
ループその3ループその3
ループその3
 
xv6から始めるSPIN入門
xv6から始めるSPIN入門xv6から始めるSPIN入門
xv6から始めるSPIN入門
 
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
 
あまぁいRcpp生活
あまぁいRcpp生活あまぁいRcpp生活
あまぁいRcpp生活
 
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
 
SEH on mingw32
SEH on mingw32SEH on mingw32
SEH on mingw32
 
Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
 
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
 
V6でJIT・部分適用・継続
V6でJIT・部分適用・継続V6でJIT・部分適用・継続
V6でJIT・部分適用・継続
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 
Rcppのすすめ
RcppのすすめRcppのすすめ
Rcppのすすめ
 
Altanative macro
Altanative macroAltanative macro
Altanative macro
 

Andere mochten auch

ご静聴ありがとうございました
ご静聴ありがとうございましたご静聴ありがとうございました
ご静聴ありがとうございました
Masaki Hara
 

Andere mochten auch (19)

いろいろな問題の解説
いろいろな問題の解説いろいろな問題の解説
いろいろな問題の解説
 
ご静聴ありがとうございました
ご静聴ありがとうございましたご静聴ありがとうございました
ご静聴ありがとうございました
 
Coqの公理
Coqの公理Coqの公理
Coqの公理
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
“A ::= aAa / a” in PEG
“A ::= aAa / a” in PEG“A ::= aAa / a” in PEG
“A ::= aAa / a” in PEG
 
Proving Decidability of Intuitionistic Propositional Calculus on Coq
Proving Decidability of Intuitionistic Propositional Calculus on CoqProving Decidability of Intuitionistic Propositional Calculus on Coq
Proving Decidability of Intuitionistic Propositional Calculus on Coq
 
Spaceships 解説
Spaceships 解説Spaceships 解説
Spaceships 解説
 
joi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcastingjoi2012-sp-day2-broadcasting
joi2012-sp-day2-broadcasting
 
書くネタがCoqしかない
書くネタがCoqしかない書くネタがCoqしかない
書くネタがCoqしかない
 
C#でこなすexcel課題
C#でこなすexcel課題C#でこなすexcel課題
C#でこなすexcel課題
 
ランク6の俺がパズドラについて語る
ランク6の俺がパズドラについて語るランク6の俺がパズドラについて語る
ランク6の俺がパズドラについて語る
 
Chokudai search
Chokudai searchChokudai search
Chokudai search
 
ぷよぷよAIの新しい探索法
ぷよぷよAIの新しい探索法ぷよぷよAIの新しい探索法
ぷよぷよAIの新しい探索法
 
永続データ構造が分からない人のためのスライド
永続データ構造が分からない人のためのスライド永続データ構造が分からない人のためのスライド
永続データ構造が分からない人のためのスライド
 
本当にあった怖い話 ~大学生はプログラミングをしてはいけない~
本当にあった怖い話 ~大学生はプログラミングをしてはいけない~本当にあった怖い話 ~大学生はプログラミングをしてはいけない~
本当にあった怖い話 ~大学生はプログラミングをしてはいけない~
 
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化するアルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
 
競技プログラミング入門
競技プログラミング入門競技プログラミング入門
競技プログラミング入門
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 

Ähnlich wie Coqでsprintf

T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
Taku Miyakawa
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2
ichikaway
 

Ähnlich wie Coqでsprintf (20)

Coqでsprintf
CoqでsprintfCoqでsprintf
Coqでsprintf
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
Coq 20100208a
Coq 20100208aCoq 20100208a
Coq 20100208a
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
CPS & CTO
CPS & CTOCPS & CTO
CPS & CTO
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriなぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuri
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
cp-5. 繰り返し計算
cp-5. 繰り返し計算cp-5. 繰り返し計算
cp-5. 繰り返し計算
 
講座Java入門
講座Java入門講座Java入門
講座Java入門
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2
 
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriWhy Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 

Kürzlich hochgeladen

Kürzlich hochgeladen (11)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

Coqでsprintf