Specification of Decision Diagram Operations - Alban Linard

Data Decision Diagrams for Petri Net analysis. In ICATPN '02: 23rd International Conference on Applications and Theory of Petri Nets, pages 101–120, 2002.
719KB taille 1 téléchargements 285 vues
Specification of Decision Diagram Operations Alexandre Hamez1 Steve Hostettler2 Alban Linard2 Alexis Maréchal2 Emmanuel Paviot-Adet3 Matteo Risoldi2 1 CNRS

– LAAS [email protected] of Geneva, CUI [email protected] 3 Université Pierre & Marie Curie, LIP6 [email protected] 2 University

22 june 2010

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams?

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? t p

r

u q

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? t

r

u

p

q

 State space ⇔ Function

p

,

p



 ×

q

,

q



 ×

r , r

 →B

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? t

r

u

p

q

 State space ⇔ Function

p

,

p



 ×

q

,

q



 ×

r , r (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



 →B p q

, ,

p

)

q

)

r , r

)

B

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

DAG with maximal sharing q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

DAG with maximal sharing q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

DAG with maximal sharing q

r

1

q

r

0

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

DAG with maximal sharing q

r

q

r

1

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

DAG with maximal sharing q

r

q

r

1

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

DAG with maximal sharing q

r

1

p q 1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

DAG with maximal sharing q

r

1

p q 1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

DAG with maximal sharing q

r

1

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

DAG with maximal sharing q

r

1

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

DAG with maximal sharing q

r

1

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

DAG with maximal sharing q

r

1

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Decision Diagrams? (

p q

×

(

r

×

(

7→

0

0

0

0

0

0

1

1



p q

, ,

p

)

q

)

r , r

)

B

DAG with maximal sharing q

1

p

1/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

BDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

ADD BDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

ADD BDD ZDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

ADD BDD

MDD

ZDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

ADD BDD

MDD eMDD

ZDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

EVBDD ADD BDD

MDD eMDD

ZDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

EVBDD ADD BDD

EVMDD MDD eMDD

ZDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

EVBDD ADD BDD ZDD

EVMDD MDD eMDD DDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

EVBDD ADD BDD ZDD

EVMDD MDD eMDD DDD SDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

EVBDD ADD BDD

EVMDD MDD eMDD

ZDD

DDD ΣDD

SDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

EVBDD ADD BDD

EVMDD IDD

MDD eMDD

ZDD

DDD ΣDD

SDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

EVBDD

EVMDD

ADD BDD

IDD

ZDD

CDD

MDD eMDD DDD ΣDD

SDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

WDD EVBDD

EVMDD

ADD BDD

IDD

ZDD

CDD

MDD eMDD DDD ΣDD

SDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

WDD TDD EVBDD

EVMDD

ADD BDD

IDD

ZDD

CDD

MDD eMDD DDD ΣDD

SDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

WDD TDD EVBDD

EVMDD

DDD ADD BDD

IDD

ZDD

CDD

MDD eMDD DDD ΣDD

SDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

WDD TDD EVBDD

EVMDD

DDD ADD BDD

IDD

ZDD

CDD

...

MDD eMDD DDD ΣDD

SDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

WDD TDD EVBDD

EVMDD

DDD ADD BDD

IDD

ZDD

CDD

...

MDD eMDD DDD ΣDD

SDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

g

n alizi r e n e WDD

G orkEVMDD w e Fram grams a s d DDD Dia IDD12MDD :00 eMDD war ADDsioBDD n o T , : i e c DD De 4 junCDD 2 poly , ZDD DDD D ACS TDD EVBDD

...

ΣDD

SDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

WDD TDD EVBDD

EVMDD

DDD ADD BDD

IDD

ZDD

CDD

...

MDD eMDD DDD ΣDD

SDD

2/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Goal

Compute the state space size

3/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Goal

Compute the state space size Valid in both BDDs and DDDs

3/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Goal

Compute the state space size Valid in both BDDs and DDDs Using a small number of primitives

3/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

BDD Operations BDD x = initialState(); BDD y; while (x != y) { y = x; x = x.or(next(x)); } return x.count(1);

DDD Operations DDD x = initialState(); Hom h = fixpoint(identity + next()); return h(x).count(1);

4/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DD Creation BDD BDD initialState() { return p.and(q).and(r ); }

DDD DDD initialState() { 1

1

1

return cons(p − →, cons(q − →, cons(r − →, terminal(1)))) }

