internlm/Lean-Github huggingface dataset:
Theorem: Matrix.linearIndependent_rows_of_upper_tri
Proof state before:
case h.e'_2
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
hA : Finsupp.comapDomain Sum.inl l ⋯ = 0
i : m₁
j : n₁
⊢ (∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x) j =
    (∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x) (Sum.inr j)
Tactic:
simp only [Finset.sum_apply, Pi.smul_apply, smul_eq_mul, Pi.zero_apply]
Proof state after:
case h.e'_2
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
hA : Finsupp.comapDomain Sum.inl l ⋯ = 0
i : m₁
j : n₁
⊢ ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) * C.rowFun x j =
    ∑ x ∈ l.support, l x * (A.fromBlocks B 0 C).rowFun x (Sum.inr j)
Theorem: Matrix.linearIndependent_rows_of_upper_tri
Proof state before:
case h.e'_2
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
hA : Finsupp.comapDomain Sum.inl l ⋯ = 0
i : m₁
j : n₁
⊢ ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) * C.rowFun x j =
    ∑ x ∈ l.support, l x * (A.fromBlocks B 0 C).rowFun x (Sum.inr j)
Tactic:
convert Finset.sum_preimage Sum.inr l.support Sum.inr_injective.injOn
  (fun (i : m₀ ⊕ m₁) ↦ l i * ((Matrix.fromBlocks A B 0 C) i (Sum.inr j))) ?_
Proof state after:
case h.e'_2
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
hA : Finsupp.comapDomain Sum.inl l ⋯ = 0
i : m₁
j : n₁
⊢ ∀ x ∈ l.support, x ∉ range Sum.inr → (fun i => l i * A.fromBlocks B 0 C i (Sum.inr j)) x = 0
Theorem: Matrix.linearIndependent_rows_of_upper_tri
Proof state before:
case h.e'_2
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
hA : Finsupp.comapDomain Sum.inl l ⋯ = 0
i : m₁
j : n₁
⊢ ∀ x ∈ l.support, x ∉ range Sum.inr → (fun i => l i * A.fromBlocks B 0 C i (Sum.inr j)) x = 0
Tactic:
simp only [Finsupp.mem_support_iff, ne_eq, mem_range, not_exists, Sum.forall, not_false_eq_true,
  implies_true, fromBlocks_apply₁₂, forall_true_left, Sum.inr.injEq, forall_eq,
  fromBlocks_apply₂₂, IsEmpty.forall_iff, and_true]
Proof state after:
case h.e'_2
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
hA : Finsupp.comapDomain Sum.inl l ⋯ = 0
i : m₁
j : n₁
⊢ ∀ (a : m₀), ¬l (Sum.inl a) = 0 → l (Sum.inl a) * B a j = 0
Theorem: Matrix.linearIndependent_rows_of_upper_tri
Proof state before:
case h.e'_2
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
hA : Finsupp.comapDomain Sum.inl l ⋯ = 0
i : m₁
j : n₁
⊢ ∀ (a : m₀), ¬l (Sum.inl a) = 0 → l (Sum.inl a) * B a j = 0
Tactic:
exact fun i₀ hi₀ ↦ (hi₀ (DFunLike.congr_fun hA i₀)).elim
Proof state after:
no goals
Theorem: Matrix.linearIndependent_rows_of_upper_tri
Proof state before:
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hA : ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x = 0 → Finsupp.comapDomain Sum.inl l ⋯ = 0
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
⊢ ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x = 0
Tactic:
ext j
Proof state after:
case h
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hA : ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x = 0 → Finsupp.comapDomain Sum.inl l ⋯ = 0
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
j : n₀
⊢ (∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x) j = 0 j
Theorem: Matrix.linearIndependent_rows_of_upper_tri
Proof state before:
case h
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hA : ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x = 0 → Finsupp.comapDomain Sum.inl l ⋯ = 0
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
j : n₀
⊢ (∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x) j = 0 j
Tactic:
convert congr_fun hl (Sum.inl j)
Proof state after:
case h.e'_2
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hA : ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x = 0 → Finsupp.comapDomain Sum.inl l ⋯ = 0
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
j : n₀
⊢ (∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x) j =
    (∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x) (Sum.inl j)
