Documentation

Complexitylib.Algebraic.LowerBound.Cutwidth.Aggregate.NetworkDefs

Constraint networks with a commutative aggregate #

Local contributions multiply in a finite commutative monoid. The final acceptance predicate may inspect the product. No cancellation or inverses are required.

A local constraint network augmented with one commutative aggregate.

Instances For
    noncomputable def Algebraic.Cutwidth.AggregateNetwork.accumulated {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) (L : Finset V) (α : E → Bool) :
    M

    Aggregate of contributions from a set of processed vertices.

    Equations
    Instances For
      @[simp]
      theorem Algebraic.Cutwidth.AggregateNetwork.accumulated_empty {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) (α : E → Bool) :
      def Algebraic.Cutwidth.AggregateNetwork.Satisfies {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) [Fintype V] (x : Fin n → Bool) (α : E → Bool) :

      A satisfying edge assignment obeys the local network and global aggregate test.

      Equations
      Instances For

        The network accepts exactly the true inputs of the Boolean function.

        Equations
        Instances For
          noncomputable def Algebraic.Cutwidth.AggregateNetwork.pastSet {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) [Fintype V] [Fintype E] (L : Finset V) (σ : E → Bool) (m : M) :
          Finset (↥(N.past L) → Bool)

          Past inputs compatible with a cut assignment and an exact past aggregate.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            noncomputable def Algebraic.Cutwidth.AggregateNetwork.futureSet {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) [Fintype V] [Fintype E] (L : Finset V) (σ : E → Bool) (m : M) :
            Finset (↥(N.past L)ᶜ → Bool)

            Future inputs compatible with the past aggregate and final acceptance.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              theorem Algebraic.Cutwidth.AggregateNetwork.mem_pastSet {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) [Fintype V] [Fintype E] {L : Finset V} {σ : E → Bool} {m : M} {p : ↥(N.past L) → Bool} :
              p ∈ N.pastSet L σ m ↔ ∃ (α : E → Bool), (∀ v ∈ L, N.Check v α) ∧ (∀ e ∈ N.cut L, α e = σ e) ∧ (∀ (j : ↥(N.past L)), α (N.portEdge ↑j) = p j) ∧ N.accumulated L α = m
              theorem Algebraic.Cutwidth.AggregateNetwork.mem_futureSet {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) [Fintype V] [Fintype E] {L : Finset V} {σ : E → Bool} {m : M} {q : ↥(N.past L)ᶜ → Bool} :
              q ∈ N.futureSet L σ m ↔ ∃ (β : E → Bool), (∀ v ∉ L, N.Check v β) ∧ (∀ e ∈ N.cut L, β e = σ e) ∧ (∀ (j : ↥(N.past L)ᶜ), ↑j ∈ N.read → β (N.portEdge ↑j) = q j) ∧ N.Accept (m * N.accumulated Lᶜ β)
              theorem Algebraic.Cutwidth.AggregateNetwork.pastSet_congr {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) [Fintype V] [Fintype E] {L : Finset V} {σ σ' : E → Bool} {m : M} (h : ∀ e ∈ N.cut L, σ e = σ' e) :
              N.pastSet L σ m = N.pastSet L σ' m

              The past set uses only the edge values on the cut.

              theorem Algebraic.Cutwidth.AggregateNetwork.futureSet_congr {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) [Fintype V] [Fintype E] {L : Finset V} {σ σ' : E → Bool} {m : M} (h : ∀ e ∈ N.cut L, σ e = σ' e) :
              N.futureSet L σ m = N.futureSet L σ' m

              The future set uses only the edge values on the cut.

              theorem Algebraic.Cutwidth.AggregateNetwork.restrict_mem_pastSet {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) [Fintype V] [Fintype E] {x : Fin n → Bool} {α : E → Bool} (h : N.Satisfies x α) (L : Finset V) :
              (fun (j : ↥(N.past L)) => x ↑j) ∈ N.pastSet L α (N.accumulated L α)

              A satisfying input supplies a member of its own past set.

              theorem Algebraic.Cutwidth.AggregateNetwork.restrict_mem_futureSet {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) [Fintype V] [Fintype E] {x : Fin n → Bool} {α : E → Bool} (h : N.Satisfies x α) (L : Finset V) :
              (fun (j : ↥(N.past L)ᶜ) => x ↑j) ∈ N.futureSet L α (N.accumulated L α)

              A satisfying input supplies a member of its own future set.

              theorem Algebraic.Cutwidth.AggregateNetwork.card_pastSet_empty_le {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) [Fintype V] [Fintype E] (σ : E → Bool) (m : M) :
              (N.pastSet ∅ σ m).card ≤ 1

              The empty past has at most one assignment, for any aggregate.

              theorem Algebraic.Cutwidth.AggregateNetwork.accepted_of_mem_pastSet_of_mem_futureSet {n : ℕ} {V E M : Type} [CommMonoid M] (N : AggregateNetwork n V E M) [Fintype V] [Fintype E] {f : Cslib.BooleanFunction n} (hf : N.Computes f) {L : Finset V} {σ : E → Bool} {m : M} {p : ↥(N.past L) → Bool} (hp : p ∈ N.pastSet L σ m) {q : ↥(N.past L)ᶜ → Bool} (hq : q ∈ N.futureSet L σ m) :
              f (glue (N.past L) p q) = true

              Combining compatible sides is sound because contributions are local and commute.

              Advancing one vertex multiplies the accumulator by its local contribution.