5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DD Creation BDD BDD initialState() { return p.and(q).and(r ); }

1

p

1

q

r

1

1

DDD DDD initialState() { 1

1

1

return cons(p − →, cons(q − →, cons(r − →, terminal(1)))) }

p

1

q

1

r

1

1 5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DD Creation BDD BDD initialState() { return p .and(q).and(r ); }

1

p

0, 1

q

r

0, 1

1

DDD DDD initialState() { 1

1

1

return cons(p − →, cons(q − →, cons(r − →, terminal(1)))) }

p

1

q

1

r

1

1 5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DD Creation BDD BDD initialState() { return p.and( q ).and(r ); }

p

0, 1

1

q

r

0, 1

1

DDD DDD initialState() { 1

1

1

return cons(p − →, cons(q − →, cons(r − →, terminal(1)))) }

p

1

q

1

r

1

1 5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DD Creation BDD BDD initialState() { return p.and(q).and( r ); }

p

0, 1

0, 1

q

r

1

1

DDD DDD initialState() { 1

1

1

return cons(p − →, cons(q − →, cons(r − →, terminal(1)))) }

p

1

q

1

r

1

1 5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DD Creation BDD BDD initialState() { return p.and(q).and(r ); }

1

p

1

q

r

1

1

DDD DDD initialState() { 1

1

1

return cons(p − →, cons(q − →, cons(r − →, terminal(1)))) }

p

1

q

1

r

1

1 5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DD Creation BDD BDD initialState() { return p.and(q).and(r ); }

p

1

1

q

r

1

1

DDD DDD initialState() { 1

1

1

return cons(p − →, cons(q − →, cons(r − →, terminal(1)))) }

p

1

q

1

r

1

1 5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DD Creation BDD BDD initialState() { return p.and(q).and(r ); }

1

p

1

q

r

1

1

DDD DDD initialState() { 1

1

1

return cons(p − →, cons(q − →, cons(r − →, terminal(1)))) }

q

1

r

1

1 5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DD Creation BDD BDD initialState() { return p.and(q).and(r ); }

1

p

1

q

r

1

1

DDD DDD initialState() { 1

1

1

return cons(p − →, cons(q − →, cons(r − →, terminal(1)))) }

r

1

1 5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DD Creation BDD BDD initialState() { return p.and(q).and(r ); }

1

p

1

q

r

1

1

DDD DDD initialState() { 1

1

1

return cons(p − →, cons(q − →, cons(r − →, terminal(1)))) }

1 5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DD Creation BDD BDD initialState() { return p.and(q).and(r ); }

1

p

1

q

r

1

1

DDD DDD initialState() { 1

1

1

return cons(p − →, cons(q − →, cons(r − →, terminal(1)))) }

Why? DDD creation enables variable repetition 5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Example Representation of {[1], [1;1], [1;0], [0;0], [0;1]}

5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Example Representation of {[1], [1;1], [1;0], [0;0], [0;1]} Nil 1 l

Cons

Cons

x

1 {0, 1}

x

Nil l

0 Nil

l

l

Cons

x

{0, 1}

Cons 0

Nil

5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Example Representation of {[1], [1;1], [1;0], [0;0], [0;1]} [1] = Cons(1, Nil)

Nil 1 l

Cons

Cons

x

1 {0, 1}

x

Nil l

0 Nil

l

l

Cons

x

{0, 1}

Cons 0

Nil

5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Example Representation of {[1], [1;1], [1;0], [0;0], [0;1]} [1;0] = Cons(1, Cons(0, Nil))

Nil 1 l

Cons

x Cons

1

{0, 1}

x

Nil l

0 Nil

l

l

Cons

x

{0, 1}

Cons

0

Nil

5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Example Representation of {[1], [1;1], [1;0], [0;0], [0;1]} Nil 1 l

Cons

Cons

x

1 {0, 1}

x

Nil l

0 Nil

l

l

Cons

x

{0, 1}

Cons 0

Nil

5/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

BDD Operations BDD x = p.and(q).and(r ); BDD y; while (x != y) { y = x; x = x.or(next(x)); } return x.count(1);

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom h = fixpoint(identity + next()); return h(x).count(1);

6/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Transitions BDD Operations BDD x = p.and(q).and(r ); BDD y; while (x != y) { y = x; x = x.or(x.and(transitions).exist(p, q, r ).replace(p 0 → p, q 0 → q, r 0 → r )); } return x.count(1);

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom h = fixpoint(identity + next()); return h(x).count(1); 7/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

