Theorem: Submodule.map_div
File: Mathlib/Algebra/Algebra/Operations.lean

tactic: ext x
state_before: ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : CommSemiring A
inst✝² : Algebra R A
M N : Submodule R A
m n : A
B : Type u_1
inst✝¹ : CommSemiring B
inst✝ : Algebra R B
I J : Submodule R A
h : A ≃ₐ[R] B
⊢ map (AlgEquiv.toLinearMap h) (I / J) = map (AlgEquiv.toLinearMap h) I / map (AlgEquiv.toLinearMap h) J

tactic: simp only [mem_map, mem_div_iff_forall_mul_mem]
state_before: case h
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : CommSemiring A
inst✝² : Algebra R A
M N : Submodule R A
m n : A
B : Type u_1
inst✝¹ : CommSemiring B
inst✝ : Algebra R B
I J : Submodule R A
h : A ≃ₐ[R] B
x : B
⊢ x ∈ map (AlgEquiv.toLinearMap h) (I / J) ↔ x ∈ map (AlgEquiv.toLinearMap h) I / map (AlgEquiv.toLinearMap h) J

tactic: constructor
state_before: case h
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : CommSemiring A
inst✝² : Algebra R A
M N : Submodule R A
m n : A
B : Type u_1
inst✝¹ : CommSemiring B
inst✝ : Algebra R B
I J : Submodule R A
h : A ≃ₐ[R] B
x : B
⊢ (∃ y, (∀ (y_1 : A), y_1 ∈ J → y * y_1 ∈ I) ∧ ↑(AlgEquiv.toLinearMap h) y = x) ↔
    ∀ (y : B),
      (∃ y_1, y_1 ∈ J ∧ ↑(AlgEquiv.toLinearMap h) y_1 = y) → ∃ y_1, y_1 ∈ I ∧ ↑(AlgEquiv.toLinearMap h) y_1 = x * y

tactic: rintro ⟨x, hx, rfl⟩ _ ⟨y, hy, rfl⟩
state_before: case h.mp
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : CommSemiring A
inst✝² : Algebra R A
M N : Submodule R A
m n : A
B : Type u_1
inst✝¹ : CommSemiring B
inst✝ : Algebra R B
I J : Submodule R A
h : A ≃ₐ[R] B
x : B
⊢ (∃ y, (∀ (y_1 : A), y_1 ∈ J → y * y_1 ∈ I) ∧ ↑(AlgEquiv.toLinearMap h) y = x) →
    ∀ (y : B),
      (∃ y_1, y_1 ∈ J ∧ ↑(AlgEquiv.toLinearMap h) y_1 = y) → ∃ y_1, y_1 ∈ I ∧ ↑(AlgEquiv.toLinearMap h) y_1 = x * y

tactic: exact ⟨x * y, hx _ hy, h.map_mul x y⟩
state_before: case h.mp.intro.intro.intro.intro
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : CommSemiring A
inst✝² : Algebra R A
M N : Submodule R A
m n : A
B : Type u_1
inst✝¹ : CommSemiring B
inst✝ : Algebra R B
I J : Submodule R A
h : A ≃ₐ[R] B
x : A
hx : ∀ (y : A), y ∈ J → x * y ∈ I
y : A
hy : y ∈ J
⊢ ∃ y_1, y_1 ∈ I ∧ ↑(AlgEquiv.toLinearMap h) y_1 = ↑(AlgEquiv.toLinearMap h) x * ↑(AlgEquiv.toLinearMap h) y

tactic: rintro hx
state_before: case h.mpr
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : CommSemiring A
inst✝² : Algebra R A
M N : Submodule R A
m n : A
B : Type u_1
inst✝¹ : CommSemiring B
inst✝ : Algebra R B
I J : Submodule R A
h : A ≃ₐ[R] B
x : B
⊢ (∀ (y : B),
      (∃ y_1, y_1 ∈ J ∧ ↑(AlgEquiv.toLinearMap h) y_1 = y) → ∃ y_1, y_1 ∈ I ∧ ↑(AlgEquiv.toLinearMap h) y_1 = x * y) →
    ∃ y, (∀ (y_1 : A), y_1 ∈ J → y * y_1 ∈ I) ∧ ↑(AlgEquiv.toLinearMap h) y = x