Theorem: Matrix.linearIndependent_rows_of_upper_tri
Proof state before:
case h.e'_2
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hA : ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x = 0 → Finsupp.comapDomain Sum.inl l ⋯ = 0
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
j : n₀
⊢ (∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x) j =
    (∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x) (Sum.inl j)
Tactic:
simp only [Finset.sum_apply, Pi.smul_apply, smul_eq_mul, Pi.zero_apply]
Proof state after:
case h.e'_2
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hA : ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x = 0 → Finsupp.comapDomain Sum.inl l ⋯ = 0
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
j : n₀
⊢ ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) * A.rowFun x j =
    ∑ x ∈ l.support, l x * (A.fromBlocks B 0 C).rowFun x (Sum.inl j)
Theorem: Matrix.linearIndependent_rows_of_upper_tri
Proof state before:
case h.e'_2
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hA : ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x = 0 → Finsupp.comapDomain Sum.inl l ⋯ = 0
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
j : n₀
⊢ ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) * A.rowFun x j =
    ∑ x ∈ l.support, l x * (A.fromBlocks B 0 C).rowFun x (Sum.inl j)
Tactic:
convert Finset.sum_preimage Sum.inl l.support Sum.inl_injective.injOn
  (fun (i : m₀ ⊕ m₁) ↦ l i * ((Matrix.fromBlocks A B 0 C) i (Sum.inl j)))
Proof state after:
case a
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hA : ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x = 0 → Finsupp.comapDomain Sum.inl l ⋯ = 0
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
j : n₀
⊢ ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) * A.rowFun x j =
      ∑ x ∈ l.support, l x * (A.fromBlocks B 0 C).rowFun x (Sum.inl j) ↔
    (∀ x ∈ l.support, x ∉ range Sum.inl → l x * A.fromBlocks B 0 C x (Sum.inl j) = 0) →
      ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) * A.fromBlocks B 0 C (Sum.inl x) (Sum.inl j) =
        ∑ x ∈ l.support, l x * A.fromBlocks B 0 C x (Sum.inl j)
Theorem: Matrix.linearIndependent_rows_of_upper_tri
Proof state before:
case a
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hA : ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) • A.rowFun x = 0 → Finsupp.comapDomain Sum.inl l ⋯ = 0
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
j : n₀
⊢ ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) * A.rowFun x j =
      ∑ x ∈ l.support, l x * (A.fromBlocks B 0 C).rowFun x (Sum.inl j) ↔
    (∀ x ∈ l.support, x ∉ range Sum.inl → l x * A.fromBlocks B 0 C x (Sum.inl j) = 0) →
      ∑ x ∈ l.support.preimage Sum.inl ⋯, l (Sum.inl x) * A.fromBlocks B 0 C (Sum.inl x) (Sum.inl j) =
        ∑ x ∈ l.support, l x * A.fromBlocks B 0 C x (Sum.inl j)
