核心概念
Isabelle/HOLのコードジェネレータにGoプログラミング言語のサポートを追加し、関数型言語であるIsabelleのプログラムをGo言語に変換する方法を示した。
要約
本論文では、Isabelle/HOLのコードジェネレータにGoプログラミング言語のサポートを追加する方法を示しています。
Isabelle/HOLは、小さな関数型言語を含んでおり、ユーザーはプログラムを記述し、それについて推論することができます。これまでは、Standard ML、OCaml、Scala、Haskellの4つの関数型言語にプログラムを抽出することができました。本研究では、Goを5番目のターゲット言語として追加しました。
Goは関数型言語ではなく、命令型スタイルのコーディングを奨励するため、Isabelle/HOLの言語の多くの機能(特にデータ型、パターンマッチング、型クラス)をGoの命令型言語の構文で模倣する必要がありました。開発したコードジェネレータは、既存の理論に簡単にインポートできるアドオンライブラリとして提供されています。
具体的な実装では、Isabelle/HOLの中間言語Thingolからの変換スキームを示しています。Thingolはラムダ計算に基づいており、Isabelle/HOLの高水準な機能を表現することができます。Goはこれらの機能を直接サポートしていないため、データ型、パターンマッチング、型クラスなどをGoの命令型言語の構文で模倣する必要がありました。
また、Goの標準ライブラリにない高水準な構造(リスト、タプルなど)については、Isabelle/HOLの定義をそのまま引き継ぐ方式を採用しました。これにより、Isabelle/HOLの定義を変更することなく、Goコードを生成できるようになりました。
最後に、本手法を用いて実際のIsabelle/HOLの定義からGoコードを生成し、既存のScalaコードと同等の動作を確認しました。これにより、Isabelle/HOLの定義とGo言語の実装を密接に連携させることができるようになりました。