Theorem: Finset.mem_piAntidiag
File: Mathlib/Algebra/Order/Antidiag/Pi.lean

Proof steps:
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝ : μ
s : Finset ι
n : μ
f : ι → μ
⊢ f ∈ s.piAntidiag n ↔ s.sum f = n ∧ ∀ (i : ι), f i ≠ 0 → i ∈ s
state_after: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝ : μ
s : Finset ι
n : μ
f : ι → μ
⊢ f ∈
      Trunc.lift
        (fun e =>
          map { toFun := fun f i => if hi : i ∈ s then f (e ⟨i, hi⟩) else 0, inj' := ⋯ } (finAntidiagonal s.card n))
        ⋯ (Fintype.truncEquivFinOfCardEq ⋯) ↔
    s.sum f = n ∧ ∀ (i : ι), f i ≠ 0 → i ∈ s
tactic: rw [piAntidiag]
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝ : μ
s : Finset ι
n : μ
f : ι → μ
⊢ f ∈
      Trunc.lift
        (fun e =>
          map { toFun := fun f i => if hi : i ∈ s then f (e ⟨i, hi⟩) else 0, inj' := ⋯ } (finAntidiagonal s.card n))
        ⋯ (Fintype.truncEquivFinOfCardEq ⋯) ↔
    s.sum f = n ∧ ∀ (i : ι), f i ≠ 0 → i ∈ s
state_after: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝ : μ
s : Finset ι
n : μ
f : ι → μ
e : { x // x ∈ s } ≃ Fin s.card
⊢ f ∈
      Trunc.lift
        (fun e =>
          map { toFun := fun f i => if hi : i ∈ s then f (e ⟨i, hi⟩) else 0, inj' := ⋯ } (finAntidiagonal s.card n))
        ⋯ (Trunc.mk e) ↔
    s.sum f = n ∧ ∀ (i : ι), f i ≠ 0 → i ∈ s
tactic: induction' Fintype.truncEquivFinOfCardEq (Fintype.card_coe s) using Trunc.ind with e
state_before: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝ : μ
s : Finset ι
n : μ
f : ι → μ
e : { x // x ∈ s } ≃ Fin s.card
⊢ f ∈
      Trunc.lift
        (fun e =>
          map { toFun := fun f i => if hi : i ∈ s then f (e ⟨i, hi⟩) else 0, inj' := ⋯ } (finAntidiagonal s.card n))
        ⋯ (Trunc.mk e) ↔
    s.sum f = n ∧ ∀ (i : ι), f i ≠ 0 → i ∈ s
state_after: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝ : μ
s : Finset ι
n : μ
f : ι → μ
e : { x // x ∈ s } ≃ Fin s.card
⊢ (∃ a, ∑ i : Fin s.card, a i = n ∧ (fun i => if hi : i ∈ s then a (e ⟨i, hi⟩) else 0) = f) ↔
    s.sum f = n ∧ ∀ (i : ι), f i ≠ 0 → i ∈ s
tactic: simp only [Trunc.lift_mk, mem_map, mem_finAntidiagonal, Embedding.coeFn_mk]
state_before: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝ : μ
s : Finset ι
n : μ
f : ι → μ
e : { x // x ∈ s } ≃ Fin s.card
⊢ (∃ a, ∑ i : Fin s.card, a i = n ∧ (fun i => if hi : i ∈ s then a (e ⟨i, hi⟩) else 0) = f) ↔
    s.sum f = n ∧ ∀ (i : ι), f i ≠ 0 → i ∈ s
state_after: case a.mp
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝ : μ
s : Finset ι
n : μ
f : ι → μ
e : { x // x ∈ s } ≃ Fin s.card
⊢ (∃ a, ∑ i : Fin s.card, a i = n ∧ (fun i => if hi : i ∈ s then a (e ⟨i, hi⟩) else 0) = f) →
    s.sum f = n ∧ ∀ (i : ι), f i ≠ 0 → i ∈ s

case a.mpr
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid μ
inst✝¹ : HasAntidiagonal μ
inst✝ : DecidableEq μ
n✝ : μ
s : Finset ι
n : μ
f : ι → μ
e : { x // x ∈ s } ≃ Fin s.card
⊢ (s.sum f = n ∧ ∀ (i : ι), f i ≠ 0 → i ∈ s) →
    ∃ a, ∑ i : Fin s.card, a i = n ∧ (fun i => if hi : i ∈ s then a (e ⟨i, hi⟩) else 0) = f
tactic: constructor