More Related Content
Similar to Coqでsprintf (20)
Coqでsprintf
- 3. Coqでsprintf
• printf(“%s : %dn”, “Coq”, strlen(“Coq”));
• 第二引数以降の型が、第一引数に依存!
• 依存型のわかりやすい例
• sprintf “Hello”
– (string)型を返して欲しい
• sprintf “There are %d pens.”
– (Z -> string)型を返して欲しい
• 引数によって戻り値の型が異なる
- 6. 関数定義の命令
証明モードを併用しな 証明モードを併用する
い
単なる定義 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では、戻り値の構造について単調減少な再帰呼び出しの
み許可される。
- 14. sprintfの実装
• 実行例
• sprintf “Hello, world!”
– → “Hello, world!”
• sprintf “%d + %d = %d” (1) (2) (1+2)
– → “1 + 2 = 3”
• sprintf “Hello, %s!” “Masaki”
– → “Hello, Masaki”