Theorem: isAdjointPair_toBilin
File: Mathlib/LinearAlgebra/Matrix/BilinearForm.lean

tactic: rw [BilinForm.isAdjointPair_iff_compLeft_eq_compRight]
state_before: R : Type ?u.2055158
M : Type ?u.2055161
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type ?u.2055197
M₁ : Type ?u.2055200
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type ?u.2055809
M₂ : Type ?u.2055812
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_2
M₃ : Type u_3
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type ?u.2056590
K : Type ?u.2056593
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
n : Type u_1
inst✝¹ : Fintype n
b : Basis n R₃ M₃
J J₃ A A' : Matrix n n R₃
inst✝ : DecidableEq n
⊢ BilinForm.IsAdjointPair (↑(toBilin b) J) (↑(toBilin b) J₃) (↑(toLin b b) A) (↑(toLin b b) A') ↔
    IsAdjointPair J J₃ A A'

tactic: rw [h, BilinForm.toMatrix_compLeft, BilinForm.toMatrix_compRight, LinearMap.toMatrix_toLin,
  LinearMap.toMatrix_toLin, BilinForm.toMatrix_toBilin, BilinForm.toMatrix_toBilin]
state_before: R : Type ?u.2055158
M : Type ?u.2055161
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type ?u.2055197
M₁ : Type ?u.2055200
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type ?u.2055809
M₂ : Type ?u.2055812
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_2
M₃ : Type u_3
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type ?u.2056590
K : Type ?u.2056593
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
n : Type u_1
inst✝¹ : Fintype n
b : Basis n R₃ M₃
J J₃ A A' : Matrix n n R₃
inst✝ : DecidableEq n
h : ∀ (B B' : BilinForm R₃ M₃), B = B' ↔ ↑(BilinForm.toMatrix b) B = ↑(BilinForm.toMatrix b) B'
⊢ BilinForm.compLeft (↑(toBilin b) J₃) (↑(toLin b b) A) = BilinForm.compRight (↑(toBilin b) J) (↑(toLin b b) A') ↔
    IsAdjointPair J J₃ A A'

tactic: rfl
state_before: R : Type ?u.2055158
M : Type ?u.2055161
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type ?u.2055197
M₁ : Type ?u.2055200
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type ?u.2055809
M₂ : Type ?u.2055812
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_2
M₃ : Type u_3
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type ?u.2056590
K : Type ?u.2056593
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
n : Type u_1
inst✝¹ : Fintype n
b : Basis n R₃ M₃
J J₃ A A' : Matrix n n R₃
inst✝ : DecidableEq n
h : ∀ (B B' : BilinForm R₃ M₃), B = B' ↔ ↑(BilinForm.toMatrix b) B = ↑(BilinForm.toMatrix b) B'
⊢ Aᵀ ⬝ J₃ = J ⬝ A' ↔ IsAdjointPair J J₃ A A'

tactic: intro B B'
state_before: R : Type ?u.2055158
M : Type ?u.2055161
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type ?u.2055197
M₁ : Type ?u.2055200
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type ?u.2055809
M₂ : Type ?u.2055812
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_2
M₃ : Type u_3
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type ?u.2056590
K : Type ?u.2056593
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
n : Type u_1
inst✝¹ : Fintype n
b : Basis n R₃ M₃
J J₃ A A' : Matrix n n R₃
inst✝ : DecidableEq n
⊢ ∀ (B B' : BilinForm R₃ M₃), B = B' ↔ ↑(BilinForm.toMatrix b) B = ↑(BilinForm.toMatrix b) B'

tactic: constructor <;> intro h
state_before: R : Type ?u.2055158
M : Type ?u.2055161
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type ?u.2055197
M₁ : Type ?u.2055200
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type ?u.2055809
M₂ : Type ?u.2055812
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_2
M₃ : Type u_3
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type ?u.2056590
K : Type ?u.2056593
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
n : Type u_1
inst✝¹ : Fintype n
b : Basis n R₃ M₃
J J₃ A A' : Matrix n n R₃
inst✝ : DecidableEq n
B B' : BilinForm R₃ M₃
⊢ B = B' ↔ ↑(BilinForm.toMatrix b) B = ↑(BilinForm.toMatrix b) B'

tactic: rw [h]
state_before: case mp
R : Type ?u.2055158
M : Type ?u.2055161
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type ?u.2055197
M₁ : Type ?u.2055200
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type ?u.2055809
M₂ : Type ?u.2055812
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_2
M₃ : Type u_3
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type ?u.2056590
K : Type ?u.2056593
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
n : Type u_1
inst✝¹ : Fintype n
b : Basis n R₃ M₃
J J₃ A A' : Matrix n n R₃
inst✝ : DecidableEq n
B B' : BilinForm R₃ M₃
h : B = B'
⊢ ↑(BilinForm.toMatrix b) B = ↑(BilinForm.toMatrix b) B'

tactic: exact (BilinForm.toMatrix b).injective h
state_before: case mpr
R : Type ?u.2055158
M : Type ?u.2055161
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type ?u.2055197
M₁ : Type ?u.2055200
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type ?u.2055809
M₂ : Type ?u.2055812
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type u_2
M₃ : Type u_3
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type ?u.2056590
K : Type ?u.2056593
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
n : Type u_1
inst✝¹ : Fintype n
b : Basis n R₃ M₃
J J₃ A A' : Matrix n n R₃
inst✝ : DecidableEq n
B B' : BilinForm R₃ M₃
h : ↑(BilinForm.toMatrix b) B = ↑(BilinForm.toMatrix b) B'
⊢ B = B'