-- Mathlib/LinearAlgebra/SesquilinearForm.lean
theorem IsOrthoᵢ.not_isOrtho_basis_self_of_separatingLeft [Nontrivial R]
    {B : M →ₛₗ[I] M →ₛₗ[I'] M₁} {v : Basis n R M} (h : B.IsOrthoᵢ v) (hB : B.SeparatingLeft)
    (i : n) : ¬B.IsOrtho (v i) (v i)

Proof state:
case intro.h.inr
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
hij : i ≠ j
⊢ (B (v i)) (v j) = 0

Tactic:
exact h hij

Result:
no goals

Proof state:
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
m : M
⊢ (B (v i)) m = 0

Tactic:
obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m

Result:
case intro
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ (B (v i)) (v.repr.symm vi) = 0

Proof state:
case intro
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ (B (v i)) (v.repr.symm vi) = 0

Tactic:
rw [Basis.repr_symm_apply, Finsupp.linearCombination_apply, Finsupp.sum, map_sum]

Result:
case intro
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ ∑ x ∈ vi.support, (B (v i)) (vi x • v x) = 0

Proof state:
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
⊢ False

Tactic:
refine v.ne_zero i (hB (v i) fun m ↦ ?_)

Result:
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
m : M
⊢ (B (v i)) m = 0

Proof state:
case intro.h
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ ∀ x ∈ vi.support, (B (v i)) (vi x • v x) = 0

Tactic:
rintro j -

Result:
case intro.h
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
⊢ (B (v i)) (vi j • v j) = 0

Proof state:
case intro
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ ∑ x ∈ vi.support, (B (v i)) (vi x • v x) = 0

Tactic:
apply Finset.sum_eq_zero

Result:
case intro.h
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ ∀ x ∈ vi.support, (B (v i)) (vi x • v x) = 0

Proof state:
case intro.h.inl
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ (B (v i)) (v i) = 0

Tactic:
exact ho

Result:
no goals

Proof state:
case intro.h
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
⊢ (B (v i)) (v j) = 0

Tactic:
obtain rfl | hij := eq_or_ne i j

Result:
case intro.h.inl
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ (B (v i)) (v i) = 0

case intro.h.inr
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
hij : i ≠ j
⊢ (B (v i)) (v j) = 0

Proof state:
case intro.h
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
⊢ (B (v i)) (vi j • v j) = 0

Tactic:
rw [map_smulₛₗ]

Result:
case intro.h
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
⊢ I' (vi j) • (B (v i)) (v j) = 0

Proof state:
case intro.h
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
⊢ I' (vi j) • (B (v i)) (v j) = 0

Tactic:
suffices B (v i) (v j) = 0 by rw [this, smul_zero]

Result:
case intro.h
R : Type u_1
M : Type u_5
M₁ : Type u_6
n : Type u_19
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
I I' : R →+* R
inst✝ : Nontrivial R
B : M →ₛₗ[I] M →ₛₗ[I'] M₁
v : Basis n R M
h : B.IsOrthoᵢ ⇑v
hB : B.SeparatingLeft
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
⊢ (B (v i)) (v j) = 0