前回の勉強会では Promela の文法要素と基本的な SPIN の使い方を眺めたので、今回は LTL 式を用いた性質検査およびハンズオンを行う。
SPIN の LTL は命題論理の拡張となっており、各論理式の真偽が状態に依存する。
前回の勉強会では Promela の文法要素と基本的な SPIN の使い方を眺めたので、今回は LTL 式を用いた性質検査およびハンズオンを行う。
SPIN の LTL は命題論理の拡張となっており、各論理式の真偽が状態に依存する。
| /* | |
| * Leader Election by Chang-Roberts Algorithm | |
| */ | |
| byte leader = 0; /* number of leaders */ | |
| proctype Node(chan ch_in, ch_out) { | |
| byte tok; | |
| IDENTIFICATION DIVISION. | |
| PROGRAM-ID. RNPCALC. | |
| DATA DIVISION. | |
| WORKING-STORAGE SECTION. | |
| 01 STACK-POS PIC 9(2) VALUE 1. | |
| 01 STACK. | |
| 03 STACK-DATA PIC 9(4) OCCURS 10 VALUE 0. | |
| 01 EXPR PIC X(20). | |
| 01 EXPR-POS PIC 9(2). |
| IDENTIFICATION DIVISION. | |
| PROGRAM-ID. FIBONACCI. | |
| DATA DIVISION. | |
| WORKING-STORAGE SECTION. | |
| 01 ARGUMENT PIC 9(2). | |
| 01 RETURN-VALUE PIC 9(25). | |
| 01 RESULT PIC Z(25). | |
| 01 DP-TABLE. | |
| 03 VALS PIC 9(25) OCCURS 99. |
| IDENTIFICATION DIVISION. | |
| PROGRAM-ID. DEATH-MARCH-05. | |
| DATA DIVISION. | |
| WORKING-STORAGE SECTION. | |
| 77 FB-STR PIC X(153). | |
| 77 CNT PIC 9(2) VALUE 1. | |
| 77 QUOT PIC 9(2). | |
| 77 REM-3 PIC 9(1). | |
| 77 REM-5 PIC 9(1). |
| /* | |
| * Resource Sharing Problem (Example for Deadlock) | |
| */ | |
| mtype = { LOCK, UNLOCK }; | |
| proctype Client(chan to_res1, to_res2) { | |
| if | |
| :: to_res1 ! LOCK(_pid); | |
| to_res2 ! LOCK(_pid); |
| Parameter A : Type. | |
| Parameter beq_A : A -> A -> bool. | |
| Section Uniq. | |
| Require Import Arith List. | |
| Hypothesis beq_A_true : forall x y : A, | |
| beq_A x y = true -> x = y. | |
| Hypothesis beq_A_false : forall x y : A, |
| // ************************************************** | |
| // AWS セキュリティグループのモデル | |
| // ************************************************** | |
| // 通信プロトコル | |
| enum Protocol { TCP, UDP, ICMP } | |
| // 通信ポート | |
| sig Port {} |
| // ************************************ | |
| // 命題論理のシークエント計算のモデル | |
| // ************************************ | |
| // 論理式 | |
| abstract sig Formula {} | |
| // 原子命題 | |
| sig Atom extends Formula {} |
| open util/ordering[Time] | |
| sig Time {} | |
| abstract sig Event { | |
| pre, post : Time, | |
| } { | |
| post = pre.next | |
| } |