Theorem: YoungDiagram.mem_cellsOfRowLens
File: Mathlib/Combinatorics/Young/YoungDiagram.lean

tactic: induction' w with w_hd w_tl w_ih generalizing c <;> rw [YoungDiagram.cellsOfRowLens]
state_before: w : List ℕ
c : ℕ × ℕ
⊢ c ∈ YoungDiagram.cellsOfRowLens w ↔ ∃ (h : c.1 < w.length), c.2 < w.get ⟨c.1, h⟩
state_after: case nil
c : ℕ × ℕ
⊢ c ∈ ∅ ↔ ∃ (h : c.1 < [].length), c.2 < [].get ⟨c.1, h⟩

case cons
w_hd : ℕ
w_tl : List ℕ
w_ih : ∀ {c : ℕ × ℕ}, c ∈ YoungDiagram.cellsOfRowLens w_tl ↔ ∃ (h : c.1 < w_tl.length), c.2 < w_tl.get ⟨c.1, h⟩
c : ℕ × ℕ
⊢ c ∈
      {0} ×ˢ Finset.range w_hd ∪
        Finset.map ({ toFun := Nat.succ, inj' := Nat.succ_injective }.prodMap (Embedding.refl ℕ))
          (YoungDiagram.cellsOfRowLens w_tl) ↔
    ∃ (h : c.1 < (w_hd :: w_tl).length), c.2 < (w_hd :: w_tl).get ⟨c.1, h⟩

tactic: simp [YoungDiagram.cellsOfRowLens]
state_before: case nil
c : ℕ × ℕ
⊢ c ∈ ∅ ↔ ∃ (h : c.1 < [].length), c.2 < [].get ⟨c.1, h⟩
state_after: no goals

tactic: rcases c with ⟨⟨_, _⟩, _⟩
state_before: case cons
w_hd : ℕ
w_tl : List ℕ
w_ih : ∀ {c : ℕ × ℕ}, c ∈ YoungDiagram.cellsOfRowLens w_tl ↔ ∃ (h : c.1 < w_tl.length), c.2 < w_tl.get ⟨c.1, h⟩
c : ℕ × ℕ
⊢ c ∈
      {0} ×ˢ Finset.range w_hd ∪
        Finset.map ({ toFun := Nat.succ, inj' := Nat.succ_injective }.prodMap (Embedding.refl ℕ))
          (YoungDiagram.cellsOfRowLens w_tl) ↔
    ∃ (h : c.1 < (w_hd :: w_tl).length), c.2 < (w_hd :: w_tl).get ⟨c.1, h⟩
state_after: case cons.mk.zero
w_hd : ℕ
w_tl : List ℕ
w_ih : ∀ {c : ℕ × ℕ}, c ∈ YoungDiagram.cellsOfRowLens w_tl ↔ ∃ (h : c.1 < w_tl.length), c.2 < w_tl.get ⟨c.1, h⟩
snd✝ : ℕ
⊢ (0, snd✝) ∈
      {0} ×ˢ Finset.range w_hd ∪
        Finset.map ({ toFun := Nat.succ, inj' := Nat.succ_injective }.prodMap (Embedding.refl ℕ))
          (YoungDiagram.cellsOfRowLens w_tl) ↔
    ∃ (h : (0, snd✝).1 < (w_hd :: w_tl).length), (0, snd✝).2 < (w_hd :: w_tl).get ⟨(0, snd✝).1, h⟩

case cons.mk.succ
w_hd : ℕ
w_tl : List ℕ
w_ih : ∀ {c : ℕ × ℕ}, c ∈ YoungDiagram.cellsOfRowLens w_tl ↔ ∃ (h : c.1 < w_tl.length), c.2 < w_tl.get ⟨c.1, h⟩
snd✝ n✝ : ℕ
⊢ (n✝ + 1, snd✝) ∈
      {0} ×ˢ Finset.range w_hd ∪
        Finset.map ({ toFun := Nat.succ, inj' := Nat.succ_injective }.prodMap (Embedding.refl ℕ))
          (YoungDiagram.cellsOfRowLens w_tl) ↔
    ∃ (h : (n✝ + 1, snd✝).1 < (w_hd :: w_tl).length), (n✝ + 1, snd✝).2 < (w_hd :: w_tl).get ⟨(n✝ + 1, snd✝).1, h⟩

tactic: simp
state_before: case cons.mk.zero
w_hd : ℕ
w_tl : List ℕ
w_ih : ∀ {c : ℕ × ℕ}, c ∈ YoungDiagram.cellsOfRowLens w_tl ↔ ∃ (h : c.1 < w_tl.length), c.2 < w_tl.get ⟨c.1, h⟩
snd✝ : ℕ
⊢ (0, snd✝) ∈
      {0} ×ˢ Finset.range w_hd ∪
        Finset.map ({ toFun := Nat.succ, inj' := Nat.succ_injective }.prodMap (Embedding.refl ℕ))
          (YoungDiagram.cellsOfRowLens w_tl) ↔
    ∃ (h : (0, snd✝).1 < (w_hd :: w_tl).length), (0, snd✝).2 < (w_hd :: w_tl).get ⟨(0, snd✝).1, h⟩
state_after: no goals

tactic: simp [w_ih, -Finset.singleton_product, Nat.succ_lt_succ_iff]
state_before: case cons.mk.succ
w_hd : ℕ
w_tl : List ℕ
w_ih : ∀ {c : ℕ × ℕ}, c ∈ YoungDiagram.cellsOfRowLens w_tl ↔ ∃ (h : c.1 < w_tl.length), c.2 < w_tl.get ⟨c.1, h⟩
snd✝ n✝ : ℕ
⊢ (n✝ + 1, snd✝) ∈
      {0} ×ˢ Finset.range w_hd ∪
        Finset.map ({ toFun := Nat.succ, inj' := Nat.succ_injective }.prodMap (Embedding.refl ℕ))
          (YoungDiagram.cellsOfRowLens w_tl) ↔
    ∃ (h : (n✝ + 1, snd✝).1 < (w_hd :: w_tl).length), (n✝ + 1, snd✝).2 < (w_hd :: w_tl).get ⟨(n✝ + 1, snd✝).1, h⟩
state_after: no goals