Theorem: Submodule.toAddSubmonoid_sSup
File: Mathlib/Algebra/Module/Submodule/Lattice.lean

tactic: refine le_antisymm (?_ : sSup s ≤ p) ?_
state_before: R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
p : Submodule R M := { toAddSubmonoid := sSup (toAddSubmonoid '' s), smul_mem' := ⋯ }
⊢ (sSup s).toAddSubmonoid = sSup (toAddSubmonoid '' s)
state_after: case refine_1
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
p : Submodule R M := { toAddSubmonoid := sSup (toAddSubmonoid '' s), smul_mem' := ⋯ }
⊢ sSup s ≤ p

case refine_2
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
p : Submodule R M := { toAddSubmonoid := sSup (toAddSubmonoid '' s), smul_mem' := ⋯ }
⊢ sSup (toAddSubmonoid '' s) ≤ (sSup s).toAddSubmonoid

tactic: simp_rw [AddSubsemigroup.mem_carrier, AddSubmonoid.mem_toSubsemigroup, sSup_eq_iSup'] at h ⊢
state_before: R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ (sSup (toAddSubmonoid '' s)).carrier
⊢ t • m ∈ (sSup (toAddSubmonoid '' s)).carrier
state_after: R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
⊢ t • m ∈ ⨆ a, ↑a

tactic: refine AddSubmonoid.iSup_induction'
  (C := fun x _ ↦ t • x ∈ ⨆ p : toAddSubmonoid '' s, (p : AddSubmonoid M)) ?_ ?_
  (fun x y _ _ ↦ ?_) h
state_before: R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
⊢ t • m ∈ ⨆ a, ↑a
state_after: case refine_1
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
⊢ ∀ (i : ↑(toAddSubmonoid '' s)) (x : M) (hxS : x ∈ ↑i), (fun x x_1 => t • x ∈ ⨆ p, ↑p) x ⋯

case refine_2
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
⊢ (fun x x_1 => t • x ∈ ⨆ p, ↑p) 0 ⋯

case refine_3
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
x y : M
x✝¹ : x ∈ ⨆ i, ↑i
x✝ : y ∈ ⨆ i, ↑i
⊢ (fun x x_1 => t • x ∈ ⨆ p, ↑p) x x✝¹ → (fun x x_1 => t • x ∈ ⨆ p, ↑p) y x✝ → (fun x x_1 => t • x ∈ ⨆ p, ↑p) (x + y) ⋯

tactic: rintro ⟨-, ⟨p : Submodule R M, hp : p ∈ s, rfl⟩⟩ x (hx : x ∈ p)
state_before: case refine_1
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
⊢ ∀ (i : ↑(toAddSubmonoid '' s)) (x : M) (hxS : x ∈ ↑i), (fun x x_1 => t • x ∈ ⨆ p, ↑p) x ⋯
state_after: case refine_1.mk.intro.intro
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
p : Submodule R M
hp : p ∈ s
x : M
hx : x ∈ p
⊢ t • x ∈ ⨆ p, ↑p

tactic: suffices p.toAddSubmonoid ≤ ⨆ q : toAddSubmonoid '' s, (q : AddSubmonoid M) by
  exact this (smul_mem p t hx)
state_before: case refine_1.mk.intro.intro
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
p : Submodule R M
hp : p ∈ s
x : M
hx : x ∈ p
⊢ t • x ∈ ⨆ p, ↑p
state_after: case refine_1.mk.intro.intro
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
p : Submodule R M
hp : p ∈ s
x : M
hx : x ∈ p
⊢ p.toAddSubmonoid ≤ ⨆ q, ↑q

tactic: apply le_sSup
state_before: case refine_1.mk.intro.intro
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
p : Submodule R M
hp : p ∈ s
x : M
hx : x ∈ p
⊢ p.toAddSubmonoid ≤ ⨆ q, ↑q
state_after: case refine_1.mk.intro.intro.a
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
p : Submodule R M
hp : p ∈ s
x : M
hx : x ∈ p
⊢ p.toAddSubmonoid ∈ Set.range fun q => ↑q

tactic: rw [Subtype.range_coe_subtype]
state_before: case refine_1.mk.intro.intro.a
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
p : Submodule R M
hp : p ∈ s
x : M
hx : x ∈ p
⊢ p.toAddSubmonoid ∈ Set.range fun q => ↑q
state_after: case refine_1.mk.intro.intro.a
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
p : Submodule R M
hp : p ∈ s
x : M
hx : x ∈ p
⊢ p.toAddSubmonoid ∈ {x | x ∈ toAddSubmonoid '' s}

tactic: exact ⟨p, hp, rfl⟩
state_before: case refine_1.mk.intro.intro.a
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
p : Submodule R M
hp : p ∈ s
x : M
hx : x ∈ p
⊢ p.toAddSubmonoid ∈ {x | x ∈ toAddSubmonoid '' s}
state_after: no goals

tactic: exact this (smul_mem p t hx)
state_before: R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
p : Submodule R M
hp : p ∈ s
x : M
hx : x ∈ p
this : p.toAddSubmonoid ≤ ⨆ q, ↑q
⊢ t • x ∈ ⨆ p, ↑p
state_after: no goals

tactic: simpa only [smul_zero] using zero_mem _
state_before: case refine_2
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
⊢ (fun x x_1 => t • x ∈ ⨆ p, ↑p) 0 ⋯
state_after: no goals

tactic: simp_rw [smul_add]
state_before: case refine_3
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
x y : M
x✝¹ : x ∈ ⨆ i, ↑i
x✝ : y ∈ ⨆ i, ↑i
⊢ (fun x x_1 => t • x ∈ ⨆ p, ↑p) x x✝¹ → (fun x x_1 => t • x ∈ ⨆ p, ↑p) y x✝ → (fun x x_1 => t • x ∈ ⨆ p, ↑p) (x + y) ⋯
state_after: case refine_3
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
x y : M
x✝¹ : x ∈ ⨆ i, ↑i
x✝ : y ∈ ⨆ i, ↑i
⊢ t • x ∈ ⨆ p, ↑p → t • y ∈ ⨆ p, ↑p → t • x + t • y ∈ ⨆ p, ↑p

tactic: exact add_mem
state_before: case refine_3
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p q : Submodule R M
s : Set (Submodule R M)
t : R
m : M
h : m ∈ ⨆ a, ↑a
x y : M
x✝¹ : x ∈ ⨆ i, ↑i
x✝ : y ∈ ⨆ i, ↑i
⊢ t • x ∈ ⨆ p, ↑p → t • y ∈ ⨆ p, ↑p → t • x + t • y ∈ ⨆ p, ↑p
state_after: no goals

tactic: exact sSup_le fun q hq ↦ le_sSup <| Set.mem_image_of_mem toAddSubmonoid hq
state_before: case refine_1
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
p : Submodule R M := { toAddSubmonoid := sSup (toAddSubmonoid '' s), smul_mem' := ⋯ }
⊢ sSup s ≤ p
state_after: no goals

tactic: exact sSup_le fun _ ⟨q, hq, hq'⟩ ↦ hq'.symm ▸ le_sSup hq
state_before: case refine_2
R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : Module S M
inst✝¹ : SMul S R
inst✝ : IsScalarTower S R M
p✝ q : Submodule R M
s : Set (Submodule R M)
p : Submodule R M := { toAddSubmonoid := sSup (toAddSubmonoid '' s), smul_mem' := ⋯ }
⊢ sSup (toAddSubmonoid '' s) ≤ (sSup s).toAddSubmonoid
state_after: no goals