Theorem: LocalizedModule.divBy_apply
File: Mathlib/Algebra/Module/LocalizedModule.lean

Proof steps:
state_before: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
p : LocalizedModule S M
x✝² x✝¹ : M × ↥S
a : M
b : ↥S
a' : M
b' : ↥S
x✝ : (a, b) ≈ (a', b')
c : ↥S
eq1 : c • (a', b').2 • (a, b).1 = c • (a, b).2 • (a', b').1
⊢ c • ((a', b').2 * s) • (a, b).1 = c • ((a, b).2 * s) • (a', b').1
state_after: no goals
tactic: rw [mul_smul, mul_smul, smul_comm _ s, smul_comm _ s, eq1, smul_comm _ s,
        smul_comm _ s]
state_before: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
x y : LocalizedModule S M
⊢ (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (x + y) =
    (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) x + (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) y
state_after: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
x y : LocalizedModule S M
⊢ ∀ (m m' : M) (s_1 s' : ↥S),
    (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (mk m s_1 + mk m' s') =
      (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (mk m s_1) +
        (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (mk m' s')
tactic: refine x.induction_on₂ ?_ y
state_before: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
x y : LocalizedModule S M
⊢ ∀ (m m' : M) (s_1 s' : ↥S),
    (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (mk m s_1 + mk m' s') =
      (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (mk m s_1) +
        (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (mk m' s')
state_after: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
x y : LocalizedModule S M
m₁ m₂ : M
t₁ t₂ : ↥S
⊢ (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (mk m₁ t₁ + mk m₂ t₂) =
    (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (mk m₁ t₁) +
      (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (mk m₂ t₂)
tactic: intro m₁ m₂ t₁ t₂
state_before: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
x y : LocalizedModule S M
m₁ m₂ : M
t₁ t₂ : ↥S
⊢ (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (mk m₁ t₁ + mk m₂ t₂) =
    (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (mk m₁ t₁) +
      (fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯) (mk m₂ t₂)
state_after: no goals
tactic: simp_rw [mk_add_mk, LocalizedModule.liftOn_mk, mk_add_mk, mul_smul, mul_comm _ s, mul_assoc,
      smul_comm _ s, ← smul_add, mul_left_comm s t₁ t₂, mk_cancel_common_left s]
state_before: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
r : R
x : LocalizedModule S M
⊢ { toFun := fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯, map_add' := ⋯ }.toFun (r • x) =
    (RingHom.id R) r • { toFun := fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯, map_add' := ⋯ }.toFun x
state_after: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
r : R
x : LocalizedModule S M
x✝¹ : M
x✝ : ↥S
⊢ { toFun := fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯, map_add' := ⋯ }.toFun (r • mk x✝¹ x✝) =
    (RingHom.id R) r • { toFun := fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯, map_add' := ⋯ }.toFun (mk x✝¹ x✝)
tactic: refine x.induction_on (fun _ _ ↦ ?_)
state_before: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
r : R
x : LocalizedModule S M
x✝¹ : M
x✝ : ↥S
⊢ { toFun := fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯, map_add' := ⋯ }.toFun (r • mk x✝¹ x✝) =
    (RingHom.id R) r • { toFun := fun p => p.liftOn (fun p => mk p.1 (p.2 * s)) ⋯, map_add' := ⋯ }.toFun (mk x✝¹ x✝)
state_after: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
r : R
x : LocalizedModule S M
x✝¹ : M
x✝ : ↥S
⊢ (r • mk x✝¹ x✝).liftOn (fun p => mk p.1 (p.2 * s)) ⋯ =
    (RingHom.id R) r • (mk x✝¹ x✝).liftOn (fun p => mk p.1 (p.2 * s)) ⋯
tactic: dsimp only
state_before: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
r : R
x : LocalizedModule S M
x✝¹ : M
x✝ : ↥S
⊢ (r • mk x✝¹ x✝).liftOn (fun p => mk p.1 (p.2 * s)) ⋯ =
    (RingHom.id R) r • (mk x✝¹ x✝).liftOn (fun p => mk p.1 (p.2 * s)) ⋯
state_after: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
r : R
x : LocalizedModule S M
x✝¹ : M
x✝ : ↥S
⊢ (mk ((IsLocalization.sec S (↑(algebraMap R (Localization S)).toMonoidWithZeroHom r)).1 • (x✝¹, x✝).1)
          ((IsLocalization.sec S (↑(algebraMap R (Localization S)).toMonoidWithZeroHom r)).2 * (x✝¹, x✝).2)).liftOn
      (fun p => mk p.1 (p.2 * s)) ⋯ =
    r • (mk x✝¹ x✝).liftOn (fun p => mk p.1 (p.2 * s)) ⋯
tactic: change liftOn (mk _ _) _ _ = r • (liftOn (mk _ _) _ _)
state_before: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
r : R
x : LocalizedModule S M
x✝¹ : M
x✝ : ↥S
⊢ (mk ((IsLocalization.sec S (↑(algebraMap R (Localization S)).toMonoidWithZeroHom r)).1 • (x✝¹, x✝).1)
          ((IsLocalization.sec S (↑(algebraMap R (Localization S)).toMonoidWithZeroHom r)).2 * (x✝¹, x✝).2)).liftOn
      (fun p => mk p.1 (p.2 * s)) ⋯ =
    r • (mk x✝¹ x✝).liftOn (fun p => mk p.1 (p.2 * s)) ⋯
state_after: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
r : R
x : LocalizedModule S M
x✝¹ : M
x✝ : ↥S
⊢ { toFun := (↑↑(algebraMap R (Localization S))).toFun, map_zero' := ⋯ } r • mk x✝¹ (x✝ * s) = r • mk x✝¹ (x✝ * s)
tactic: simp_rw [liftOn_mk, mul_assoc, ← smul_def]
state_before: R : Type u
inst✝⁵ : CommSemiring R
S : Submonoid R
M : Type v
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
T : Type u_1
inst✝² : CommSemiring T
inst✝¹ : Algebra R T
inst✝ : IsLocalization S T
s : ↥S
r : R
x : LocalizedModule S M
x✝¹ : M
x✝ : ↥S
⊢ { toFun := (↑↑(algebraMap R (Localization S))).toFun, map_zero' := ⋯ } r • mk x✝¹ (x✝ * s) = r • mk x✝¹ (x✝ * s)
state_after: no goals
tactic: congr!