Theorem: LinearMap.BilinForm.isPairSelfAdjoint_equiv
File: Mathlib/LinearAlgebra/BilinearForm/Properties.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
inst✝¹⁸ : CommSemiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : CommRing R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
M'✝ : Type u_7
M''✝ : Type u_8
inst✝⁹ : AddCommMonoid M'✝
inst✝⁸ : AddCommMonoid M''✝
inst✝⁷ : Module R M'✝
inst✝⁶ : Module R M''✝
B : BilinForm R M
B₁ : BilinForm R₁ M₁
F : BilinForm R M
M' : Type u_9
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_10
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_11
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
B₂ F₂ : BilinForm R M
e : M' ≃ₗ[R] M
f : Module.End R M
⊢ B₂.IsPairSelfAdjoint F₂ f ↔ (B₂.comp ↑e ↑e).IsPairSelfAdjoint (F₂.comp ↑e ↑e) (e.symm.conj f)
state_after: R : Type u_1
M : Type u_2
inst✝¹⁸ : CommSemiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : CommRing R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
M'✝ : Type u_7
M''✝ : Type u_8
inst✝⁹ : AddCommMonoid M'✝
inst✝⁸ : AddCommMonoid M''✝
inst✝⁷ : Module R M'✝
inst✝⁶ : Module R M''✝
B : BilinForm R M
B₁ : BilinForm R₁ M₁
F : BilinForm R M
M' : Type u_9
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_10
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_11
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
B₂ F₂ : BilinForm R M
e : M' ≃ₗ[R] M
f : Module.End R M
hₗ : (F₂.comp ↑e ↑e).compLeft (e.symm.conj f) = (F₂.compLeft f).comp ↑e ↑e
⊢ B₂.IsPairSelfAdjoint F₂ f ↔ (B₂.comp ↑e ↑e).IsPairSelfAdjoint (F₂.comp ↑e ↑e) (e.symm.conj f)
tactic: have hₗ : (F₂.comp ↑e ↑e).compLeft (e.symm.conj f) = (F₂.compLeft f).comp ↑e ↑e := by
    ext
    simp [LinearEquiv.symm_conj_apply]
state_before: R : Type u_1
M : Type u_2
inst✝¹⁸ : CommSemiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : CommRing R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
M'✝ : Type u_7
M''✝ : Type u_8
inst✝⁹ : AddCommMonoid M'✝
inst✝⁸ : AddCommMonoid M''✝
inst✝⁷ : Module R M'✝
inst✝⁶ : Module R M''✝
B : BilinForm R M
B₁ : BilinForm R₁ M₁
F : BilinForm R M
M' : Type u_9
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_10
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_11
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
B₂ F₂ : BilinForm R M
e : M' ≃ₗ[R] M
f : Module.End R M
hₗ : (F₂.comp ↑e ↑e).compLeft (e.symm.conj f) = (F₂.compLeft f).comp ↑e ↑e
⊢ B₂.IsPairSelfAdjoint F₂ f ↔ (B₂.comp ↑e ↑e).IsPairSelfAdjoint (F₂.comp ↑e ↑e) (e.symm.conj f)
state_after: R : Type u_1
M : Type u_2
inst✝¹⁸ : CommSemiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : CommRing R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
M'✝ : Type u_7
M''✝ : Type u_8
inst✝⁹ : AddCommMonoid M'✝
inst✝⁸ : AddCommMonoid M''✝
inst✝⁷ : Module R M'✝
inst✝⁶ : Module R M''✝
B : BilinForm R M
B₁ : BilinForm R₁ M₁
F : BilinForm R M
M' : Type u_9
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_10
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_11
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
B₂ F₂ : BilinForm R M
e : M' ≃ₗ[R] M
f : Module.End R M
hₗ : (F₂.comp ↑e ↑e).compLeft (e.symm.conj f) = (F₂.compLeft f).comp ↑e ↑e
hᵣ : (B₂.comp ↑e ↑e).compRight (e.symm.conj f) = (B₂.compRight f).comp ↑e ↑e
⊢ B₂.IsPairSelfAdjoint F₂ f ↔ (B₂.comp ↑e ↑e).IsPairSelfAdjoint (F₂.comp ↑e ↑e) (e.symm.conj f)
tactic: have hᵣ : (B₂.comp ↑e ↑e).compRight (e.symm.conj f) = (B₂.compRight f).comp ↑e ↑e := by
    ext
    simp [LinearEquiv.conj_apply]
