Theorem: Finset.finsuppAntidiag_insert
File: Mathlib/Algebra/Order/Antidiag/Finsupp.lean

tactic: simp only [mem_val, mem_finsuppAntidiag] at hf hg
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
p : μ × μ
x✝¹ x✝ : { x // x ∈ s.finsuppAntidiag p.2 }
f : ι →₀ μ
hf : f ∈ s.finsuppAntidiag p.2
g : ι →₀ μ
hg : g ∈ s.finsuppAntidiag p.2
hfg : (fun f => (↑f).update a p.1) ⟨f, hf⟩ = (fun f => (↑f).update a p.1) ⟨g, hg⟩
⊢ ↑⟨f, hf⟩ = ↑⟨g, hg⟩
state_after: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
p : μ × μ
x✝¹ x✝ : { x // x ∈ s.finsuppAntidiag p.2 }
f : ι →₀ μ
hf✝ : f ∈ s.finsuppAntidiag p.2
g : ι →₀ μ
hg✝ : g ∈ s.finsuppAntidiag p.2
hfg : (fun f => (↑f).update a p.1) ⟨f, hf✝⟩ = (fun f => (↑f).update a p.1) ⟨g, hg✝⟩
hf : f.support ⊆ s ∧ (f.sum fun x x => x) = p.2
hg : g.support ⊆ s ∧ (g.sum fun x x => x) = p.2
⊢ ↑⟨f, hf✝⟩ = ↑⟨g, hg✝⟩

tactic: simp only [DFunLike.ext_iff] at hfg ⊢
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
p : μ × μ
x✝¹ x✝ : { x // x ∈ s.finsuppAntidiag p.2 }
f : ι →₀ μ
hf✝ : f ∈ s.finsuppAntidiag p.2
g : ι →₀ μ
hg✝ : g ∈ s.finsuppAntidiag p.2
hfg : (fun f => (↑f).update a p.1) ⟨f, hf✝⟩ = (fun f => (↑f).update a p.1) ⟨g, hg✝⟩
hf : f.support ⊆ s ∧ (f.sum fun x x => x) = p.2
hg : g.support ⊆ s ∧ (g.sum fun x x => x) = p.2
⊢ ↑⟨f, hf✝⟩ = ↑⟨g, hg✝⟩
state_after: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
p : μ × μ
x✝¹ x✝ : { x // x ∈ s.finsuppAntidiag p.2 }
f : ι →₀ μ
hf✝ : f ∈ s.finsuppAntidiag p.2
g : ι →₀ μ
hg✝ : g ∈ s.finsuppAntidiag p.2
hf : f.support ⊆ s ∧ (f.sum fun x x => x) = p.2
hg : g.support ⊆ s ∧ (g.sum fun x x => x) = p.2
hfg : ∀ (x : ι), (f.update a p.1) x = (g.update a p.1) x
⊢ ∀ (x : ι), f x = g x

tactic: intro x
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
p : μ × μ
x✝¹ x✝ : { x // x ∈ s.finsuppAntidiag p.2 }
f : ι →₀ μ
hf✝ : f ∈ s.finsuppAntidiag p.2
g : ι →₀ μ
hg✝ : g ∈ s.finsuppAntidiag p.2
hf : f.support ⊆ s ∧ (f.sum fun x x => x) = p.2
hg : g.support ⊆ s ∧ (g.sum fun x x => x) = p.2
hfg : ∀ (x : ι), (f.update a p.1) x = (g.update a p.1) x
⊢ ∀ (x : ι), f x = g x
state_after: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
p : μ × μ
x✝¹ x✝ : { x // x ∈ s.finsuppAntidiag p.2 }
f : ι →₀ μ
hf✝ : f ∈ s.finsuppAntidiag p.2
g : ι →₀ μ
hg✝ : g ∈ s.finsuppAntidiag p.2
hf : f.support ⊆ s ∧ (f.sum fun x x => x) = p.2
hg : g.support ⊆ s ∧ (g.sum fun x x => x) = p.2
hfg : ∀ (x : ι), (f.update a p.1) x = (g.update a p.1) x
x : ι
⊢ f x = g x

tactic: obtain rfl | hx := eq_or_ne x a
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
p : μ × μ
x✝¹ x✝ : { x // x ∈ s.finsuppAntidiag p.2 }
f : ι →₀ μ
hf✝ : f ∈ s.finsuppAntidiag p.2
g : ι →₀ μ
hg✝ : g ∈ s.finsuppAntidiag p.2
hf : f.support ⊆ s ∧ (f.sum fun x x => x) = p.2
hg : g.support ⊆ s ∧ (g.sum fun x x => x) = p.2
hfg : ∀ (x : ι), (f.update a p.1) x = (g.update a p.1) x
x : ι
⊢ f x = g x
state_after: case inl
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
s : Finset ι
n : μ
p : μ × μ
x✝¹ x✝ : { x // x ∈ s.finsuppAntidiag p.2 }
f : ι →₀ μ
hf✝ : f ∈ s.finsuppAntidiag p.2
g : ι →₀ μ
hg✝ : g ∈ s.finsuppAntidiag p.2
hf : f.support ⊆ s ∧ (f.sum fun x x => x) = p.2
hg : g.support ⊆ s ∧ (g.sum fun x x => x) = p.2
x : ι
h : x ∉ s
hfg : ∀ (x_1 : ι), (f.update x p.1) x_1 = (g.update x p.1) x_1
⊢ f x = g x

case inr
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
p : μ × μ
x✝¹ x✝ : { x // x ∈ s.finsuppAntidiag p.2 }
f : ι →₀ μ
hf✝ : f ∈ s.finsuppAntidiag p.2
g : ι →₀ μ
hg✝ : g ∈ s.finsuppAntidiag p.2
hf : f.support ⊆ s ∧ (f.sum fun x x => x) = p.2
hg : g.support ⊆ s ∧ (g.sum fun x x => x) = p.2
hfg : ∀ (x : ι), (f.update a p.1) x = (g.update a p.1) x
x : ι
hx : x ≠ a
⊢ f x = g x

tactic: rw [not_mem_support_iff.mp hf, not_mem_support_iff.mp hg]
state_before: case inl
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
s : Finset ι
n : μ
p : μ × μ
x✝¹ x✝ : { x // x ∈ s.finsuppAntidiag p.2 }
f : ι →₀ μ
hf✝ : f ∈ s.finsuppAntidiag p.2
g : ι →₀ μ
hg✝ : g ∈ s.finsuppAntidiag p.2
x : ι
h : x ∉ s
hfg : ∀ (x_1 : ι), (f.update x p.1) x_1 = (g.update x p.1) x_1
hf : x ∉ f.support
hg : x ∉ g.support
⊢ f x = g x
state_after: no goals

tactic: simpa only [coe_update, Function.update, dif_neg hx] using hfg x
state_before: case inr
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
p : μ × μ
x✝¹ x✝ : { x // x ∈ s.finsuppAntidiag p.2 }
f : ι →₀ μ
hf✝ : f ∈ s.finsuppAntidiag p.2
g : ι →₀ μ
hg✝ : g ∈ s.finsuppAntidiag p.2
hf : f.support ⊆ s ∧ (f.sum fun x x => x) = p.2
hg : g.support ⊆ s ∧ (g.sum fun x x => x) = p.2
hfg : ∀ (x : ι), (f.update a p.1) x = (g.update a p.1) x
x : ι
hx : x ≠ a
⊢ f x = g x
state_after: no goals

tactic: ext f
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
⊢ (insert a s).finsuppAntidiag n =
    (antidiagonal n).biUnion fun p =>
      map { toFun := fun f => (↑f).update a p.1, inj' := ⋯ } (s.finsuppAntidiag p.2).attach
state_after: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
f : ι →₀ μ
⊢ f ∈ (insert a s).finsuppAntidiag n ↔
    f ∈
      (antidiagonal n).biUnion fun p =>
        map { toFun := fun f => (↑f).update a p.1, inj' := ⋯ } (s.finsuppAntidiag p.2).attach

tactic: rw [mem_finsuppAntidiag_insert h, mem_biUnion]
state_before: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
f : ι →₀ μ
⊢ f ∈ (insert a s).finsuppAntidiag n ↔
    f ∈
      (antidiagonal n).biUnion fun p =>
        map { toFun := fun f => (↑f).update a p.1, inj' := ⋯ } (s.finsuppAntidiag p.2).attach
state_after: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
f : ι →₀ μ
⊢ (∃ m ∈ antidiagonal n, ∃ g, f = g.update a m.1 ∧ g ∈ s.finsuppAntidiag m.2) ↔
    ∃ a_1 ∈ antidiagonal n,
      f ∈ map { toFun := fun f => (↑f).update a a_1.1, inj' := ⋯ } (s.finsuppAntidiag a_1.2).attach

tactic: simp_rw [mem_map, mem_attach, true_and, Subtype.exists, Embedding.coeFn_mk, exists_prop, and_comm,
  eq_comm]
state_before: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁸ : DecidableEq ι
inst✝⁷ : AddCommMonoid μ
inst✝⁶ : HasAntidiagonal μ
inst✝⁵ : DecidableEq μ
inst✝⁴ : AddCommMonoid μ'
inst✝³ : HasAntidiagonal μ'
inst✝² : DecidableEq μ'
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq μ
a : ι
s : Finset ι
h : a ∉ s
n : μ
f : ι →₀ μ
⊢ (∃ m ∈ antidiagonal n, ∃ g, f = g.update a m.1 ∧ g ∈ s.finsuppAntidiag m.2) ↔
    ∃ a_1 ∈ antidiagonal n,
      f ∈ map { toFun := fun f => (↑f).update a a_1.1, inj' := ⋯ } (s.finsuppAntidiag a_1.2).attach
state_after: no goals