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

tactic: simp only [finsuppAntidiag, mem_map, Embedding.coeFn_mk, mem_finAntidiagonal₀]
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
n : μ
f : ι →₀ μ
⊢ f ∈ s.finsuppAntidiag n ↔ f.support ⊆ s ∧ (f.sum fun x x => x) = n
state_after: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
n : μ
f : ι →₀ μ
⊢ (∃
      a ∈
        Trunc.lift (fun e => map (equivCongrLeft e.symm).toEmbedding (finAntidiagonal₀ s.card n)) ⋯
          (Fintype.truncEquivFinOfCardEq ⋯),
      a.extendDomain = f) ↔
    f.support ⊆ s ∧ (f.sum fun x x => x) = n

tactic: induction' (Fintype.truncEquivFinOfCardEq <| Fintype.card_coe s) using Trunc.ind with e'
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
n : μ
f : ι →₀ μ
⊢ (∃
      a ∈
        Trunc.lift (fun e => map (equivCongrLeft e.symm).toEmbedding (finAntidiagonal₀ s.card n)) ⋯
          (Fintype.truncEquivFinOfCardEq ⋯),
      a.extendDomain = f) ↔
    f.support ⊆ s ∧ (f.sum fun x x => x) = n
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 : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
⊢ (∃ a ∈ Trunc.lift (fun e => map (equivCongrLeft e.symm).toEmbedding (finAntidiagonal₀ s.card n)) ⋯ (Trunc.mk e'),
      a.extendDomain = f) ↔
    f.support ⊆ s ∧ (f.sum fun x x => x) = n

tactic: simp_rw [Trunc.lift_mk, mem_map_equiv, equivCongrLeft_symm, Equiv.symm_symm, equivCongrLeft_apply,
  mem_finAntidiagonal₀, sum_equivMapDomain]
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 : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
⊢ (∃ a ∈ Trunc.lift (fun e => map (equivCongrLeft e.symm).toEmbedding (finAntidiagonal₀ s.card n)) ⋯ (Trunc.mk e'),
      a.extendDomain = f) ↔
    f.support ⊆ s ∧ (f.sum fun x x => x) = n
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 : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
⊢ (∃ a, (a.sum fun a m => m) = n ∧ a.extendDomain = f) ↔ f.support ⊆ s ∧ (f.sum fun x x => x) = n

tactic: constructor
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 : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
⊢ (∃ a, (a.sum fun a m => m) = n ∧ a.extendDomain = f) ↔ f.support ⊆ s ∧ (f.sum fun x x => x) = n
state_after: case a.mp
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
n : μ
f : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
⊢ (∃ a, (a.sum fun a m => m) = n ∧ a.extendDomain = f) → f.support ⊆ s ∧ (f.sum fun x x => x) = n

case a.mpr
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
n : μ
f : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
⊢ f.support ⊆ s ∧ (f.sum fun x x => x) = n → ∃ a, (a.sum fun a m => m) = n ∧ a.extendDomain = f

tactic: rintro ⟨f, rfl, rfl⟩
state_before: case a.mp
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
n : μ
f : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
⊢ (∃ a, (a.sum fun a m => m) = n ∧ a.extendDomain = f) → f.support ⊆ s ∧ (f.sum fun x x => x) = n
state_after: case a.mp.intro.intro
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
e' : { x // x ∈ s } ≃ Fin s.card
f : { x // x ∈ s } →₀ μ
⊢ f.extendDomain.support ⊆ s ∧ (f.extendDomain.sum fun x x => x) = f.sum fun a m => m

tactic: dsimp [sum]
state_before: case a.mp.intro.intro
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
e' : { x // x ∈ s } ≃ Fin s.card
f : { x // x ∈ s } →₀ μ
⊢ f.extendDomain.support ⊆ s ∧ (f.extendDomain.sum fun x x => x) = f.sum fun a m => m
state_after: case a.mp.intro.intro
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
e' : { x // x ∈ s } ≃ Fin s.card
f : { x // x ∈ s } →₀ μ
⊢ f.extendDomain.support ⊆ s ∧ (∑ a ∈ f.extendDomain.support, if h : a ∈ s then f ⟨a, h⟩ else 0) = ∑ a ∈ f.support, f a

tactic: constructor
state_before: case a.mp.intro.intro
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
e' : { x // x ∈ s } ≃ Fin s.card
f : { x // x ∈ s } →₀ μ
⊢ f.extendDomain.support ⊆ s ∧ (∑ a ∈ f.extendDomain.support, if h : a ∈ s then f ⟨a, h⟩ else 0) = ∑ a ∈ f.support, f a
state_after: case a.mp.intro.intro.left
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
e' : { x // x ∈ s } ≃ Fin s.card
f : { x // x ∈ s } →₀ μ
⊢ f.extendDomain.support ⊆ s

case a.mp.intro.intro.right
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
e' : { x // x ∈ s } ≃ Fin s.card
f : { x // x ∈ s } →₀ μ
⊢ (∑ a ∈ f.extendDomain.support, if h : a ∈ s then f ⟨a, h⟩ else 0) = ∑ a ∈ f.support, f a

tactic: exact Finset.coe_subset.mpr (support_extendDomain_subset _)
state_before: case a.mp.intro.intro.left
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
e' : { x // x ∈ s } ≃ Fin s.card
f : { x // x ∈ s } →₀ μ
⊢ f.extendDomain.support ⊆ s
state_after: no goals

tactic: simp
state_before: case a.mp.intro.intro.right
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
e' : { x // x ∈ s } ≃ Fin s.card
f : { x // x ∈ s } →₀ μ
⊢ (∑ a ∈ f.extendDomain.support, if h : a ∈ s then f ⟨a, h⟩ else 0) = ∑ a ∈ f.support, f a
state_after: no goals

tactic: rintro ⟨hsupp, rfl⟩
state_before: case a.mpr
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
n : μ
f : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
⊢ f.support ⊆ s ∧ (f.sum fun x x => x) = n → ∃ a, (a.sum fun a m => m) = n ∧ a.extendDomain = f
state_after: case a.mpr.intro
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
f : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
hsupp : f.support ⊆ s
⊢ ∃ a, ((a.sum fun a m => m) = f.sum fun x x => x) ∧ a.extendDomain = f

tactic: refine (Function.RightInverse.surjective subtypeDomain_extendDomain).exists.mpr ⟨f, ?_⟩
state_before: case a.mpr.intro
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
f : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
hsupp : f.support ⊆ s
⊢ ∃ a, ((a.sum fun a m => m) = f.sum fun x x => x) ∧ a.extendDomain = f
state_after: case a.mpr.intro
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
f : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
hsupp : f.support ⊆ s
⊢ (((subtypeDomain (fun x => x ∈ s) f).sum fun a m => m) = f.sum fun x x => x) ∧
    (subtypeDomain (fun x => x ∈ s) f).extendDomain = f

tactic: constructor
state_before: case a.mpr.intro
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
f : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
hsupp : f.support ⊆ s
⊢ (((subtypeDomain (fun x => x ∈ s) f).sum fun a m => m) = f.sum fun x x => x) ∧
    (subtypeDomain (fun x => x ∈ s) f).extendDomain = f
state_after: case a.mpr.intro.left
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
f : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
hsupp : f.support ⊆ s
⊢ ((subtypeDomain (fun x => x ∈ s) f).sum fun a m => m) = f.sum fun x x => x

case a.mpr.intro.right
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
f : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
hsupp : f.support ⊆ s
⊢ (subtypeDomain (fun x => x ∈ s) f).extendDomain = f

tactic: simp_rw [sum, support_subtypeDomain, subtypeDomain_apply, sum_subtype_of_mem _ hsupp]
state_before: case a.mpr.intro.left
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
f : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
hsupp : f.support ⊆ s
⊢ ((subtypeDomain (fun x => x ∈ s) f).sum fun a m => m) = f.sum fun x x => x
state_after: no goals

tactic: rw [extendDomain_subtypeDomain _ hsupp]
state_before: case a.mpr.intro.right
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
s : Finset ι
f : ι →₀ μ
e' : { x // x ∈ s } ≃ Fin s.card
hsupp : f.support ⊆ s
⊢ (subtypeDomain (fun x => x ∈ s) f).extendDomain = f
state_after: no goals