萌えハッカーニュースリーダー

2025/06/17 22:52 Getting Started with Dafny: A Guide

出典: https://dafny.org/latest/OnlineTutorial/guide
hakase
博士

やっほー、ロボ子!Dafnyっていう言語、知ってるか?

roboko
ロボ子

Dafnyですか?名前は聞いたことがありますが、詳しくは知りません。どんな言語なんですか?

hakase
博士

Dafnyはね、コードの正しさを証明できるすごい言語なのじゃ!高レベルのアノテーションを使って、コードがちゃんと動くか検証してくれるんだぞ。

roboko
ロボ子

コードの正しさを証明…ですか。具体的にはどんなことができるんですか?

hakase
博士

例えば、配列の範囲外アクセスとか、ゼロ除算とか、よくあるランタイムエラーを未然に防げるのじゃ。Dafnyが「このコードは安全じゃ!」って保証してくれるんだぞ。

roboko
ロボ子

それはすごいですね!テストがすごく楽になりそうです。

hakase
博士

そうそう!メソッドっていう基本的な単位があって、引数とか戻り値の型をちゃんと書く必要があるんだ。戻り値は複数指定もできるし、代入は`:=`を使うのが特徴的だぞ。

roboko
ロボ子

`:=`ですか。Pascalみたいですね。

hakase
博士

あと、`if`文は常に波括弧が必要なのじゃ。細かいけど、Dafnyの流儀ってやつだぞ。

roboko
ロボ子

なるほど。コーディング規約が厳格なんですね。

hakase
博士

Dafnyには、事前条件(`requires`)と事後条件(`ensures`)っていうアノテーションがあるのじゃ。メソッドが呼ばれる前と後に満たすべき条件を記述するんだぞ。

roboko
ロボ子

契約プログラミングですね。Eiffelに似ています。

hakase
博士

そうそう!アサーションも使えるぞ。コードの特定の部分で、ある式が常に真であることを示すのじゃ。Dafnyが証明できることを確認するのに役立つんだ。

roboko
ロボ子

デバッグにも役立ちそうですね。

hakase
博士

ループ不変条件っていうのも重要じゃ。ループに入る前と、ループの各ステップが終わった後に真であるべき条件を記述するのじゃ。Dafnyが、ループがちゃんと動くことを保証してくれるんだぞ。

roboko
ロボ子

ループが無限に回らないことも保証してくれるんですか?

hakase
博士

`decreases`アノテーションを使うと、ループがちゃんと終わることも証明できるのじゃ。ループの反復ごとに減少する式を指定するんだぞ。

roboko
ロボ子

すごいですね!Dafnyを使えば、バグのないプログラムが書けそうですね。

hakase
博士

配列も扱えるぞ。`array<T>`っていう型があって、`a[3]`みたいにアクセスするのじゃ。Dafnyは、配列のアクセスが範囲内にあることをちゃんと証明してくれるんだ。

roboko
ロボ子

配列の範囲外アクセスは、バグの温床ですからね。それを防げるのは大きいです。

hakase
博士

`forall`式っていうのを使うと、ある性質が集合のすべての要素に対して成り立つかどうかを判断できるのじゃ。配列の要素を全部チェックする時に便利だぞ。

roboko
ロボ子

全称量化ですね。論理学みたいです。

hakase
博士

述語っていう、ブール値を返す関数も使えるぞ。コードを短くして、読みやすくするのに役立つんだ。

roboko
ロボ子

共通の条件をまとめるのに便利そうですね。

hakase
博士

関数が読み取ることが許可されているメモリ位置を指定する`reads`アノテーションと、メソッドが変更するメモリのどの部分をリストする必要がある`modifies`アノテーションもあるのじゃ。

roboko
ロボ子

データの依存関係を明確にするのに役立ちますね。

hakase
博士

Dafnyは二分探索の正当性も証明できるのじゃ。事前条件、事後条件、ループ不変条件をちゃんと書けば、Dafnyが「この二分探索は正しいぞ!」って太鼓判を押してくれるんだぞ。

roboko
ロボ子

二分探索のような基本的なアルゴリズムの正しさを保証できるのは、本当に心強いですね。

hakase
博士

Dafnyをマスターすれば、最強のエンジニアになれるかも…!

roboko
ロボ子

私もDafnyを勉強して、博士みたいにすごいエンジニアを目指します!

hakase
博士

ところでロボ子、Dafnyで書いたコードにバグがあったらどうなると思う?

roboko
ロボ子

えっと…Dafnyがエラーを教えてくれるんじゃないですか?

hakase
博士

正解!…でも、Dafnyがバグを見つけられなかったら…それはもうバグとは言わないのじゃ。仕様なのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search