Theorem: KaehlerDifferential.quotKerTotalEquiv_symm_apply
File: Mathlib/RingTheory/Kaehler/Basic.lean

Proof steps:
state_before: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
⊢ Function.LeftInverse (⇑(derivationQuotKerTotal R S).liftKaehlerDifferential) __src✝.toFun
state_after: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : (S →₀ S) ⧸ kerTotal R S
⊢ (derivationQuotKerTotal R S).liftKaehlerDifferential (__src✝.toFun x) = x
tactic: intro x
state_before: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : (S →₀ S) ⧸ kerTotal R S
⊢ (derivationQuotKerTotal R S).liftKaehlerDifferential (__src✝.toFun x) = x
state_after: case intro
R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : S →₀ S
⊢ (derivationQuotKerTotal R S).liftKaehlerDifferential (__src✝.toFun ((kerTotal R S).mkQ x)) = (kerTotal R S).mkQ x
tactic: obtain ⟨x, rfl⟩ := Submodule.mkQ_surjective _ x
state_before: case intro
R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : S →₀ S
⊢ (derivationQuotKerTotal R S).liftKaehlerDifferential (__src✝.toFun ((kerTotal R S).mkQ x)) = (kerTotal R S).mkQ x
state_after: no goals
tactic: exact
        LinearMap.congr_fun (KaehlerDifferential.derivationQuotKerTotal_lift_comp_total R S : _) x
state_before: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
⊢ Function.RightInverse (⇑(derivationQuotKerTotal R S).liftKaehlerDifferential) __src✝.toFun
state_after: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : Ω[S⁄R]
⊢ __src✝.toFun ((derivationQuotKerTotal R S).liftKaehlerDifferential x) = x
tactic: intro x
state_before: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : Ω[S⁄R]
⊢ __src✝.toFun ((derivationQuotKerTotal R S).liftKaehlerDifferential x) = x
state_after: case intro
R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : S →₀ S
⊢ __src✝.toFun ((derivationQuotKerTotal R S).liftKaehlerDifferential ((Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x)) =
    (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x
tactic: obtain ⟨x, rfl⟩ := KaehlerDifferential.total_surjective R S x
state_before: case intro
R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : S →₀ S
⊢ __src✝.toFun ((derivationQuotKerTotal R S).liftKaehlerDifferential ((Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x)) =
    (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x
state_after: case intro
R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : S →₀ S
this :
  ((derivationQuotKerTotal R S).liftKaehlerDifferential ∘ₗ Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x = (kerTotal R S).mkQ x
⊢ __src✝.toFun ((derivationQuotKerTotal R S).liftKaehlerDifferential ((Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x)) =
    (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x
tactic: have := LinearMap.congr_fun (KaehlerDifferential.derivationQuotKerTotal_lift_comp_total R S) x
state_before: case intro
R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : S →₀ S
this :
  ((derivationQuotKerTotal R S).liftKaehlerDifferential ∘ₗ Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x = (kerTotal R S).mkQ x
⊢ __src✝.toFun ((derivationQuotKerTotal R S).liftKaehlerDifferential ((Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x)) =
    (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x
state_after: case intro
R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : S →₀ S
this :
  (derivationQuotKerTotal R S).liftKaehlerDifferential ((Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x) = (kerTotal R S).mkQ x
⊢ __src✝.toFun ((derivationQuotKerTotal R S).liftKaehlerDifferential ((Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x)) =
    (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x
tactic: rw [LinearMap.comp_apply] at this
state_before: case intro
R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : S →₀ S
this :
  (derivationQuotKerTotal R S).liftKaehlerDifferential ((Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x) = (kerTotal R S).mkQ x
⊢ __src✝.toFun ((derivationQuotKerTotal R S).liftKaehlerDifferential ((Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x)) =
    (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x
state_after: case intro
R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : S →₀ S
this :
  (derivationQuotKerTotal R S).liftKaehlerDifferential ((Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x) = (kerTotal R S).mkQ x
⊢ __src✝.toFun ((kerTotal R S).mkQ x) = (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x
tactic: rw [this]
state_before: case intro
R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : S →₀ S
this :
  (derivationQuotKerTotal R S).liftKaehlerDifferential ((Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x) = (kerTotal R S).mkQ x
⊢ __src✝.toFun ((kerTotal R S).mkQ x) = (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) x
state_after: no goals
tactic: rfl