Skip to content

Instantly share code, notes, and snippets.

@shibukawa
Created March 25, 2014 10:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shibukawa/9758547 to your computer and use it in GitHub Desktop.
Save shibukawa/9758547 to your computer and use it in GitHub Desktop.
Alloy time flow model
// まず時間を表すシグネチャを作る。
sig Time {}
// シーケンシャルなものとして設定する
open util/ordering [Time]
// 時間によって変化するものは、
currentKey : keys one -> Time
// などのように、末尾にTimeをつける。各時間にかならず1つ存在するなら "one"、最大で1つ(たかだかひとつ)なら、
lastKey : (Room -> lone Key) -> Time
// とする。時間によって変化する述語には、かならず変化前、変化後の時間を最初のパラメータとして入れる。
pred entry (t, t' : Time, g : Guest, k : Key) {
// 定義
}
// 初期値を設定する述語
pred init (t : Time) {
no Guest.keys.t
}
// 時間変化はfactで記述する。ここがすべての時間を司るエントリーコードとなる。
fact Traces {
first.init
all t : Time - last | let t' = t.next |
some g : Guest, k : Key |
論理
}
// 時間が変化しても変化しないルール(Assert)
assert NoBadEntry {
all t : Time, (追加の要素) |
...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment