Skip to content

Commit de7d014

Browse files
madvorakeric-wieser
andcommitted
feat: Matrix.fromRows and Matrix.fromColumns multiplied by vectors (#10379)
Zulip discussion: https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/.E2.9C.94.20sumType_zeroFun_dotProduct Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
1 parent 7765675 commit de7d014

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

Mathlib/Data/Matrix/ColumnRowPartitioned.lean

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,11 @@ lemma toColumns₂_apply (A : Matrix m (n₁ ⊕ n₂) R) (i : m) (j : n₂) :
9494
(toColumns₂ A) i j = A i (Sum.inr j) := rfl
9595

9696
@[simp]
97-
lemma toColumns₁_fromColumns (A₁ : Matrix m n₁ R) (A₂ : Matrix m n₂ R) :
97+
lemma toColumns₁_fromColumns (A₁ : Matrix m n₁ R) (A₂ : Matrix m n₂ R) :
9898
toColumns₁ (fromColumns A₁ A₂) = A₁ := rfl
9999

100100
@[simp]
101-
lemma toColumns₂_fromColumns (A₁ : Matrix m n₁ R) (A₂ : Matrix m n₂ R) :
101+
lemma toColumns₂_fromColumns (A₁ : Matrix m n₁ R) (A₂ : Matrix m n₂ R) :
102102
toColumns₂ (fromColumns A₁ A₂) = A₂ := rfl
103103

104104
@[simp]
@@ -144,14 +144,38 @@ section Semiring
144144

145145
variable [Semiring R]
146146

147+
@[simp]
148+
lemma fromRows_mulVec (A₁ : Matrix m₁ n R) (A₂ : Matrix m₂ n R) (v : n → R) :
149+
fromRows A₁ A₂ *ᵥ v = Sum.elim (A₁ *ᵥ v) (A₂ *ᵥ v) := by
150+
ext (_ | _) <;> rfl
151+
152+
@[simp]
153+
lemma vecMul_fromColumns (B₁ : Matrix m n₁ R) (B₂ : Matrix m n₂ R) (v : m → R) :
154+
v ᵥ* fromColumns B₁ B₂ = Sum.elim (v ᵥ* B₁) (v ᵥ* B₂) := by
155+
ext (_ | _) <;> rfl
156+
157+
@[simp]
158+
lemma sum_elim_vecMul_fromRows (B₁ : Matrix m₁ n R) (B₂ : Matrix m₂ n R)
159+
(v₁ : m₁ → R) (v₂ : m₂ → R) :
160+
Sum.elim v₁ v₂ ᵥ* fromRows B₁ B₂ = v₁ ᵥ* B₁ + v₂ ᵥ* B₂ := by
161+
ext
162+
simp [Matrix.vecMul, fromRows, dotProduct]
163+
164+
@[simp]
165+
lemma fromColumns_mulVec_sum_elim (A₁ : Matrix m n₁ R) (A₂ : Matrix m n₂ R)
166+
(v₁ : n₁ → R) (v₂ : n₂ → R) :
167+
fromColumns A₁ A₂ *ᵥ Sum.elim v₁ v₂ = A₁ *ᵥ v₁ + A₂ *ᵥ v₂ := by
168+
ext
169+
simp [Matrix.mulVec, fromColumns]
170+
147171
@[simp]
148172
lemma fromRows_mul (A₁ : Matrix m₁ n R) (A₂ : Matrix m₂ n R) (B : Matrix n m R) :
149-
(fromRows A₁ A₂) * B = fromRows (A₁ * B) (A₂ * B) := by
173+
fromRows A₁ A₂ * B = fromRows (A₁ * B) (A₂ * B) := by
150174
ext (_ | _) _ <;> simp [mul_apply]
151175

152176
@[simp]
153177
lemma mul_fromColumns (A : Matrix m n R) (B₁ : Matrix n n₁ R) (B₂ : Matrix n n₂ R) :
154-
A * (fromColumns B₁ B₂) = fromColumns (A * B₁) (A * B₂) := by
178+
A * fromColumns B₁ B₂ = fromColumns (A * B₁) (A * B₂) := by
155179
ext _ (_ | _) <;> simp [mul_apply]
156180

157181
@[simp]

0 commit comments

Comments
 (0)