Tactic:
simp
Proof state after:
no goals
Theorem: Matrix.linearIndependent_rows_of_upper_tri
Proof state before:
case h.inl
l✝ : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₀ n₁ R
C : Matrix m₁ n₁ R
l : m₀ ⊕ m₁ →₀ R
hC : ∑ x ∈ l.support.preimage Sum.inr ⋯, l (Sum.inr x) • C.rowFun x = 0 → Finsupp.comapDomain Sum.inr l ⋯ = 0
hl : ∑ x ∈ l.support, l x • (A.fromBlocks B 0 C).rowFun x = 0
hA : Finsupp.comapDomain Sum.inl l ⋯ = 0
i : m₀
⊢ l (Sum.inl i) = 0 (Sum.inl i)
Tactic:
exact DFunLike.congr_fun hA i
Proof state after:
no goals
Theorem: Matrix.linearIndependent_rows_of_lower_tri
Proof state before:
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₁ n₀ R
C : Matrix m₁ n₁ R
hA : LinearIndependent R A.rowFun
hC : LinearIndependent R C.rowFun
⊢ LinearIndependent R (A.fromBlocks 0 B C).rowFun
Tactic:
refine rows_linearIndependent_of_reindex (Equiv.sumComm _ _) (Equiv.sumComm _ _) ?_
Proof state after:
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₁ n₀ R
C : Matrix m₁ n₁ R
hA : LinearIndependent R A.rowFun
hC : LinearIndependent R C.rowFun
⊢ LinearIndependent R ((A.fromBlocks 0 B C).submatrix ⇑(Equiv.sumComm m₁ m₀) ⇑(Equiv.sumComm n₁ n₀)).rowFun
Theorem: Matrix.linearIndependent_rows_of_lower_tri
Proof state before:
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₁ n₀ R
C : Matrix m₁ n₁ R
hA : LinearIndependent R A.rowFun
hC : LinearIndependent R C.rowFun
⊢ LinearIndependent R ((A.fromBlocks 0 B C).submatrix ⇑(Equiv.sumComm m₁ m₀) ⇑(Equiv.sumComm n₁ n₀)).rowFun
Tactic:
convert linearIndependent_rows_of_upper_tri C B A hC hA
Proof state after:
case h.e'_4.h.e'_4
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₁ n₀ R
C : Matrix m₁ n₁ R
hA : LinearIndependent R A.rowFun
hC : LinearIndependent R C.rowFun
⊢ (A.fromBlocks 0 B C).submatrix ⇑(Equiv.sumComm m₁ m₀) ⇑(Equiv.sumComm n₁ n₀) = C.fromBlocks B 0 A
Theorem: Matrix.linearIndependent_rows_of_lower_tri
Proof state before:
case h.e'_4.h.e'_4
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁✝ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝¹ B✝¹ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A✝ B✝ : Matrix m n R
inst✝ : Ring R
m₀ : Type u_14
m₁ : Type u_15
n₀ : Type u_16
n₁ : Type u_17
A : Matrix m₀ n₀ R
B : Matrix m₁ n₀ R
C : Matrix m₁ n₁ R
hA : LinearIndependent R A.rowFun
hC : LinearIndependent R C.rowFun
⊢ (A.fromBlocks 0 B C).submatrix ⇑(Equiv.sumComm m₁ m₀) ⇑(Equiv.sumComm n₁ n₀) = C.fromBlocks B 0 A
Tactic:
simp only [Equiv.sumComm_apply, fromBlocks_submatrix_sum_swap_right,
  fromBlocks_submatrix_sum_swap_left, submatrix_id_id]
