Theorem: liftOfDerivationToSquareZero_apply
File: Mathlib/RingTheory/Derivation/ToSquareZero.lean

Proof steps:
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : CommSemiring A
inst✝⁴ : CommRing B
inst✝³ : Algebra R A
inst✝² : Algebra R B
I : Ideal B
hI : I ^ 2 = ⊥
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
f : Derivation R A ↥I
⊢ (fun x => ↑(f x) + (algebraMap A B) x) 1 = 1
state_after: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : CommSemiring A
inst✝⁴ : CommRing B
inst✝³ : Algebra R A
inst✝² : Algebra R B
I : Ideal B
hI : I ^ 2 = ⊥
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
f : Derivation R A ↥I
⊢ ↑(f 1) + (algebraMap A B) 1 = 1
tactic: dsimp
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : CommSemiring A
inst✝⁴ : CommRing B
inst✝³ : Algebra R A
inst✝² : Algebra R B
I : Ideal B
hI : I ^ 2 = ⊥
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
f : Derivation R A ↥I
⊢ ↑(f 1) + (algebraMap A B) 1 = 1
state_after: no goals
tactic: rw [map_one (algebraMap _ _), f.map_one_eq_zero, Submodule.coe_zero, zero_add]
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : CommSemiring A
inst✝⁴ : CommRing B
inst✝³ : Algebra R A
inst✝² : Algebra R B
I : Ideal B
hI : I ^ 2 = ⊥
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
f : Derivation R A ↥I
x y : A
⊢ { toFun := fun x => ↑(f x) + (algebraMap A B) x, map_one' := ⋯ }.toFun (x * y) =
    { toFun := fun x => ↑(f x) + (algebraMap A B) x, map_one' := ⋯ }.toFun x *
      { toFun := fun x => ↑(f x) + (algebraMap A B) x, map_one' := ⋯ }.toFun y
state_after: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : CommSemiring A
inst✝⁴ : CommRing B
inst✝³ : Algebra R A
inst✝² : Algebra R B
I : Ideal B
hI : I ^ 2 = ⊥
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
f : Derivation R A ↥I
x y : A
this : ↑(f x) * ↑(f y) = 0
⊢ { toFun := fun x => ↑(f x) + (algebraMap A B) x, map_one' := ⋯ }.toFun (x * y) =
    { toFun := fun x => ↑(f x) + (algebraMap A B) x, map_one' := ⋯ }.toFun x *
      { toFun := fun x => ↑(f x) + (algebraMap A B) x, map_one' := ⋯ }.toFun y
tactic: have : (f x : B) * f y = 0 := by
        rw [← Ideal.mem_bot, ← hI, pow_two]
        convert Ideal.mul_mem_mul (f x).2 (f y).2 using 1
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : CommSemiring A
inst✝⁴ : CommRing B
inst✝³ : Algebra R A
inst✝² : Algebra R B
I : Ideal B
hI : I ^ 2 = ⊥
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
f : Derivation R A ↥I
x y : A
this : ↑(f x) * ↑(f y) = 0
⊢ { toFun := fun x => ↑(f x) + (algebraMap A B) x, map_one' := ⋯ }.toFun (x * y) =
    { toFun := fun x => ↑(f x) + (algebraMap A B) x, map_one' := ⋯ }.toFun x *
      { toFun := fun x => ↑(f x) + (algebraMap A B) x, map_one' := ⋯ }.toFun y
state_after: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : CommSemiring A
inst✝⁴ : CommRing B
inst✝³ : Algebra R A
inst✝² : Algebra R B
I : Ideal B
hI : I ^ 2 = ⊥
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
f : Derivation R A ↥I
x y : A
this : ↑(f x) * ↑(f y) = 0
⊢ (algebraMap A B) x * ↑(f y) + (algebraMap A B) y * ↑(f x) + (algebraMap A B) x * (algebraMap A B) y =
    0 + (algebraMap A B) x * ↑(f y) + (↑(f x) * (algebraMap A B) y + (algebraMap A B) x * (algebraMap A B) y)
tactic: simp only [map_mul, f.leibniz, add_mul, mul_add, Submodule.coe_add,
        Submodule.coe_smul_of_tower, Algebra.smul_def, this]
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : CommSemiring A
inst✝⁴ : CommRing B
inst✝³ : Algebra R A
inst✝² : Algebra R B
I : Ideal B
hI : I ^ 2 = ⊥
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
f : Derivation R A ↥I
x y : A
this : ↑(f x) * ↑(f y) = 0
⊢ (algebraMap A B) x * ↑(f y) + (algebraMap A B) y * ↑(f x) + (algebraMap A B) x * (algebraMap A B) y =
    0 + (algebraMap A B) x * ↑(f y) + (↑(f x) * (algebraMap A B) y + (algebraMap A B) x * (algebraMap A B) y)
state_after: no goals
tactic: ring
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : CommSemiring A
inst✝⁴ : CommRing B
inst✝³ : Algebra R A
inst✝² : Algebra R B
I : Ideal B
hI : I ^ 2 = ⊥
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
f : Derivation R A ↥I
r : R
⊢ (↑↑{ toFun := fun x => ↑(f x) + (algebraMap A B) x, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯,
              map_add' := ⋯ }).toFun
      ((algebraMap R A) r) =
    (algebraMap R B) r
state_after: no goals
tactic: simp only [Derivation.map_algebraMap, eq_self_iff_true, zero_add, Submodule.coe_zero, ←
        IsScalarTower.algebraMap_apply R A B r]