The denotation
of a BDD
is the Boolean function that it represents.
Equations
- B.denotation h = BDD.evaluate✝ (B.lift h)
Instances For
@[simp]
BDD.lift
does not affect BDD.denotation
.
@[simp]
theorem
BDD.denotation_cast
{n m : ℕ}
{I : Vector Bool n}
{B : BDD}
{hn : B.nvars ≤ n}
{hm : B.nvars ≤ m}
(h : n = m)
:
BDD.denotation
absorbs Vector.cast
.
theorem
BDD.denotation_independentOf_of_geq_nvars
{n : ℕ}
{i : Fin n}
{B : BDD}
{h1 : B.nvars ≤ n}
{h2 : B.nvars ≤ ↑i}
:
Nary.IndependentOf (B.denotation h1) i
The denotation
of a BDD
is independent of indices that exceed its input size.
BDD
s are semantically equivalent when their denotation
s coincide.
Equations
- B.SemanticEquiv C = (B.denotation ⋯ = C.denotation ⋯)
Instances For
Equations
- x✝¹.instDecidableSemacticEquiv x✝ = decidable_of_iff' (BDD.SyntacticEquiv✝ x✝¹ x✝) ⋯
def
BDD.relabel
{n : ℕ}
(B : BDD)
(f : Fin B.nvars → Fin n)
(h : ∀ (i i' : Nary.Dependency B.denotation'), ↑i < ↑i' → f ↑i < f ↑i')
:
Equations
- B.relabel f h = BDD.relabel''✝ B (BDD.relabel_helper✝ B.nvars n f) ⋯ ⋯
Instances For
@[simp]
theorem
BDD.relabel_nvars
{n : ℕ}
{B : BDD}
{f : Fin B.nvars → Fin n}
{h : ∀ (i i' : Nary.Dependency B.denotation'), ↑i < ↑i' → f ↑i < f ↑i'}
:
@[simp]
theorem
BDD.relabel_denotation
{n : ℕ}
{B : BDD}
{f : Fin B.nvars → Fin n}
{hf : ∀ (i i' : Nary.Dependency B.denotation'), ↑i < ↑i' → f ↑i < f ↑i'}
{I : Vector Bool n}
{h : (B.relabel f hf).nvars ≤ n}
:
Equations
- BDD.choice s = Choice.choice (BDD.obdd✝ B) ⋯
Instances For
@[simp]
Equations
Equations
- B.bforalls l = List.foldl BDD.bforall B l
Instances For
Equations
- B.bexistss l = List.foldl BDD.bexists B l