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

tactic: apply le_antisymm
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
⊢ LinearMap.ker (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) = kerTotal R S
state_after: case a
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
⊢ LinearMap.ker (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) ≤ kerTotal R S

case a
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
⊢ kerTotal R S ≤ LinearMap.ker (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S))

tactic: conv_rhs => rw [← (KaehlerDifferential.kerTotal R S).ker_mkQ]
state_before: case a
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
⊢ LinearMap.ker (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) ≤ kerTotal R S
state_after: case a
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
⊢ LinearMap.ker (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) ≤ LinearMap.ker (kerTotal R S).mkQ

tactic: rw [← KaehlerDifferential.derivationQuotKerTotal_lift_comp_total]
state_before: case a
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
⊢ LinearMap.ker (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) ≤ LinearMap.ker (kerTotal R S).mkQ
state_after: case a
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
⊢ LinearMap.ker (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) ≤
    LinearMap.ker ((derivationQuotKerTotal R S).liftKaehlerDifferential ∘ₗ Finsupp.total S (Ω[S⁄R]) S ⇑(D R S))

tactic: exact LinearMap.ker_le_ker_comp _ _
state_before: case a
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
⊢ LinearMap.ker (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)) ≤
    LinearMap.ker ((derivationQuotKerTotal R S).liftKaehlerDifferential ∘ₗ Finsupp.total S (Ω[S⁄R]) S ⇑(D R S))
state_after: no goals

tactic: rw [KaehlerDifferential.kerTotal, Submodule.span_le]
state_before: case a
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
⊢ kerTotal R S ≤ LinearMap.ker (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S))
state_after: case a
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
⊢ (((Set.range fun x => single x.1 1 + single x.2 1 - single (x.1 + x.2) 1) ∪
        Set.range fun x => single x.2 x.1 + single x.1 x.2 - single (x.1 * x.2) 1) ∪
      Set.range fun x => single ((algebraMap R S) x) 1) ⊆
    ↑(LinearMap.ker (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)))

tactic: rintro _ ((⟨⟨x, y⟩, rfl⟩ | ⟨⟨x, y⟩, rfl⟩) | ⟨x, rfl⟩) <;> dsimp <;> simp [LinearMap.mem_ker]
state_before: case a
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
⊢ (((Set.range fun x => single x.1 1 + single x.2 1 - single (x.1 + x.2) 1) ∪
        Set.range fun x => single x.2 x.1 + single x.1 x.2 - single (x.1 * x.2) 1) ∪
      Set.range fun x => single ((algebraMap R S) x) 1) ⊆
    ↑(LinearMap.ker (Finsupp.total S (Ω[S⁄R]) S ⇑(D R S)))
state_after: no goals