Theorem: Submodule.smul_sup_eq_smul_sup_of_le_smul_of_le_jacobson
File: Mathlib/RingTheory/Nakayama.lean

tactic: have hNN' : N ⊔ N' = N ⊔ I • N' :=
  le_antisymm hNN (sup_le_sup_left (Submodule.smul_le.2 fun _ _ _ => Submodule.smul_mem _ _) _)
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I J : Ideal R
N N' : Submodule R M
hN' : FG N'
hIJ : I ≤ jacobson J
hNN : N ⊔ N' ≤ N ⊔ I • N'
⊢ N ⊔ I • N' = N ⊔ J • N'

tactic: have h_comap := Submodule.comap_injective_of_surjective (LinearMap.range_eq_top.1 N.range_mkQ)
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I J : Ideal R
N N' : Submodule R M
hN' : FG N'
hIJ : I ≤ jacobson J
hNN : N ⊔ N' ≤ N ⊔ I • N'
hNN' : N ⊔ N' = N ⊔ I • N'
⊢ N ⊔ I • N' = N ⊔ J • N'

tactic: have : (I • N').map N.mkQ = N'.map N.mkQ := by
  rw [← h_comap.eq_iff]
  simpa [comap_map_eq, sup_comm, eq_comm] using hNN'
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I J : Ideal R
N N' : Submodule R M
hN' : FG N'
hIJ : I ≤ jacobson J
hNN : N ⊔ N' ≤ N ⊔ I • N'
hNN' : N ⊔ N' = N ⊔ I • N'
h_comap : Function.Injective (comap (mkQ N))
⊢ N ⊔ I • N' = N ⊔ J • N'

tactic: have :=
  @Submodule.eq_smul_of_le_smul_of_le_jacobson _ _ _ _ _ I J (N'.map N.mkQ) (hN'.map _)
    (by rw [← map_smul'', this]) hIJ
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I J : Ideal R
N N' : Submodule R M
hN' : FG N'
hIJ : I ≤ jacobson J
hNN : N ⊔ N' ≤ N ⊔ I • N'
hNN' : N ⊔ N' = N ⊔ I • N'
h_comap : Function.Injective (comap (mkQ N))
this : map (mkQ N) (I • N') = map (mkQ N) N'
⊢ N ⊔ I • N' = N ⊔ J • N'

tactic: rw [← map_smul'', ← h_comap.eq_iff, comap_map_eq, comap_map_eq, Submodule.ker_mkQ, sup_comm,
  hNN'] at this
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I J : Ideal R
N N' : Submodule R M
hN' : FG N'
hIJ : I ≤ jacobson J
hNN : N ⊔ N' ≤ N ⊔ I • N'
hNN' : N ⊔ N' = N ⊔ I • N'
h_comap : Function.Injective (comap (mkQ N))
this✝ : map (mkQ N) (I • N') = map (mkQ N) N'
this : map (mkQ N) N' = J • map (mkQ N) N'
⊢ N ⊔ I • N' = N ⊔ J • N'

tactic: rw [this, sup_comm]
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I J : Ideal R
N N' : Submodule R M
hN' : FG N'
hIJ : I ≤ jacobson J
hNN : N ⊔ N' ≤ N ⊔ I • N'
hNN' : N ⊔ N' = N ⊔ I • N'
h_comap : Function.Injective (comap (mkQ N))
this✝ : map (mkQ N) (I • N') = map (mkQ N) N'
this : N ⊔ I • N' = J • N' ⊔ N
⊢ N ⊔ I • N' = N ⊔ J • N'

tactic: rw [← h_comap.eq_iff]
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I J : Ideal R
N N' : Submodule R M
hN' : FG N'
hIJ : I ≤ jacobson J
hNN : N ⊔ N' ≤ N ⊔ I • N'
hNN' : N ⊔ N' = N ⊔ I • N'
h_comap : Function.Injective (comap (mkQ N))
⊢ map (mkQ N) (I • N') = map (mkQ N) N'

tactic: simpa [comap_map_eq, sup_comm, eq_comm] using hNN'
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I J : Ideal R
N N' : Submodule R M
hN' : FG N'
hIJ : I ≤ jacobson J
hNN : N ⊔ N' ≤ N ⊔ I • N'
hNN' : N ⊔ N' = N ⊔ I • N'
h_comap : Function.Injective (comap (mkQ N))
⊢ comap (mkQ N) (map (mkQ N) (I • N')) = comap (mkQ N) (map (mkQ N) N')

tactic: rw [← map_smul'', this]
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I J : Ideal R
N N' : Submodule R M
hN' : FG N'
hIJ : I ≤ jacobson J
hNN : N ⊔ N' ≤ N ⊔ I • N'
hNN' : N ⊔ N' = N ⊔ I • N'
h_comap : Function.Injective (comap (mkQ N))
this : map (mkQ N) (I • N') = map (mkQ N) N'
⊢ map (mkQ N) N' ≤ I • map (mkQ N) N'