Theorem: PresheafOfModules.Sheafify.smul_add
File: Mathlib/Algebra/Category/ModuleCat/Presheaf/Sheafify.lean

tactic: let S := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
⊢ smul α φ r (m + m') = smul α φ r m + smul α φ r m'
state_after: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
⊢ smul α φ r (m + m') = smul α φ r m + smul α φ r m'

tactic: have hS : S ∈ J X.unop := by
  refine J.intersection_covering (J.intersection_covering ?_ ?_) ?_
  all_goals apply Presheaf.imageSieve_mem
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
⊢ smul α φ r (m + m') = smul α φ r m + smul α φ r m'
state_after: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
hS : S ∈ J.sieves X.unop
⊢ smul α φ r (m + m') = smul α φ r m + smul α φ r m'

tactic: apply A.isSeparated _ _ hS
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
hS : S ∈ J.sieves X.unop
⊢ smul α φ r (m + m') = smul α φ r m + smul α φ r m'
state_after: case a
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
hS : S ∈ J.sieves X.unop
⊢ ∀ (Y : C) (f : Y ⟶ X.unop),
    S.arrows f → (A.val.map f.op) (smul α φ r (m + m')) = (A.val.map f.op) (smul α φ r m + smul α φ r m')

tactic: rintro Y f ⟨⟨⟨r₀, hr₀⟩, ⟨m₀ : M₀.presheaf.obj _, hm₀⟩⟩, ⟨m₀' : M₀.presheaf.obj _, hm₀'⟩⟩
state_before: case a
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
hS : S ∈ J.sieves X.unop
⊢ ∀ (Y : C) (f : Y ⟶ X.unop),
    S.arrows f → (A.val.map f.op) (smul α φ r (m + m')) = (A.val.map f.op) (smul α φ r m + smul α φ r m')
state_after: case a.intro.intro.intro.intro.intro
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y✝ : Cᵒᵖ
π : X ⟶ Y✝
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
hS : S ∈ J.sieves X.unop
Y : C
f : Y ⟶ X.unop
r₀ : (forget RingCat).obj (R₀.obj { unop := Y })
hr₀ : (α.app { unop := Y }) r₀ = (R.val.map f.op) r
m₀ : ↑(M₀.presheaf.obj { unop := Y })
hm₀ : (φ.app { unop := Y }) m₀ = (A.val.map f.op) m
m₀' : ↑(M₀.presheaf.obj { unop := Y })
hm₀' : (φ.app { unop := Y }) m₀' = (A.val.map f.op) m'
⊢ (A.val.map f.op) (smul α φ r (m + m')) = (A.val.map f.op) (smul α φ r m + smul α φ r m')

tactic: erw [(A.val.map f.op).map_add, map_smul_eq α φ r m f.op r₀ hr₀ m₀ hm₀,
  map_smul_eq α φ r m' f.op r₀ hr₀ m₀' hm₀',
  map_smul_eq α φ r (m + m') f.op r₀ hr₀ (m₀ + m₀')
    (by erw [map_add, map_add, hm₀, hm₀']; rfl),
  smul_add, map_add]
state_before: case a.intro.intro.intro.intro.intro
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y✝ : Cᵒᵖ
π : X ⟶ Y✝
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
hS : S ∈ J.sieves X.unop
Y : C
f : Y ⟶ X.unop
r₀ : (forget RingCat).obj (R₀.obj { unop := Y })
hr₀ : (α.app { unop := Y }) r₀ = (R.val.map f.op) r
m₀ : ↑(M₀.presheaf.obj { unop := Y })
hm₀ : (φ.app { unop := Y }) m₀ = (A.val.map f.op) m
m₀' : ↑(M₀.presheaf.obj { unop := Y })
hm₀' : (φ.app { unop := Y }) m₀' = (A.val.map f.op) m'
⊢ (A.val.map f.op) (smul α φ r (m + m')) = (A.val.map f.op) (smul α φ r m + smul α φ r m')
state_after: no goals

tactic: refine J.intersection_covering (J.intersection_covering ?_ ?_) ?_
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
⊢ S ∈ J.sieves X.unop
state_after: case refine_1
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
⊢ Presheaf.imageSieve α r ∈ J.sieves X.unop

case refine_2
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
⊢ Presheaf.imageSieve φ m ∈ J.sieves X.unop

case refine_3
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
⊢ Presheaf.imageSieve φ m' ∈ J.sieves X.unop

tactic: all_goals apply Presheaf.imageSieve_mem
state_before: case refine_1
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
⊢ Presheaf.imageSieve α r ∈ J.sieves X.unop

case refine_2
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
⊢ Presheaf.imageSieve φ m ∈ J.sieves X.unop

case refine_3
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
⊢ Presheaf.imageSieve φ m' ∈ J.sieves X.unop
state_after: no goals

tactic: apply Presheaf.imageSieve_mem
state_before: case refine_3
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y : Cᵒᵖ
π : X ⟶ Y
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
⊢ Presheaf.imageSieve φ m' ∈ J.sieves X.unop
state_after: no goals

tactic: erw [map_add, map_add, hm₀, hm₀']
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y✝ : Cᵒᵖ
π : X ⟶ Y✝
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
hS : S ∈ J.sieves X.unop
Y : C
f : Y ⟶ X.unop
r₀ : (forget RingCat).obj (R₀.obj { unop := Y })
hr₀ : (α.app { unop := Y }) r₀ = (R.val.map f.op) r
m₀ : ↑(M₀.presheaf.obj { unop := Y })
hm₀ : (φ.app { unop := Y }) m₀ = (A.val.map f.op) m
m₀' : ↑(M₀.presheaf.obj { unop := Y })
hm₀' : (φ.app { unop := Y }) m₀' = (A.val.map f.op) m'
⊢ (φ.app { unop := Y }) (m₀ + m₀') = (A.val.map f.op) (m + m')
state_after: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y✝ : Cᵒᵖ
π : X ⟶ Y✝
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
hS : S ∈ J.sieves X.unop
Y : C
f : Y ⟶ X.unop
r₀ : (forget RingCat).obj (R₀.obj { unop := Y })
hr₀ : (α.app { unop := Y }) r₀ = (R.val.map f.op) r
m₀ : ↑(M₀.presheaf.obj { unop := Y })
hm₀ : (φ.app { unop := Y }) m₀ = (A.val.map f.op) m
m₀' : ↑(M₀.presheaf.obj { unop := Y })
hm₀' : (φ.app { unop := Y }) m₀' = (A.val.map f.op) m'
⊢ (A.val.map f.op) m + (A.val.map f.op) m' = (A.val.map f.op) m + (A.val.map f.op) m'

tactic: rfl
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
M₀ : PresheafOfModules R₀
A : Sheaf J AddCommGrp
φ : M₀.presheaf ⟶ A.val
inst✝¹ : Presheaf.IsLocallyInjective J φ
inst✝ : Presheaf.IsLocallySurjective J φ
X Y✝ : Cᵒᵖ
π : X ⟶ Y✝
r r' : ↑(R.val.obj X)
m m' : ↑(A.val.obj X)
S : Sieve X.unop := Presheaf.imageSieve α r ⊓ Presheaf.imageSieve φ m ⊓ Presheaf.imageSieve φ m'
hS : S ∈ J.sieves X.unop
Y : C
f : Y ⟶ X.unop
r₀ : (forget RingCat).obj (R₀.obj { unop := Y })
hr₀ : (α.app { unop := Y }) r₀ = (R.val.map f.op) r
m₀ : ↑(M₀.presheaf.obj { unop := Y })
hm₀ : (φ.app { unop := Y }) m₀ = (A.val.map f.op) m
m₀' : ↑(M₀.presheaf.obj { unop := Y })
hm₀' : (φ.app { unop := Y }) m₀' = (A.val.map f.op) m'
⊢ (A.val.map f.op) m + (A.val.map f.op) m' = (A.val.map f.op) m + (A.val.map f.op) m'
state_after: no goals