[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
x : M
⊢ bilin B 0 x = 0
[PROOFSTEP]
rw [← @zero_smul R _ _ _ _ (0 : M), smul_left, zero_mul]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
x : M
⊢ bilin B x 0 = 0
[PROOFSTEP]
rw [← @zero_smul R _ _ _ _ (0 : M), smul_right, zero_mul]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
x y : M₁
⊢ bilin B₁ (-x) y = -bilin B₁ x y
[PROOFSTEP]
rw [← @neg_one_smul R₁ _ _, smul_left, neg_one_mul]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
x y : M₁
⊢ bilin B₁ x (-y) = -bilin B₁ x y
[PROOFSTEP]
rw [← @neg_one_smul R₁ _ _, smul_right, neg_one_mul]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
x y z : M₁
⊢ bilin B₁ (x - y) z = bilin B₁ x z - bilin B₁ y z
[PROOFSTEP]
rw [sub_eq_add_neg, sub_eq_add_neg, add_left, neg_left]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
x y z : M₁
⊢ bilin B₁ x (y - z) = bilin B₁ x y - bilin B₁ x z
[PROOFSTEP]
rw [sub_eq_add_neg, sub_eq_add_neg, add_right, neg_right]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D✝ : BilinForm R M
D₁ : BilinForm R₁ M₁
B D : BilinForm R M
h : B.bilin = D.bilin
⊢ B = D
[PROOFSTEP]
cases B
[GOAL]
case mk
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D✝ : BilinForm R M
D₁ : BilinForm R₁ M₁
D : BilinForm R M
bilin✝ : M → M → R
bilin_add_left✝ : ∀ (x y z : M), bilin✝ (x + y) z = bilin✝ x z + bilin✝ y z
bilin_smul_left✝ : ∀ (a : R) (x y : M), bilin✝ (a • x) y = a * bilin✝ x y
bilin_add_right✝ : ∀ (x y z : M), bilin✝ x (y + z) = bilin✝ x y + bilin✝ x z
bilin_smul_right✝ : ∀ (a : R) (x y : M), bilin✝ x (a • y) = a * bilin✝ x y
h :
  { bilin := bilin✝, bilin_add_left := bilin_add_left✝, bilin_smul_left := bilin_smul_left✝,
        bilin_add_right := bilin_add_right✝, bilin_smul_right := bilin_smul_right✝ }.bilin =
    D.bilin
⊢ { bilin := bilin✝, bilin_add_left := bilin_add_left✝, bilin_smul_left := bilin_smul_left✝,
      bilin_add_right := bilin_add_right✝, bilin_smul_right := bilin_smul_right✝ } =
    D
[PROOFSTEP]
cases D
[GOAL]
case mk.mk
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
bilin✝¹ : M → M → R
bilin_add_left✝¹ : ∀ (x y z : M), bilin✝¹ (x + y) z = bilin✝¹ x z + bilin✝¹ y z
bilin_smul_left✝¹ : ∀ (a : R) (x y : M), bilin✝¹ (a • x) y = a * bilin✝¹ x y
bilin_add_right✝¹ : ∀ (x y z : M), bilin✝¹ x (y + z) = bilin✝¹ x y + bilin✝¹ x z
bilin_smul_right✝¹ : ∀ (a : R) (x y : M), bilin✝¹ x (a • y) = a * bilin✝¹ x y
bilin✝ : M → M → R
bilin_add_left✝ : ∀ (x y z : M), bilin✝ (x + y) z = bilin✝ x z + bilin✝ y z
bilin_smul_left✝ : ∀ (a : R) (x y : M), bilin✝ (a • x) y = a * bilin✝ x y
bilin_add_right✝ : ∀ (x y z : M), bilin✝ x (y + z) = bilin✝ x y + bilin✝ x z
bilin_smul_right✝ : ∀ (a : R) (x y : M), bilin✝ x (a • y) = a * bilin✝ x y
h :
  { bilin := bilin✝¹, bilin_add_left := bilin_add_left✝¹, bilin_smul_left := bilin_smul_left✝¹,
        bilin_add_right := bilin_add_right✝¹, bilin_smul_right := bilin_smul_right✝¹ }.bilin =
    { bilin := bilin✝, bilin_add_left := bilin_add_left✝, bilin_smul_left := bilin_smul_left✝,
        bilin_add_right := bilin_add_right✝, bilin_smul_right := bilin_smul_right✝ }.bilin
⊢ { bilin := bilin✝¹, bilin_add_left := bilin_add_left✝¹, bilin_smul_left := bilin_smul_left✝¹,
      bilin_add_right := bilin_add_right✝¹, bilin_smul_right := bilin_smul_right✝¹ } =
    { bilin := bilin✝, bilin_add_left := bilin_add_left✝, bilin_smul_left := bilin_smul_left✝,
      bilin_add_right := bilin_add_right✝, bilin_smul_right := bilin_smul_right✝ }
[PROOFSTEP]
congr
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
H : ∀ (x y : M), bilin B x y = bilin D x y
⊢ B.bilin = D.bilin
[PROOFSTEP]
funext
[GOAL]
case h.h
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
H : ∀ (x y : M), bilin B x y = bilin D x y
x✝¹ x✝ : M
⊢ bilin B x✝¹ x✝ = bilin D x✝¹ x✝
[PROOFSTEP]
exact H _ _
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D✝ : BilinForm R M
D₁ : BilinForm R₁ M₁
B D : BilinForm R M
x y z : M
⊢ (fun x y => bilin B x y + bilin D x y) (x + y) z =
    (fun x y => bilin B x y + bilin D x y) x z + (fun x y => bilin B x y + bilin D x y) y z
[PROOFSTEP]
simp only [add_left, add_left, add_add_add_comm]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D✝ : BilinForm R M
D₁ : BilinForm R₁ M₁
B D : BilinForm R M
a : R
x y : M
⊢ (fun x y => bilin B x y + bilin D x y) (a • x) y = a * (fun x y => bilin B x y + bilin D x y) x y
[PROOFSTEP]
simp only [smul_left, smul_left, mul_add]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D✝ : BilinForm R M
D₁ : BilinForm R₁ M₁
B D : BilinForm R M
x y z : M
⊢ (fun x y => bilin B x y + bilin D x y) x (y + z) =
    (fun x y => bilin B x y + bilin D x y) x y + (fun x y => bilin B x y + bilin D x y) x z
[PROOFSTEP]
simp only [add_right, add_right, add_add_add_comm]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D✝ : BilinForm R M
D₁ : BilinForm R₁ M₁
B D : BilinForm R M
a : R
x y : M
⊢ (fun x y => bilin B x y + bilin D x y) x (a • y) = a * (fun x y => bilin B x y + bilin D x y) x y
[PROOFSTEP]
simp only [smul_right, smul_right, mul_add]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
α : Type ?u.105863
inst✝² : Monoid α
inst✝¹ : DistribMulAction α R
inst✝ : SMulCommClass α R R
c : α
B : BilinForm R M
x y z : M
⊢ (fun x y => c • bilin B x y) (x + y) z = (fun x y => c • bilin B x y) x z + (fun x y => c • bilin B x y) y z
[PROOFSTEP]
simp only [add_left, smul_add]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
α : Type ?u.105863
inst✝² : Monoid α
inst✝¹ : DistribMulAction α R
inst✝ : SMulCommClass α R R
c : α
B : BilinForm R M
a : R
x y : M
⊢ (fun x y => c • bilin B x y) (a • x) y = a * (fun x y => c • bilin B x y) x y
[PROOFSTEP]
simp only [smul_left, mul_smul_comm]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
α : Type ?u.105863
inst✝² : Monoid α
inst✝¹ : DistribMulAction α R
inst✝ : SMulCommClass α R R
c : α
B : BilinForm R M
x y z : M
⊢ (fun x y => c • bilin B x y) x (y + z) = (fun x y => c • bilin B x y) x y + (fun x y => c • bilin B x y) x z
[PROOFSTEP]
simp only [add_right, smul_add]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
α : Type ?u.105863
inst✝² : Monoid α
inst✝¹ : DistribMulAction α R
inst✝ : SMulCommClass α R R
c : α
B : BilinForm R M
a : R
x y : M
⊢ (fun x y => c • bilin B x y) x (a • y) = a * (fun x y => c • bilin B x y) x y
[PROOFSTEP]
simp only [smul_right, mul_smul_comm]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ B : BilinForm R₁ M₁
x y z : M₁
⊢ (fun x y => -bilin B x y) (x + y) z = (fun x y => -bilin B x y) x z + (fun x y => -bilin B x y) y z
[PROOFSTEP]
simp only [add_left, neg_add]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ B : BilinForm R₁ M₁
a : R₁
x y : M₁
⊢ (fun x y => -bilin B x y) (a • x) y = a * (fun x y => -bilin B x y) x y
[PROOFSTEP]
simp only [smul_left, mul_neg]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ B : BilinForm R₁ M₁
x y z : M₁
⊢ (fun x y => -bilin B x y) x (y + z) = (fun x y => -bilin B x y) x y + (fun x y => -bilin B x y) x z
[PROOFSTEP]
simp only [add_right, neg_add]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ B : BilinForm R₁ M₁
a : R₁
x y : M₁
⊢ (fun x y => -bilin B x y) x (a • y) = a * (fun x y => -bilin B x y) x y
[PROOFSTEP]
simp only [smul_right, mul_neg]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D✝ : BilinForm R M
D₁ B D : BilinForm R₁ M₁
x y z : M₁
⊢ (fun x y => bilin B x y - bilin D x y) (x + y) z =
    (fun x y => bilin B x y - bilin D x y) x z + (fun x y => bilin B x y - bilin D x y) y z
[PROOFSTEP]
simp only [add_left, add_left, add_sub_add_comm]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D✝ : BilinForm R M
D₁ B D : BilinForm R₁ M₁
a : R₁
x y : M₁
⊢ (fun x y => bilin B x y - bilin D x y) (a • x) y = a * (fun x y => bilin B x y - bilin D x y) x y
[PROOFSTEP]
simp only [smul_left, smul_left, mul_sub]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D✝ : BilinForm R M
D₁ B D : BilinForm R₁ M₁
x y z : M₁
⊢ (fun x y => bilin B x y - bilin D x y) x (y + z) =
    (fun x y => bilin B x y - bilin D x y) x y + (fun x y => bilin B x y - bilin D x y) x z
[PROOFSTEP]
simp only [add_right, add_right, add_sub_add_comm]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D✝ : BilinForm R M
D₁ B D : BilinForm R₁ M₁
a : R₁
x y : M₁
⊢ (fun x y => bilin B x y - bilin D x y) x (a • y) = a * (fun x y => bilin B x y - bilin D x y) x y
[PROOFSTEP]
simp only [smul_right, smul_right, mul_sub]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁵ : Semiring R
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹² : Ring R₁
inst✝¹¹ : AddCommGroup M₁
inst✝¹⁰ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁹ : CommSemiring R₂
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁶ : CommRing R₃
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝ : Algebra R₂ R
A₁ A₂ : BilinForm R M
⊢ (fun A =>
        { bilin := fun i j => bilin A j i,
          bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
          bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
          bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
          bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
      (A₁ + A₂) =
    (fun A =>
          { bilin := fun i j => bilin A j i,
            bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
            bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
            bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
            bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
        A₁ +
      (fun A =>
          { bilin := fun i j => bilin A j i,
            bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
            bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
            bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
            bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
        A₂
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
M : Type u_2
inst✝¹⁵ : Semiring R
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹² : Ring R₁
inst✝¹¹ : AddCommGroup M₁
inst✝¹⁰ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁹ : CommSemiring R₂
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁶ : CommRing R₃
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝ : Algebra R₂ R
A₁ A₂ : BilinForm R M
x✝ y✝ : M
⊢ bilin
      ((fun A =>
          { bilin := fun i j => bilin A j i,
            bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
            bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
            bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
            bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
        (A₁ + A₂))
      x✝ y✝ =
    bilin
      ((fun A =>
            { bilin := fun i j => bilin A j i,
              bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
              bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
              bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
              bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
          A₁ +
        (fun A =>
            { bilin := fun i j => bilin A j i,
              bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
              bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
              bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
              bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
          A₂)
      x✝ y✝
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁵ : Semiring R
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹² : Ring R₁
inst✝¹¹ : AddCommGroup M₁
inst✝¹⁰ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁹ : CommSemiring R₂
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁶ : CommRing R₃
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝ : Algebra R₂ R
c : R₂
A : BilinForm R M
⊢ AddHom.toFun
      {
        toFun := fun A =>
          { bilin := fun i j => bilin A j i,
            bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
            bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
            bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
            bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) },
        map_add' :=
          (_ :
            ∀ (A₁ A₂ : BilinForm R M),
              (fun A =>
                    { bilin := fun i j => bilin A j i,
                      bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                      bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                      bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                      bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
                  (A₁ + A₂) =
                (fun A =>
                      { bilin := fun i j => bilin A j i,
                        bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                        bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                        bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                        bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
                    A₁ +
                  (fun A =>
                      { bilin := fun i j => bilin A j i,
                        bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                        bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                        bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                        bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
                    A₂) }
      (c • A) =
    ↑(RingHom.id R₂) c •
      AddHom.toFun
        {
          toFun := fun A =>
            { bilin := fun i j => bilin A j i,
              bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
              bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
              bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
              bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) },
          map_add' :=
            (_ :
              ∀ (A₁ A₂ : BilinForm R M),
                (fun A =>
                      { bilin := fun i j => bilin A j i,
                        bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                        bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                        bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                        bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
                    (A₁ + A₂) =
                  (fun A =>
                        { bilin := fun i j => bilin A j i,
                          bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                          bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                          bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                          bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
                      A₁ +
                    (fun A =>
                        { bilin := fun i j => bilin A j i,
                          bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                          bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                          bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                          bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
                      A₂) }
        A
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
M : Type u_2
inst✝¹⁵ : Semiring R
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹² : Ring R₁
inst✝¹¹ : AddCommGroup M₁
inst✝¹⁰ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁹ : CommSemiring R₂
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁶ : CommRing R₃
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝ : Algebra R₂ R
c : R₂
A : BilinForm R M
x✝ y✝ : M
⊢ bilin
      (AddHom.toFun
        {
          toFun := fun A =>
            { bilin := fun i j => bilin A j i,
              bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
              bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
              bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
              bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) },
          map_add' :=
            (_ :
              ∀ (A₁ A₂ : BilinForm R M),
                (fun A =>
                      { bilin := fun i j => bilin A j i,
                        bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                        bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                        bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                        bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
                    (A₁ + A₂) =
                  (fun A =>
                        { bilin := fun i j => bilin A j i,
                          bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                          bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                          bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                          bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
                      A₁ +
                    (fun A =>
                        { bilin := fun i j => bilin A j i,
                          bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                          bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                          bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                          bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
                      A₂) }
        (c • A))
      x✝ y✝ =
    bilin
      (↑(RingHom.id R₂) c •
        AddHom.toFun
          {
            toFun := fun A =>
              { bilin := fun i j => bilin A j i,
                bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) },
            map_add' :=
              (_ :
                ∀ (A₁ A₂ : BilinForm R M),
                  (fun A =>
                        { bilin := fun i j => bilin A j i,
                          bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                          bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                          bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                          bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
                      (A₁ + A₂) =
                    (fun A =>
                          { bilin := fun i j => bilin A j i,
                            bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                            bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                            bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                            bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
                        A₁ +
                      (fun A =>
                          { bilin := fun i j => bilin A j i,
                            bilin_add_left := (_ : ∀ (x y z : M), bilin A z (x + y) = bilin A z x + bilin A z y),
                            bilin_smul_left := (_ : ∀ (a : R) (x y : M), bilin A y (a • x) = a * bilin A y x),
                            bilin_add_right := (_ : ∀ (x y z : M), bilin A (y + z) x = bilin A y x + bilin A z x),
                            bilin_smul_right := (_ : ∀ (a : R) (x y : M), bilin A (a • y) x = a * bilin A y x) })
                        A₂) }
          A)
      x✝ y✝
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁵ : Semiring R
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹² : Ring R₁
inst✝¹¹ : AddCommGroup M₁
inst✝¹⁰ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁹ : CommSemiring R₂
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁶ : CommRing R₃
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝ : Algebra R₂ R
A : BilinForm R M
⊢ ↑(flipHomAux R₂) (↑(flipHomAux R₂) A) = A
[PROOFSTEP]
ext A
[GOAL]
case H
R : Type u_1
M : Type u_2
inst✝¹⁵ : Semiring R
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹² : Ring R₁
inst✝¹¹ : AddCommGroup M₁
inst✝¹⁰ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁹ : CommSemiring R₂
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁶ : CommRing R₃
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝ : Algebra R₂ R
A✝ : BilinForm R M
A y✝ : M
⊢ bilin (↑(flipHomAux R₂) (↑(flipHomAux R₂) A✝)) A y✝ = bilin A✝ A y✝
[PROOFSTEP]
simp [flipHomAux]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁵ : Semiring R
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹² : Ring R₁
inst✝¹¹ : AddCommGroup M₁
inst✝¹⁰ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁹ : CommSemiring R₂
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁶ : CommRing R₃
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝ : Algebra R₂ R
⊢ LinearEquiv.trans (flipHom R₂) (flipHom R₂) = LinearEquiv.refl R₂ (BilinForm R M)
[PROOFSTEP]
ext A
[GOAL]
case h.H
R : Type u_1
M : Type u_2
inst✝¹⁵ : Semiring R
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹² : Ring R₁
inst✝¹¹ : AddCommGroup M₁
inst✝¹⁰ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁹ : CommSemiring R₂
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁶ : CommRing R₃
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝ : Algebra R₂ R
A : BilinForm R M
x✝ y✝ : M
⊢ bilin (↑(LinearEquiv.trans (flipHom R₂) (flipHom R₂)) A) x✝ y✝ =
    bilin (↑(LinearEquiv.refl R₂ (BilinForm R M)) A) x✝ y✝
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
A : BilinForm R M
x₁ x₂ x : M
⊢ ↑(toLinHomAux₁ A (x₁ + x₂)) x = ↑(toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) x
[PROOFSTEP]
simp only [toLinHomAux₁, LinearMap.coe_mk, LinearMap.add_apply, add_left, AddHom.coe_mk]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
A : BilinForm R M
c : R₂
x : M
⊢ ∀ (x_1 : M),
    ↑(AddHom.toFun
            { toFun := toLinHomAux₁ A,
              map_add' := (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) }
            (c • x))
        x_1 =
      ↑(↑(RingHom.id R₂) c •
            AddHom.toFun
              { toFun := toLinHomAux₁ A,
                map_add' := (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) }
              x)
        x_1
[PROOFSTEP]
dsimp [toLinHomAux₁]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
A : BilinForm R M
c : R₂
x : M
⊢ ∀ (x_1 : M), bilin A (c • x) x_1 = c • bilin A x x_1
[PROOFSTEP]
intros
  -- Porting note: moved out of `simp only`
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
A : BilinForm R M
c : R₂
x x✝ : M
⊢ bilin A (c • x) x✝ = c • bilin A x x✝
[PROOFSTEP]
rw [← algebraMap_smul R c x]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
A : BilinForm R M
c : R₂
x x✝ : M
⊢ bilin A (↑(algebraMap R₂ R) c • x) x✝ = c • bilin A x x✝
[PROOFSTEP]
simp only [Algebra.smul_def, LinearMap.coe_mk, LinearMap.smul_apply, smul_left]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
A₁ A₂ : BilinForm R M
x : M
⊢ ↑(toLinHomAux₂ (A₁ + A₂)) x = ↑(toLinHomAux₂ A₁ + toLinHomAux₂ A₂) x
[PROOFSTEP]
dsimp only [toLinHomAux₁, toLinHomAux₂]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
A₁ A₂ : BilinForm R M
x : M
⊢ ↑{
          toAddHom :=
            {
              toFun := fun x =>
                {
                  toAddHom :=
                    { toFun := fun y => bilin (A₁ + A₂) x y,
                      map_add' :=
                        (_ : ∀ (y z : M), bilin (A₁ + A₂) x (y + z) = bilin (A₁ + A₂) x y + bilin (A₁ + A₂) x z) },
                  map_smul' := (_ : ∀ (c : R) (y : M), bilin (A₁ + A₂) x (c • y) = c * bilin (A₁ + A₂) x y) },
              map_add' :=
                (_ :
                  ∀ (x₁ x₂ : M),
                    toLinHomAux₁ (A₁ + A₂) (x₁ + x₂) = toLinHomAux₁ (A₁ + A₂) x₁ + toLinHomAux₁ (A₁ + A₂) x₂) },
          map_smul' :=
            (_ :
              ∀ (c : R₂) (x : M),
                AddHom.toFun
                    { toFun := toLinHomAux₁ (A₁ + A₂),
                      map_add' :=
                        (_ :
                          ∀ (x₁ x₂ : M),
                            toLinHomAux₁ (A₁ + A₂) (x₁ + x₂) = toLinHomAux₁ (A₁ + A₂) x₁ + toLinHomAux₁ (A₁ + A₂) x₂) }
                    (c • x) =
                  ↑(RingHom.id R₂) c •
                    AddHom.toFun
                      { toFun := toLinHomAux₁ (A₁ + A₂),
                        map_add' :=
                          (_ :
                            ∀ (x₁ x₂ : M),
                              toLinHomAux₁ (A₁ + A₂) (x₁ + x₂) =
                                toLinHomAux₁ (A₁ + A₂) x₁ + toLinHomAux₁ (A₁ + A₂) x₂) }
                      x) }
      x =
    ↑({
            toAddHom :=
              {
                toFun := fun x =>
                  {
                    toAddHom :=
                      { toFun := fun y => bilin A₁ x y,
                        map_add' := (_ : ∀ (y z : M), bilin A₁ x (y + z) = bilin A₁ x y + bilin A₁ x z) },
                    map_smul' := (_ : ∀ (c : R) (y : M), bilin A₁ x (c • y) = c * bilin A₁ x y) },
                map_add' := (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A₁ (x₁ + x₂) = toLinHomAux₁ A₁ x₁ + toLinHomAux₁ A₁ x₂) },
            map_smul' :=
              (_ :
                ∀ (c : R₂) (x : M),
                  AddHom.toFun
                      { toFun := toLinHomAux₁ A₁,
                        map_add' :=
                          (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A₁ (x₁ + x₂) = toLinHomAux₁ A₁ x₁ + toLinHomAux₁ A₁ x₂) }
                      (c • x) =
                    ↑(RingHom.id R₂) c •
                      AddHom.toFun
                        { toFun := toLinHomAux₁ A₁,
                          map_add' :=
                            (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A₁ (x₁ + x₂) = toLinHomAux₁ A₁ x₁ + toLinHomAux₁ A₁ x₂) }
                        x) } +
          {
            toAddHom :=
              {
                toFun := fun x =>
                  {
                    toAddHom :=
                      { toFun := fun y => bilin A₂ x y,
                        map_add' := (_ : ∀ (y z : M), bilin A₂ x (y + z) = bilin A₂ x y + bilin A₂ x z) },
                    map_smul' := (_ : ∀ (c : R) (y : M), bilin A₂ x (c • y) = c * bilin A₂ x y) },
                map_add' := (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A₂ (x₁ + x₂) = toLinHomAux₁ A₂ x₁ + toLinHomAux₁ A₂ x₂) },
            map_smul' :=
              (_ :
                ∀ (c : R₂) (x : M),
                  AddHom.toFun
                      { toFun := toLinHomAux₁ A₂,
                        map_add' :=
                          (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A₂ (x₁ + x₂) = toLinHomAux₁ A₂ x₁ + toLinHomAux₁ A₂ x₂) }
                      (c • x) =
                    ↑(RingHom.id R₂) c •
                      AddHom.toFun
                        { toFun := toLinHomAux₁ A₂,
                          map_add' :=
                            (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A₂ (x₁ + x₂) = toLinHomAux₁ A₂ x₁ + toLinHomAux₁ A₂ x₂) }
                        x) })
      x
[PROOFSTEP]
apply LinearMap.ext
[GOAL]
case h
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
A₁ A₂ : BilinForm R M
x : M
⊢ ∀ (x_1 : M),
    ↑(↑{
                toAddHom :=
                  {
                    toFun := fun x =>
                      {
                        toAddHom :=
                          { toFun := fun y => bilin (A₁ + A₂) x y,
                            map_add' :=
                              (_ :
                                ∀ (y z : M), bilin (A₁ + A₂) x (y + z) = bilin (A₁ + A₂) x y + bilin (A₁ + A₂) x z) },
                        map_smul' := (_ : ∀ (c : R) (y : M), bilin (A₁ + A₂) x (c • y) = c * bilin (A₁ + A₂) x y) },
                    map_add' :=
                      (_ :
                        ∀ (x₁ x₂ : M),
                          toLinHomAux₁ (A₁ + A₂) (x₁ + x₂) = toLinHomAux₁ (A₁ + A₂) x₁ + toLinHomAux₁ (A₁ + A₂) x₂) },
                map_smul' :=
                  (_ :
                    ∀ (c : R₂) (x : M),
                      AddHom.toFun
                          { toFun := toLinHomAux₁ (A₁ + A₂),
                            map_add' :=
                              (_ :
                                ∀ (x₁ x₂ : M),
                                  toLinHomAux₁ (A₁ + A₂) (x₁ + x₂) =
                                    toLinHomAux₁ (A₁ + A₂) x₁ + toLinHomAux₁ (A₁ + A₂) x₂) }
                          (c • x) =
                        ↑(RingHom.id R₂) c •
                          AddHom.toFun
                            { toFun := toLinHomAux₁ (A₁ + A₂),
                              map_add' :=
                                (_ :
                                  ∀ (x₁ x₂ : M),
                                    toLinHomAux₁ (A₁ + A₂) (x₁ + x₂) =
                                      toLinHomAux₁ (A₁ + A₂) x₁ + toLinHomAux₁ (A₁ + A₂) x₂) }
                            x) }
            x)
        x_1 =
      ↑(↑({
                  toAddHom :=
                    {
                      toFun := fun x =>
                        {
                          toAddHom :=
                            { toFun := fun y => bilin A₁ x y,
                              map_add' := (_ : ∀ (y z : M), bilin A₁ x (y + z) = bilin A₁ x y + bilin A₁ x z) },
                          map_smul' := (_ : ∀ (c : R) (y : M), bilin A₁ x (c • y) = c * bilin A₁ x y) },
                      map_add' :=
                        (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A₁ (x₁ + x₂) = toLinHomAux₁ A₁ x₁ + toLinHomAux₁ A₁ x₂) },
                  map_smul' :=
                    (_ :
                      ∀ (c : R₂) (x : M),
                        AddHom.toFun
                            { toFun := toLinHomAux₁ A₁,
                              map_add' :=
                                (_ :
                                  ∀ (x₁ x₂ : M), toLinHomAux₁ A₁ (x₁ + x₂) = toLinHomAux₁ A₁ x₁ + toLinHomAux₁ A₁ x₂) }
                            (c • x) =
                          ↑(RingHom.id R₂) c •
                            AddHom.toFun
                              { toFun := toLinHomAux₁ A₁,
                                map_add' :=
                                  (_ :
                                    ∀ (x₁ x₂ : M),
                                      toLinHomAux₁ A₁ (x₁ + x₂) = toLinHomAux₁ A₁ x₁ + toLinHomAux₁ A₁ x₂) }
                              x) } +
                {
                  toAddHom :=
                    {
                      toFun := fun x =>
                        {
                          toAddHom :=
                            { toFun := fun y => bilin A₂ x y,
                              map_add' := (_ : ∀ (y z : M), bilin A₂ x (y + z) = bilin A₂ x y + bilin A₂ x z) },
                          map_smul' := (_ : ∀ (c : R) (y : M), bilin A₂ x (c • y) = c * bilin A₂ x y) },
                      map_add' :=
                        (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A₂ (x₁ + x₂) = toLinHomAux₁ A₂ x₁ + toLinHomAux₁ A₂ x₂) },
                  map_smul' :=
                    (_ :
                      ∀ (c : R₂) (x : M),
                        AddHom.toFun
                            { toFun := toLinHomAux₁ A₂,
                              map_add' :=
                                (_ :
                                  ∀ (x₁ x₂ : M), toLinHomAux₁ A₂ (x₁ + x₂) = toLinHomAux₁ A₂ x₁ + toLinHomAux₁ A₂ x₂) }
                            (c • x) =
                          ↑(RingHom.id R₂) c •
                            AddHom.toFun
                              { toFun := toLinHomAux₁ A₂,
                                map_add' :=
                                  (_ :
                                    ∀ (x₁ x₂ : M),
                                      toLinHomAux₁ A₂ (x₁ + x₂) = toLinHomAux₁ A₂ x₁ + toLinHomAux₁ A₂ x₂) }
                              x) })
            x)
        x_1
[PROOFSTEP]
intro y
[GOAL]
case h
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
A₁ A₂ : BilinForm R M
x y : M
⊢ ↑(↑{
              toAddHom :=
                {
                  toFun := fun x =>
                    {
                      toAddHom :=
                        { toFun := fun y => bilin (A₁ + A₂) x y,
                          map_add' :=
                            (_ : ∀ (y z : M), bilin (A₁ + A₂) x (y + z) = bilin (A₁ + A₂) x y + bilin (A₁ + A₂) x z) },
                      map_smul' := (_ : ∀ (c : R) (y : M), bilin (A₁ + A₂) x (c • y) = c * bilin (A₁ + A₂) x y) },
                  map_add' :=
                    (_ :
                      ∀ (x₁ x₂ : M),
                        toLinHomAux₁ (A₁ + A₂) (x₁ + x₂) = toLinHomAux₁ (A₁ + A₂) x₁ + toLinHomAux₁ (A₁ + A₂) x₂) },
              map_smul' :=
                (_ :
                  ∀ (c : R₂) (x : M),
                    AddHom.toFun
                        { toFun := toLinHomAux₁ (A₁ + A₂),
                          map_add' :=
                            (_ :
                              ∀ (x₁ x₂ : M),
                                toLinHomAux₁ (A₁ + A₂) (x₁ + x₂) =
                                  toLinHomAux₁ (A₁ + A₂) x₁ + toLinHomAux₁ (A₁ + A₂) x₂) }
                        (c • x) =
                      ↑(RingHom.id R₂) c •
                        AddHom.toFun
                          { toFun := toLinHomAux₁ (A₁ + A₂),
                            map_add' :=
                              (_ :
                                ∀ (x₁ x₂ : M),
                                  toLinHomAux₁ (A₁ + A₂) (x₁ + x₂) =
                                    toLinHomAux₁ (A₁ + A₂) x₁ + toLinHomAux₁ (A₁ + A₂) x₂) }
                          x) }
          x)
      y =
    ↑(↑({
                toAddHom :=
                  {
                    toFun := fun x =>
                      {
                        toAddHom :=
                          { toFun := fun y => bilin A₁ x y,
                            map_add' := (_ : ∀ (y z : M), bilin A₁ x (y + z) = bilin A₁ x y + bilin A₁ x z) },
                        map_smul' := (_ : ∀ (c : R) (y : M), bilin A₁ x (c • y) = c * bilin A₁ x y) },
                    map_add' :=
                      (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A₁ (x₁ + x₂) = toLinHomAux₁ A₁ x₁ + toLinHomAux₁ A₁ x₂) },
                map_smul' :=
                  (_ :
                    ∀ (c : R₂) (x : M),
                      AddHom.toFun
                          { toFun := toLinHomAux₁ A₁,
                            map_add' :=
                              (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A₁ (x₁ + x₂) = toLinHomAux₁ A₁ x₁ + toLinHomAux₁ A₁ x₂) }
                          (c • x) =
                        ↑(RingHom.id R₂) c •
                          AddHom.toFun
                            { toFun := toLinHomAux₁ A₁,
                              map_add' :=
                                (_ :
                                  ∀ (x₁ x₂ : M), toLinHomAux₁ A₁ (x₁ + x₂) = toLinHomAux₁ A₁ x₁ + toLinHomAux₁ A₁ x₂) }
                            x) } +
              {
                toAddHom :=
                  {
                    toFun := fun x =>
                      {
                        toAddHom :=
                          { toFun := fun y => bilin A₂ x y,
                            map_add' := (_ : ∀ (y z : M), bilin A₂ x (y + z) = bilin A₂ x y + bilin A₂ x z) },
                        map_smul' := (_ : ∀ (c : R) (y : M), bilin A₂ x (c • y) = c * bilin A₂ x y) },
                    map_add' :=
                      (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A₂ (x₁ + x₂) = toLinHomAux₁ A₂ x₁ + toLinHomAux₁ A₂ x₂) },
                map_smul' :=
                  (_ :
                    ∀ (c : R₂) (x : M),
                      AddHom.toFun
                          { toFun := toLinHomAux₁ A₂,
                            map_add' :=
                              (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A₂ (x₁ + x₂) = toLinHomAux₁ A₂ x₁ + toLinHomAux₁ A₂ x₂) }
                          (c • x) =
                        ↑(RingHom.id R₂) c •
                          AddHom.toFun
                            { toFun := toLinHomAux₁ A₂,
                              map_add' :=
                                (_ :
                                  ∀ (x₁ x₂ : M), toLinHomAux₁ A₂ (x₁ + x₂) = toLinHomAux₁ A₂ x₁ + toLinHomAux₁ A₂ x₂) }
                            x) })
          x)
      y
[PROOFSTEP]
simp only [toLinHomAux₂, toLinHomAux₁, LinearMap.coe_mk, LinearMap.add_apply, add_apply, AddHom.coe_mk]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
c : R₂
A : BilinForm R M
⊢ AddHom.toFun
      { toFun := toLinHomAux₂,
        map_add' := (_ : ∀ (A₁ A₂ : BilinForm R M), toLinHomAux₂ (A₁ + A₂) = toLinHomAux₂ A₁ + toLinHomAux₂ A₂) }
      (c • A) =
    ↑(RingHom.id R₂) c •
      AddHom.toFun
        { toFun := toLinHomAux₂,
          map_add' := (_ : ∀ (A₁ A₂ : BilinForm R M), toLinHomAux₂ (A₁ + A₂) = toLinHomAux₂ A₁ + toLinHomAux₂ A₂) }
        A
[PROOFSTEP]
dsimp [toLinHomAux₁, toLinHomAux₂]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
c : R₂
A : BilinForm R M
⊢ {
      toAddHom :=
        {
          toFun := fun x =>
            {
              toAddHom :=
                { toFun := fun y => c • bilin A x y,
                  map_add' := (_ : ∀ (y z : M), bilin (c • A) x (y + z) = bilin (c • A) x y + bilin (c • A) x z) },
              map_smul' := (_ : ∀ (c_1 : R) (y : M), bilin (c • A) x (c_1 • y) = c_1 * bilin (c • A) x y) },
          map_add' :=
            (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) },
      map_smul' :=
        (_ :
          ∀ (c_1 : R₂) (x : M),
            AddHom.toFun
                { toFun := toLinHomAux₁ (c • A),
                  map_add' :=
                    (_ :
                      ∀ (x₁ x₂ : M),
                        toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) }
                (c_1 • x) =
              ↑(RingHom.id R₂) c_1 •
                AddHom.toFun
                  { toFun := toLinHomAux₁ (c • A),
                    map_add' :=
                      (_ :
                        ∀ (x₁ x₂ : M),
                          toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) }
                  x) } =
    c •
      {
        toAddHom :=
          {
            toFun := fun x =>
              {
                toAddHom :=
                  { toFun := fun y => bilin A x y,
                    map_add' := (_ : ∀ (y z : M), bilin A x (y + z) = bilin A x y + bilin A x z) },
                map_smul' := (_ : ∀ (c : R) (y : M), bilin A x (c • y) = c * bilin A x y) },
            map_add' := (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) },
        map_smul' :=
          (_ :
            ∀ (c : R₂) (x : M),
              AddHom.toFun
                  { toFun := toLinHomAux₁ A,
                    map_add' := (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) }
                  (c • x) =
                ↑(RingHom.id R₂) c •
                  AddHom.toFun
                    { toFun := toLinHomAux₁ A,
                      map_add' :=
                        (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) }
                    x) }
[PROOFSTEP]
apply LinearMap.ext
[GOAL]
case h
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
c : R₂
A : BilinForm R M
⊢ ∀ (x : M),
    ↑{
            toAddHom :=
              {
                toFun := fun x =>
                  {
                    toAddHom :=
                      { toFun := fun y => c • bilin A x y,
                        map_add' :=
                          (_ : ∀ (y z : M), bilin (c • A) x (y + z) = bilin (c • A) x y + bilin (c • A) x z) },
                    map_smul' := (_ : ∀ (c_1 : R) (y : M), bilin (c • A) x (c_1 • y) = c_1 * bilin (c • A) x y) },
                map_add' :=
                  (_ :
                    ∀ (x₁ x₂ : M),
                      toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) },
            map_smul' :=
              (_ :
                ∀ (c_1 : R₂) (x : M),
                  AddHom.toFun
                      { toFun := toLinHomAux₁ (c • A),
                        map_add' :=
                          (_ :
                            ∀ (x₁ x₂ : M),
                              toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) }
                      (c_1 • x) =
                    ↑(RingHom.id R₂) c_1 •
                      AddHom.toFun
                        { toFun := toLinHomAux₁ (c • A),
                          map_add' :=
                            (_ :
                              ∀ (x₁ x₂ : M),
                                toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) }
                        x) }
        x =
      ↑(c •
            {
              toAddHom :=
                {
                  toFun := fun x =>
                    {
                      toAddHom :=
                        { toFun := fun y => bilin A x y,
                          map_add' := (_ : ∀ (y z : M), bilin A x (y + z) = bilin A x y + bilin A x z) },
                      map_smul' := (_ : ∀ (c : R) (y : M), bilin A x (c • y) = c * bilin A x y) },
                  map_add' := (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) },
              map_smul' :=
                (_ :
                  ∀ (c : R₂) (x : M),
                    AddHom.toFun
                        { toFun := toLinHomAux₁ A,
                          map_add' :=
                            (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) }
                        (c • x) =
                      ↑(RingHom.id R₂) c •
                        AddHom.toFun
                          { toFun := toLinHomAux₁ A,
                            map_add' :=
                              (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) }
                          x) })
        x
[PROOFSTEP]
intro x
[GOAL]
case h
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
c : R₂
A : BilinForm R M
x : M
⊢ ↑{
          toAddHom :=
            {
              toFun := fun x =>
                {
                  toAddHom :=
                    { toFun := fun y => c • bilin A x y,
                      map_add' := (_ : ∀ (y z : M), bilin (c • A) x (y + z) = bilin (c • A) x y + bilin (c • A) x z) },
                  map_smul' := (_ : ∀ (c_1 : R) (y : M), bilin (c • A) x (c_1 • y) = c_1 * bilin (c • A) x y) },
              map_add' :=
                (_ :
                  ∀ (x₁ x₂ : M), toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) },
          map_smul' :=
            (_ :
              ∀ (c_1 : R₂) (x : M),
                AddHom.toFun
                    { toFun := toLinHomAux₁ (c • A),
                      map_add' :=
                        (_ :
                          ∀ (x₁ x₂ : M),
                            toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) }
                    (c_1 • x) =
                  ↑(RingHom.id R₂) c_1 •
                    AddHom.toFun
                      { toFun := toLinHomAux₁ (c • A),
                        map_add' :=
                          (_ :
                            ∀ (x₁ x₂ : M),
                              toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) }
                      x) }
      x =
    ↑(c •
          {
            toAddHom :=
              {
                toFun := fun x =>
                  {
                    toAddHom :=
                      { toFun := fun y => bilin A x y,
                        map_add' := (_ : ∀ (y z : M), bilin A x (y + z) = bilin A x y + bilin A x z) },
                    map_smul' := (_ : ∀ (c : R) (y : M), bilin A x (c • y) = c * bilin A x y) },
                map_add' := (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) },
            map_smul' :=
              (_ :
                ∀ (c : R₂) (x : M),
                  AddHom.toFun
                      { toFun := toLinHomAux₁ A,
                        map_add' :=
                          (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) }
                      (c • x) =
                    ↑(RingHom.id R₂) c •
                      AddHom.toFun
                        { toFun := toLinHomAux₁ A,
                          map_add' :=
                            (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) }
                        x) })
      x
[PROOFSTEP]
apply LinearMap.ext
[GOAL]
case h.h
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
c : R₂
A : BilinForm R M
x : M
⊢ ∀ (x_1 : M),
    ↑(↑{
                toAddHom :=
                  {
                    toFun := fun x =>
                      {
                        toAddHom :=
                          { toFun := fun y => c • bilin A x y,
                            map_add' :=
                              (_ : ∀ (y z : M), bilin (c • A) x (y + z) = bilin (c • A) x y + bilin (c • A) x z) },
                        map_smul' := (_ : ∀ (c_1 : R) (y : M), bilin (c • A) x (c_1 • y) = c_1 * bilin (c • A) x y) },
                    map_add' :=
                      (_ :
                        ∀ (x₁ x₂ : M),
                          toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) },
                map_smul' :=
                  (_ :
                    ∀ (c_1 : R₂) (x : M),
                      AddHom.toFun
                          { toFun := toLinHomAux₁ (c • A),
                            map_add' :=
                              (_ :
                                ∀ (x₁ x₂ : M),
                                  toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) }
                          (c_1 • x) =
                        ↑(RingHom.id R₂) c_1 •
                          AddHom.toFun
                            { toFun := toLinHomAux₁ (c • A),
                              map_add' :=
                                (_ :
                                  ∀ (x₁ x₂ : M),
                                    toLinHomAux₁ (c • A) (x₁ + x₂) =
                                      toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) }
                            x) }
            x)
        x_1 =
      ↑(↑(c •
                {
                  toAddHom :=
                    {
                      toFun := fun x =>
                        {
                          toAddHom :=
                            { toFun := fun y => bilin A x y,
                              map_add' := (_ : ∀ (y z : M), bilin A x (y + z) = bilin A x y + bilin A x z) },
                          map_smul' := (_ : ∀ (c : R) (y : M), bilin A x (c • y) = c * bilin A x y) },
                      map_add' :=
                        (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) },
                  map_smul' :=
                    (_ :
                      ∀ (c : R₂) (x : M),
                        AddHom.toFun
                            { toFun := toLinHomAux₁ A,
                              map_add' :=
                                (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) }
                            (c • x) =
                          ↑(RingHom.id R₂) c •
                            AddHom.toFun
                              { toFun := toLinHomAux₁ A,
                                map_add' :=
                                  (_ :
                                    ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) }
                              x) })
            x)
        x_1
[PROOFSTEP]
intro y
[GOAL]
case h.h
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝² : Algebra R₂ R
inst✝¹ : Module R₂ M
inst✝ : IsScalarTower R₂ R M
c : R₂
A : BilinForm R M
x y : M
⊢ ↑(↑{
              toAddHom :=
                {
                  toFun := fun x =>
                    {
                      toAddHom :=
                        { toFun := fun y => c • bilin A x y,
                          map_add' :=
                            (_ : ∀ (y z : M), bilin (c • A) x (y + z) = bilin (c • A) x y + bilin (c • A) x z) },
                      map_smul' := (_ : ∀ (c_1 : R) (y : M), bilin (c • A) x (c_1 • y) = c_1 * bilin (c • A) x y) },
                  map_add' :=
                    (_ :
                      ∀ (x₁ x₂ : M),
                        toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) },
              map_smul' :=
                (_ :
                  ∀ (c_1 : R₂) (x : M),
                    AddHom.toFun
                        { toFun := toLinHomAux₁ (c • A),
                          map_add' :=
                            (_ :
                              ∀ (x₁ x₂ : M),
                                toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) }
                        (c_1 • x) =
                      ↑(RingHom.id R₂) c_1 •
                        AddHom.toFun
                          { toFun := toLinHomAux₁ (c • A),
                            map_add' :=
                              (_ :
                                ∀ (x₁ x₂ : M),
                                  toLinHomAux₁ (c • A) (x₁ + x₂) = toLinHomAux₁ (c • A) x₁ + toLinHomAux₁ (c • A) x₂) }
                          x) }
          x)
      y =
    ↑(↑(c •
              {
                toAddHom :=
                  {
                    toFun := fun x =>
                      {
                        toAddHom :=
                          { toFun := fun y => bilin A x y,
                            map_add' := (_ : ∀ (y z : M), bilin A x (y + z) = bilin A x y + bilin A x z) },
                        map_smul' := (_ : ∀ (c : R) (y : M), bilin A x (c • y) = c * bilin A x y) },
                    map_add' := (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) },
                map_smul' :=
                  (_ :
                    ∀ (c : R₂) (x : M),
                      AddHom.toFun
                          { toFun := toLinHomAux₁ A,
                            map_add' :=
                              (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) }
                          (c • x) =
                        ↑(RingHom.id R₂) c •
                          AddHom.toFun
                            { toFun := toLinHomAux₁ A,
                              map_add' :=
                                (_ : ∀ (x₁ x₂ : M), toLinHomAux₁ A (x₁ + x₂) = toLinHomAux₁ A x₁ + toLinHomAux₁ A x₂) }
                            x) })
          x)
      y
[PROOFSTEP]
simp only [toLinHomAux₂, toLinHomAux₁, LinearMap.coe_mk, LinearMap.smul_apply, smul_apply, AddHom.coe_mk]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
f : M₂ →ₗ[R₂] M₂ →ₗ[R₂] R₂
x y z : M₂
⊢ (fun x y => ↑(↑f x) y) (x + y) z = (fun x y => ↑(↑f x) y) x z + (fun x y => ↑(↑f x) y) y z
[PROOFSTEP]
simp only
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
f : M₂ →ₗ[R₂] M₂ →ₗ[R₂] R₂
x y z : M₂
⊢ ↑(↑f (x + y)) z = ↑(↑f x) z + ↑(↑f y) z
[PROOFSTEP]
exact (LinearMap.map_add f x y).symm ▸ LinearMap.add_apply (f x) (f y) z
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
f : M₂ →ₗ[R₂] M₂ →ₗ[R₂] R₂
a : R₂
x y : M₂
⊢ (fun x y => ↑(↑f x) y) (a • x) y = a * (fun x y => ↑(↑f x) y) x y
[PROOFSTEP]
simp only [LinearMap.map_smul, LinearMap.smul_apply, smul_eq_mul]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
src✝ : BilinForm R₂ M₂ →ₗ[R₂] M₂ →ₗ[R₂] M₂ →ₗ[R₂] R₂ := toLinHom R₂
B : BilinForm R₂ M₂
⊢ LinearMap.toBilinAux
      (AddHom.toFun
        { toAddHom := src✝.toAddHom,
            map_smul' :=
              (_ :
                ∀ (r : R₂) (x : BilinForm R₂ M₂),
                  AddHom.toFun src✝.toAddHom (r • x) = ↑(RingHom.id R₂) r • AddHom.toFun src✝.toAddHom x) }.toAddHom
        B) =
    B
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
src✝ : BilinForm R₂ M₂ →ₗ[R₂] M₂ →ₗ[R₂] M₂ →ₗ[R₂] R₂ := toLinHom R₂
B : BilinForm R₂ M₂
x✝ y✝ : M₂
⊢ bilin
      (LinearMap.toBilinAux
        (AddHom.toFun
          { toAddHom := src✝.toAddHom,
              map_smul' :=
                (_ :
                  ∀ (r : R₂) (x : BilinForm R₂ M₂),
                    AddHom.toFun src✝.toAddHom (r • x) = ↑(RingHom.id R₂) r • AddHom.toFun src✝.toAddHom x) }.toAddHom
          B))
      x✝ y✝ =
    bilin B x✝ y✝
[PROOFSTEP]
simp [LinearMap.toBilinAux]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
src✝ : BilinForm R₂ M₂ →ₗ[R₂] M₂ →ₗ[R₂] M₂ →ₗ[R₂] R₂ := toLinHom R₂
B : M₂ →ₗ[R₂] M₂ →ₗ[R₂] R₂
⊢ AddHom.toFun
      { toAddHom := src✝.toAddHom,
          map_smul' :=
            (_ :
              ∀ (r : R₂) (x : BilinForm R₂ M₂),
                AddHom.toFun src✝.toAddHom (r • x) = ↑(RingHom.id R₂) r • AddHom.toFun src✝.toAddHom x) }.toAddHom
      (LinearMap.toBilinAux B) =
    B
[PROOFSTEP]
ext
[GOAL]
case h.h
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
src✝ : BilinForm R₂ M₂ →ₗ[R₂] M₂ →ₗ[R₂] M₂ →ₗ[R₂] R₂ := toLinHom R₂
B : M₂ →ₗ[R₂] M₂ →ₗ[R₂] R₂
x✝¹ x✝ : M₂
⊢ ↑(↑(AddHom.toFun
              { toAddHom := src✝.toAddHom,
                  map_smul' :=
                    (_ :
                      ∀ (r : R₂) (x : BilinForm R₂ M₂),
                        AddHom.toFun src✝.toAddHom (r • x) =
                          ↑(RingHom.id R₂) r • AddHom.toFun src✝.toAddHom x) }.toAddHom
              (LinearMap.toBilinAux B))
          x✝¹)
      x✝ =
    ↑(↑B x✝¹) x✝
[PROOFSTEP]
simp [LinearMap.toBilinAux]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
R' : Type u_11
inst✝³ : CommSemiring R'
inst✝² : Algebra R' R
inst✝¹ : Module R' M
inst✝ : IsScalarTower R' R M
f : R →ₗ[R'] R'
B : BilinForm R M
x y z : M
⊢ (fun x y => ↑f (BilinForm.bilin B x y)) (x + y) z =
    (fun x y => ↑f (BilinForm.bilin B x y)) x z + (fun x y => ↑f (BilinForm.bilin B x y)) y z
[PROOFSTEP]
simp only [BilinForm.add_left, map_add]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
R' : Type u_11
inst✝³ : CommSemiring R'
inst✝² : Algebra R' R
inst✝¹ : Module R' M
inst✝ : IsScalarTower R' R M
f : R →ₗ[R'] R'
B : BilinForm R M
r : R'
x y : M
⊢ (fun x y => ↑f (BilinForm.bilin B x y)) (r • x) y = r * (fun x y => ↑f (BilinForm.bilin B x y)) x y
[PROOFSTEP]
simp only
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
R' : Type u_11
inst✝³ : CommSemiring R'
inst✝² : Algebra R' R
inst✝¹ : Module R' M
inst✝ : IsScalarTower R' R M
f : R →ₗ[R'] R'
B : BilinForm R M
r : R'
x y : M
⊢ ↑f (BilinForm.bilin B (r • x) y) = r * ↑f (BilinForm.bilin B x y)
[PROOFSTEP]
rw [← smul_one_smul R r (_ : M), BilinForm.smul_left, smul_one_mul r (_ : R), map_smul, smul_eq_mul]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
R' : Type u_11
inst✝³ : CommSemiring R'
inst✝² : Algebra R' R
inst✝¹ : Module R' M
inst✝ : IsScalarTower R' R M
f : R →ₗ[R'] R'
B : BilinForm R M
x y z : M
⊢ (fun x y => ↑f (BilinForm.bilin B x y)) x (y + z) =
    (fun x y => ↑f (BilinForm.bilin B x y)) x y + (fun x y => ↑f (BilinForm.bilin B x y)) x z
[PROOFSTEP]
simp only [BilinForm.add_right, map_add]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
R' : Type u_11
inst✝³ : CommSemiring R'
inst✝² : Algebra R' R
inst✝¹ : Module R' M
inst✝ : IsScalarTower R' R M
f : R →ₗ[R'] R'
B : BilinForm R M
r : R'
x y : M
⊢ (fun x y => ↑f (BilinForm.bilin B x y)) x (r • y) = r * (fun x y => ↑f (BilinForm.bilin B x y)) x y
[PROOFSTEP]
simp only
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
R' : Type u_11
inst✝³ : CommSemiring R'
inst✝² : Algebra R' R
inst✝¹ : Module R' M
inst✝ : IsScalarTower R' R M
f : R →ₗ[R'] R'
B : BilinForm R M
r : R'
x y : M
⊢ ↑f (BilinForm.bilin B x (r • y)) = r * ↑f (BilinForm.bilin B x y)
[PROOFSTEP]
rw [← smul_one_smul R r (_ : M), BilinForm.smul_right, smul_one_mul r (_ : R), map_smul, smul_eq_mul]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M'
l r : M →ₗ[R] M'
x y z : M
⊢ (fun x y => bilin B (↑l x) (↑r y)) (x + y) z =
    (fun x y => bilin B (↑l x) (↑r y)) x z + (fun x y => bilin B (↑l x) (↑r y)) y z
[PROOFSTEP]
simp only [LinearMap.map_add, add_left]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M'
l r : M →ₗ[R] M'
x : R
y z : M
⊢ (fun x y => bilin B (↑l x) (↑r y)) (x • y) z = x * (fun x y => bilin B (↑l x) (↑r y)) y z
[PROOFSTEP]
simp only [LinearMap.map_smul, smul_left]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M'
l r : M →ₗ[R] M'
x y z : M
⊢ (fun x y => bilin B (↑l x) (↑r y)) x (y + z) =
    (fun x y => bilin B (↑l x) (↑r y)) x y + (fun x y => bilin B (↑l x) (↑r y)) x z
[PROOFSTEP]
simp only [LinearMap.map_add, add_right]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M'
l r : M →ₗ[R] M'
x : R
y z : M
⊢ (fun x y => bilin B (↑l x) (↑r y)) y (x • z) = x * (fun x y => bilin B (↑l x) (↑r y)) y z
[PROOFSTEP]
simp only [LinearMap.map_smul, smul_right]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M
r : M →ₗ[R] M
⊢ comp B LinearMap.id r = compRight B r
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M
r : M →ₗ[R] M
x✝ y✝ : M
⊢ bilin (comp B LinearMap.id r) x✝ y✝ = bilin (compRight B r) x✝ y✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M
l : M →ₗ[R] M
⊢ comp B l LinearMap.id = compLeft B l
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M
l : M →ₗ[R] M
x✝ y✝ : M
⊢ bilin (comp B l LinearMap.id) x✝ y✝ = bilin (compLeft B l) x✝ y✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M
⊢ compLeft B LinearMap.id = B
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M
x✝ y✝ : M
⊢ bilin (compLeft B LinearMap.id) x✝ y✝ = bilin B x✝ y✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M
⊢ compRight B LinearMap.id = B
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M
x✝ y✝ : M
⊢ bilin (compRight B LinearMap.id) x✝ y✝ = bilin B x✝ y✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M
⊢ comp B LinearMap.id LinearMap.id = B
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M
x✝ y✝ : M
⊢ bilin (comp B LinearMap.id LinearMap.id) x✝ y✝ = bilin B x✝ y✝
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B₁ B₂ : BilinForm R M'
l r : M →ₗ[R] M'
hₗ : Function.Surjective ↑l
hᵣ : Function.Surjective ↑r
⊢ comp B₁ l r = comp B₂ l r ↔ B₁ = B₂
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B₁ B₂ : BilinForm R M'
l r : M →ₗ[R] M'
hₗ : Function.Surjective ↑l
hᵣ : Function.Surjective ↑r
⊢ comp B₁ l r = comp B₂ l r → B₁ = B₂
[PROOFSTEP]
intro h
[GOAL]
case mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B₁ B₂ : BilinForm R M'
l r : M →ₗ[R] M'
hₗ : Function.Surjective ↑l
hᵣ : Function.Surjective ↑r
⊢ B₁ = B₂ → comp B₁ l r = comp B₂ l r
[PROOFSTEP]
intro h
[GOAL]
case mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B₁ B₂ : BilinForm R M'
l r : M →ₗ[R] M'
hₗ : Function.Surjective ↑l
hᵣ : Function.Surjective ↑r
h : comp B₁ l r = comp B₂ l r
⊢ B₁ = B₂
[PROOFSTEP]
ext x y
[GOAL]
case mp.H
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B₁ B₂ : BilinForm R M'
l r : M →ₗ[R] M'
hₗ : Function.Surjective ↑l
hᵣ : Function.Surjective ↑r
h : comp B₁ l r = comp B₂ l r
x y : M'
⊢ bilin B₁ x y = bilin B₂ x y
[PROOFSTEP]
cases' hₗ x with x' hx
[GOAL]
case mp.H.intro
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B₁ B₂ : BilinForm R M'
l r : M →ₗ[R] M'
hₗ : Function.Surjective ↑l
hᵣ : Function.Surjective ↑r
h : comp B₁ l r = comp B₂ l r
x y : M'
x' : M
hx : ↑l x' = x
⊢ bilin B₁ x y = bilin B₂ x y
[PROOFSTEP]
subst hx
[GOAL]
case mp.H.intro
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B₁ B₂ : BilinForm R M'
l r : M →ₗ[R] M'
hₗ : Function.Surjective ↑l
hᵣ : Function.Surjective ↑r
h : comp B₁ l r = comp B₂ l r
y : M'
x' : M
⊢ bilin B₁ (↑l x') y = bilin B₂ (↑l x') y
[PROOFSTEP]
cases' hᵣ y with y' hy
[GOAL]
case mp.H.intro.intro
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B₁ B₂ : BilinForm R M'
l r : M →ₗ[R] M'
hₗ : Function.Surjective ↑l
hᵣ : Function.Surjective ↑r
h : comp B₁ l r = comp B₂ l r
y : M'
x' y' : M
hy : ↑r y' = y
⊢ bilin B₁ (↑l x') y = bilin B₂ (↑l x') y
[PROOFSTEP]
subst hy
[GOAL]
case mp.H.intro.intro
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B₁ B₂ : BilinForm R M'
l r : M →ₗ[R] M'
hₗ : Function.Surjective ↑l
hᵣ : Function.Surjective ↑r
h : comp B₁ l r = comp B₂ l r
x' y' : M
⊢ bilin B₁ (↑l x') (↑r y') = bilin B₂ (↑l x') (↑r y')
[PROOFSTEP]
rw [← comp_apply, ← comp_apply, h]
[GOAL]
case mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B₁ B₂ : BilinForm R M'
l r : M →ₗ[R] M'
hₗ : Function.Surjective ↑l
hᵣ : Function.Surjective ↑r
h : B₁ = B₂
⊢ comp B₁ l r = comp B₂ l r
[PROOFSTEP]
rw [h]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
e : M₂ ≃ₗ[R₂] M₂'
B B' : BilinForm R₂ M₂
x y : M₂'
⊢ bilin ((fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) (B + B')) x y =
    bilin
      ((fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B +
        (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B')
      x y
[PROOFSTEP]
simp only [comp_apply, add_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
e : M₂ ≃ₗ[R₂] M₂'
B : R₂
B' : BilinForm R₂ M₂
x y : M₂'
⊢ bilin
      (AddHom.toFun
        { toFun := fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e),
          map_add' :=
            (_ :
              ∀ (B B' : BilinForm R₂ M₂),
                (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) (B + B') =
                  (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B +
                    (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B') }
        (B • B'))
      x y =
    bilin
      (↑(RingHom.id R₂) B •
        AddHom.toFun
          { toFun := fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e),
            map_add' :=
              (_ :
                ∀ (B B' : BilinForm R₂ M₂),
                  (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) (B + B') =
                    (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B +
                      (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B') }
          B')
      x y
[PROOFSTEP]
simp [comp_apply, smul_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
e : M₂ ≃ₗ[R₂] M₂'
B : BilinForm R₂ M₂
x y : M₂
⊢ bilin
      ((fun B => comp B ↑e ↑e)
        (AddHom.toFun
          {
              toAddHom :=
                { toFun := fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e),
                  map_add' :=
                    (_ :
                      ∀ (B B' : BilinForm R₂ M₂),
                        (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) (B + B') =
                          (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B +
                            (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B') },
              map_smul' :=
                (_ :
                  ∀ (B : R₂) (B' : BilinForm R₂ M₂),
                    AddHom.toFun
                        { toFun := fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e),
                          map_add' :=
                            (_ :
                              ∀ (B B' : BilinForm R₂ M₂),
                                (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) (B + B') =
                                  (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B +
                                    (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B') }
                        (B • B') =
                      ↑(RingHom.id R₂) B •
                        AddHom.toFun
                          { toFun := fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e),
                            map_add' :=
                              (_ :
                                ∀ (B B' : BilinForm R₂ M₂),
                                  (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) (B + B') =
                                    (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B +
                                      (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B') }
                          B') }.toAddHom
          B))
      x y =
    bilin B x y
[PROOFSTEP]
simp only [comp_apply, LinearEquiv.coe_coe, e.symm_apply_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
e : M₂ ≃ₗ[R₂] M₂'
B : BilinForm R₂ M₂'
x y : M₂'
⊢ bilin
      (AddHom.toFun
        {
            toAddHom :=
              { toFun := fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e),
                map_add' :=
                  (_ :
                    ∀ (B B' : BilinForm R₂ M₂),
                      (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) (B + B') =
                        (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B +
                          (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B') },
            map_smul' :=
              (_ :
                ∀ (B : R₂) (B' : BilinForm R₂ M₂),
                  AddHom.toFun
                      { toFun := fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e),
                        map_add' :=
                          (_ :
                            ∀ (B B' : BilinForm R₂ M₂),
                              (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) (B + B') =
                                (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B +
                                  (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B') }
                      (B • B') =
                    ↑(RingHom.id R₂) B •
                      AddHom.toFun
                        { toFun := fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e),
                          map_add' :=
                            (_ :
                              ∀ (B B' : BilinForm R₂ M₂),
                                (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) (B + B') =
                                  (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B +
                                    (fun B => comp B ↑(LinearEquiv.symm e) ↑(LinearEquiv.symm e)) B') }
                        B') }.toAddHom
        ((fun B => comp B ↑e ↑e) B))
      x y =
    bilin B x y
[PROOFSTEP]
simp only [comp_apply, LinearEquiv.coe_coe, e.apply_symm_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
e : M₂ ≃ₗ[R₂] M₂'
⊢ LinearEquiv.symm (congr e) = congr (LinearEquiv.symm e)
[PROOFSTEP]
ext
[GOAL]
case h.H
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
e : M₂ ≃ₗ[R₂] M₂'
x✝¹ : BilinForm R₂ M₂'
x✝ y✝ : M₂
⊢ bilin (↑(LinearEquiv.symm (congr e)) x✝¹) x✝ y✝ = bilin (↑(congr (LinearEquiv.symm e)) x✝¹) x✝ y✝
[PROOFSTEP]
simp only [congr_apply, LinearEquiv.symm_symm]
[GOAL]
case h.H
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
e : M₂ ≃ₗ[R₂] M₂'
x✝¹ : BilinForm R₂ M₂'
x✝ y✝ : M₂
⊢ bilin (↑(LinearEquiv.symm (congr e)) x✝¹) x✝ y✝ = bilin x✝¹ (↑e x✝) (↑e y✝)
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
f g : M₂ →ₗ[R₂] R₂
x y z : M₂
⊢ (fun x y => ↑f x * ↑g y) (x + y) z = (fun x y => ↑f x * ↑g y) x z + (fun x y => ↑f x * ↑g y) y z
[PROOFSTEP]
simp only [LinearMap.map_add, add_mul]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
f g : M₂ →ₗ[R₂] R₂
x : R₂
y z : M₂
⊢ (fun x y => ↑f x * ↑g y) (x • y) z = x * (fun x y => ↑f x * ↑g y) y z
[PROOFSTEP]
simp only [LinearMap.map_smul, smul_eq_mul, mul_assoc]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
f g : M₂ →ₗ[R₂] R₂
x y z : M₂
⊢ (fun x y => ↑f x * ↑g y) x (y + z) = (fun x y => ↑f x * ↑g y) x y + (fun x y => ↑f x * ↑g y) x z
[PROOFSTEP]
simp only [LinearMap.map_add, mul_add]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
f g : M₂ →ₗ[R₂] R₂
x : R₂
y z : M₂
⊢ (fun x y => ↑f x * ↑g y) y (x • z) = x * (fun x y => ↑f x * ↑g y) y z
[PROOFSTEP]
simp only [LinearMap.map_smul, smul_eq_mul, mul_left_comm]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
x y : M₄
a : R₄
ha : a ≠ 0
⊢ IsOrtho G (a • x) y ↔ IsOrtho G x y
[PROOFSTEP]
dsimp only [IsOrtho]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
x y : M₄
a : R₄
ha : a ≠ 0
⊢ bilin G (a • x) y = 0 ↔ bilin G x y = 0
[PROOFSTEP]
rw [smul_left, mul_eq_zero, or_iff_right ha]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
x y : M₄
a : R₄
ha : a ≠ 0
⊢ IsOrtho G x (a • y) ↔ IsOrtho G x y
[PROOFSTEP]
dsimp only [IsOrtho]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
x y : M₄
a : R₄
ha : a ≠ 0
⊢ bilin G x (a • y) = 0 ↔ bilin G x y = 0
[PROOFSTEP]
rw [smul_right, mul_eq_zero, or_iff_right ha]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
⊢ LinearIndependent K v
[PROOFSTEP]
classical
rw [linearIndependent_iff']
intro s w hs i hi
have : B (s.sum fun i : n => w i • v i) (v i) = 0 := by rw [hs, zero_left]
have hsum : (s.sum fun j : n => w j * B (v j) (v i)) = w i * B (v i) (v i) :=
  by
  apply Finset.sum_eq_single_of_mem i hi
  intro j _ hij
  rw [iIsOrtho_def.1 hv₁ _ _ hij, mul_zero]
simp_rw [sum_left, smul_left, hsum] at this 
exact eq_zero_of_ne_zero_of_mul_right_eq_zero (hv₂ i) this
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
⊢ LinearIndependent K v
[PROOFSTEP]
rw [linearIndependent_iff']
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
⊢ ∀ (s : Finset n) (g : n → K), ∑ i in s, g i • v i = 0 → ∀ (i : n), i ∈ s → g i = 0
[PROOFSTEP]
intro s w hs i hi
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
⊢ w i = 0
[PROOFSTEP]
have : B (s.sum fun i : n => w i • v i) (v i) = 0 := by rw [hs, zero_left]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
⊢ bilin B (∑ i in s, w i • v i) (v i) = 0
[PROOFSTEP]
rw [hs, zero_left]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
this : bilin B (∑ i in s, w i • v i) (v i) = 0
⊢ w i = 0
[PROOFSTEP]
have hsum : (s.sum fun j : n => w j * B (v j) (v i)) = w i * B (v i) (v i) :=
  by
  apply Finset.sum_eq_single_of_mem i hi
  intro j _ hij
  rw [iIsOrtho_def.1 hv₁ _ _ hij, mul_zero]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
this : bilin B (∑ i in s, w i • v i) (v i) = 0
⊢ ∑ j in s, w j * bilin B (v j) (v i) = w i * bilin B (v i) (v i)
[PROOFSTEP]
apply Finset.sum_eq_single_of_mem i hi
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
this : bilin B (∑ i in s, w i • v i) (v i) = 0
⊢ ∀ (b : n), b ∈ s → b ≠ i → w b * bilin B (v b) (v i) = 0
[PROOFSTEP]
intro j _ hij
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
this : bilin B (∑ i in s, w i • v i) (v i) = 0
j : n
a✝ : j ∈ s
hij : j ≠ i
⊢ w j * bilin B (v j) (v i) = 0
[PROOFSTEP]
rw [iIsOrtho_def.1 hv₁ _ _ hij, mul_zero]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
this : bilin B (∑ i in s, w i • v i) (v i) = 0
hsum : ∑ j in s, w j * bilin B (v j) (v i) = w i * bilin B (v i) (v i)
⊢ w i = 0
[PROOFSTEP]
simp_rw [sum_left, smul_left, hsum] at this 
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type u_13
M₄ : Type u_14
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
hsum : ∑ j in s, w j * bilin B (v j) (v i) = w i * bilin B (v i) (v i)
this : w i * bilin B (v i) (v i) = 0
⊢ w i = 0
[PROOFSTEP]
exact eq_zero_of_ne_zero_of_mul_right_eq_zero (hv₂ i) this
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
F₂ : BilinForm R₂ M₂
ι : Type u_13
b : Basis ι R₂ M₂
x y : M₂
⊢ (Finsupp.sum (↑b.repr x) fun i xi => Finsupp.sum (↑b.repr y) fun j yj => xi • yj • bilin B₂ (↑b i) (↑b j)) =
    bilin B₂ x y
[PROOFSTEP]
conv_rhs => rw [← b.total_repr x, ← b.total_repr y]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
F₂ : BilinForm R₂ M₂
ι : Type u_13
b : Basis ι R₂ M₂
x y : M₂
| bilin B₂ x y
[PROOFSTEP]
rw [← b.total_repr x, ← b.total_repr y]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
F₂ : BilinForm R₂ M₂
ι : Type u_13
b : Basis ι R₂ M₂
x y : M₂
| bilin B₂ x y
[PROOFSTEP]
rw [← b.total_repr x, ← b.total_repr y]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
F₂ : BilinForm R₂ M₂
ι : Type u_13
b : Basis ι R₂ M₂
x y : M₂
| bilin B₂ x y
[PROOFSTEP]
rw [← b.total_repr x, ← b.total_repr y]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
F₂ : BilinForm R₂ M₂
ι : Type u_13
b : Basis ι R₂ M₂
x y : M₂
⊢ (Finsupp.sum (↑b.repr x) fun i xi => Finsupp.sum (↑b.repr y) fun j yj => xi • yj • bilin B₂ (↑b i) (↑b j)) =
    bilin B₂ (↑(Finsupp.total ι M₂ R₂ ↑b) (↑b.repr x)) (↑(Finsupp.total ι M₂ R₂ ↑b) (↑b.repr y))
[PROOFSTEP]
simp_rw [Finsupp.total_apply, Finsupp.sum, sum_left, sum_right, smul_left, smul_right, smul_eq_mul]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁹ : Semiring R
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁶ : Ring R₁
inst✝¹⁵ : AddCommGroup M₁
inst✝¹⁴ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹³ : CommSemiring R₂
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁰ : CommRing R₃
inst✝⁹ : AddCommGroup M₃
inst✝⁸ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V
inst✝⁵ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁴ : AddCommMonoid M₂'
inst✝³ : AddCommMonoid M₂''
inst✝² : Module R₂ M₂'
inst✝¹ : Module R₂ M₂''
inst✝ : Algebra R₂ R
x✝¹ x✝ : M
⊢ bilin B x✝¹ x✝ = bilin B x✝ x✝¹ ↔ bilin (↑(flipHom R₂) B) x✝¹ x✝ = bilin B x✝¹ x✝
[PROOFSTEP]
exact eq_comm
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
H : IsAlt B₁
x y : M₁
⊢ -bilin B₁ x y = bilin B₁ y x
[PROOFSTEP]
have H1 : B₁ (x + y) (x + y) = 0 := self_eq_zero H (x + y)
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
H : IsAlt B₁
x y : M₁
H1 : bilin B₁ (x + y) (x + y) = 0
⊢ -bilin B₁ x y = bilin B₁ y x
[PROOFSTEP]
rw [add_left, add_right, add_right, self_eq_zero H, self_eq_zero H, zero_add, add_zero, add_eq_zero_iff_neg_eq] at H1 
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
H : IsAlt B₁
x y : M₁
H1 : -bilin B₁ x y = bilin B₁ y x
⊢ -bilin B₁ x y = bilin B₁ y x
[PROOFSTEP]
exact H1
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
H : IsAlt B₁
⊢ IsRefl B₁
[PROOFSTEP]
intro x y h
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝³ : AddCommMonoid M₂'
inst✝² : AddCommMonoid M₂''
inst✝¹ : Module R₂ M₂'
inst✝ : Module R₂ M₂''
H : IsAlt B₁
x y : M₁
h : bilin B₁ x y = 0
⊢ bilin B₁ y x = 0
[PROOFSTEP]
rw [← neg_eq H, h, neg_zero]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁸ : Field K
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g✝ g' : M' →ₗ[R] M
f g : Module.End R M
⊢ IsAdjointPair B F f g ↔ compLeft F f = compRight B g
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁸ : Field K
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g✝ g' : M' →ₗ[R] M
f g : Module.End R M
⊢ IsAdjointPair B F f g → compLeft F f = compRight B g
[PROOFSTEP]
intro h
[GOAL]
case mpr
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁸ : Field K
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g✝ g' : M' →ₗ[R] M
f g : Module.End R M
⊢ compLeft F f = compRight B g → IsAdjointPair B F f g
[PROOFSTEP]
intro h
[GOAL]
case mp
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁸ : Field K
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g✝ g' : M' →ₗ[R] M
f g : Module.End R M
h : IsAdjointPair B F f g
⊢ compLeft F f = compRight B g
[PROOFSTEP]
ext x
[GOAL]
case mp.H
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁸ : Field K
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g✝ g' : M' →ₗ[R] M
f g : Module.End R M
h : IsAdjointPair B F f g
x y✝ : M
⊢ bilin (compLeft F f) x y✝ = bilin (compRight B g) x y✝
[PROOFSTEP]
simp only [compLeft_apply, compRight_apply]
[GOAL]
case mp.H
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁸ : Field K
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g✝ g' : M' →ₗ[R] M
f g : Module.End R M
h : IsAdjointPair B F f g
x y✝ : M
⊢ bilin F (↑f x) y✝ = bilin B x (↑g y✝)
[PROOFSTEP]
apply h
[GOAL]
case mpr
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁸ : Field K
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g✝ g' : M' →ₗ[R] M
f g : Module.End R M
h : compLeft F f = compRight B g
⊢ IsAdjointPair B F f g
[PROOFSTEP]
intro x y
[GOAL]
case mpr
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁸ : Field K
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g✝ g' : M' →ₗ[R] M
f g : Module.End R M
h : compLeft F f = compRight B g
x y : M
⊢ bilin F (↑f x) y = bilin B x (↑g y)
[PROOFSTEP]
rw [← compLeft_apply, ← compRight_apply]
[GOAL]
case mpr
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁸ : Field K
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g✝ g' : M' →ₗ[R] M
f g : Module.End R M
h : compLeft F f = compRight B g
x y : M
⊢ bilin (compLeft F f) x y = bilin (compRight B g) x y
[PROOFSTEP]
rw [h]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁸ : Field K
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B' : BilinForm R M'
f f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
x : M
y : M'
⊢ bilin B' (↑0 x) y = bilin B x (↑0 y)
[PROOFSTEP]
simp only [BilinForm.zero_left, BilinForm.zero_right, LinearMap.zero_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁸ : Field K
inst✝⁷ : AddCommGroup V
inst✝⁶ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B' : BilinForm R M'
f f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
h : IsAdjointPair B B' f g
h' : IsAdjointPair B B' f' g'
x : M
y : M'
⊢ bilin B' (↑(f + f') x) y = bilin B x (↑(g + g') y)
[PROOFSTEP]
rw [LinearMap.add_apply, LinearMap.add_apply, add_left, add_right, h, h']
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝³ : AddCommMonoid M'
inst✝² : Module R M'
B' : BilinForm R M'
f f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝¹ : AddCommGroup M₁'
inst✝ : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
h : IsAdjointPair B₁ B₁' f₁ g₁
h' : IsAdjointPair B₁ B₁' f₁' g₁'
x : M₁
y : M₁'
⊢ bilin B₁' (↑(f₁ - f₁') x) y = bilin B₁ x (↑(g₁ - g₁') y)
[PROOFSTEP]
rw [LinearMap.sub_apply, LinearMap.sub_apply, sub_left, sub_right, h, h']
[GOAL]
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝³ : AddCommMonoid M'
inst✝² : Module R M'
B' : BilinForm R M'
f f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝¹ : AddCommGroup M₁'
inst✝ : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
c : R₂
h : IsAdjointPair B₂ B₂' f₂ g₂
x : M₂
y : M₂'
⊢ bilin B₂' (↑(c • f₂) x) y = bilin B₂ x (↑(c • g₂) y)
[PROOFSTEP]
rw [LinearMap.smul_apply, LinearMap.smul_apply, smul_left, smul_right, h]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f f'✝ : M →ₗ[R] M'
g g'✝ : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
f' : M' →ₗ[R] M''
g' : M'' →ₗ[R] M'
h : IsAdjointPair B B' f g
h' : IsAdjointPair B' B'' f' g'
x : M
y : M''
⊢ bilin B'' (↑(LinearMap.comp f' f) x) y = bilin B x (↑(LinearMap.comp g g') y)
[PROOFSTEP]
rw [LinearMap.comp_apply, LinearMap.comp_apply, h', h]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f'✝ : M →ₗ[R] M'
g✝ g'✝ : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
f g f' g' : Module.End R M
h : IsAdjointPair B B f g
h' : IsAdjointPair B B f' g'
x y : M
⊢ bilin B (↑(f * f') x) y = bilin B x (↑(g' * g) y)
[PROOFSTEP]
rw [LinearMap.mul_apply, LinearMap.mul_apply, h, h']
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
f : Module.End R₂ M₂
⊢ f ∈ isPairSelfAdjointSubmodule B₂ F₂ ↔ IsPairSelfAdjoint B₂ F₂ f
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
e : M₂' ≃ₗ[R₂] M₂
f : Module.End R₂ M₂
⊢ IsPairSelfAdjoint B₂ F₂ f ↔
    IsPairSelfAdjoint (comp B₂ ↑e ↑e) (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f)
[PROOFSTEP]
have hₗ : (F₂.comp ↑e ↑e).compLeft (e.symm.conj f) = (F₂.compLeft f).comp ↑e ↑e :=
  by
  ext
  simp [LinearEquiv.symm_conj_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
e : M₂' ≃ₗ[R₂] M₂
f : Module.End R₂ M₂
⊢ compLeft (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f) = comp (compLeft F₂ f) ↑e ↑e
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
e : M₂' ≃ₗ[R₂] M₂
f : Module.End R₂ M₂
x✝ y✝ : M₂'
⊢ bilin (compLeft (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f)) x✝ y✝ =
    bilin (comp (compLeft F₂ f) ↑e ↑e) x✝ y✝
[PROOFSTEP]
simp [LinearEquiv.symm_conj_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
e : M₂' ≃ₗ[R₂] M₂
f : Module.End R₂ M₂
hₗ : compLeft (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f) = comp (compLeft F₂ f) ↑e ↑e
⊢ IsPairSelfAdjoint B₂ F₂ f ↔
    IsPairSelfAdjoint (comp B₂ ↑e ↑e) (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f)
[PROOFSTEP]
have hᵣ : (B₂.comp ↑e ↑e).compRight (e.symm.conj f) = (B₂.compRight f).comp ↑e ↑e :=
  by
  ext
  simp [LinearEquiv.conj_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
e : M₂' ≃ₗ[R₂] M₂
f : Module.End R₂ M₂
hₗ : compLeft (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f) = comp (compLeft F₂ f) ↑e ↑e
⊢ compRight (comp B₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f) = comp (compRight B₂ f) ↑e ↑e
[PROOFSTEP]
ext
[GOAL]
case H
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
e : M₂' ≃ₗ[R₂] M₂
f : Module.End R₂ M₂
hₗ : compLeft (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f) = comp (compLeft F₂ f) ↑e ↑e
x✝ y✝ : M₂'
⊢ bilin (compRight (comp B₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f)) x✝ y✝ =
    bilin (comp (compRight B₂ f) ↑e ↑e) x✝ y✝
[PROOFSTEP]
simp [LinearEquiv.conj_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
e : M₂' ≃ₗ[R₂] M₂
f : Module.End R₂ M₂
hₗ : compLeft (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f) = comp (compLeft F₂ f) ↑e ↑e
hᵣ : compRight (comp B₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f) = comp (compRight B₂ f) ↑e ↑e
⊢ IsPairSelfAdjoint B₂ F₂ f ↔
    IsPairSelfAdjoint (comp B₂ ↑e ↑e) (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f)
[PROOFSTEP]
have he : Function.Surjective (⇑(↑e : M₂' →ₗ[R₂] M₂) : M₂' → M₂) := e.surjective
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
e : M₂' ≃ₗ[R₂] M₂
f : Module.End R₂ M₂
hₗ : compLeft (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f) = comp (compLeft F₂ f) ↑e ↑e
hᵣ : compRight (comp B₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f) = comp (compRight B₂ f) ↑e ↑e
he : Function.Surjective ↑↑e
⊢ IsPairSelfAdjoint B₂ F₂ f ↔
    IsPairSelfAdjoint (comp B₂ ↑e ↑e) (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f)
[PROOFSTEP]
show BilinForm.IsAdjointPair _ _ _ _ ↔ BilinForm.IsAdjointPair _ _ _ _
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
e : M₂' ≃ₗ[R₂] M₂
f : Module.End R₂ M₂
hₗ : compLeft (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f) = comp (compLeft F₂ f) ↑e ↑e
hᵣ : compRight (comp B₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f) = comp (compRight B₂ f) ↑e ↑e
he : Function.Surjective ↑↑e
⊢ IsAdjointPair B₂ F₂ f f ↔
    IsAdjointPair (comp B₂ ↑e ↑e) (comp F₂ ↑e ↑e) (↑(LinearEquiv.conj (LinearEquiv.symm e)) f)
      (↑(LinearEquiv.conj (LinearEquiv.symm e)) f)
[PROOFSTEP]
rw [isAdjointPair_iff_compLeft_eq_compRight, isAdjointPair_iff_compLeft_eq_compRight, hᵣ, hₗ, comp_inj _ _ he he]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
f : Module.End R₁ M₁
⊢ (∀ (x y : M₁), bilin B₁ (↑f x) y = bilin B₁ x (↑(-f) y)) ↔ ∀ (x y : M₁), bilin B₁ (↑f x) y = bilin (-B₁) x (↑f y)
[PROOFSTEP]
simp only [LinearMap.neg_apply, BilinForm.neg_apply, BilinForm.neg_right]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
B₃ : BilinForm R₃ M₃
f : Module.End R₃ M₃
⊢ f ∈ skewAdjointSubmodule B₃ ↔ IsSkewAdjoint B₃ f
[PROOFSTEP]
rw [isSkewAdjoint_iff_neg_self_adjoint]
[GOAL]
R : Type u_1
M : Type u_2
inst✝²⁴ : Semiring R
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝²¹ : Ring R₁
inst✝²⁰ : AddCommGroup M₁
inst✝¹⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁸ : CommSemiring R₂
inst✝¹⁷ : AddCommMonoid M₂
inst✝¹⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁵ : CommRing R₃
inst✝¹⁴ : AddCommGroup M₃
inst✝¹³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
M₂'' : Type u_12
inst✝⁹ : AddCommMonoid M₂'
inst✝⁸ : AddCommMonoid M₂''
inst✝⁷ : Module R₂ M₂'
inst✝⁶ : Module R₂ M₂''
F : BilinForm R M
M' : Type u_13
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_14
inst✝³ : AddCommGroup M₁'
inst✝² : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
B₂' : BilinForm R₂ M₂'
f₂ f₂' : M₂ →ₗ[R₂] M₂'
g₂ g₂' : M₂' →ₗ[R₂] M₂
M'' : Type u_15
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
F₂ : BilinForm R₂ M₂
B₃ : BilinForm R₃ M₃
f : Module.End R₃ M₃
⊢ f ∈ skewAdjointSubmodule B₃ ↔ IsAdjointPair (-B₃) B₃ f f
[PROOFSTEP]
exact Iff.rfl
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
B : BilinForm R M
N : Submodule R M
x y : M
hx : x ∈ {m | ∀ (n : M), n ∈ N → IsOrtho B n m}
hy : y ∈ {m | ∀ (n : M), n ∈ N → IsOrtho B n m}
n : M
hn : n ∈ N
⊢ IsOrtho B n (x + y)
[PROOFSTEP]
rw [IsOrtho, add_right, show B n x = 0 from hx n hn, show B n y = 0 from hy n hn, zero_add]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
B : BilinForm R M
N : Submodule R M
c : R
x : M
hx :
  x ∈
    {
          toAddSubsemigroup :=
            { carrier := {m | ∀ (n : M), n ∈ N → IsOrtho B n m},
              add_mem' :=
                (_ :
                  ∀ {x y : M},
                    x ∈ {m | ∀ (n : M), n ∈ N → IsOrtho B n m} →
                      y ∈ {m | ∀ (n : M), n ∈ N → IsOrtho B n m} → ∀ (n : M), n ∈ N → IsOrtho B n (x + y)) },
          zero_mem' := (_ : ∀ (x : M), x ∈ N → IsOrtho B x 0) }.toAddSubsemigroup.carrier
n : M
hn : n ∈ N
⊢ IsOrtho B n (c • x)
[PROOFSTEP]
rw [IsOrtho, smul_right, show B n x = 0 from hx n hn, mul_zero]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
⊢ Submodule.span K {x} ⊓ orthogonal B (Submodule.span K {x}) = ⊥
[PROOFSTEP]
rw [← Finset.coe_singleton]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
⊢ Submodule.span K ↑{x} ⊓ orthogonal B (Submodule.span K ↑{x}) = ⊥
[PROOFSTEP]
refine' eq_bot_iff.2 fun y h => _
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
y : V
h : y ∈ Submodule.span K ↑{x} ⊓ orthogonal B (Submodule.span K ↑{x})
⊢ y ∈ ⊥
[PROOFSTEP]
rcases mem_span_finset.1 h.1 with ⟨μ, rfl⟩
[GOAL]
case intro
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
μ : V → K
h : ∑ i in {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ orthogonal B (Submodule.span K ↑{x})
⊢ ∑ i in {x}, μ i • i ∈ ⊥
[PROOFSTEP]
have := h.2 x ?_
[GOAL]
case intro.refine_2
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
μ : V → K
h : ∑ i in {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ orthogonal B (Submodule.span K ↑{x})
this : IsOrtho B x (∑ i in {x}, μ i • i)
⊢ ∑ i in {x}, μ i • i ∈ ⊥
[PROOFSTEP]
rw [Finset.sum_singleton] at this ⊢
[GOAL]
case intro.refine_2
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
μ : V → K
h : ∑ i in {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ orthogonal B (Submodule.span K ↑{x})
this : IsOrtho B x (μ x • x)
⊢ μ x • x ∈ ⊥
[PROOFSTEP]
suffices hμzero : μ x = 0
[GOAL]
case intro.refine_2
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
μ : V → K
h : ∑ i in {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ orthogonal B (Submodule.span K ↑{x})
this : IsOrtho B x (μ x • x)
hμzero : μ x = 0
⊢ μ x • x ∈ ⊥
[PROOFSTEP]
rw [hμzero, zero_smul, Submodule.mem_bot]
[GOAL]
case hμzero
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
μ : V → K
h : ∑ i in {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ orthogonal B (Submodule.span K ↑{x})
this : IsOrtho B x (μ x • x)
⊢ μ x = 0
[PROOFSTEP]
change B x (μ x • x) = 0 at this 
[GOAL]
case hμzero
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
μ : V → K
h : ∑ i in {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ orthogonal B (Submodule.span K ↑{x})
this : bilin B x (μ x • x) = 0
⊢ μ x = 0
[PROOFSTEP]
rw [smul_right] at this 
[GOAL]
case hμzero
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
μ : V → K
h : ∑ i in {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ orthogonal B (Submodule.span K ↑{x})
this : μ x * bilin B x x = 0
⊢ μ x = 0
[PROOFSTEP]
exact eq_zero_of_ne_zero_of_mul_right_eq_zero hx this
[GOAL]
case intro.refine_1
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
μ : V → K
h : ∑ i in {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ orthogonal B (Submodule.span K ↑{x})
⊢ x ∈ Submodule.span K ↑{x}
[PROOFSTEP]
rw [Submodule.mem_span]
[GOAL]
case intro.refine_1
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
μ : V → K
h : ∑ i in {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ orthogonal B (Submodule.span K ↑{x})
⊢ ∀ (p : Submodule K V), ↑{x} ⊆ ↑p → x ∈ p
[PROOFSTEP]
exact fun _ hp => hp <| Finset.mem_singleton_self _
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
⊢ orthogonal B (Submodule.span K {x}) = LinearMap.ker (↑(↑toLin B) x)
[PROOFSTEP]
ext y
[GOAL]
case h
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x y : V
⊢ y ∈ orthogonal B (Submodule.span K {x}) ↔ y ∈ LinearMap.ker (↑(↑toLin B) x)
[PROOFSTEP]
simp_rw [mem_orthogonal_iff, LinearMap.mem_ker, Submodule.mem_span_singleton]
[GOAL]
case h
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x y : V
⊢ (∀ (n : V), (∃ a, a • x = n) → IsOrtho B n y) ↔ ↑(↑(↑toLin B) x) y = 0
[PROOFSTEP]
constructor
[GOAL]
case h.mp
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x y : V
⊢ (∀ (n : V), (∃ a, a • x = n) → IsOrtho B n y) → ↑(↑(↑toLin B) x) y = 0
[PROOFSTEP]
exact fun h => h x ⟨1, one_smul _ _⟩
[GOAL]
case h.mpr
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x y : V
⊢ ↑(↑(↑toLin B) x) y = 0 → ∀ (n : V), (∃ a, a • x = n) → IsOrtho B n y
[PROOFSTEP]
rintro h _ ⟨z, rfl⟩
[GOAL]
case h.mpr.intro
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x y : V
h : ↑(↑(↑toLin B) x) y = 0
z : K
⊢ IsOrtho B (z • x) y
[PROOFSTEP]
rw [IsOrtho, smul_left, mul_eq_zero]
[GOAL]
case h.mpr.intro
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x y : V
h : ↑(↑(↑toLin B) x) y = 0
z : K
⊢ z = 0 ∨ bilin B x y = 0
[PROOFSTEP]
exact Or.intro_right _ h
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
⊢ Submodule.span K {x} ⊔ orthogonal B (Submodule.span K {x}) = ⊤
[PROOFSTEP]
rw [orthogonal_span_singleton_eq_toLin_ker]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁴ : Semiring R
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹¹ : Ring R₁
inst✝¹⁰ : AddCommGroup M₁
inst✝⁹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝⁸ : CommSemiring R₂
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁵ : CommRing R₃
inst✝⁴ : AddCommGroup M₃
inst✝³ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬IsOrtho B x x
⊢ Submodule.span K {x} ⊔ LinearMap.ker (↑(↑toLin B) x) = ⊤
[PROOFSTEP]
exact LinearMap.span_singleton_sup_ker_eq_top _ hx
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
e : M₂ ≃ₗ[R₂] M₂'
h : Nondegenerate (↑(congr e) B)
⊢ Nondegenerate B
[PROOFSTEP]
convert h.congr e.symm
[GOAL]
case h.e'_6
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
e : M₂ ≃ₗ[R₂] M₂'
h : Nondegenerate (↑(congr e) B)
⊢ B = ↑(congr (LinearEquiv.symm e)) (↑(congr e) B)
[PROOFSTEP]
rw [congr_congr, e.self_trans_symm, congr_refl, LinearEquiv.refl_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
⊢ Nondegenerate B ↔ LinearMap.ker (↑toLin B) = ⊥
[PROOFSTEP]
rw [LinearMap.ker_eq_bot']
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
⊢ Nondegenerate B ↔ ∀ (m : M₂), ↑(↑toLin B) m = 0 → m = 0
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
⊢ Nondegenerate B → ∀ (m : M₂), ↑(↑toLin B) m = 0 → m = 0
[PROOFSTEP]
intro h
[GOAL]
case mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
⊢ (∀ (m : M₂), ↑(↑toLin B) m = 0 → m = 0) → Nondegenerate B
[PROOFSTEP]
intro h
[GOAL]
case mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
h : Nondegenerate B
⊢ ∀ (m : M₂), ↑(↑toLin B) m = 0 → m = 0
[PROOFSTEP]
refine' fun m hm => h _ fun x => _
[GOAL]
case mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
h : Nondegenerate B
m : M₂
hm : ↑(↑toLin B) m = 0
x : M₂
⊢ bilin B m x = 0
[PROOFSTEP]
rw [← toLin_apply, hm]
[GOAL]
case mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
h : Nondegenerate B
m : M₂
hm : ↑(↑toLin B) m = 0
x : M₂
⊢ ↑0 x = 0
[PROOFSTEP]
rfl
[GOAL]
case mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
h : ∀ (m : M₂), ↑(↑toLin B) m = 0 → m = 0
⊢ Nondegenerate B
[PROOFSTEP]
intro m hm
[GOAL]
case mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
h : ∀ (m : M₂), ↑(↑toLin B) m = 0 → m = 0
m : M₂
hm : ∀ (n : M₂), bilin B m n = 0
⊢ m = 0
[PROOFSTEP]
apply h
[GOAL]
case mpr.a
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
h : ∀ (m : M₂), ↑(↑toLin B) m = 0 → m = 0
m : M₂
hm : ∀ (n : M₂), bilin B m n = 0
⊢ ↑(↑toLin B) m = 0
[PROOFSTEP]
ext x
[GOAL]
case mpr.a.h
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₂ M₂
h : ∀ (m : M₂), ↑(↑toLin B) m = 0 → m = 0
m : M₂
hm : ∀ (n : M₂), bilin B m n = 0
x : M₂
⊢ ↑(↑(↑toLin B) m) x = ↑0 x
[PROOFSTEP]
exact hm x
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₁ M₁
b : IsRefl B
W : Submodule R₁ M₁
hW : Disjoint W (orthogonal B W)
⊢ Nondegenerate (restrict B W)
[PROOFSTEP]
rintro ⟨x, hx⟩ b₁
[GOAL]
case mk
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₁ M₁
b : IsRefl B
W : Submodule R₁ M₁
hW : Disjoint W (orthogonal B W)
x : M₁
hx : x ∈ W
b₁ : ∀ (n : { x // x ∈ W }), bilin (restrict B W) { val := x, property := hx } n = 0
⊢ { val := x, property := hx } = 0
[PROOFSTEP]
rw [Submodule.mk_eq_zero, ← Submodule.mem_bot R₁]
[GOAL]
case mk
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₁ M₁
b : IsRefl B
W : Submodule R₁ M₁
hW : Disjoint W (orthogonal B W)
x : M₁
hx : x ∈ W
b₁ : ∀ (n : { x // x ∈ W }), bilin (restrict B W) { val := x, property := hx } n = 0
⊢ x ∈ ⊥
[PROOFSTEP]
refine' hW.le_bot ⟨hx, fun y hy => _⟩
[GOAL]
case mk
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₁ M₁
b : IsRefl B
W : Submodule R₁ M₁
hW : Disjoint W (orthogonal B W)
x : M₁
hx : x ∈ W
b₁ : ∀ (n : { x // x ∈ W }), bilin (restrict B W) { val := x, property := hx } n = 0
y : M₁
hy : y ∈ W
⊢ IsOrtho B y x
[PROOFSTEP]
specialize b₁ ⟨y, hy⟩
[GOAL]
case mk
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₁ M₁
b : IsRefl B
W : Submodule R₁ M₁
hW : Disjoint W (orthogonal B W)
x : M₁
hx : x ∈ W
y : M₁
hy : y ∈ W
b₁ : bilin (restrict B W) { val := x, property := hx } { val := y, property := hy } = 0
⊢ IsOrtho B y x
[PROOFSTEP]
rw [restrict_apply, Submodule.coe_mk, Submodule.coe_mk] at b₁ 
[GOAL]
case mk
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₁ M₁
b : IsRefl B
W : Submodule R₁ M₁
hW : Disjoint W (orthogonal B W)
x : M₁
hx : x ∈ W
y : M₁
hy : y ∈ W
b₁ : bilin B x y = 0
⊢ IsOrtho B y x
[PROOFSTEP]
exact isOrtho_def.mpr (b x y b₁)
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ↑v
hB : Nondegenerate B
i : n
⊢ ¬IsOrtho B (↑v i) (↑v i)
[PROOFSTEP]
intro ho
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ↑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (↑v i) (↑v i)
⊢ False
[PROOFSTEP]
refine' v.ne_zero i (hB (v i) fun m => _)
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ↑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (↑v i) (↑v i)
m : M
⊢ bilin B (↑v i) m = 0
[PROOFSTEP]
obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
[GOAL]
case intro
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ↑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
⊢ bilin B (↑v i) (↑(LinearEquiv.symm v.repr) vi) = 0
[PROOFSTEP]
rw [Basis.repr_symm_apply, Finsupp.total_apply, Finsupp.sum, sum_right]
[GOAL]
case intro
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ↑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
⊢ ∑ i_1 in vi.support, bilin B (↑v i) (↑vi i_1 • ↑v i_1) = 0
[PROOFSTEP]
apply Finset.sum_eq_zero
[GOAL]
case intro.h
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ↑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
⊢ ∀ (x : n), x ∈ vi.support → bilin B (↑v i) (↑vi x • ↑v x) = 0
[PROOFSTEP]
rintro j -
[GOAL]
case intro.h
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ↑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
j : n
⊢ bilin B (↑v i) (↑vi j • ↑v j) = 0
[PROOFSTEP]
rw [smul_right]
[GOAL]
case intro.h
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ↑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
j : n
⊢ ↑vi j * bilin B (↑v i) (↑v j) = 0
[PROOFSTEP]
convert mul_zero (vi j) using 2
[GOAL]
case h.e'_2.h.e'_6
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ↑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
j : n
⊢ bilin B (↑v i) (↑v j) = 0
[PROOFSTEP]
obtain rfl | hij := eq_or_ne i j
[GOAL]
case h.e'_2.h.e'_6.inl
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ↑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
⊢ bilin B (↑v i) (↑v i) = 0
[PROOFSTEP]
exact ho
[GOAL]
case h.e'_2.h.e'_6.inr
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ↑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
j : n
hij : i ≠ j
⊢ bilin B (↑v i) (↑v j) = 0
[PROOFSTEP]
exact h hij
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
⊢ Nondegenerate B ↔ ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
[PROOFSTEP]
refine' ⟨hO.not_isOrtho_basis_self_of_nondegenerate, fun ho m hB => _⟩
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
m : M
hB : ∀ (n : M), bilin B m n = 0
⊢ m = 0
[PROOFSTEP]
obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
[GOAL]
case intro
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
hB : ∀ (n_1 : M), bilin B (↑(LinearEquiv.symm v.repr) vi) n_1 = 0
⊢ ↑(LinearEquiv.symm v.repr) vi = 0
[PROOFSTEP]
rw [LinearEquiv.map_eq_zero_iff]
[GOAL]
case intro
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
hB : ∀ (n_1 : M), bilin B (↑(LinearEquiv.symm v.repr) vi) n_1 = 0
⊢ vi = 0
[PROOFSTEP]
ext i
[GOAL]
case intro.h
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
hB : ∀ (n_1 : M), bilin B (↑(LinearEquiv.symm v.repr) vi) n_1 = 0
i : n
⊢ ↑vi i = ↑0 i
[PROOFSTEP]
rw [Finsupp.zero_apply]
[GOAL]
case intro.h
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
hB : ∀ (n_1 : M), bilin B (↑(LinearEquiv.symm v.repr) vi) n_1 = 0
i : n
⊢ ↑vi i = 0
[PROOFSTEP]
specialize hB (v i)
[GOAL]
case intro.h
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
i : n
hB : bilin B (↑(LinearEquiv.symm v.repr) vi) (↑v i) = 0
⊢ ↑vi i = 0
[PROOFSTEP]
simp_rw [Basis.repr_symm_apply, Finsupp.total_apply, Finsupp.sum, sum_left, smul_left] at hB 
[GOAL]
case intro.h
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
i : n
hB : ∑ x in vi.support, ↑vi x * bilin B (↑v x) (↑v i) = 0
⊢ ↑vi i = 0
[PROOFSTEP]
rw [Finset.sum_eq_single i] at hB 
[GOAL]
case intro.h
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
i : n
hB : ↑vi i * bilin B (↑v i) (↑v i) = 0
⊢ ↑vi i = 0
[PROOFSTEP]
exact eq_zero_of_ne_zero_of_mul_right_eq_zero (ho i) hB
[GOAL]
case intro.h.h₀
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
i : n
hB : ∑ x in vi.support, ↑vi x * bilin B (↑v x) (↑v i) = 0
⊢ ∀ (b : n), b ∈ vi.support → b ≠ i → ↑vi b * bilin B (↑v b) (↑v i) = 0
[PROOFSTEP]
intro j _ hij
[GOAL]
case intro.h.h₀
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
i : n
hB : ∑ x in vi.support, ↑vi x * bilin B (↑v x) (↑v i) = 0
j : n
a✝ : j ∈ vi.support
hij : j ≠ i
⊢ ↑vi j * bilin B (↑v j) (↑v i) = 0
[PROOFSTEP]
convert mul_zero (vi j) using 2
[GOAL]
case h.e'_2.h.e'_6
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
i : n
hB : ∑ x in vi.support, ↑vi x * bilin B (↑v x) (↑v i) = 0
j : n
a✝ : j ∈ vi.support
hij : j ≠ i
⊢ bilin B (↑v j) (↑v i) = 0
[PROOFSTEP]
exact hO hij
[GOAL]
case intro.h.h₁
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
i : n
hB : ∑ x in vi.support, ↑vi x * bilin B (↑v x) (↑v i) = 0
⊢ ¬i ∈ vi.support → ↑vi i * bilin B (↑v i) (↑v i) = 0
[PROOFSTEP]
intro hi
[GOAL]
case intro.h.h₁
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
i : n
hB : ∑ x in vi.support, ↑vi x * bilin B (↑v x) (↑v i) = 0
hi : ¬i ∈ vi.support
⊢ ↑vi i * bilin B (↑v i) (↑v i) = 0
[PROOFSTEP]
convert zero_mul (M₀ := R) _ using 2
[GOAL]
case h.e'_2.h.e'_5
R : Type u_1
M : Type u_2
inst✝¹⁸ : Semiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : Ring R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹² : CommSemiring R₂
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁹ : CommRing R₃
inst✝⁸ : AddCommGroup M₃
inst✝⁷ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ↑v
ho : ∀ (i : n), ¬IsOrtho B (↑v i) (↑v i)
vi : n →₀ R
i : n
hB : ∑ x in vi.support, ↑vi x * bilin B (↑v x) (↑v i) = 0
hi : ¬i ∈ vi.support
⊢ ↑vi i = 0
[PROOFSTEP]
exact Finsupp.not_mem_support_iff.mp hi
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
⊢ Submodule.map (Submodule.subtype W) (LinearMap.ker (LinearMap.domRestrict (↑toLin B) W)) = W ⊓ orthogonal B ⊤
[PROOFSTEP]
ext x
[GOAL]
case h
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
⊢ x ∈ Submodule.map (Submodule.subtype W) (LinearMap.ker (LinearMap.domRestrict (↑toLin B) W)) ↔ x ∈ W ⊓ orthogonal B ⊤
[PROOFSTEP]
constructor
[GOAL]
case h.mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
⊢ x ∈ Submodule.map (Submodule.subtype W) (LinearMap.ker (LinearMap.domRestrict (↑toLin B) W)) → x ∈ W ⊓ orthogonal B ⊤
[PROOFSTEP]
intro hx
[GOAL]
case h.mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
⊢ x ∈ W ⊓ orthogonal B ⊤ → x ∈ Submodule.map (Submodule.subtype W) (LinearMap.ker (LinearMap.domRestrict (↑toLin B) W))
[PROOFSTEP]
intro hx
[GOAL]
case h.mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ Submodule.map (Submodule.subtype W) (LinearMap.ker (LinearMap.domRestrict (↑toLin B) W))
⊢ x ∈ W ⊓ orthogonal B ⊤
[PROOFSTEP]
rcases hx with ⟨⟨x, hx⟩, hker, rfl⟩
[GOAL]
case h.mp.intro.mk.intro
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W
hker : { val := x, property := hx } ∈ ↑(LinearMap.ker (LinearMap.domRestrict (↑toLin B) W))
⊢ ↑(Submodule.subtype W) { val := x, property := hx } ∈ W ⊓ orthogonal B ⊤
[PROOFSTEP]
erw [LinearMap.mem_ker] at hker 
[GOAL]
case h.mp.intro.mk.intro
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W
hker : ↑(LinearMap.domRestrict (↑toLin B) W) { val := x, property := hx } = 0
⊢ ↑(Submodule.subtype W) { val := x, property := hx } ∈ W ⊓ orthogonal B ⊤
[PROOFSTEP]
constructor
[GOAL]
case h.mp.intro.mk.intro.left
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W
hker : ↑(LinearMap.domRestrict (↑toLin B) W) { val := x, property := hx } = 0
⊢ ↑(Submodule.subtype W) { val := x, property := hx } ∈ ↑W
[PROOFSTEP]
simp [hx]
[GOAL]
case h.mp.intro.mk.intro.right
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W
hker : ↑(LinearMap.domRestrict (↑toLin B) W) { val := x, property := hx } = 0
⊢ ↑(Submodule.subtype W) { val := x, property := hx } ∈ ↑(orthogonal B ⊤)
[PROOFSTEP]
intro y _
[GOAL]
case h.mp.intro.mk.intro.right
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W
hker : ↑(LinearMap.domRestrict (↑toLin B) W) { val := x, property := hx } = 0
y : V
a✝ : y ∈ ⊤
⊢ IsOrtho B y (↑(Submodule.subtype W) { val := x, property := hx })
[PROOFSTEP]
rw [IsOrtho, b]
[GOAL]
case h.mp.intro.mk.intro.right.a
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W
hker : ↑(LinearMap.domRestrict (↑toLin B) W) { val := x, property := hx } = 0
y : V
a✝ : y ∈ ⊤
⊢ bilin B (↑(Submodule.subtype W) { val := x, property := hx }) y = 0
[PROOFSTEP]
change (B.toLin.domRestrict W) ⟨x, hx⟩ y = 0
[GOAL]
case h.mp.intro.mk.intro.right.a
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W
hker : ↑(LinearMap.domRestrict (↑toLin B) W) { val := x, property := hx } = 0
y : V
a✝ : y ∈ ⊤
⊢ ↑(↑(LinearMap.domRestrict (↑toLin B) W) { val := x, property := hx }) y = 0
[PROOFSTEP]
rw [hker]
[GOAL]
case h.mp.intro.mk.intro.right.a
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W
hker : ↑(LinearMap.domRestrict (↑toLin B) W) { val := x, property := hx } = 0
y : V
a✝ : y ∈ ⊤
⊢ ↑0 y = 0
[PROOFSTEP]
rfl
[GOAL]
case h.mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W ⊓ orthogonal B ⊤
⊢ x ∈ Submodule.map (Submodule.subtype W) (LinearMap.ker (LinearMap.domRestrict (↑toLin B) W))
[PROOFSTEP]
simp_rw [Submodule.mem_map, LinearMap.mem_ker]
[GOAL]
case h.mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W ⊓ orthogonal B ⊤
⊢ ∃ y, ↑(LinearMap.domRestrict (↑toLin B) W) y = 0 ∧ ↑(Submodule.subtype W) y = x
[PROOFSTEP]
refine' ⟨⟨x, hx.1⟩, _, rfl⟩
[GOAL]
case h.mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W ⊓ orthogonal B ⊤
⊢ ↑(LinearMap.domRestrict (↑toLin B) W) { val := x, property := (_ : x ∈ ↑W) } = 0
[PROOFSTEP]
ext y
[GOAL]
case h.mpr.h
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W ⊓ orthogonal B ⊤
y : V
⊢ ↑(↑(LinearMap.domRestrict (↑toLin B) W) { val := x, property := (_ : x ∈ ↑W) }) y = ↑0 y
[PROOFSTEP]
change B x y = 0
[GOAL]
case h.mpr.h
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W ⊓ orthogonal B ⊤
y : V
⊢ bilin B x y = 0
[PROOFSTEP]
rw [b]
[GOAL]
case h.mpr.h.a
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
b : IsRefl B
x : V
hx : x ∈ W ⊓ orthogonal B ⊤
y : V
⊢ bilin B y x = 0
[PROOFSTEP]
exact hx.2 _ Submodule.mem_top
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
⊢ Submodule.dualCoannihilator (LinearMap.range (LinearMap.domRestrict (↑toLin B) W)) = orthogonal B W
[PROOFSTEP]
ext x
[GOAL]
case h
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
x : V
⊢ x ∈ Submodule.dualCoannihilator (LinearMap.range (LinearMap.domRestrict (↑toLin B) W)) ↔ x ∈ orthogonal B W
[PROOFSTEP]
constructor
[GOAL]
case h.mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
x : V
⊢ x ∈ Submodule.dualCoannihilator (LinearMap.range (LinearMap.domRestrict (↑toLin B) W)) → x ∈ orthogonal B W
[PROOFSTEP]
rw [mem_orthogonal_iff]
[GOAL]
case h.mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
x : V
⊢ x ∈ orthogonal B W → x ∈ Submodule.dualCoannihilator (LinearMap.range (LinearMap.domRestrict (↑toLin B) W))
[PROOFSTEP]
rw [mem_orthogonal_iff]
[GOAL]
case h.mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
x : V
⊢ x ∈ Submodule.dualCoannihilator (LinearMap.range (LinearMap.domRestrict (↑toLin B) W)) →
    ∀ (n : V), n ∈ W → IsOrtho B n x
[PROOFSTEP]
intro hx
[GOAL]
case h.mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
x : V
⊢ (∀ (n : V), n ∈ W → IsOrtho B n x) →
    x ∈ Submodule.dualCoannihilator (LinearMap.range (LinearMap.domRestrict (↑toLin B) W))
[PROOFSTEP]
intro hx
[GOAL]
case h.mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
x : V
hx : x ∈ Submodule.dualCoannihilator (LinearMap.range (LinearMap.domRestrict (↑toLin B) W))
⊢ ∀ (n : V), n ∈ W → IsOrtho B n x
[PROOFSTEP]
intro y hy
[GOAL]
case h.mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
x : V
hx : x ∈ Submodule.dualCoannihilator (LinearMap.range (LinearMap.domRestrict (↑toLin B) W))
y : V
hy : y ∈ W
⊢ IsOrtho B y x
[PROOFSTEP]
rw [Submodule.mem_dualCoannihilator] at hx 
[GOAL]
case h.mp
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
x : V
hx : ∀ (φ : Module.Dual K V), φ ∈ LinearMap.range (LinearMap.domRestrict (↑toLin B) W) → ↑φ x = 0
y : V
hy : y ∈ W
⊢ IsOrtho B y x
[PROOFSTEP]
refine' hx (B.toLin.domRestrict W ⟨y, hy⟩) ⟨⟨y, hy⟩, rfl⟩
[GOAL]
case h.mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
x : V
hx : ∀ (n : V), n ∈ W → IsOrtho B n x
⊢ x ∈ Submodule.dualCoannihilator (LinearMap.range (LinearMap.domRestrict (↑toLin B) W))
[PROOFSTEP]
rw [Submodule.mem_dualCoannihilator]
[GOAL]
case h.mpr
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
x : V
hx : ∀ (n : V), n ∈ W → IsOrtho B n x
⊢ ∀ (φ : Module.Dual K V), φ ∈ LinearMap.range (LinearMap.domRestrict (↑toLin B) W) → ↑φ x = 0
[PROOFSTEP]
rintro _ ⟨⟨w, hw⟩, rfl⟩
[GOAL]
case h.mpr.intro.mk
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
W : Subspace K V
x : V
hx : ∀ (n : V), n ∈ W → IsOrtho B n x
w : V
hw : w ∈ W
⊢ ↑(↑(LinearMap.domRestrict (↑toLin B) W) { val := w, property := hw }) x = 0
[PROOFSTEP]
exact hx w hw
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
⊢ finrank K { x // x ∈ W } + finrank K { x // x ∈ orthogonal B W } =
    finrank K V + finrank K { x // x ∈ W ⊓ orthogonal B ⊤ }
[PROOFSTEP]
rw [← toLin_restrict_ker_eq_inf_orthogonal _ _ b₁, ← toLin_restrict_range_dualCoannihilator_eq_orthogonal _ _,
  finrank_map_subtype_eq]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
⊢ finrank K { x // x ∈ W } +
      finrank K { x // x ∈ dualCoannihilator (LinearMap.range (LinearMap.domRestrict (↑toLin B) W)) } =
    finrank K V + finrank K { x // x ∈ LinearMap.ker (LinearMap.domRestrict (↑toLin B) W) }
[PROOFSTEP]
conv_rhs =>
  rw [← @Subspace.finrank_add_finrank_dualCoannihilator_eq K V _ _ _ _ (LinearMap.range (B.toLin.domRestrict W)),
    add_comm, ← add_assoc, add_comm (finrank K (LinearMap.ker (B.toLin.domRestrict W))),
    LinearMap.finrank_range_add_finrank_ker]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
| finrank K V + finrank K { x // x ∈ LinearMap.ker (LinearMap.domRestrict (↑toLin B) W) }
[PROOFSTEP]
rw [← @Subspace.finrank_add_finrank_dualCoannihilator_eq K V _ _ _ _ (LinearMap.range (B.toLin.domRestrict W)),
    add_comm, ← add_assoc, add_comm (finrank K (LinearMap.ker (B.toLin.domRestrict W))),
    LinearMap.finrank_range_add_finrank_ker]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
| finrank K V + finrank K { x // x ∈ LinearMap.ker (LinearMap.domRestrict (↑toLin B) W) }
[PROOFSTEP]
rw [← @Subspace.finrank_add_finrank_dualCoannihilator_eq K V _ _ _ _ (LinearMap.range (B.toLin.domRestrict W)),
    add_comm, ← add_assoc, add_comm (finrank K (LinearMap.ker (B.toLin.domRestrict W))),
    LinearMap.finrank_range_add_finrank_ker]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
| finrank K V + finrank K { x // x ∈ LinearMap.ker (LinearMap.domRestrict (↑toLin B) W) }
[PROOFSTEP]
rw [← @Subspace.finrank_add_finrank_dualCoannihilator_eq K V _ _ _ _ (LinearMap.range (B.toLin.domRestrict W)),
  add_comm, ← add_assoc, add_comm (finrank K (LinearMap.ker (B.toLin.domRestrict W))),
  LinearMap.finrank_range_add_finrank_ker]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
⊢ IsCompl W (orthogonal B W)
[PROOFSTEP]
have : W ⊓ B.orthogonal W = ⊥ := by
  rw [eq_bot_iff]
  intro x hx
  obtain ⟨hx₁, hx₂⟩ := mem_inf.1 hx
  refine' Subtype.mk_eq_mk.1 (b₂ ⟨x, hx₁⟩ _)
  rintro ⟨n, hn⟩
  rw [restrict_apply, coe_mk, coe_mk, b₁]
  exact hx₂ n hn
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
⊢ W ⊓ orthogonal B W = ⊥
[PROOFSTEP]
rw [eq_bot_iff]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
⊢ W ⊓ orthogonal B W ≤ ⊥
[PROOFSTEP]
intro x hx
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
x : V
hx : x ∈ W ⊓ orthogonal B W
⊢ x ∈ ⊥
[PROOFSTEP]
obtain ⟨hx₁, hx₂⟩ := mem_inf.1 hx
[GOAL]
case intro
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
x : V
hx : x ∈ W ⊓ orthogonal B W
hx₁ : x ∈ W
hx₂ : x ∈ orthogonal B W
⊢ x ∈ ⊥
[PROOFSTEP]
refine' Subtype.mk_eq_mk.1 (b₂ ⟨x, hx₁⟩ _)
[GOAL]
case intro
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
x : V
hx : x ∈ W ⊓ orthogonal B W
hx₁ : x ∈ W
hx₂ : x ∈ orthogonal B W
⊢ ∀ (n : { x // x ∈ W }), bilin (restrict B W) { val := x, property := hx₁ } n = 0
[PROOFSTEP]
rintro ⟨n, hn⟩
[GOAL]
case intro.mk
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
x : V
hx : x ∈ W ⊓ orthogonal B W
hx₁ : x ∈ W
hx₂ : x ∈ orthogonal B W
n : V
hn : n ∈ W
⊢ bilin (restrict B W) { val := x, property := hx₁ } { val := n, property := hn } = 0
[PROOFSTEP]
rw [restrict_apply, coe_mk, coe_mk, b₁]
[GOAL]
case intro.mk.a
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
x : V
hx : x ∈ W ⊓ orthogonal B W
hx₁ : x ∈ W
hx₂ : x ∈ orthogonal B W
n : V
hn : n ∈ W
⊢ bilin B n x = 0
[PROOFSTEP]
exact hx₂ n hn
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
this : W ⊓ orthogonal B W = ⊥
⊢ IsCompl W (orthogonal B W)
[PROOFSTEP]
refine' IsCompl.of_eq this (eq_top_of_finrank_eq <| (finrank_le _).antisymm _)
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
this : W ⊓ orthogonal B W = ⊥
⊢ finrank K V ≤ finrank K { x // x ∈ W ⊔ orthogonal B W }
[PROOFSTEP]
conv_rhs => rw [← add_zero (finrank K _)]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
this : W ⊓ orthogonal B W = ⊥
| finrank K { x // x ∈ W ⊔ orthogonal B W }
[PROOFSTEP]
rw [← add_zero (finrank K _)]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
this : W ⊓ orthogonal B W = ⊥
| finrank K { x // x ∈ W ⊔ orthogonal B W }
[PROOFSTEP]
rw [← add_zero (finrank K _)]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
this : W ⊓ orthogonal B W = ⊥
| finrank K { x // x ∈ W ⊔ orthogonal B W }
[PROOFSTEP]
rw [← add_zero (finrank K _)]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
this : W ⊓ orthogonal B W = ⊥
⊢ finrank K V ≤ finrank K { x // x ∈ W ⊔ orthogonal B W } + 0
[PROOFSTEP]
rw [← finrank_bot K V, ← this, finrank_sup_add_finrank_inf_eq, finrank_add_finrank_orthogonal b₁]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B : BilinForm K V
W : Subspace K V
b₁ : IsRefl B
b₂ : Nondegenerate (restrict B W)
this : W ⊓ orthogonal B W = ⊥
⊢ finrank K V ≤ finrank K V + finrank K { x // x ∈ W ⊓ orthogonal B ⊤ }
[PROOFSTEP]
exact le_self_add
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁹ : Semiring R
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁶ : Ring R₁
inst✝¹⁵ : AddCommGroup M₁
inst✝¹⁴ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹³ : CommSemiring R₂
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁰ : CommRing R₃
inst✝⁹ : AddCommGroup M₃
inst✝⁸ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V
inst✝⁵ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝⁴ : AddCommMonoid M₂'
inst✝³ : Module R₂ M₂'
inst✝² : FiniteDimensional K V
ι : Type u_12
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
B : BilinForm K V
hB : Nondegenerate B
b : Basis ι K V
x : V
i : ι
⊢ ↑(↑(dualBasis B hB b).repr x) i = bilin B x (↑b i)
[PROOFSTEP]
rw [dualBasis, Basis.map_repr, LinearEquiv.symm_symm, LinearEquiv.trans_apply, Basis.dualBasis_repr, toDual_def]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁹ : Semiring R
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁶ : Ring R₁
inst✝¹⁵ : AddCommGroup M₁
inst✝¹⁴ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹³ : CommSemiring R₂
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁰ : CommRing R₃
inst✝⁹ : AddCommGroup M₃
inst✝⁸ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V
inst✝⁵ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝⁴ : AddCommMonoid M₂'
inst✝³ : Module R₂ M₂'
inst✝² : FiniteDimensional K V
ι : Type u_12
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
B : BilinForm K V
hB : Nondegenerate B
b : Basis ι K V
i j : ι
⊢ bilin B (↑(dualBasis B hB b) i) (↑b j) = if j = i then 1 else 0
[PROOFSTEP]
rw [dualBasis, Basis.map_apply, Basis.coe_dualBasis, ← toDual_def hB, LinearEquiv.apply_symm_apply, Basis.coord_apply,
  Basis.repr_self, Finsupp.single_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁹ : Semiring R
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁶ : Ring R₁
inst✝¹⁵ : AddCommGroup M₁
inst✝¹⁴ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹³ : CommSemiring R₂
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹⁰ : CommRing R₃
inst✝⁹ : AddCommGroup M₃
inst✝⁸ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V
inst✝⁵ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝⁴ : AddCommMonoid M₂'
inst✝³ : Module R₂ M₂'
inst✝² : FiniteDimensional K V
ι : Type u_12
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
B : BilinForm K V
hB : Nondegenerate B
sym : IsSymm B
b : Basis ι K V
i j : ι
⊢ bilin B (↑b i) (↑(dualBasis B hB b) j) = if i = j then 1 else 0
[PROOFSTEP]
rw [sym, apply_dualBasis_left]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
b₁ : Nondegenerate B
b₂ : IsRefl B
x : V
hx : ¬IsOrtho B x x
⊢ Nondegenerate (restrict B (orthogonal B (Submodule.span K {x})))
[PROOFSTEP]
refine' fun m hm => Submodule.coe_eq_zero.1 (b₁ m.1 fun n => _)
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
b₁ : Nondegenerate B
b₂ : IsRefl B
x : V
hx : ¬IsOrtho B x x
m : { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hm :
  ∀ (n : { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }),
    bilin (restrict B (orthogonal B (Submodule.span K {x}))) m n = 0
n : V
⊢ bilin B (↑m) n = 0
[PROOFSTEP]
have : n ∈ (K ∙ x) ⊔ B.orthogonal (K ∙ x) := (span_singleton_sup_orthogonal_eq_top hx).symm ▸ Submodule.mem_top
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
b₁ : Nondegenerate B
b₂ : IsRefl B
x : V
hx : ¬IsOrtho B x x
m : { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hm :
  ∀ (n : { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }),
    bilin (restrict B (orthogonal B (Submodule.span K {x}))) m n = 0
n : V
this : n ∈ Submodule.span K {x} ⊔ orthogonal B (Submodule.span K {x})
⊢ bilin B (↑m) n = 0
[PROOFSTEP]
rcases Submodule.mem_sup.1 this with ⟨y, hy, z, hz, rfl⟩
[GOAL]
case intro.intro.intro.intro
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
b₁ : Nondegenerate B
b₂ : IsRefl B
x : V
hx : ¬IsOrtho B x x
m : { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hm :
  ∀ (n : { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }),
    bilin (restrict B (orthogonal B (Submodule.span K {x}))) m n = 0
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ orthogonal B (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ orthogonal B (Submodule.span K {x})
⊢ bilin B (↑m) (y + z) = 0
[PROOFSTEP]
specialize hm ⟨z, hz⟩
[GOAL]
case intro.intro.intro.intro
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
b₁ : Nondegenerate B
b₂ : IsRefl B
x : V
hx : ¬IsOrtho B x x
m : { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ orthogonal B (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ orthogonal B (Submodule.span K {x})
hm : bilin (restrict B (orthogonal B (Submodule.span K {x}))) m { val := z, property := hz } = 0
⊢ bilin B (↑m) (y + z) = 0
[PROOFSTEP]
rw [restrict] at hm 
[GOAL]
case intro.intro.intro.intro
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
b₁ : Nondegenerate B
b₂ : IsRefl B
x : V
hx : ¬IsOrtho B x x
m : { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ orthogonal B (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ orthogonal B (Submodule.span K {x})
hm :
  bilin
      { bilin := fun a b => bilin B ↑a ↑b,
        bilin_add_left :=
          (_ :
            ∀ (x_1 x_2 x_3 : { x_3 // x_3 ∈ orthogonal B (Submodule.span K {x}) }),
              bilin B (↑x_1 + ↑x_2) ↑x_3 = bilin B ↑x_1 ↑x_3 + bilin B ↑x_2 ↑x_3),
        bilin_smul_left :=
          (_ :
            ∀ (x_1 : K) (x_2 x_3 : { x_3 // x_3 ∈ orthogonal B (Submodule.span K {x}) }),
              bilin B (x_1 • ↑x_2) ↑x_3 = x_1 * bilin B ↑x_2 ↑x_3),
        bilin_add_right :=
          (_ :
            ∀ (x_1 x_2 x_3 : { x_3 // x_3 ∈ orthogonal B (Submodule.span K {x}) }),
              bilin B (↑x_1) (↑x_2 + ↑x_3) = bilin B ↑x_1 ↑x_2 + bilin B ↑x_1 ↑x_3),
        bilin_smul_right :=
          (_ :
            ∀ (x_1 : K) (x_2 x_3 : { x_3 // x_3 ∈ orthogonal B (Submodule.span K {x}) }),
              bilin B (↑x_2) (x_1 • ↑x_3) = x_1 * bilin B ↑x_2 ↑x_3) }
      m { val := z, property := hz } =
    0
⊢ bilin B (↑m) (y + z) = 0
[PROOFSTEP]
erw [add_right, show B m.1 y = 0 by rw [b₂]; exact m.2 y hy, hm, add_zero]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
b₁ : Nondegenerate B
b₂ : IsRefl B
x : V
hx : ¬IsOrtho B x x
m : { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ orthogonal B (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ orthogonal B (Submodule.span K {x})
hm :
  bilin
      { bilin := fun a b => bilin B ↑a ↑b,
        bilin_add_left :=
          (_ :
            ∀ (x_1 x_2 x_3 : { x_3 // x_3 ∈ orthogonal B (Submodule.span K {x}) }),
              bilin B (↑x_1 + ↑x_2) ↑x_3 = bilin B ↑x_1 ↑x_3 + bilin B ↑x_2 ↑x_3),
        bilin_smul_left :=
          (_ :
            ∀ (x_1 : K) (x_2 x_3 : { x_3 // x_3 ∈ orthogonal B (Submodule.span K {x}) }),
              bilin B (x_1 • ↑x_2) ↑x_3 = x_1 * bilin B ↑x_2 ↑x_3),
        bilin_add_right :=
          (_ :
            ∀ (x_1 x_2 x_3 : { x_3 // x_3 ∈ orthogonal B (Submodule.span K {x}) }),
              bilin B (↑x_1) (↑x_2 + ↑x_3) = bilin B ↑x_1 ↑x_2 + bilin B ↑x_1 ↑x_3),
        bilin_smul_right :=
          (_ :
            ∀ (x_1 : K) (x_2 x_3 : { x_3 // x_3 ∈ orthogonal B (Submodule.span K {x}) }),
              bilin B (↑x_2) (x_1 • ↑x_3) = x_1 * bilin B ↑x_2 ↑x_3) }
      m { val := z, property := hz } =
    0
⊢ bilin B (↑m) y = 0
[PROOFSTEP]
rw [b₂]
[GOAL]
case a
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm K V
b₁ : Nondegenerate B
b₂ : IsRefl B
x : V
hx : ¬IsOrtho B x x
m : { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ orthogonal B (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ orthogonal B (Submodule.span K {x})
hm :
  bilin
      { bilin := fun a b => bilin B ↑a ↑b,
        bilin_add_left :=
          (_ :
            ∀ (x_1 x_2 x_3 : { x_3 // x_3 ∈ orthogonal B (Submodule.span K {x}) }),
              bilin B (↑x_1 + ↑x_2) ↑x_3 = bilin B ↑x_1 ↑x_3 + bilin B ↑x_2 ↑x_3),
        bilin_smul_left :=
          (_ :
            ∀ (x_1 : K) (x_2 x_3 : { x_3 // x_3 ∈ orthogonal B (Submodule.span K {x}) }),
              bilin B (x_1 • ↑x_2) ↑x_3 = x_1 * bilin B ↑x_2 ↑x_3),
        bilin_add_right :=
          (_ :
            ∀ (x_1 x_2 x_3 : { x_3 // x_3 ∈ orthogonal B (Submodule.span K {x}) }),
              bilin B (↑x_1) (↑x_2 + ↑x_3) = bilin B ↑x_1 ↑x_2 + bilin B ↑x_1 ↑x_3),
        bilin_smul_right :=
          (_ :
            ∀ (x_1 : K) (x_2 x_3 : { x_3 // x_3 ∈ orthogonal B (Submodule.span K {x}) }),
              bilin B (↑x_2) (x_1 • ↑x_3) = x_1 * bilin B ↑x_2 ↑x_3) }
      m { val := z, property := hz } =
    0
⊢ bilin B y ↑m = 0
[PROOFSTEP]
exact m.2 y hy
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₁ M₁
b : Nondegenerate B
φ ψ : M₁ →ₗ[R₁] M₁
h : compLeft B φ = compLeft B ψ
⊢ φ = ψ
[PROOFSTEP]
ext w
[GOAL]
case h
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₁ M₁
b : Nondegenerate B
φ ψ : M₁ →ₗ[R₁] M₁
h : compLeft B φ = compLeft B ψ
w : M₁
⊢ ↑φ w = ↑ψ w
[PROOFSTEP]
refine' eq_of_sub_eq_zero (b _ _)
[GOAL]
case h
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₁ M₁
b : Nondegenerate B
φ ψ : M₁ →ₗ[R₁] M₁
h : compLeft B φ = compLeft B ψ
w : M₁
⊢ ∀ (n : M₁), bilin B (↑φ w - ↑ψ w) n = 0
[PROOFSTEP]
intro v
[GOAL]
case h
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₁ M₁
b : Nondegenerate B
φ ψ : M₁ →ₗ[R₁] M₁
h : compLeft B φ = compLeft B ψ
w v : M₁
⊢ bilin B (↑φ w - ↑ψ w) v = 0
[PROOFSTEP]
rw [sub_left, ← compLeft_apply, ← compLeft_apply, ← h, sub_self]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R₂ M₂'
B : BilinForm R₁ M₁
b : Nondegenerate B
φ ψ₁ ψ₂ : M₁ →ₗ[R₁] M₁
hψ₁ : IsAdjointPair B B ψ₁ φ
hψ₂ : IsAdjointPair B B ψ₂ φ
v w : M₁
⊢ bilin (compLeft B ψ₁) v w = bilin (compLeft B ψ₂) v w
[PROOFSTEP]
rw [compLeft_apply, compLeft_apply, hψ₁, hψ₂]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B₁ B₂ : BilinForm K V
b₂ : Nondegenerate B₂
v : V
⊢ ↑(↑toLin B₂) (↑(symmCompOfNondegenerate B₁ B₂ b₂) v) = ↑(↑toLin B₁) v
[PROOFSTEP]
erw [symmCompOfNondegenerate, LinearEquiv.apply_symm_apply (B₂.toDual b₂) _]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B₁ B₂ : BilinForm K V
b₂ : Nondegenerate B₂
v w : V
⊢ bilin B₂ (↑(symmCompOfNondegenerate B₁ B₂ b₂) w) v = bilin B₁ w v
[PROOFSTEP]
conv_lhs => rw [← BilinForm.toLin_apply, comp_symmCompOfNondegenerate_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B₁ B₂ : BilinForm K V
b₂ : Nondegenerate B₂
v w : V
| bilin B₂ (↑(symmCompOfNondegenerate B₁ B₂ b₂) w) v
[PROOFSTEP]
rw [← BilinForm.toLin_apply, comp_symmCompOfNondegenerate_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B₁ B₂ : BilinForm K V
b₂ : Nondegenerate B₂
v w : V
| bilin B₂ (↑(symmCompOfNondegenerate B₁ B₂ b₂) w) v
[PROOFSTEP]
rw [← BilinForm.toLin_apply, comp_symmCompOfNondegenerate_apply]
[GOAL]
R : Type u_1
M : Type u_2
inst✝¹⁷ : Semiring R
inst✝¹⁶ : AddCommMonoid M
inst✝¹⁵ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁴ : Ring R₁
inst✝¹³ : AddCommGroup M₁
inst✝¹² : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹¹ : CommSemiring R₂
inst✝¹⁰ : AddCommMonoid M₂
inst✝⁹ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝⁸ : CommRing R₃
inst✝⁷ : AddCommGroup M₃
inst✝⁶ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁵ : Field K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
B₂✝ : BilinForm R₂ M₂
M₂' : Type u_11
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
inst✝ : FiniteDimensional K V
B₁ B₂ : BilinForm K V
b₂ : Nondegenerate B₂
v w : V
| bilin B₂ (↑(symmCompOfNondegenerate B₁ B₂ b₂) w) v
[PROOFSTEP]
rw [← BilinForm.toLin_apply, comp_symmCompOfNondegenerate_apply]
