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

Proof steps:
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁴ : DecidableEq ι
inst✝³ : AddCommMonoid μ
inst✝² : HasAntidiagonal μ
inst✝¹ : DecidableEq μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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 μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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 : s.sum ⇑f = p.2 ∧ f.support ⊆ s
hg : s.sum ⇑g = p.2 ∧ g.support ⊆ s
⊢ ↑⟨f, hf✝⟩ = ↑⟨g, hg✝⟩
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 μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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 : s.sum ⇑f = p.2 ∧ f.support ⊆ s
hg : s.sum ⇑g = p.2 ∧ g.support ⊆ s
⊢ ↑⟨f, hf✝⟩ = ↑⟨g, hg✝⟩
state_after: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁴ : DecidableEq ι
inst✝³ : AddCommMonoid μ
inst✝² : HasAntidiagonal μ
inst✝¹ : DecidableEq μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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 : s.sum ⇑f = p.2 ∧ f.support ⊆ s
hg : s.sum ⇑g = p.2 ∧ g.support ⊆ s
hfg : ∀ (x : ι), (f.update a p.1) x = (g.update a p.1) x
⊢ ∀ (x : ι), f x = g x
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 μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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 : s.sum ⇑f = p.2 ∧ f.support ⊆ s
hg : s.sum ⇑g = p.2 ∧ g.support ⊆ s
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 μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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 : s.sum ⇑f = p.2 ∧ f.support ⊆ s
hg : s.sum ⇑g = p.2 ∧ g.support ⊆ s
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 μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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 : s.sum ⇑f = p.2 ∧ f.support ⊆ s
hg : s.sum ⇑g = p.2 ∧ g.support ⊆ s
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 μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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 : s.sum ⇑f = p.2 ∧ f.support ⊆ s
hg : s.sum ⇑g = p.2 ∧ g.support ⊆ s
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 μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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 : s.sum ⇑f = p.2 ∧ f.support ⊆ s
hg : s.sum ⇑g = p.2 ∧ g.support ⊆ s
hfg : ∀ (x : ι), (f.update a p.1) x = (g.update a p.1) x
x : ι
hx : x ≠ a
⊢ 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 μ
s✝ : Finset ι
n✝ : μ
f : ι →₀ μ
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 μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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: ext f
state_before: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝⁴ : DecidableEq ι
inst✝³ : AddCommMonoid μ
inst✝² : HasAntidiagonal μ
inst✝¹ : DecidableEq μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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 μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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: 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 μ
s✝ : Finset ι
n✝ : μ
f✝ : ι →₀ μ
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
tactic: simp_rw [mem_map, mem_attach, true_and, Subtype.exists, Embedding.coeFn_mk, exists_prop, and_comm,
    eq_comm]