Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
760
Quine, Polyglot, 良いコード
qnighy
5
920
Prolog入門
qnighy
5
3k
Rubyのobject_id
qnighy
8
1.9k
Getting along with YAML comments with Psych
qnighy
2
3.2k
状態設計から「なんとなく」を無くそう
qnighy
90
30k
Other Decks in Programming
See All in Programming
一人だけ、Kiroが静止する日
hideg
0
110
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
240
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
320
Building an Out-of-Order CPU
latte72
1
770
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2.2k
Jetpack Compose メカニズム
skydoves
0
410
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
0
270
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
860
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
310
Security issues being discussed on Web Platforms
petamoriken
0
930
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
Featured
See All Featured
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
840
Chasing Engaging Ingredients in Design
codingconduct
0
310
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
280
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
850
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Automating Front-end Workflow
addyosmani
1369
210k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Building Applications with DynamoDB
mza
96
7.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では物足らないあなたに…