Documentation

Complexitylib.Algebraic.LowerBound.Cutwidth.MultiOutput.MatMul.Internal.Component

The terminals of matrix multiplication #

theorem Algebraic.Cutwidth.MultiOutput.MatMul.Internal.out_injective {σ : Signature} {n s : ℕ} {F : Type u_1} [Field F] {p : Program σ (n * n + n * n) s} {I : Interpretation σ F} {out : Fin (n * n) → Wire (n * n + n * n) s} (hf : ∀ (z : Fin (n * n + n * n) → F) (o : Fin (n * n)), p.trace I z (out o) = matMul n z o) :

Distinct outputs lie on distinct wires.

theorem Algebraic.Cutwidth.MultiOutput.MatMul.Internal.out_ne_termA {σ : Signature} {n s : ℕ} {F : Type u_1} [Field F] {p : Program σ (n * n + n * n) s} {I : Interpretation σ F} {out : Fin (n * n) → Wire (n * n + n * n) s} (hf : ∀ (z : Fin (n * n + n * n) → F) (o : Fin (n * n)), p.trace I z (out o) = matMul n z o) (i j i' k' : Fin n) :
out (matMulOutput n i' k') ≠ Wire.input (matMulLeft n i j)

No output lies on the wire of an input A i j.

theorem Algebraic.Cutwidth.MultiOutput.MatMul.Internal.out_ne_termB {σ : Signature} {n s : ℕ} {F : Type u_1} [Field F] {p : Program σ (n * n + n * n) s} {I : Interpretation σ F} {out : Fin (n * n) → Wire (n * n + n * n) s} (hf : ∀ (z : Fin (n * n + n * n) → F) (o : Fin (n * n)), p.trace I z (out o) = matMul n z o) (j k i' k' : Fin n) :
out (matMulOutput n i' k') ≠ Wire.input (matMulRight n j k)

No output lies on the wire of an input B j k.

theorem Algebraic.Cutwidth.MultiOutput.MatMul.Internal.terminal_injective {σ : Signature} {n s : ℕ} {F : Type u_1} [Field F] {p : Program σ (n * n + n * n) s} {I : Interpretation σ F} {out : Fin (n * n) → Wire (n * n + n * n) s} (hf : ∀ (z : Fin (n * n + n * n) → F) (o : Fin (n * n)), p.trace I z (out o) = matMul n z o) :

Distinct terminals. The inputs A i j, B j k and the outputs C i k lie on 3 n² distinct wires.

One component #

theorem Algebraic.Cutwidth.MultiOutput.MatMul.Internal.single_supported {F : Type u_1} [Field F] {N : ℕ} {x : Fin N} {P : Finset (Fin N)} (hx : x ∈ P) (y : Fin N) :
y ∉ P → Pi.single x 1 y = 0

A unit vector is supported on any set containing its coordinate.

theorem Algebraic.Cutwidth.MultiOutput.MatMul.Internal.mem_component_of_trace {σ : Signature} {n s : ℕ} {F : Type u_1} [Field F] {p : Program σ (n * n + n * n) s} {I : Interpretation σ F} {out : Fin (n * n) → Wire (n * n + n * n) s} (hn : 0 < n) (hf : ∀ (z : Fin (n * n + n * n) → F) (o : Fin (n * n)), p.trace I z (out o) = matMul n z o) :
(∀ (x : Fin (n * n + n * n)), Wire.input x ∈ component p (out (matMulOutput n ⟨0, hn⟩ ⟨0, hn⟩))) ∧ ∀ (o : Fin (n * n)), out o ∈ component p (out (matMulOutput n ⟨0, hn⟩ ⟨0, hn⟩))

All terminals lie in one component. If the wires out of a program over any field carry matMul n and n ≥ 1, the component of the output C 0 0 contains every input and every output.