The denotation of a BDD is the Boolean function that it represents.
Equations
- B.denotation h = BDD.evaluate✝ (B.lift h)
Instances For
lift does not affect denotation.
denotation absorbs Vector.cast.
The denotation of a BDD is independent of indices greater or equal to its input size.
BDDs are semantically equivalent when their denotations coincide.
Equations
- B.SemanticEquiv C = (B.denotation ⋯ = C.denotation ⋯)
Instances For
If two BDD have the same denotation with respect to some input size n, then they have the same denotation with respect to any other input size m as well.
SemanticEquiv is an equivalence relation on BDD.
Use this instance to decide whether two BDDs are equivalent.
Equations
- x✝¹.instDecidableSemanticEquiv x✝ = decidable_of_iff' (BDD.Similar✝ x✝¹ x✝) ⋯
Relabel the variables in a BDD according to a relabeling function f.
See also relabel_denotation.
Equations
- B.relabel f h = BDD.relabel''✝ B (BDD.relabel_wrap✝ B.nvars n f) ⋯ ⋯
Instances For
Return an input vector that satisfies the denotation of a given BDD, under the assumption that its denotation is satisfiable.
See also choice_denotation.
Equations
- BDD.choice s = Choice.choice (BDD.obdd✝ B) ⋯
Instances For
Return a BDD denoting the restriction of a given BDD at an index i to a Boolean b.
See also restrict_denotation.
Equations
- BDD.restrict b i B = if h : i < B.nvars then BDD.restrict'✝ B b ⟨i, h⟩ else B
Instances For
Equations
- B.instDecidableDependsOn i = ⋯ ▸ decidable_of_iff ((↑(BDD.obdd✝ B)).usesVar i) ⋯
Universal quantification over input at index i.
See also bforall_denotation.
Equations
- B.bforall i = (BDD.restrict false i B).and (BDD.restrict true i B)
Instances For
Universal quantification over a list of input indices l.
Equations
- B.bforalls l = List.foldl BDD.bforall B l
Instances For
Existential quantification over input at index i.
See also bexists_denotation.
Equations
- B.bexists i = (BDD.restrict false i B).or (BDD.restrict true i B)
Instances For
Existential quantification over a list of input indices l.
Equations
- B.bexistss l = List.foldl BDD.bexists B l