Theorem: Algebra.Generators.Cotangent.map_sub_map
File: Mathlib/RingTheory/Kaehler/CotangentComplex.lean

Proof steps:
state_before: R : Type u
S : Type v
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : Algebra R S
P : Generators R S
R' : Type u'
S' : Type v'
inst✝¹¹ : CommRing R'
inst✝¹⁰ : CommRing S'
inst✝⁹ : Algebra R' S'
P' : Generators R' S'
inst✝⁸ : Algebra R R'
inst✝⁷ : Algebra S S'
inst✝⁶ : Algebra R S'
inst✝⁵ : IsScalarTower R R' S'
inst✝⁴ : IsScalarTower R S S'
T : Type uT
inst✝³ : CommRing T
inst✝² : Algebra R T
inst✝¹ : Algebra S T
inst✝ : IsScalarTower R S T
f g : P.Hom P'
⊢ map f - map g = f.sub g ∘ₗ P.cotangentComplex
state_after: case h.e
R : Type u
S : Type v
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : Algebra R S
P : Generators R S
R' : Type u'
S' : Type v'
inst✝¹¹ : CommRing R'
inst✝¹⁰ : CommRing S'
inst✝⁹ : Algebra R' S'
P' : Generators R' S'
inst✝⁸ : Algebra R R'
inst✝⁷ : Algebra S S'
inst✝⁶ : Algebra R S'
inst✝⁵ : IsScalarTower R R' S'
inst✝⁴ : IsScalarTower R S S'
T : Type uT
inst✝³ : CommRing T
inst✝² : Algebra R T
inst✝¹ : Algebra S T
inst✝ : IsScalarTower R S T
f g : P.Hom P'
x : P.Cotangent
⊢ ((map f - map g) x).val = ((f.sub g ∘ₗ P.cotangentComplex) x).val
tactic: ext x
state_before: case h.e
R : Type u
S : Type v
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : Algebra R S
P : Generators R S
R' : Type u'
S' : Type v'
inst✝¹¹ : CommRing R'
inst✝¹⁰ : CommRing S'
inst✝⁹ : Algebra R' S'
P' : Generators R' S'
inst✝⁸ : Algebra R R'
inst✝⁷ : Algebra S S'
inst✝⁶ : Algebra R S'
inst✝⁵ : IsScalarTower R R' S'
inst✝⁴ : IsScalarTower R S S'
T : Type uT
inst✝³ : CommRing T
inst✝² : Algebra R T
inst✝¹ : Algebra S T
inst✝ : IsScalarTower R S T
f g : P.Hom P'
x : P.Cotangent
⊢ ((map f - map g) x).val = ((f.sub g ∘ₗ P.cotangentComplex) x).val
state_after: case h.e.intro
R : Type u
S : Type v
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : Algebra R S
P : Generators R S
R' : Type u'
S' : Type v'
inst✝¹¹ : CommRing R'
inst✝¹⁰ : CommRing S'
inst✝⁹ : Algebra R' S'
P' : Generators R' S'
inst✝⁸ : Algebra R R'
inst✝⁷ : Algebra S S'
inst✝⁶ : Algebra R S'
inst✝⁵ : IsScalarTower R R' S'
inst✝⁴ : IsScalarTower R S S'
T : Type uT
inst✝³ : CommRing T
inst✝² : Algebra R T
inst✝¹ : Algebra S T
inst✝ : IsScalarTower R S T
f g : P.Hom P'
x : ↥P.ker
⊢ ((map f - map g) (mk x)).val = ((f.sub g ∘ₗ P.cotangentComplex) (mk x)).val
tactic: obtain ⟨x, rfl⟩ := mk_surjective x
state_before: case h.e.intro
R : Type u
S : Type v
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : Algebra R S
P : Generators R S
R' : Type u'
S' : Type v'
inst✝¹¹ : CommRing R'
inst✝¹⁰ : CommRing S'
inst✝⁹ : Algebra R' S'
P' : Generators R' S'
inst✝⁸ : Algebra R R'
inst✝⁷ : Algebra S S'
inst✝⁶ : Algebra R S'
inst✝⁵ : IsScalarTower R R' S'
inst✝⁴ : IsScalarTower R S S'
T : Type uT
inst✝³ : CommRing T
inst✝² : Algebra R T
inst✝¹ : Algebra S T
inst✝ : IsScalarTower R S T
f g : P.Hom P'
x : ↥P.ker
⊢ ((map f - map g) (mk x)).val = ((f.sub g ∘ₗ P.cotangentComplex) (mk x)).val
state_after: case h.e.intro
R : Type u
S : Type v
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : Algebra R S
P : Generators R S
R' : Type u'
S' : Type v'
inst✝¹¹ : CommRing R'
inst✝¹⁰ : CommRing S'
inst✝⁹ : Algebra R' S'
P' : Generators R' S'
inst✝⁸ : Algebra R R'
inst✝⁷ : Algebra S S'
inst✝⁶ : Algebra R S'
inst✝⁵ : IsScalarTower R R' S'
inst✝⁴ : IsScalarTower R S S'
T : Type uT
inst✝³ : CommRing T
inst✝² : Algebra R T
inst✝¹ : Algebra S T
inst✝ : IsScalarTower R S T
f g : P.Hom P'
x : ↥P.ker
⊢ (mk ⟨f.toAlgHom ↑x, ⋯⟩ - mk ⟨g.toAlgHom ↑x, ⋯⟩).val = P'.ker.toCotangent ((f.subToKer g) ↑x)
tactic: simp only [LinearMap.sub_apply, map_mk, LinearMap.coe_comp, Function.comp_apply,
    cotangentComplex_mk, Hom.sub_tmul, one_smul, val_mk]