BDD x = p ∧ q ∧ r ; BDD y; BDD transitions = (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ); while (x != y) { y = x; x = x.or(x.and(transitions).exist(p, q, r ).replace(p 0 → p, q 0 → q, r 0 → r )); } return x.count(1);

p

1

q

1

r

1

1

8/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

BDD x = p ∧ q ∧ r ; BDD y; BDD transitions = (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ); while (x != y) { y = x; x = x.or(x.and(transitions).exist(p, q, r ).replace(p 0 → p, q 0 → q, r 0 → r )); } return x.count(1);

p

1

p0

0, 1

q

1

q0

0, 1

r

1

r0

0, 1

1

8/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

BDD x = p ∧ q ∧ r ; BDD y; BDD transitions = (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ); while (x != y) { y = x; x = x.or(x.and(transitions).exist(p, q, r ).replace(p 0 → p, q 0 → q, r 0 → r )); } return x.count(1);

p

1

p0 p0

0, 1 1

q q

1

q0

1

q0

0

1 p

q

0

q

0

0, 1 1 0

r r r

1 1 1

r0 r0

0, 1

0, 1 1

r

0

r

0

1

1

0

0 p

0

q 0

1

1

r

1

8/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

BDD x = p ∧ q ∧ r ; BDD y; BDD transitions = (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ); while (x != y) { y = x; x = x.or(x.and(transitions).exist(p, q, r ).replace(p 0 → p, q 0 → q, r 0 → r )); } return x.count(1);

p

1

p0 p0

0, 1 1

q q

1

q0

1

q0

0

1 p

q

0

q

0

0, 1 1 0

r r r

1 1 1

r0 r0

0, 1

0, 1 1

r

0

r

0

1

1

0

0 p

0

q 0

1

1

r

1

8/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

BDD x = p ∧ q ∧ r ; BDD y; BDD transitions = (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ); while (x != y) { y = x; x = x.or(x.and(transitions).exist(p, q, r ).replace(p 0 → p, q 0 → q, r 0 → r )); } return x.count(1);

p

1

p0 p0

0, 1 1

q q

1

q0

1

q0

0, 1 1

r r

1 1

1

r0 r0

0, 1

1

0, 1 1

p p

1

p0

1

q

1

q0

1

r

1

r0

0, 1

1 8/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

BDD x = p ∧ q ∧ r ; BDD y; BDD transitions = (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ); while (x != y) { y = x; x = x.or(x.and(transitions).exist(p, q, r ).replace(p 0 → p, q 0 → q, r 0 → r )); } return x.count(1);

p p

1

p0

1

p0

0, 1 1

q q

1

q0

1

q0

0, 1 1

r r

1 1

r0 r0

0, 1 0, 1

1 1

8/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

BDD x = p ∧ q ∧ r ; BDD y; BDD transitions = (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ); while (x != y) { y = x; x = x.or(x.and(transitions).exist(p, q, r ).replace(p 0 → p, q 0 → q, r 0 → r )); } return x.count(1);

p p p

0, 1

1

p0

1

p0

1

p0

1

0, 1

q q q

0, 1

1

q0

1

q0

1

q0

1

0, 1

r r r

1 1 0, 1

r0 r0 r0

0, 1 0, 1 0, 1

1 1 1

8/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

BDD x = p ∧ q ∧ r ; BDD y; BDD transitions = (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ) ∨ (p ∧ q ∧ r ∧ p 0 ∧ q 0 ∧ r 0 ); while (x != y) { y = x; x = x.or(x.and(transitions).exist(p, q, r ).replace(p 0 → p, q 0 → q, r 0 → r )); } return x.count(1);

p p p p

0, 1

1

p0

1

p0

1

p0

1

0, 1

1

q q q

0, 1

1

q0

1

q0

1

q0

1

0, 1

q

1

r r r r

1 1 0, 1

r0 r0 r0 0, 1

0, 1 0, 1 0, 1

1 1 1 1 8/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

1

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

1

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

1

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

1

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

1

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

1

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

1

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

1

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

0

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

0

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

0

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

0

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

0

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

DDD Operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

1

1

1

1

1

1

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

1

p 1

1

q 1

1

1

r 1

1

1 0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))))

p

1

q

1

r

0

1 9/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

1

1

1

0

match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1)))))));

Rewritten operations 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

1

