ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

EventBの書き方について


前に、ツールの話は書いたので、今回は、書き方について。

Event-Bは、Bとちがって、2つの部分に分かれる。
MachineとContext(別々のファイルになる)

Contextは、おもにSet(集合)の内容を記述する。記述項目は、こんなかんじ

CONTEXT
EXTENDS
SETS
CONSTANTS
AXIOMS

一方、MACHINEは、Contextを取り込んで、実際にいろんな記述をしていく。項目内容はこんな感じ
MACHINE
(REFINES)
SEES
VARIABLES
INVARIENTS
THEOREMS
EVENT
(VARIANT)
END

このうち、REFINESとVARIANTはリファインメント(あるEvent-B記述をさらに詳細化したもの)で使用します。
SEESで、参照するCONTEXTを指定する。

ってことで、以下、CONTEXTから。




■CONTEXTの内容について

CONTEXTは、以下のことを書く。
CONTEXT
EXTENDS
SETS
CONSTANTS
AXIOMS

 つまり、集合と定数という、型とか、固定的な値(変数のように、インスタンスでないもの。クラス定義するようなもの)を宣言する。
 以下、それぞれについてみていく。

●CONTEXT
 CONTEXT コンテキスト名
 コンテキストの名前を指定する
 
●SETS
 SETS
   集合名1;
    :
   集合名N

 集合を宣言していく。

●CONSTANTS
 CONSTANTS
   定数名1;
    :
   定数名N
 定数を「宣言」していく。

●AXIOMS
AXIOMS
ラベル1: 定数1:型1

 ここで、定数の型を指定する。
 型は、NAT1など、あらかじめあるものか、上記SETSで指定したもの

(例)
CONTEXT SampleContext1
SETS
MYSET
CONSTATNTS
val1
AXIOMS
  axm1 : val1 : MYSET
END




■MACHINEの内容について

 実際の記述は、MACHINEでやる。Bとちがい、リファインメントしたものでもなんでも
MACHINE。MACHINEには、以下の内容を書く。

MACHINE
(REFINES)
SEES
VARIABLES
INVARIENTS
THEOREMS
EVENT
(VARIANT)
END

以下、こんなかんじ。
●MACHINE
 MACHINE マシン名

 マシン名を適当に決めて書く

●SEES
 SEES
  コンテキスト名

 利用するコンテキストを指定する

●VARIABLES
 VARIABLES
  変数名

 利用する変数を宣言する

●INVARIANTS
 INVARIANTS
  ラベル名:変数:不変条件
 変数の不変条件をかく。つまり、変数が満たすべき制約を書く。
 ということは、変数の型とか、範囲とか、変数間の関係とか。
 条件をいくつか書くと、条件間のANDとなる
 (ORは条件内にORと書く)

●EVENTS
 イベントをかく。
 はじめに、INITIALIZATIONがあるので、そこに初期化条件を書く。
 BEGINのあとに、
   ラベル名:式
 の形。代入は:=

 INITIALIZATIONを書いたら、つぎから、書きたいイベント(処理)をかく。
 処理自体は、BEGINの中に、同じように書く。

●VARIANT
 変わっていく変数(負のすうにはならない)で、どんどん減少していくもの
 停止性を証明するためには、必要




こんなかんじかな。一部しか書いてないけど・・・
まちがってたら、ごめん。