Theorem: CommRingCat.KaehlerDifferential.ext
File: Mathlib/Algebra/Category/ModuleCat/Differentials/Basic.lean

tactic: rw [← sub_eq_zero]
state_before: A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
⊢ α = β
state_after: A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
⊢ α - β = 0

tactic: have : ⊤ ≤ LinearMap.ker (α - β) := by
  rw [← KaehlerDifferential.span_range_derivation, Submodule.span_le]
  rintro _ ⟨y, rfl⟩
  rw [SetLike.mem_coe, LinearMap.mem_ker, LinearMap.sub_apply, sub_eq_zero]
  apply h
state_before: A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
⊢ α - β = 0
state_after: A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
this : ⊤ ≤ LinearMap.ker (α - β)
⊢ α - β = 0

tactic: rw [top_le_iff, LinearMap.ker_eq_top] at this
state_before: A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
this : ⊤ ≤ LinearMap.ker (α - β)
⊢ α - β = 0
state_after: A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
this : α - β = 0
⊢ α - β = 0

tactic: exact this
state_before: A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
this : α - β = 0
⊢ α - β = 0
state_after: no goals

tactic: rw [← KaehlerDifferential.span_range_derivation, Submodule.span_le]
state_before: A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
⊢ ⊤ ≤ LinearMap.ker (α - β)
state_after: A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
⊢ Set.range ⇑(_root_.KaehlerDifferential.D ↑A ↑B) ⊆ ↑(LinearMap.ker (α - β))

tactic: rintro _ ⟨y, rfl⟩
state_before: A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
⊢ Set.range ⇑(_root_.KaehlerDifferential.D ↑A ↑B) ⊆ ↑(LinearMap.ker (α - β))
state_after: case intro
A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
y : ↑B
⊢ (_root_.KaehlerDifferential.D ↑A ↑B) y ∈ ↑(LinearMap.ker (α - β))

tactic: rw [SetLike.mem_coe, LinearMap.mem_ker, LinearMap.sub_apply, sub_eq_zero]
state_before: case intro
A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
y : ↑B
⊢ (_root_.KaehlerDifferential.D ↑A ↑B) y ∈ ↑(LinearMap.ker (α - β))
state_after: case intro
A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
y : ↑B
⊢ α ((_root_.KaehlerDifferential.D ↑A ↑B) y) = β ((_root_.KaehlerDifferential.D ↑A ↑B) y)

tactic: apply h
state_before: case intro
A B A' B' : CommRingCat
f : A ⟶ B
f' : A' ⟶ B'
g : A ⟶ A'
g' : B ⟶ B'
fac : g ≫ f' = f ≫ g'
M : ModuleCat ↑B
α β : KaehlerDifferential f ⟶ M
h : ∀ (b : ↑B), α (d b) = β (d b)
y : ↑B
⊢ α ((_root_.KaehlerDifferential.D ↑A ↑B) y) = β ((_root_.KaehlerDifferential.D ↑A ↑B) y)
state_after: no goals