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
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
3k
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
アクセシビリティから考える情報設計
high_g_engineer
0
300
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.5k
Intent as Code
shoppingjaws
1
190
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
270
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
0
250
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
130
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
460
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
410
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
How to Ace a Technical Interview
jacobian
281
24k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
410
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Facilitating Awesome Meetings
lara
57
7.1k
Deep Space Network (abreviated)
tonyrice
0
290
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
370
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
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では物足らないあなたに…