state_before: R : Type u_1
M : Type u_2
inst✝¹⁸ : CommSemiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : CommRing R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
M'✝ : Type u_7
M''✝ : Type u_8
inst✝⁹ : AddCommMonoid M'✝
inst✝⁸ : AddCommMonoid M''✝
inst✝⁷ : Module R M'✝
inst✝⁶ : Module R M''✝
B : BilinForm R M
B₁ : BilinForm R₁ M₁
F : BilinForm R M
M' : Type u_9
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_10
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_11
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
B₂ F₂ : BilinForm R M
e : M' ≃ₗ[R] M
f : Module.End R M
hₗ : (F₂.comp ↑e ↑e).compLeft (e.symm.conj f) = (F₂.compLeft f).comp ↑e ↑e
hᵣ : (B₂.comp ↑e ↑e).compRight (e.symm.conj f) = (B₂.compRight f).comp ↑e ↑e
⊢ B₂.IsPairSelfAdjoint F₂ f ↔ (B₂.comp ↑e ↑e).IsPairSelfAdjoint (F₂.comp ↑e ↑e) (e.symm.conj f)
state_after: R : Type u_1
M : Type u_2
inst✝¹⁸ : CommSemiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : CommRing R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
M'✝ : Type u_7
M''✝ : Type u_8
inst✝⁹ : AddCommMonoid M'✝
inst✝⁸ : AddCommMonoid M''✝
inst✝⁷ : Module R M'✝
inst✝⁶ : Module R M''✝
B : BilinForm R M
B₁ : BilinForm R₁ M₁
F : BilinForm R M
M' : Type u_9
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_10
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_11
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
B₂ F₂ : BilinForm R M
e : M' ≃ₗ[R] M
f : Module.End R M
hₗ : (F₂.comp ↑e ↑e).compLeft (e.symm.conj f) = (F₂.compLeft f).comp ↑e ↑e
hᵣ : (B₂.comp ↑e ↑e).compRight (e.symm.conj f) = (B₂.compRight f).comp ↑e ↑e
he : Function.Surjective ⇑↑e
⊢ B₂.IsPairSelfAdjoint F₂ f ↔ (B₂.comp ↑e ↑e).IsPairSelfAdjoint (F₂.comp ↑e ↑e) (e.symm.conj f)
tactic: have he : Function.Surjective (⇑(↑e : M' →ₗ[R] M) : M' → M) := e.surjective
state_before: R : Type u_1
M : Type u_2
inst✝¹⁸ : CommSemiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : CommRing R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
M'✝ : Type u_7
M''✝ : Type u_8
inst✝⁹ : AddCommMonoid M'✝
inst✝⁸ : AddCommMonoid M''✝
inst✝⁷ : Module R M'✝
inst✝⁶ : Module R M''✝
B : BilinForm R M
B₁ : BilinForm R₁ M₁
F : BilinForm R M
M' : Type u_9
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_10
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_11
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
B₂ F₂ : BilinForm R M
e : M' ≃ₗ[R] M
f : Module.End R M
hₗ : (F₂.comp ↑e ↑e).compLeft (e.symm.conj f) = (F₂.compLeft f).comp ↑e ↑e
hᵣ : (B₂.comp ↑e ↑e).compRight (e.symm.conj f) = (B₂.compRight f).comp ↑e ↑e
he : Function.Surjective ⇑↑e
⊢ B₂.IsPairSelfAdjoint F₂ f ↔ (B₂.comp ↑e ↑e).IsPairSelfAdjoint (F₂.comp ↑e ↑e) (e.symm.conj f)
state_after: R : Type u_1
M : Type u_2
inst✝¹⁸ : CommSemiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : CommRing R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
M'✝ : Type u_7
M''✝ : Type u_8
inst✝⁹ : AddCommMonoid M'✝
inst✝⁸ : AddCommMonoid M''✝
inst✝⁷ : Module R M'✝
inst✝⁶ : Module R M''✝
B : BilinForm R M
B₁ : BilinForm R₁ M₁
F : BilinForm R M
M' : Type u_9
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_10
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_11
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
B₂ F₂ : BilinForm R M
e : M' ≃ₗ[R] M
f : Module.End R M
hₗ : (F₂.comp ↑e ↑e).compLeft (e.symm.conj f) = (F₂.compLeft f).comp ↑e ↑e
hᵣ : (B₂.comp ↑e ↑e).compRight (e.symm.conj f) = (B₂.compRight f).comp ↑e ↑e
he : Function.Surjective ⇑↑e
⊢ B₂.IsAdjointPair F₂ f f ↔ (B₂.comp ↑e ↑e).IsAdjointPair (F₂.comp ↑e ↑e) (e.symm.conj f) (e.symm.conj f)
tactic: show BilinForm.IsAdjointPair _ _ _ _ ↔ BilinForm.IsAdjointPair _ _ _ _
state_before: R : Type u_1
M : Type u_2
inst✝¹⁸ : CommSemiring R
inst✝¹⁷ : AddCommMonoid M
inst✝¹⁶ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁵ : CommRing R₁
inst✝¹⁴ : AddCommGroup M₁
inst✝¹³ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝¹² : Field K
inst✝¹¹ : AddCommGroup V
inst✝¹⁰ : Module K V
M'✝ : Type u_7
M''✝ : Type u_8
inst✝⁹ : AddCommMonoid M'✝
inst✝⁸ : AddCommMonoid M''✝
inst✝⁷ : Module R M'✝
inst✝⁶ : Module R M''✝
B : BilinForm R M
B₁ : BilinForm R₁ M₁
F : BilinForm R M
M' : Type u_9
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : Module R M'
B' : BilinForm R M'
f✝ f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_10
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_11
inst✝¹ : AddCommMonoid M''
inst✝ : Module R M''
B'' : BilinForm R M''
B₂ F₂ : BilinForm R M
e : M' ≃ₗ[R] M
f : Module.End R M
hₗ : (F₂.comp ↑e ↑e).compLeft (e.symm.conj f) = (F₂.compLeft f).comp ↑e ↑e
hᵣ : (B₂.comp ↑e ↑e).compRight (e.symm.conj f) = (B₂.compRight f).comp ↑e ↑e
he : Function.Surjective ⇑↑e
⊢ B₂.IsAdjointPair F₂ f f ↔ (B₂.comp ↑e ↑e).IsAdjointPair (F₂.comp ↑e ↑e) (e.symm.conj f) (e.symm.conj f)
state_after: no goals
tactic: rw [isAdjointPair_iff_compLeft_eq_compRight, isAdjointPair_iff_compLeft_eq_compRight, hᵣ,
    hₗ, comp_inj _ _ he he]