Theorem: BilinForm.isAdjointPair_iff_compLeft_eq_compRight
File: Mathlib/LinearAlgebra/BilinearForm.lean

tactic: constructor <;> intro h
state_before: R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type ?u.1021599
M₁ : Type ?u.1021602
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type ?u.1022211
M₂ : Type ?u.1022214
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type ?u.1022401
M₃ : Type ?u.1022404
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type ?u.1022992
K : Type ?u.1022995
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.1024209
M₂'' : Type ?u.1024212
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type ?u.1024523
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

tactic: ext x
state_before: case mp
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type ?u.1021599
M₁ : Type ?u.1021602
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type ?u.1022211
M₂ : Type ?u.1022214
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type ?u.1022401
M₃ : Type ?u.1022404
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type ?u.1022992
K : Type ?u.1022995
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.1024209
M₂'' : Type ?u.1024212
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type ?u.1024523
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

tactic: simp only [compLeft_apply, compRight_apply]
state_before: case mp.H
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type ?u.1021599
M₁ : Type ?u.1021602
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type ?u.1022211
M₂ : Type ?u.1022214
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type ?u.1022401
M₃ : Type ?u.1022404
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type ?u.1022992
K : Type ?u.1022995
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.1024209
M₂'' : Type ?u.1024212
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type ?u.1024523
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 : M
⊢ ∀ (y : M), bilin (compLeft F f) x y = bilin (compRight B g) x y

tactic: apply h
state_before: case mp.H
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type ?u.1021599
M₁ : Type ?u.1021602
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type ?u.1022211
M₂ : Type ?u.1022214
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type ?u.1022401
M₃ : Type ?u.1022404
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type ?u.1022992
K : Type ?u.1022995
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.1024209
M₂'' : Type ?u.1024212
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type ?u.1024523
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 : M
⊢ ∀ (y : M), bilin F (↑f x) y = bilin B x (↑g y)

tactic: intro x y
state_before: case mpr
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type ?u.1021599
M₁ : Type ?u.1021602
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type ?u.1022211
M₂ : Type ?u.1022214
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type ?u.1022401
M₃ : Type ?u.1022404
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type ?u.1022992
K : Type ?u.1022995
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.1024209
M₂'' : Type ?u.1024212
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type ?u.1024523
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

tactic: rw [← compLeft_apply, ← compRight_apply]
state_before: case mpr
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type ?u.1021599
M₁ : Type ?u.1021602
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type ?u.1022211
M₂ : Type ?u.1022214
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type ?u.1022401
M₃ : Type ?u.1022404
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type ?u.1022992
K : Type ?u.1022995
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.1024209
M₂'' : Type ?u.1024212
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type ?u.1024523
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)

tactic: rw [h]
state_before: case mpr
R : Type u_1
M : Type u_2
inst✝²⁰ : Semiring R
inst✝¹⁹ : AddCommMonoid M
inst✝¹⁸ : Module R M
R₁ : Type ?u.1021599
M₁ : Type ?u.1021602
inst✝¹⁷ : Ring R₁
inst✝¹⁶ : AddCommGroup M₁
inst✝¹⁵ : Module R₁ M₁
R₂ : Type ?u.1022211
M₂ : Type ?u.1022214
inst✝¹⁴ : CommSemiring R₂
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : Module R₂ M₂
R₃ : Type ?u.1022401
M₃ : Type ?u.1022404
inst✝¹¹ : CommRing R₃
inst✝¹⁰ : AddCommGroup M₃
inst✝⁹ : Module R₃ M₃
V : Type ?u.1022992
K : Type ?u.1022995
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.1024209
M₂'' : Type ?u.1024212
inst✝⁵ : AddCommMonoid M₂'
inst✝⁴ : AddCommMonoid M₂''
inst✝³ : Module R₂ M₂'
inst✝² : Module R₂ M₂''
F : BilinForm R M
M' : Type ?u.1024523
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