tactic: refine' ⟨h.symm x, fun z hz => _, h.apply_symm_apply x⟩
state_before: case h.mpr
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : CommSemiring A
inst✝² : Algebra R A
M N : Submodule R A
m n : A
B : Type u_1
inst✝¹ : CommSemiring B
inst✝ : Algebra R B
I J : Submodule R A
h : A ≃ₐ[R] B
x : B
hx :
  ∀ (y : B),
    (∃ y_1, y_1 ∈ J ∧ ↑(AlgEquiv.toLinearMap h) y_1 = y) → ∃ y_1, y_1 ∈ I ∧ ↑(AlgEquiv.toLinearMap h) y_1 = x * y
⊢ ∃ y, (∀ (y_1 : A), y_1 ∈ J → y * y_1 ∈ I) ∧ ↑(AlgEquiv.toLinearMap h) y = x

tactic: obtain ⟨xz, xz_mem, hxz⟩ := hx (h z) ⟨z, hz, rfl⟩
state_before: case h.mpr
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : CommSemiring A
inst✝² : Algebra R A
M N : Submodule R A
m n : A
B : Type u_1
inst✝¹ : CommSemiring B
inst✝ : Algebra R B
I J : Submodule R A
h : A ≃ₐ[R] B
x : B
hx :
  ∀ (y : B),
    (∃ y_1, y_1 ∈ J ∧ ↑(AlgEquiv.toLinearMap h) y_1 = y) → ∃ y_1, y_1 ∈ I ∧ ↑(AlgEquiv.toLinearMap h) y_1 = x * y
z : A
hz : z ∈ J
⊢ ↑(AlgEquiv.symm h) x * z ∈ I

tactic: convert xz_mem
state_before: case h.mpr.intro.intro
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : CommSemiring A
inst✝² : Algebra R A
M N : Submodule R A
m n : A
B : Type u_1
inst✝¹ : CommSemiring B
inst✝ : Algebra R B
I J : Submodule R A
h : A ≃ₐ[R] B
x : B
hx :
  ∀ (y : B),
    (∃ y_1, y_1 ∈ J ∧ ↑(AlgEquiv.toLinearMap h) y_1 = y) → ∃ y_1, y_1 ∈ I ∧ ↑(AlgEquiv.toLinearMap h) y_1 = x * y
z : A
hz : z ∈ J
xz : A
xz_mem : xz ∈ I
hxz : ↑(AlgEquiv.toLinearMap h) xz = x * ↑h z
⊢ ↑(AlgEquiv.symm h) x * z ∈ I

tactic: apply h.injective
state_before: case h.e'_4
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : CommSemiring A
inst✝² : Algebra R A
M N : Submodule R A
m n : A
B : Type u_1
inst✝¹ : CommSemiring B
inst✝ : Algebra R B
I J : Submodule R A
h : A ≃ₐ[R] B
x : B
hx :
  ∀ (y : B),
    (∃ y_1, y_1 ∈ J ∧ ↑(AlgEquiv.toLinearMap h) y_1 = y) → ∃ y_1, y_1 ∈ I ∧ ↑(AlgEquiv.toLinearMap h) y_1 = x * y
z : A
hz : z ∈ J
xz : A
xz_mem : xz ∈ I
hxz : ↑(AlgEquiv.toLinearMap h) xz = x * ↑h z
⊢ ↑(AlgEquiv.symm h) x * z = xz

tactic: erw [h.map_mul, h.apply_symm_apply, hxz]
state_before: case h.e'_4.a
ι : Sort uι
R : Type u
inst✝⁴ : CommSemiring R
A : Type v
inst✝³ : CommSemiring A
inst✝² : Algebra R A
M N : Submodule R A
m n : A
B : Type u_1
inst✝¹ : CommSemiring B
inst✝ : Algebra R B
I J : Submodule R A
h : A ≃ₐ[R] B
x : B
hx :
  ∀ (y : B),
    (∃ y_1, y_1 ∈ J ∧ ↑(AlgEquiv.toLinearMap h) y_1 = y) → ∃ y_1, y_1 ∈ I ∧ ↑(AlgEquiv.toLinearMap h) y_1 = x * y
z : A
hz : z ∈ J
xz : A
xz_mem : xz ∈ I
hxz : ↑(AlgEquiv.toLinearMap h) xz = x * ↑h z
⊢ ↑h (↑(AlgEquiv.symm h) x * z) = ↑h xz