dynalloy an extension of alloy for writing and analyzing
play

DYNALLOY : AN EXTENSION OF ALLOY FOR WRITING AND ANALYZING - PowerPoint PPT Presentation

DYNALLOY : AN EXTENSION OF ALLOY FOR WRITING AND ANALYZING BEHAVIOURAL MODELS Germn Regis | Csar Cornejo | Simn Gutirrez Brida | Mariano Politano | Fernando Raverta | Pablo Ponzio | Nazareno Aguirre | Juan Pablo Galeotti | Marcelo Frias


  1. DYNALLOY : AN EXTENSION OF ALLOY FOR WRITING AND ANALYZING BEHAVIOURAL MODELS Germán Regis | César Cornejo | Simón Gutiérrez Brida | Mariano Politano | Fernando Raverta | Pablo Ponzio | Nazareno Aguirre | Juan Pablo Galeotti | Marcelo Frias Universidad Nacional de Río Cuarto Universidad de Buenos Aires Instituto Tecnológico Buenos Aires Workshop on the Future of Alloy

  2. EXAMPLE - RIVER CROSSING PUZZLE

  3. EXAMPLE - RIVER CROSSING PUZZLE near far Ch Fa Fox Gr near far Ch Fa Fox Gr

  4. RIVER CROSS - ALLOY SPECIFICATION abstract sig Object { eats: set Object} Fa Ch one sig Farmer, Fox, Chicken, Grain extends Object { } Fox Gr fact { eats = Fox->Chicken + Chicken->Grain } sig State { near, far: set Object } Fa Ch Fox Gr

  5. RIVER CROSS - DYNAMIC BEHAVIOR Fa Ch Fox Gr State Change Fa Ch Fox Gr … Ch Fa Gr Fox Fa Ch Fox Gr

  6. RIVER CROSS - DYNAMIC BEHAVIOR Fa Ch 1 2 Fox Gr 3 Ordering State Change Fa Ch 4 Fox Gr 5 … 6 7 Ch Fa Gr Fox 8 Fa Ch Fox Gr

  7. RIVER CROSS - ALLOY SPECIFICATION open util/ordering[State] Fa Ch sig State { near, far: set Object } Gr Fox fact { first.near = Object && no first.far}

  8. RIVER CROSS - ALLOY SPECIFICATION open util/ordering[State] Fa Ch sig State { near, far: set Object } Gr Fox fact { first.near = Object && no first.far} pred crossRiver[from, from', to, to': set Object] { one x: from | { from' = from - x - Farmer - from’.eats && to' = to + x + Farmer } }

  9. RIVER CROSS - ALLOY SPECIFICATION open util/ordering[State] Fa Ch sig State { near, far: set Object } Gr Fox fact { first.near = Object && no first.far} pred crossRiver[from, from', to, to': set Object] { one x: from | { … from' = from - x - Farmer - from’.eats && to' = to + x + Farmer } … } … fact { all s: State, s': s.next | { Farmer in s.near => crossRiver[s.near, s'.near, s.far, s'.far] 
 else crossRiver[s.far, s'.far, s.near, s'.near] } }

  10. RIVER CROSS - ALLOY SPECIFICATION open util/ordering[State] Fa Ch sig State { near, far: set Object } Gr Fox fact { first.near = Object && no first.far} pred crossRiver[from, from', to, to': set Object] { one x: from | { … from' = from - x - Farmer - from’.eats && to' = to + x + Farmer } … } … fact { all s: State, s': s.next | { Farmer in s.near => crossRiver[s.near, s'.near, s.far, s'.far] 
 else crossRiver[s.far, s'.far, s.near, s'.near] } SATisfying valuations of the } predicate are solutions to run { last.far = Object } for 8 States the puzzle

  11. RIVER CROSS - ALLOY SPECIFICATION open util/ordering[State] Fa Ch sig State { near, far: set Object } Gr Fox fact { first.near = Object && no first.far} pred crossRiver[from, from', to, to': set Object] { one x: from | { … from' = from - x - Farmer - from’.eats && to' = to + x + Farmer } … } … fact { all s: State, s': s.next | { Farmer in s.near => crossRiver[s.near, s'.near, s.far, s'.far] 
 else crossRiver[s.far, s'.far, s.near, s'.near] } SATisfying valuations of the } predicate are solutions to run { last.far = Object } for 8 States the puzzle

  12. DYNALLOY = ALLOY + DYNAMIC LOGIC • Execution traces are indirectly defined through: • Atomic Actions (State Change) • Programs (imperative style & nondeterminism) 
 Assumptions | Test ? | Choice + | 
 Sequential Composition ; | Iteration *

  13. RIVER CROSS - DYNALLOY SPECIFICATION open util/ordering[State] sig State { near, far: set Object } fact { first.near = Object && no first.far} pred crossRiver[from, from’, to , to’ : set Object] { one x: from | { from' = from - x - Farmer - from’.eats && to' = to + x + Farmer } } fact { all s: State, s': s.next | { Farmer in s.near => crossRiver[s.near, s'.near, s.far, s'.far] 
 else crossRiver[s.far, s'.far, s.near, s'.near] } } run { last.far = Object } for 8 States

  14. RIVER CROSS - DYNALLOY SPECIFICATION sig State { near, far: set Object } fact { first.near = Object && no first.far} pred crossRiver[from, from’, to , to’ : set Object] { one x: from | { from' = from - x - Farmer - from’.eats && to' = to + x + Farmer } } fact { all s: State, s': s.next | { Farmer in s.near => crossRiver[s.near, s'.near, s.far, s'.far] 
 else crossRiver[s.far, s'.far, s.near, s'.near] } } run { last.far = Object } for 8 States

  15. RIVER CROSS - DYNALLOY SPECIFICATION sig State { near, far: set Object } pred crossRiver[from, from’, to , to’ : set Object] { one x: from | { from' = from - x - Farmer - from’.eats && to' = to + x + Farmer } } fact { all s: State, s': s.next | { Farmer in s.near => crossRiver[s.near, s'.near, s.far, s'.far] 
 else crossRiver[s.far, s'.far, s.near, s'.near] } } run { last.far = Object } for 8 States

  16. RIVER CROSS - DYNALLOY SPECIFICATION sig State { near, far: set Object } action crossRiver[from, to : set Object] pre { Farmer in from } { one x: from | { post from' = from - x - Farmer - from’.eats && to' = to + x + Farmer } } fact { all s: State, s': s.next | { Farmer in s.near => crossRiver[s.near, s'.near, s.far, s'.far] 
 else crossRiver[s.far, s'.far, s.near, s'.near] } } run { last.far = Object } for 8 States

  17. RIVER CROSS - DYNALLOY SPECIFICATION sig State { near, far: set Object } action crossRiver[from, to : set Object] pre { Farmer in from } { one x: from | { post from' = from - x - Farmer - from’.eats && to' = to + x + Farmer } } program solvePuzzle[near, far: set Object] { assume (Object in near && no far) ; (crossRiver[near, far] + crossRiver[far, near]) * ; [Object in far] ? } run { last.far = Object } for 8 States

  18. RIVER CROSS - DYNALLOY SPECIFICATION sig State { near, far: set Object } action crossRiver[from, to : set Object] pre { Farmer in from } { one x: from | { post from' = from - x - Farmer - from’.eats && to' = to + x + Farmer } } program solvePuzzle[near, far: set Object] { assume (Object in near && no far) ; (crossRiver[near, far] + crossRiver[far, near]) * ; [Object in far] ? } run solvePuzzle for 4 lurs 8

  19. RIVER CROSS - DYNALLOY PARTIAL CORRECTNESS ASSERTIONS { precondition } PROGRAM { postcondition }

  20. RIVER CROSS - DYNALLOY PARTIAL CORRECTNESS ASSERTIONS … assert noResurrection[near, far: set Object, x: Object] { pre { no (near & far) } prog { (crossRiver[near, far] + crossRiver[far, near])*; [x !in (near+far)] ? ; (crossRiver[near, far] + crossRiver[far, near])*; } … post { x !in (near’+far') } } check noResurrection for 4 lurs 8

  21. DYNALLOY FEATURES

  22. DYNALLOY FEATURES • Completely integrated into Alloy Analyzer • Fully compatible with standard Alloy, produces detailed compile-time error reports • Supports abstract syntax of programs, as well as imperative programming constructs (assignment, while loops, subprogram calls, …) • Trace visualization (in the style of a program debugger)

  23. DYNALLOY FEATURES • Completely integrated into Alloy Analyzer • Fully compatible with standard Alloy, produces detailed compile-time error reports • Supports abstract syntax of programs, as well as imperative programming constructs (assignment, while loops, subprogram calls, …) • Trace visualization (in the style of a program debugger) • Next release: • Efficient characterization of traces using skolemization • Efficient real and integer arithmetical representation • Control flow graph visualization for analyzing execution traces

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend