Theorem: Submodule.dualAnnihilator_gc
File: Mathlib/LinearAlgebra/Dual.lean

tactic: intro a b
state_before: R✝ : Type u
M✝ : Type v
inst✝⁵ : CommSemiring R✝
inst✝⁴ : AddCommMonoid M✝
inst✝³ : Module R✝ M✝
W : Submodule R✝ M✝
R : Type u_1
M : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
⊢ GaloisConnection (↑OrderDual.toDual ∘ dualAnnihilator) (dualCoannihilator ∘ ↑OrderDual.ofDual)

tactic: induction b using OrderDual.rec
state_before: R✝ : Type u
M✝ : Type v
inst✝⁵ : CommSemiring R✝
inst✝⁴ : AddCommMonoid M✝
inst✝³ : Module R✝ M✝
W : Submodule R✝ M✝
R : Type u_1
M : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
a : Submodule R M
b : (Submodule R (Module.Dual R M))ᵒᵈ
⊢ (↑OrderDual.toDual ∘ dualAnnihilator) a ≤ b ↔ a ≤ (dualCoannihilator ∘ ↑OrderDual.ofDual) b

tactic: simp only [Function.comp_apply, OrderDual.toDual_le_toDual, OrderDual.ofDual_toDual]
state_before: case h₂
R✝ : Type u
M✝ : Type v
inst✝⁵ : CommSemiring R✝
inst✝⁴ : AddCommMonoid M✝
inst✝³ : Module R✝ M✝
W : Submodule R✝ M✝
R : Type u_1
M : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
⊢ (↑OrderDual.toDual ∘ dualAnnihilator) a ≤ ↑OrderDual.toDual a✝ ↔
    a ≤ (dualCoannihilator ∘ ↑OrderDual.ofDual) (↑OrderDual.toDual a✝)

tactic: intro h x hx
state_before: case h₂.mpr
R✝ : Type u
M✝ : Type v
inst✝⁵ : CommSemiring R✝
inst✝⁴ : AddCommMonoid M✝
inst✝³ : Module R✝ M✝
W : Submodule R✝ M✝
R : Type u_1
M : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
⊢ a ≤ dualCoannihilator a✝ → a✝ ≤ dualAnnihilator a

tactic: simp only [mem_dualAnnihilator, mem_dualCoannihilator]
state_before: case h₂.mpr
R✝ : Type u
M✝ : Type v
inst✝⁵ : CommSemiring R✝
inst✝⁴ : AddCommMonoid M✝
inst✝³ : Module R✝ M✝
W : Submodule R✝ M✝
R : Type u_1
M : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ dualCoannihilator a✝
x : Module.Dual R M
hx : x ∈ a✝
⊢ x ∈ dualAnnihilator a

tactic: intro y hy
state_before: case h₂.mpr
R✝ : Type u
M✝ : Type v
inst✝⁵ : CommSemiring R✝
inst✝⁴ : AddCommMonoid M✝
inst✝³ : Module R✝ M✝
W : Submodule R✝ M✝
R : Type u_1
M : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ dualCoannihilator a✝
x : Module.Dual R M
hx : x ∈ a✝
⊢ ∀ (w : M), w ∈ a → ↑x w = 0

tactic: have := h hy
state_before: case h₂.mpr
R✝ : Type u
M✝ : Type v
inst✝⁵ : CommSemiring R✝
inst✝⁴ : AddCommMonoid M✝
inst✝³ : Module R✝ M✝
W : Submodule R✝ M✝
R : Type u_1
M : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ dualCoannihilator a✝
x : Module.Dual R M
hx : x ∈ a✝
y : M
hy : y ∈ a
⊢ ↑x y = 0

tactic: simp only [mem_dualAnnihilator, mem_dualCoannihilator] at this
state_before: case h₂.mpr
R✝ : Type u
M✝ : Type v
inst✝⁵ : CommSemiring R✝
inst✝⁴ : AddCommMonoid M✝
inst✝³ : Module R✝ M✝
W : Submodule R✝ M✝
R : Type u_1
M : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ dualCoannihilator a✝
x : Module.Dual R M
hx : x ∈ a✝
y : M
hy : y ∈ a
this : y ∈ dualCoannihilator a✝
⊢ ↑x y = 0

tactic: exact this x hx
state_before: case h₂.mpr
R✝ : Type u
M✝ : Type v
inst✝⁵ : CommSemiring R✝
inst✝⁴ : AddCommMonoid M✝
inst✝³ : Module R✝ M✝
W : Submodule R✝ M✝
R : Type u_1
M : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ dualCoannihilator a✝
x : Module.Dual R M
hx : x ∈ a✝
y : M
hy : y ∈ a
this : ∀ (φ : Module.Dual R M), φ ∈ a✝ → ↑φ y = 0
⊢ ↑x y = 0