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
⊢ GaloisConnection (⇑OrderDual.toDual ∘ dualAnnihilator) (dualCoannihilator ∘ ⇑OrderDual.ofDual)
state_after: R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W a : Submodule R M
b : (Submodule R (Module.Dual R M))ᵒᵈ
⊢ (⇑OrderDual.toDual ∘ dualAnnihilator) a ≤ b ↔ a ≤ (dualCoannihilator ∘ ⇑OrderDual.ofDual) b

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 a : Submodule R M
b : (Submodule R (Module.Dual R M))ᵒᵈ
⊢ (⇑OrderDual.toDual ∘ dualAnnihilator) a ≤ b ↔ a ≤ (dualCoannihilator ∘ ⇑OrderDual.ofDual) b
state_after: case h₂
R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W 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: 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 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✝)
state_after: case h₂
R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
⊢ a✝ ≤ a.dualAnnihilator ↔ a ≤ a✝.dualCoannihilator

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 a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
⊢ a ≤ a✝.dualCoannihilator → a✝ ≤ a.dualAnnihilator
state_after: case h₂.mpr
R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ a✝.dualCoannihilator
x : Module.Dual R M
hx : x ∈ a✝
⊢ x ∈ a.dualAnnihilator

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 a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ a✝.dualCoannihilator
x : Module.Dual R M
hx : x ∈ a✝
⊢ x ∈ a.dualAnnihilator
state_after: case h₂.mpr
R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ a✝.dualCoannihilator
x : Module.Dual R M
hx : x ∈ a✝
⊢ ∀ w ∈ a, x w = 0

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 a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ a✝.dualCoannihilator
x : Module.Dual R M
hx : x ∈ a✝
⊢ ∀ w ∈ a, x w = 0
state_after: case h₂.mpr
R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ a✝.dualCoannihilator
x : Module.Dual R M
hx : x ∈ a✝
y : M
hy : y ∈ a
⊢ x y = 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 a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ a✝.dualCoannihilator
x : Module.Dual R M
hx : x ∈ a✝
y : M
hy : y ∈ a
⊢ x y = 0
state_after: case h₂.mpr
R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ a✝.dualCoannihilator
x : Module.Dual R M
hx : x ∈ a✝
y : M
hy : y ∈ a
this : y ∈ a✝.dualCoannihilator
⊢ 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 a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ a✝.dualCoannihilator
x : Module.Dual R M
hx : x ∈ a✝
y : M
hy : y ∈ a
this : y ∈ a✝.dualCoannihilator
⊢ x y = 0
state_after: case h₂.mpr
R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ a✝.dualCoannihilator
x : Module.Dual R M
hx : x ∈ a✝
y : M
hy : y ∈ a
this : ∀ φ ∈ a✝, φ y = 0
⊢ 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 a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
h : a ≤ a✝.dualCoannihilator
x : Module.Dual R M
hx : x ∈ a✝
y : M
hy : y ∈ a
this : ∀ φ ∈ a✝, φ y = 0
⊢ x y = 0
state_after: no goals