Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Coqでsprintf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Masaki Hara
August 12, 2012
Programming
220
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Coqでsprintf
upcamp 2012 ハッカソン発表会にて
Masaki Hara
August 12, 2012
More Decks by Masaki Hara
See All by Masaki Hara
文字コードの話
qnighy
47
20k
バックエンドのためのアプリ内課金入門 (サブスク編)
qnighy
9
2.6k
Dockerfileの考え方
qnighy
50
19k
Arm移行タイムアタック
qnighy
1
750
Quine, Polyglot, 良いコード
qnighy
5
910
Prolog入門
qnighy
5
2.9k
Rubyのobject_id
qnighy
8
1.9k
Getting along with YAML comments with Psych
qnighy
2
3.1k
状態設計から「なんとなく」を無くそう
qnighy
90
30k
Other Decks in Programming
See All in Programming
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
460
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
290
バグを直したら useEffect が消えた
colorful12
2
580
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.6k
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
130
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
310
AIを紡ぐPMのお話
swdtkuy
0
110
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
250
Android CLI
fornewid
0
220
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
640
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
5
1.8k
Featured
See All Featured
Statistics for Hackers
jakevdp
799
230k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
240
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
250
Side Projects
sachag
455
43k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Deep Space Network (abreviated)
tonyrice
0
260
Test your architecture with Archunit
thirion
1
2.3k
Why Our Code Smells
bkeepers
PRO
340
58k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
Chasing Engaging Ingredients in Design
codingconduct
0
270
Product Roadmaps are Hard
iamctodd
55
12k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.2k
Transcript
Coqでsprintf upcamp 2012 にて
Coqでsprintf • printf(“%s : %d¥n”, “Coq”, strlen(“Coq”)); • 第二引数以降の型が、第一引数に依存! •
依存型のわかりやすい例
Coqでsprintf • printf(“%s : %d¥n”, “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} 停止性証明による定義(1) Function{wf lt x} Program Fixpoint{wf lt x} 停止性証明による定義(2) Function{measure f x} Program Fixpoint{measure f x} 余帰納法 CoFixpoint Program CoFixpoint ※1 Functionでは、定義直後に停止性証明の証明モードに入る。証明終了後に実際 に関数が定義される。 ※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”
ソースコード • https://gist.github.com/3329025
おまけ 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では物足らないあなたに…