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