DeutcshSchorrWaite root DeutcshSchorrWaite root void dswnode root node
- Slides: 97
Deutcsh-Schorr-Waiteマーキングアルゴリズム root
Deutcsh-Schorr-Waiteマーキングアルゴリズム root void dsw(node root) { node t = root; node p = NULL; while (p != NULL || (t != NULL { if (!(t == NULL || t->m)) { node q = p; p = t; t = t->l; p->l = q; p->m = 1; p->c = }else if (! p->c) { node q = t; t = p->r; p->r = p->l; p->l = q; p->c = 1; }else { node q = t; t = p; p = p->r; t->r = q; } } } && ! t->m)) /* push */ 0; /* swing */ /* pop */
Running Example() { LOCK = 0 do { lock(); old = new; q = q->next; if (q != NULL) { q->data = new; unlock(); new++; } } while (new != old); unlock(); return; } void lock() { if (LOCK == 1) { ERROR: } LOCK = 1; } void unlock() { if (LOCK == 0) { ERROR: } LOCK = 0; } ERRORラベルに到達しない
述語による抽象化 • 有限個の述語 P 1, . . . , Pn を決める. • 抽象状態: – – (例): – P 1: LOCK = 1 – P 2: old = new PC (プログラム実行位置) P 1の真偽. . . . PC=3 LOCK=1 Pn の真偽 . . . old=new old!=new PC=3 LOCK=0 old=new PC=4 LOCK=1 old!=new PC=4 LOCK=0 old=new . . PC=3 LOCK=0 old!=new PC=4 LOCK=0 old!=new
遷移関係の計算例 (1) LOCK==1 old==new = new + 1 LOCK==1 old==new WP(LOCK != 1, OP) = LOCK != 1 LOCK==1∧old==new => LOCK != 1 : 恒真でない WP(old != new, OP) = old != new + 1 LOCK==1∧old==new => old != new+1 : 恒真
遷移関係の計算例 (2) LOCK==1 old==new = new + 1 LOCK==1 old!=new WP(LOCK != 1, OP) = LOCK != 1 LOCK==1∧old==new => LOCK != 1 : 恒真でない WP(old == new, OP) = old == new + 1 LOCK==1∧old==new => old == new+1 : 恒真でない
偽反例の判定 (1) C 1=WP(op 1, C 2)≠false C 2 = WP(op 2, C 3) C 3 = WP(op 3, C 4) C 4=true op 1 S 1 op 2 S 3 真の反例 C 1=WP(op 1, C 2)=false C 2 = WP(op 2, C 3) C 3 = WP(op 3, C 4) C 4=true op 3 S 4 op 1 S 1 op 2 S 3 偽反例 op 3 S 4
ツール 述語抽象化の手法を(も)使っているソースコード検証 ツール • SLAM (Microsoft) • BLAST (UC Berkeley) • Bandera (Kansas State Univ) • Java Path. Finder (NASA) • MAGIC (CMU) • CBMC (CMU)
TVLA • • • Three-Valued Logic Analysis engine Tel-Aviv University M. Sagiv, T. Reps, R. Wilhelm, . . . http: //www. cs. tau. ac. il/~tvla/ ヒープ上に構築されたデータに関する性質の検証を, 抽象化の手法で行うツール.
Running Example /* list. h */ typedef struct node { struct node *n; int data; } *List; /* reverse. c */ #include "list. h" List reverse(List x) { List y, t; y = NULL; while (x != NULL) { t = y; y = x; x = x->n; y->n = t } return y; }
Running Example t=y y=x x=x->n y->n=t x n n n n x xy y y x x y = NULL; while (x != NULL) { t = y; y = x; x = x->n; y->n = t }
Running Example n t=y y=x x=x->n y->n=t x n n t=y n n xy y n x yt x t y->n=t n n n n y x n y y=x x=x->n n x n y t x n n t n y x
Running Example n n n x y y = NULL; while (x != NULL) { t = y; y = x; x = x->n; y->n = t } x n t n y n x n t y
2値構造の例 instrumentation 述語 core述語 sm x y isn rx ry n u 1 u 2 u 3 u 4 u 1 0 0 0 1 u 1 0 0 u 2 0 0 0 1 u 2 1 0 0 0 u 3 0 0 1 u 3 0 1 0 0 u 4 0 1 0 u 4 0 0 2値構造では,常に smの値は 0 isn u 1 ry n n u 2 ry n y x u 3 u 4 ry rx 2値構造では, instrumentation述語の値は core述語の値から決まる.
3値構造の例 instrumentation 述語 core述語 sm x y isn rx ry n v 2 v 3 v 4 v 2 1/2 0 0 1/2 0 1 v 2 1/2 0 0 v 3 0 0 1 v 3 1/2 0 0 v 4 0 1/2 0 smは 0か1/2 点線で 1/2を表現 n サマリノード(sm=1/2) は 2重丸で表現 isn v 2 ry y n v 3 ry x n v 4 rx 3値構造では, instrumentation述語の値は core述語の値から一意に決 まるわけではない.
pre: 抽象遷移の計算準備 (3) pre( ry, n, y = x->n )(v) = rx, n(v) ∧( cn(v) V ¬x(v) ) n n x , rxn n n n rxn cn, rxn y = x->n n x , rxn x, cn, rxn n y, rxn, ryn n n x, cn, rxn, ryn n y, cn, rxn, ryn
机上実験 (精度は十分? ) n n x, rxn n n x, y rxn, ryn y = NULL; while (x != NULL) { t = y; y = x; x = x->n; y->n = t }
机上実験 (精度は十分? ) n n x, y rxn, ryn y = NULL; while (x != NULL) { t = y; y = x; x = x->n; y->n = t } rxn, ryn n n y, ryn x rxn, ryn
机上実験 (精度は十分? ) n n y, ryn x rxn, ryn n x y, ryn rxn y = NULL; while (x != NULL) { t = y; y = x; x = x->n; y->n = t }
机上実験 (精度は十分? ) n x y, ryn rxn n x, y t, rtn rxn , ryn y = NULL; while (x != NULL) { t = y; y = x; x = x->n; y->n = t }
机上実験 (精度は十分? ) n t, rtn n x, y t, rtn rxn , ryn n x, y, rxn t, rtn ryn y, ryn n ryn y = NULL; while (x != NULL) { t = y; y = x; x = x->n; y->n = t } ryn
focus (2) n focus前 u 1 n F(・) = ∃u 1. y(u 1)∧n(u 1, ・) u F x, y r , r xn yn rxn, ryn n(u 1, u) = 1/2 focus後 n u 1 n u 3 u 1 x, y r , r ¬F xn yn rxn, ryn n u 2 u 1 x, y r , r F xn yn rxn, ryn n(u 1, u 3) = 0, n n u 2 n u 3 x, y r , r F r , r ¬F xn yn rxn, ryn n(u 1, u 2) = 1
focus (2) n u 1 u 3 x, y r , r ¬F xn yn rxn, ryn n u 1 n u 2 x, y r , r F xn yn rxn, ryn n n u 1 n n u 2 n u 3 x, y r , r F r , r ¬F xn yn rxn, ryn
更新 n u 1 u 3 x, y r , r ¬F xn yn rxn, ryn n u 1 n u 2 x, y r , r F xn yn rxn, ryn n n u 1 n n u 2 n u 3 x, y r , r F r , r ¬F xn yn rxn, ryn y = y->n n u 1 u x, rxn r , r xn yn n u 1 n u 2 x, rxn r , r y xn yn n n u 1 n n u 2 n u 3 x, rxn r , r y r , r xn yn
coerce (2) coerce前 n u 1 u x, rxn r , r xn yn n u 1 n u 2 x, rxn r , r y xn yn n n u 1 n n u 2 n u 3 x, rxn r , r y r , r xn yn coerce後 n u 1 n u 2 x, rxn r , r y xn yn u 1 n u 2 n u 3 x, rxn r , r y r , r xn yn
より精密な抽象化(3) n n x, y r , r xn yn rxn, ryn focus + 更新 + coerce 更新 n n x, rxn r , r xn yn n y n x, rxn r , r y xn yn n n x, rxn r , r y r , r xn yn
参考文献 E. M. Clarke, O. Grumberg, and D. Peled: Model Checking. MIT Press, 1999 モデル検査の (よく参照される) 教科書.抽象化についても記述されている. Thomas A. Henzinger, Ranjit Jhala, Rupak Majumdar and Gregoire Sutre: Lazy Abstraction. In ACM SIGPLAN-SIGACT Conference on Principles of Programming Languages, pages 58 -70, 2002. BLASTの動作原理である遅延抽象化と述語発見法について. Susanne Graf, Hassen Saidi: Construction of abstract state graphs with PVS. Conference on Computer Aided Verification CAV'97 (LNCS 1254) pp. 72 -83, 1997 述語抽象化について.(下の論文の方がわかりやすいか? ) Thomas Ball, Rupak Majumdar, Todd Millstein, Sriram K. Rajamani: Automatic Predicate Abstraction of C Programs. Conference on Programming Language Design and Implementation 2001, SIGPLAN Notices 36(5), pp. 203 -213 BLASTと同様の(こちらの方が古い)考え方で設計されているツールSLAMにおける述語抽象化について. Edmund M. Clarke, Orna Grumberg, Somesh Jha, Yuan Lu and Helmut Veith: Counterexample-Guided Abstraction Refinement. Computer Aided Verification, 12 th International Conference (CAV 2000) 反例による抽象構造の詳細化. Sagiv M. , Reps T, and Wilhelm R. : Parametric shape analysis via 3 -valued logic TOPLAS, 24: 3 (2002) TVLAの動作原理である3値論理によるシェープ解析について. Alexey Loginov, Thomas Reps and Mooly Sagiv: Automated Verification of the Deutsch-Schorr-Waite Tree-Traversal Algorithm. The 13 th International Static Analysis Symposium (SAS 2006) TVLAによるDeutsch-Schorr-Waiteアルゴリズムの検証.オリジナルのアルゴリズムとは若干異なる.
- Nodenext
- Reference node and non reference node
- Hamiltonian operator
- Reference node and non reference node
- Struct node int data struct node* next
- Constructive interference
- Void main(void)
- Void main(void)
- Void loop
- Root node
- Root node
- Internal nodes
- Document
- Node 2 vec
- Struct node *
- Hp openview network node manager download
- Arduino node red
- Single node architecture
- Node modules
- Quantum node
- After a node has prepared an lsp it must be disseminated to
- Where is the av node located?
- Osler node
- Frans kremers
- Typedef struct tree
- Is the thyroid gland part of the lymphatic system
- Activity on node
- Aon network diagram examples
- Non touching loops
- Testis artery
- Analisis node
- Localisation sensor data
- Performance metrics in computer networks
- Makalah teori graf matematika diskrit
- Unstable improper node
- Linked list
- Kep ile evrak gönderme
- Cluster head node
- Azure service fabric performance
- Networkx edge weight
- Lymph nodes in forearm
- Typedef node
- Node xl
- Sln mamma
- Circular header list
- Sentinel lymph node biopsy indications
- Lymph node labeled diagram
- Node temp = tail.getprev()
- Nodal plane and radial node
- Typedef struct node int value
- Nodes and internodes
- Exposed node problem
- Router node
- V node
- Intraembryonic somatic mesoderm
- Growing network
- Node_latest_armhf.deb
- List the components of node level simulator
- Xxcppp
- Tactile fremitus test
- Typedef struct tree int info
- Node branch and loop definition
- Activity on node
- Tracheobronchial
- Typedef struct tree int info
- Teradata node architecture
- Node nlp tutorial
- Lymph node structure
- Run express server in electron
- Contoh soal analisis node
- Performance metrics in computer networks
- Kumpulan node yang saling terhubung disebut
- Mastering node js
- Lymphatic drainage of thorax
- Node coverage example
- Node bridge
- Node red serial
- Vcn3010
- Goodsalls rule
- Bean size lymph node
- The list adt
- Typedef struct node
- Lymph node dissection
- Monocot node
- The sa node is located in the _________.
- Function of a lymph node
- Struct node int i float j
- Chaincode lifecycle
- Uml node
- Node of ranvier channels
- Dorsal arch veins
- Router node
- Typedef struct node
- Node-forge rsa example
- Ece 205
- Lymphatic capillaries are thin walled closed ended tubes
- Node js network monitor
- What is node js server side javascript