+ (match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint(identity + transitions); return h(x).count(1); 10/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Fixpoint? 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

1

+ (match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))); Hom h = fixpoint (identity + transitions); return h(x).count(1);

11/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Recursion can replace fixpoint 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

(match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

+ (match(q − →, cons(q − →, match(r − →, 1

cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + identity) ◦ transitions ; return h(x).count(1);

12/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

How can we count paths? 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

(match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

+ (match(q − →, cons(q − →, match(r − →, 1

cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + identity) ◦ transitions; xp

xq

x

r Hom select = match(p −→, match(q − − →, match(r −→, identity))); return merge[+N ] ◦ select ◦ transitions;

13/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

How can we count paths? 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

(match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

+ (match(q − →, cons(q − →, match(r − →, 1

cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + identity) ◦ transitions; xp

xq

x

r Hom select = match(p −→, match(q − − →, match(r −→, identity))) ;

return merge[+N ] ◦ select ◦ transitions;

13/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

How can we count paths? 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

(match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

+ (match(q − →, cons(q − →, match(r − →, 1

cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + identity) ◦ transitions; xp

xq

x

r Hom select = match(p −→, match(q − − →, match(r −→, identity))); return merge[+N ] ◦ select ◦ transitions;

p

1

q

1

r

0, 1

1 13/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

How can we count paths? 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

(match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

+ (match(q − →, cons(q − →, match(r − →, 1

cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + identity) ◦ transitions; xp

xq

x

r Hom select = match(p −→, match(q − − →, match(r −→, identity))); return merge[+N ] ◦ select ◦ transitions;

p

1

q

1

r

0, 1

1 13/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

How can we count paths? 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

(match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

+ (match(q − →, cons(q − →, match(r − →, 1

cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + identity) ◦ transitions; xp

xq

x

r Hom select = match(p −→, match(q − − →, match(r −→, identity))); return merge[+N ] ◦ select ◦ transitions;

q

1

r

0, 1

1 13/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

How can we count paths? 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

(match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

+ (match(q − →, cons(q − →, match(r − →, 1

cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + identity) ◦ transitions; xp

xq

x

r Hom select = match(p −→, match(q − − →, match(r −→, identity))); return merge[+N ] ◦ select ◦ transitions;

q

1

r

0, 1

1 13/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

How can we count paths? 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

(match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

+ (match(q − →, cons(q − →, match(r − →, 1

cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + identity) ◦ transitions; xp

xq

x

r Hom select = match(p −→, match(q − − →, match(r −→, identity))); return merge[+N ] ◦ select ◦ transitions;

r

0, 1

1 13/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

How can we count paths? 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

(match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

+ (match(q − →, cons(q − →, match(r − →, 1

cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + identity) ◦ transitions; xp

xq

x

r Hom select = match(p −→, match(q − − →, match(r −→, identity))); return merge[+N ] ◦ select ◦ transitions;

r

0, 1 1 13/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

How can we count paths? 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

(match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

+ (match(q − →, cons(q − →, match(r − →, 1

cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + identity) ◦ transitions; xp

xq

x

r Hom select = match(p −→, match(q − − →, match(r −→, identity))); return merge[+N ] ◦ select ◦ transitions;

r

0 1

1 1 13/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

How can we count paths? 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

(match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

+ (match(q − →, cons(q − →, match(r − →, 1

cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + identity) ◦ transitions; xp

xq

x

r Hom select = match(p −→, match(q − − →, match(r −→, identity)));

return merge[+N ] ◦ select ◦ transitions;

1 1 Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

13/14

How can we count paths? 1

1

1

DDD x = cons(p − →, cons(q − →, cons(r − →, terminal(1)))); Hom transitions = 1

1

(match(p − →, cons(p − →, 1

1

1

(match(q − →, cons(q − →, match(r − →, 1

(cons(r − →, terminal(1))) 1

+ (cons(r − →, terminal(0)))))) 1

1

1

+ (match(q − →, cons(q − →, match(r − →, 1

cons(r − →, terminal(1))))))))) 0

0

1

1

1

0

+ match(p − →, cons(p − →, match(q − →, cons(q − →, match(r − →, cons(r − →, terminal(1))))))) + identity) ◦ transitions; xp

xq

x

r Hom select = match(p −→, match(q − − →, match(r −→, identity))); return merge[+N ] ◦ select ◦ transitions;

2 13/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Conclusion Merge of BDD-like and DDD-like manipulation languages Explain some restrictions from both and remove them “Variables” Merge operator n-ary operations

14/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Conclusion Merge of BDD-like and DDD-like manipulation languages Explain some restrictions from both and remove them “Variables” Merge operator n-ary operations Future work Formalization of the language’s semantics Implementation!

14/14

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Bibliography

H. R. Andersen and H. Hulgaard. Boolean Expression Diagrams. Information and Computation, 179(2):194–212, 2002. R. I. Bahar, E. A. Frohm, C. M. Gaona, G. D. Hachtel, E. Macii, A. Pardo, and F. Somenzi. Algebraic Decision Diagrams and Their Applications. Formal Methods in System Design, 10(2/3):188–191, 1993. B. Becker, R. Drechsler, and M. Theobald. On the expressive power of okfdds. Formal Methods in System Design, 11(1):5–21, 1997. R. E. Bryant. Graph-Based Algorithms for Boolean Function Manipulation. IEEE Transactions on Computers, 35(8):677–691, 1986.

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Bibliography

R. E. Bryant. Symbolic boolean manipulation with ordered binary-decision diagrams. ACM Computing Surveys, 24:293–318, 1992. G. Ciardo and R. Siminiceanu. Using edge-valued decision diagrams for symbolic generation of shortest paths. In FMCAD ’02 : Proceedings of the Fourth International Conference on Formal Methods in Computer-Aided Design, pages 256–273, 2002. F. Corella, Z. Zhou, X. Song, M. Langevin, and C. Eduard. Multiway Decision Graphs for Automated Hardware Verification. Formal Methods in System Design, 10(1):7–46, 1997.

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Bibliography

J.-M. Couvreur, E. Encrenaz, E. Paviot-Adet, D. Poitrenaud, and P.-A. Wacrenier. Data Decision Diagrams for Petri Net analysis. In ICATPN ’02: 23rd International Conference on Applications and Theory of Petri Nets, pages 101–120, 2002. J.-M. Couvreur and Y. Thierry-Mieg. Hierarchical Decision Diagrams to Exploit Model Structure. In FORTE ’05: Formal Techniques for Networked and Distributed Systems, pages 443–457, 2005. M. Fujita, P. C. McGeer, and J. C. Yang. Multi-terminal binary decision diagrams: An efficient datastructure for matrix representation. Formal Methods in System Design, 10(2-3):149–169, 1997.

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Bibliography

G. Jennings, J. Isaksson, and P. Lindgren. Ordered ternary decision diagrams and the multivalued compiled simulation of unmapped logic. In Proceedings of the 27th IEEE Annual Simulation Symposium, pages 99–105, 1994. T. Kam, T. Villa, R. K. Brayton, and A. L. Sangiovanni-Vincentelli. Multi-valued decision diagrams: Theory and applications. Multiple-Valued Logic, 4(1–2):9–62, 1998. Y. Lai and S. Sastry. Edge-valued binary decision diagrams for multi-level hierarchical verification. In DAC ’92: Proceedings of the 29th ACM/IEEE conference on Design automation, pages 608–613, 1992.

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Bibliography

K. G. Larsen, J. Pearson, C. Weise, and W. Yi. Clock difference diagrams. Nordic Journal of Computing, 6(3):271–291, 1999. J. B. Moller, J. Lichtenberg, H. R. Andersen, and H. Hulgaard. Difference decision diagrams. In CSL ’99: Proceedings of the 13th International Workshop and 8th Annual Conference of the EACSL on Computer Science Logic, pages 111–125, 1999. J. Ossowski and C. Baier. A uniform framework for weighted decision diagrams and its implementation. International Journal on Software Tools for Technology Transfer (STTT), 10(5):425–441, 2008.

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations

Bibliography

T. Sasao and J. T. Butler. A method to represent multiple-output switching functions by using multi-valued decision diagrams. In Proceedings of IEEE International Symposium on Multiple-Valued Logic, pages 248–254, 1996. A. Srinivasan, T. Kam, S. Malik, and R. K. Brayton. Algorithms for discrete function manipulation. In Proceedings of the International Conference on CAD (ICCAD), pages 92–95, 1990. K. Strehl and L. Thiele. Symbolic model checking of process networks using interval diagram techniques. In ICCAD ’98: Proceedings of the 1998 IEEE/ACM international conference on Computer-aided design, pages 686–692, 1998.

Hamez, Hostettler, Linard, Maréchal, Paviot-Adet, Risoldi

Specification of Decision Diagram Operations