state_before: case h.e.intro
R : Type u
S : Type v
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : Algebra R S
P : Generators R S
R' : Type u'
S' : Type v'
inst✝¹¹ : CommRing R'
inst✝¹⁰ : CommRing S'
inst✝⁹ : Algebra R' S'
P' : Generators R' S'
inst✝⁸ : Algebra R R'
inst✝⁷ : Algebra S S'
inst✝⁶ : Algebra R S'
inst✝⁵ : IsScalarTower R R' S'
inst✝⁴ : IsScalarTower R S S'
T : Type uT
inst✝³ : CommRing T
inst✝² : Algebra R T
inst✝¹ : Algebra S T
inst✝ : IsScalarTower R S T
f g : P.Hom P'
x : ↥P.ker
⊢ (mk ⟨f.toAlgHom ↑x, ⋯⟩ - mk ⟨g.toAlgHom ↑x, ⋯⟩).val = P'.ker.toCotangent ((f.subToKer g) ↑x)
state_after: case h.e.intro.a
R : Type u
S : Type v
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : Algebra R S
P : Generators R S
R' : Type u'
S' : Type v'
inst✝¹¹ : CommRing R'
inst✝¹⁰ : CommRing S'
inst✝⁹ : Algebra R' S'
P' : Generators R' S'
inst✝⁸ : Algebra R R'
inst✝⁷ : Algebra S S'
inst✝⁶ : Algebra R S'
inst✝⁵ : IsScalarTower R R' S'
inst✝⁴ : IsScalarTower R S S'
T : Type uT
inst✝³ : CommRing T
inst✝² : Algebra R T
inst✝¹ : Algebra S T
inst✝ : IsScalarTower R S T
f g : P.Hom P'
x : ↥P.ker
⊢ P'.ker.cotangentEquivIdeal (mk ⟨f.toAlgHom ↑x, ⋯⟩ - mk ⟨g.toAlgHom ↑x, ⋯⟩).val =
    P'.ker.cotangentEquivIdeal (P'.ker.toCotangent ((f.subToKer g) ↑x))
tactic: apply (Ideal.cotangentEquivIdeal _).injective
state_before: case h.e.intro.a
R : Type u
S : Type v
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : Algebra R S
P : Generators R S
R' : Type u'
S' : Type v'
inst✝¹¹ : CommRing R'
inst✝¹⁰ : CommRing S'
inst✝⁹ : Algebra R' S'
P' : Generators R' S'
inst✝⁸ : Algebra R R'
inst✝⁷ : Algebra S S'
inst✝⁶ : Algebra R S'
inst✝⁵ : IsScalarTower R R' S'
inst✝⁴ : IsScalarTower R S S'
T : Type uT
inst✝³ : CommRing T
inst✝² : Algebra R T
inst✝¹ : Algebra S T
inst✝ : IsScalarTower R S T
f g : P.Hom P'
x : ↥P.ker
⊢ P'.ker.cotangentEquivIdeal (mk ⟨f.toAlgHom ↑x, ⋯⟩ - mk ⟨g.toAlgHom ↑x, ⋯⟩).val =
    P'.ker.cotangentEquivIdeal (P'.ker.toCotangent ((f.subToKer g) ↑x))
state_after: case h.e.intro.a.a
R : Type u
S : Type v
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : Algebra R S
P : Generators R S
R' : Type u'
S' : Type v'
inst✝¹¹ : CommRing R'
inst✝¹⁰ : CommRing S'
inst✝⁹ : Algebra R' S'
P' : Generators R' S'
inst✝⁸ : Algebra R R'
inst✝⁷ : Algebra S S'
inst✝⁶ : Algebra R S'
inst✝⁵ : IsScalarTower R R' S'
inst✝⁴ : IsScalarTower R S S'
T : Type uT
inst✝³ : CommRing T
inst✝² : Algebra R T
inst✝¹ : Algebra S T
inst✝ : IsScalarTower R S T
f g : P.Hom P'
x : ↥P.ker
⊢ ↑(P'.ker.cotangentEquivIdeal (mk ⟨f.toAlgHom ↑x, ⋯⟩ - mk ⟨g.toAlgHom ↑x, ⋯⟩).val) =
    ↑(P'.ker.cotangentEquivIdeal (P'.ker.toCotangent ((f.subToKer g) ↑x)))
tactic: ext
state_before: case h.e.intro.a.a
R : Type u
S : Type v
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : Algebra R S
P : Generators R S
R' : Type u'
S' : Type v'
inst✝¹¹ : CommRing R'
inst✝¹⁰ : CommRing S'
inst✝⁹ : Algebra R' S'
P' : Generators R' S'
inst✝⁸ : Algebra R R'
inst✝⁷ : Algebra S S'
inst✝⁶ : Algebra R S'
inst✝⁵ : IsScalarTower R R' S'
inst✝⁴ : IsScalarTower R S S'
T : Type uT
inst✝³ : CommRing T
inst✝² : Algebra R T
inst✝¹ : Algebra S T
inst✝ : IsScalarTower R S T
f g : P.Hom P'
x : ↥P.ker
⊢ ↑(P'.ker.cotangentEquivIdeal (mk ⟨f.toAlgHom ↑x, ⋯⟩ - mk ⟨g.toAlgHom ↑x, ⋯⟩).val) =
    ↑(P'.ker.cotangentEquivIdeal (P'.ker.toCotangent ((f.subToKer g) ↑x)))
state_after: no goals
tactic: simp only [val_sub, val_mk, map_sub, AddSubgroupClass.coe_sub, Ideal.cotangentEquivIdeal_apply,
    Ideal.toCotangent_to_quotient_square, Submodule.mkQ_apply, Ideal.Quotient.mk_eq_mk,
    Hom.subToKer_apply_coe]