形式論理教育ツール Mizar

形式論理教育ツール Mizar-MSE 用統合環境の実装
Implementation for the proof checker Mizar-MSE
福良 博史
FUKURA Hirofumi
1.緒
誤りが見過ごされる危険性がある。形式論理の
言
これからのソフトウェア技術者が身に付けて
証明の内容についての教育訓練を行う場合、こ
おくべき基本的な知識の一つは形式論理学であ
のような、
「自明である」というような論理の飛
ると考えている。これがなぜソフトウェア技術
躍を許さず、きちんと証明の基本ルールに則り、
者に必要なのかというと、高信頼性を維持した
誰もが納得のいくプロセスで証明が行われるこ
ソフトウェア・システムを構築するためには、
とが必要である。これを可能にするためには、
現在のソフトウェア工学の技術レベルにおいて、
何らかのツールが必要となる。このツールは、
形式手法がその解決への入り口と考えるからで
自動証明のツールではない。自動証明の場合は、
ある。この手法を用いるためには、形式論理学
結果が出るまでに長時間かかる場合もある。ま
の知識と訓練が欠かせない。
た証明できないこともある。ここで求めている
ソフトウェア設計手法の一つであるオブジェ
ツールは、プルーフ・チェッカであり、これは、
クト指向による設計方法論の UML には、OCL
証明の記述に誤りがあるか否かを検証してくれ
という言語が用意されている。この言語も形式
る。このツールは、証明の記述がルール通りに
手法の一種と考えられている。この言語を理解
行われているか否かを判定するだけなので、プ
するためにも形式手法の知識が必要である。
ルーフ・チェッカが試行錯誤することはない。
そのため、処理時間が予測できないほど長時間
そのため、東京校において形式論理の教育・
訓練を情報技術科の二年生を対象に 3 年前から
かかることはありえない。
プルーフチェッカ Mizar というツールがある。
実施している。
形式論理を、集合教育で教える上で困難なこ
しかしこれは専門家がそれなりの訓練を積んで
とは、証明が正しいか否かを確認する方法が紙
からでないと使いこなせない。そこで専門家向
の上での記述だけでは、個々人のレポートを読
けではない、初心者向けの証明の検証をおこな
み、厳密な検証を行うときに、論理の飛躍や、
ってくれるツール Mizar-MSE を用いて教育訓
微妙に誤っている論証を総てチェックするため
練を実施することとした。このツールは、Linux
の時間がなかなかとれず、誤りを見落としやす
上で CUI(Character-based User Interface)
くなり、実質的な訓練にならなくなる恐れがあ
インターフェースで用いられていた。それを
る。また別の観点で考えると、高校や大学の数
Windows で動作できるように、東京校において
学のテキストにおいて証明が「自明である」と
改造し、利用していた(1)。この実習を始めて 3
書かれてしまうと、人により理解の深さが異な
年 目 と な る 今 年 度 は 、 こ の ツ ー ル を GUI
っているため、理解できる人、理解できない人、
(Graphical User Interface)形式で利用でき
誤解する人などが出てくる。そして実は「自明
るように改造した。この改造は Java にて行っ
である」と書いたのが誤りで、そのような証明
た。この改造方法を紹介し、今後、同様なツー
が不可能かもしれない。
ルの改造をより汎用的に実装するための方式を
このように論証を紙の上で行っている場合は、
-66-
提案する。
2.Mizar-MSE の機能分析
ような役割を担ってくれている。個人ごとに証
2.1
明の書き方に間違いがあれば、指摘してくれる。
CUI インターフェース・ツールの基本
プルーフ・チェッカの機能は、コンパイラに
また、論証が飛躍している場合も指摘してくれ
似ている。コンパイラの場合は、プログラムの
る。しかし、その推論方法が根本的におかしい
コードを記述し、そのコードをコンパイルし、
のか、または若干飛躍しているのかの判断は、
文法上の誤りが無ければ、オブジェクトを出力
ツールでは判断できない。この点は、学生がど
する。コンパイラを利用する目的は、コンパイ
うしても証明できないときに教官に質問しに来
ラが生成したオブジェクトを用いてソフトウェ
て、教官がその意味を説明することで学生の理
アを動かすことにある。プルーフ・チェッカの
解が進む。つまり学生と教官との対話が、論証
場合は、証明のコードを記述し、その内容が、
の本質的な内容近辺での議論となる。すなわち
ルールに則っているか否かを判定する。この場
本質的な考え方の訓練に、教官が集中できるよ
合重要なのは証明の正しさに対する診断結果で
うな環境が整えられる、と考えている。
ある。CUI ツールとして必要なものは、証明の
コードを入力し、構文解析し、構文上の誤りが
パスの設定やスクリプトの記述などを知って
あればそれを指摘する。構文上の誤りが無い場
いる人は、CUI インターフェースのツールを使
合は、証明の記述に飛躍や無理がないか、証明
うことに抵抗感を感じていない。しかし近年
のルールに則っているかを調べ検証の妥当性を
GUI 操作には慣れていてもコマンド・プロンプ
調べ、その結果を表示する。
トで操作をする環境に不得手の人が増えている。
Mizar-MSE の場合は、テキスト・ファイル
このような状況において、形式論理を訓練する
から論証のコードを入力し、その診断結果を標
ために、パソコンの操作に重点を置いている余
準出力している。
裕は無いので、GUI インターフェースでのワン
ストップサービスという観点から、ツールの使
2.2
い勝手の工夫を考えた。
Mizer-MSE の利用方法
Mizar-MSE を利用するためには、以下のよ
2.3
うな手順を踏んで利用することになる。
ユニバーサル・デザインの7原則
ツールの使い勝手を考える上で、以下に示す
ユニバーサル・デザインの 7 原則(2)を参考とし
手順1:テキスト・エディタで証明のコードを
記述し、保存する。
た。
手順2:コマンド・プロンプトを起動する。
手順 3:コマンド・プロンプトから必要なディ
第一原則(公平性)への適合性
レクトリに移動し Mizar-MSE を起動
すべてのユーザにとって GUI の起動に
する。このとき、手順1で作成したフ
より、誰もが同じ方法で各種メニューを
ァイルを入力として指示する。
開くことにより使えるようにデザインさ
手順4:診断結果が標準出力に表示される。
れている。
手順5:診断結果を見て間違いがあれば、手順
第二原則(柔軟性)への適合性
1に戻る。
テキスト・エディタの利用、プルーフチ
ェッカの利用その他各種機能は,メニュー
このようなツールを使うことで、集合教育で
から選択することによりサービスが受け
も、ツールが、あたかも個人ごとのチュータの
られる。このためユーザが自分の理解や早
-67-
さのペースに合わせて自身でメニューを
3.Mizar-MSE 統合環境
選択し行動をすることができるようにデ
3.1
ザインされている。
Mizar-MSE の GUI 化した統合環境
上記のようにこのツールを設計する上で、ユ
第三原則(シンプル)への適合
ニバーサル・デザインの7原則を参考に使い勝
統合環境として,テキスト・エディタ
手の機能を考えた。GUI 化したツールと、この
もプルーフチェッカも一つのツールの中
7 原則には違和感がなく、自然と機能の選別が
にメニューで選択して作業ができるよう
できた。2.2で述べた各ステップを踏む手順
にシンプルなデザインを採用している。
を GUI 化したツールの中に一体化することが
第四原則(理解容易)への適合
できた。
メニューを見ると何ができるのかが容
このツールは、ワンストップ・サービスとし
易に理解できるようにデザインされて
ての統合環境を目指したツールである。このた
いる。
め、テキスト・エディタとプルーフチェッカを
一つにまとめて GUI 化し、各種メニューをクリ
第五原則(寛容)への適合
操作に異常が見受けられた場合は、警告
ックしていくことで証明の格納、再読み込み、
Mizar-MSE による検証などが統一して操作で
を発するようにデザインされている。
第六原則(操作極小)への適合
きるようになっている。
統合環境としたことで,別々のツール
図1に今回製作したツールの画面例を、図2
をその都度呼び出したりすることなく、
に実装した Mizar-MSE 統合ツールの概要を示
メニューから選択することで必要な機
す。
能をすべて扱えるように操作性を極力
減少させたデザインとなっている。
第七原則(サイズ・空間)への適合
テキスト・エディタのフォントを3種
類用意した。このことにより人それぞれ
の見易い文字の大きさを選択できる。ま
たプレゼンテーション用に大きな文字
を表示することが可能なデザインとな
っている。
図1
Mizar-MSE の GUI 化した統合環境ツールの画面例
-68-
統合環境制御
エディタ
バッチ起動
証明のコード
結果表示
モニター
証明の結果
表示
実線の矢印:制御の関
係
3.2
図2
Mizar-MSE の統合ツールの構成イメージ
Mizar-MSE 統合環境の実装方針
3.3
このツールを設計する上で、考慮したこと
Mizar-MSE 統合環境のコード例
このツールを構築する上での骨格部分の
は、元のツールに手を加えるのは、コードが
具体的なコード例を以下に示す。
公開されている場合は簡単であるというこ
private void nowVerify() {
//検証
try{
String cf = currentFile.getName();
Process p = Runtime.getRuntime().exec(
"cmd /c start ..¥¥MizarMSE¥¥mizarmse.bat "
+ cf);
} catch (Exception e) {
e.printStackTrace();
}
}
図3 バッチファイルの起動部分
とである。このツールの場合もコードが公開
されているので、コードを改造することがで
きる。しかしそれではこのツール独自の改造
となってしまう。それではあまり汎用性がな
い。特殊な改造に留まる。
今回の方針として、今回のようなGUI化さ
れていないツールを、一定の条件が整えばど
のような場合でもGUI化が可能となる。つま
りソースコードが公開されていなくてもGU
I化が可能な方策を検討した。その結果今回
図3にバッチファイルの起動箇所のコード
採用した実装上の考え方は以下の通りであ
例を示す。この場合、cmdというのがコマンド
る。
プロンプトを起動することであり、コマンドプ
(1) メニュー形式による機能の呼び出し
ロンプトで、mizarmse.batというバッチファ
(2) エディタ機能の組込み
イルを起動している。このバッチファイルの内
(3) Mizar-MSEをバッチファイルとし、バッ
容は、図4に示す。
チファイルの起動
(注)この仕組みにより、エディタで作成し
cd ..¥MizarMSE
mizar-mse<..¥sources¥%1
> ..¥log¥verification.log
exit
たコードを外部ファイルとし、バッチファ
イルの入力とする。そして、標準出力も外
部ファイル化しておく。つまり、形式論理
の検証結果をユーザに見せるための情報を
図4
バッチファイルの内容
引き継げるようにしておく。
(4) 検証結果をファイルから読み込み画面表
verification.logという名前のファイルが、Miz
示
ar-MSEの検証結果を標準出力となっている
-69-
ものを、テキストファイルとして格納している。
4.ツールの汎用化
この情報の受けとり方はは、図5のように、検
このようなツールを個々に実装するのは、人
証結果のverification.logを読み込み、画面に表
手がいくらあっても足りなくなる。そこで、C
示している。
UIとして用いているツールをGUI化すること
が汎用的な環境定義を行うことにより利用で
きるようになると、色々な過去のツールが使い
private void confirmVerify() { //検証結果確認
try {
BufferedReader reader
= new BufferedReader(
new FileReader(
"..¥¥log¥¥verification.log"));
StringBuilder sb = new StringBuilder();
for(String line;
(line=reader.readLine())!=null;) {
sb.append(line+"¥n");
}
reader.close();
textArea.setText(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
図5 検証結果の受取表示例
やすくなる可能性がでてくる。
このようにツールを汎用化させるためには、
外部定義により、色々な条件を入力し、これを
解釈して、その定義に応じてツールの機能がイ
ンタープリティブに変化するようにできれば
よい。このための外部定義は、XMLでの記述
形式を用いると、人が見て、理解しやすい構造
で定義体を記述できる。このように現在のツー
ルを改造すると、概ね図6のような形態になる。
このときに定義体に必要な機能的な内容は、
表1に示したような項目が考えられる。
XML での定義
統合環境制御
エディタ
コード
バッチ起動
実行結果
結果表示
モニター
表示
実線の矢印:制御の関
係
図6 汎用化した統合ツールのイメージ
-70-
表1 定義体に必要な機能
No
機
能
1
画面のタイトル
2
メニューの種類
3
エディタの有無
4
バッチファイルの指示
5
入力情報の指示
6
出力情報の指示
7
排他制御の必要なプロセスの指示
8
並列処理が可能なプロセスの指示
9
シリアライズが必要なプロセスの指示
10
エラーへの対処
5.まとめ
このツールを利用して、3年目の教育訓練
を行っている。今後使い勝手の情報を収集し、
よりよいものにしていくことが望まれる。
なお、このツールのXML化を今後検討し
ていきたいと考えている。こうすることによ
り、他のツールに対しても同じような機能の
提供が簡単にできる可能性がでてくる。
参考文献
(1)福良博史:”プルーフ・チェッカ Mizar-MSE
を用いた形式論理の実践的な教育訓練
法” ,Proceedings of the Technical Symposium
and General Assembly of Mizar JAPAN
(Spring 2007) Volume 2, Number 1, May 18,
2007
(2)ユニバーサル・デザインの 7 原則
http://www.design.ncsu.edu/cud/
about_ud/udprinciples.htm
-71-