Proof state after:
no goals
Theorem: Matrix.rows_linearIndependent_union_of_upper_zero_block
Proof state before:
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A B : Matrix m n R
inst✝ : Ring R
hst : LinearIndependent (ι := ↑s) R (A.submatrix s.incl t.incl).rowFun
hstc : LinearIndependent (ι := ↑sᶜ) R (A.submatrix sᶜ.incl tᶜ.incl).rowFun
h0 : A.submatrix s.incl tᶜ.incl = 0
⊢ LinearIndependent R (A.submatrix ⇑(Equiv.sumCompl fun x => x ∈ s) ⇑(Equiv.sumCompl fun x => x ∈ t)).rowFun
Tactic:
convert linearIndependent_rows_of_lower_tri _ (A.submatrix (incl sᶜ) (incl t)) _ hst hstc
Proof state after:
case h.e'_4.h.h.e'_4.h
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A B : Matrix m n R
inst✝ : Ring R
hst : LinearIndependent (ι := ↑s) R (A.submatrix s.incl t.incl).rowFun
hstc : LinearIndependent (ι := ↑sᶜ) R (A.submatrix sᶜ.incl tᶜ.incl).rowFun
h0 : A.submatrix s.incl tᶜ.incl = 0
e_1✝ : ({ a // a ∈ s } ⊕ { a // a ∉ s }) = (↑s ⊕ ↑sᶜ)
e_3✝ : ({ a // a ∈ t } ⊕ { a // a ∉ t } → R) = (↑t ⊕ ↑tᶜ → R)
e_2✝ : ({ a // a ∈ t } ⊕ { a // a ∉ t }) = (↑t ⊕ ↑tᶜ)
⊢ A.submatrix ⇑(Equiv.sumCompl fun x => x ∈ s) ⇑(Equiv.sumCompl fun x => x ∈ t) =
    (A.submatrix s.incl t.incl).fromBlocks 0 (A.submatrix sᶜ.incl t.incl) (A.submatrix sᶜ.incl tᶜ.incl)
Theorem: Matrix.rows_linearIndependent_union_of_upper_zero_block
Proof state before:
case h.e'_4.h.h.e'_4.h.a.inr.inl
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A B : Matrix m n R
inst✝ : Ring R
hst : LinearIndependent (ι := ↑s) R (A.submatrix s.incl t.incl).rowFun
hstc : LinearIndependent (ι := ↑sᶜ) R (A.submatrix sᶜ.incl tᶜ.incl).rowFun
h0 : A.submatrix s.incl tᶜ.incl = 0
e_1✝ : ({ a // a ∈ s } ⊕ { a // a ∉ s }) = (↑s ⊕ ↑sᶜ)
e_3✝ : ({ a // a ∈ t } ⊕ { a // a ∉ t } → R) = (↑t ⊕ ↑tᶜ → R)
e_2✝ : ({ a // a ∈ t } ⊕ { a // a ∉ t }) = (↑t ⊕ ↑tᶜ)
i : { a // a ∉ s }
j : { a // a ∈ t }
⊢ A.submatrix (⇑(Equiv.sumCompl fun x => x ∈ s)) (⇑(Equiv.sumCompl fun x => x ∈ t)) (Sum.inr i) (Sum.inl j) =
    (A.submatrix s.incl t.incl).fromBlocks 0 (A.submatrix sᶜ.incl t.incl) (A.submatrix sᶜ.incl tᶜ.incl) (Sum.inr i)
      (Sum.inl j)

case h.e'_4.h.h.e'_4.h.a.inr.inr
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A B : Matrix m n R
inst✝ : Ring R
hst : LinearIndependent (ι := ↑s) R (A.submatrix s.incl t.incl).rowFun
hstc : LinearIndependent (ι := ↑sᶜ) R (A.submatrix sᶜ.incl tᶜ.incl).rowFun
h0 : A.submatrix s.incl tᶜ.incl = 0
e_1✝ : ({ a // a ∈ s } ⊕ { a // a ∉ s }) = (↑s ⊕ ↑sᶜ)
e_3✝ : ({ a // a ∈ t } ⊕ { a // a ∉ t } → R) = (↑t ⊕ ↑tᶜ → R)
e_2✝ : ({ a // a ∈ t } ⊕ { a // a ∉ t }) = (↑t ⊕ ↑tᶜ)
i : { a // a ∉ s }
j : { a // a ∉ t }
⊢ A.submatrix (⇑(Equiv.sumCompl fun x => x ∈ s)) (⇑(Equiv.sumCompl fun x => x ∈ t)) (Sum.inr i) (Sum.inr j) =
    (A.submatrix s.incl t.incl).fromBlocks 0 (A.submatrix sᶜ.incl t.incl) (A.submatrix sᶜ.incl tᶜ.incl) (Sum.inr i)
      (Sum.inr j)
Tactic:
rfl
Proof state after:
case h.e'_4.h.h.e'_4.h.a.inr.inr
l : Type u_1
m✝ : Type u_2
m' : Type u_3
n✝ : Type u_4
n' : Type u_5
n₁ : Type u_6
n₂ : Type u_7
o : Type u_8
α : Type u_9
R✝ : Type u_10
A✝ B✝ : Matrix m✝ n✝ R✝
s✝ : Set m✝
t✝ : Set n✝
m : Type u_11
n : Type u_12
R : Type u_13
s : Set m
t : Set n
A B : Matrix m n R
inst✝ : Ring R
hst : LinearIndependent (ι := ↑s) R (A.submatrix s.incl t.incl).rowFun
hstc : LinearIndependent (ι := ↑sᶜ) R (A.submatrix sᶜ.incl tᶜ.incl).rowFun
h0 : A.submatrix s.incl tᶜ.incl = 0
e_1✝ : ({ a // a ∈ s } ⊕ { a // a ∉ s }) = (↑s ⊕ ↑sᶜ)
e_3✝ : ({ a // a ∈ t } ⊕ { a // a ∉ t } → R) = (↑t ⊕ ↑tᶜ → R)
e_2✝ : ({ a // a ∈ t } ⊕ { a // a ∉ t }) = (↑t ⊕ ↑tᶜ)
i : { a // a ∉ s }
j : { a // a ∉ t }
⊢ A.submatrix (⇑(Equiv.sumCompl fun x => x ∈ s)) (⇑(Equiv.sumCompl fun x => x ∈ t)) (Sum.inr i) (Sum.inr j) =
    (A.submatrix s.incl t.incl).fromBlocks 0 (A.submatrix sᶜ.incl t.incl) (A.submatrix sᶜ.incl tᶜ.incl) (Sum.inr i)
      (Sum.inr j)