Theorem: List.Nat.nodup_antidiagonalTuple
File: Mathlib/Data/Fin/Tuple/NatAntidiagonal.lean

tactic: induction' k with k ih generalizing n
state_before: k n : ℕ
⊢ (antidiagonalTuple k n).Nodup
state_after: case zero
n : ℕ
⊢ (antidiagonalTuple 0 n).Nodup

case succ
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
⊢ (antidiagonalTuple (k + 1) n).Nodup

tactic: simp_rw [antidiagonalTuple, List.nodup_bind]
state_before: case succ
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
⊢ (antidiagonalTuple (k + 1) n).Nodup
state_after: case succ
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
⊢ (∀ x ∈ antidiagonal n, (map (fun x_1 => Fin.cons x.1 x_1) (antidiagonalTuple k x.2)).Nodup) ∧
    Pairwise
      (fun a b =>
        (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
          (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
      (antidiagonal n)

tactic: constructor
state_before: case succ
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
⊢ (∀ x ∈ antidiagonal n, (map (fun x_1 => Fin.cons x.1 x_1) (antidiagonalTuple k x.2)).Nodup) ∧
    Pairwise
      (fun a b =>
        (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
          (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
      (antidiagonal n)
state_after: case succ.left
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
⊢ ∀ x ∈ antidiagonal n, (map (fun x_1 => Fin.cons x.1 x_1) (antidiagonalTuple k x.2)).Nodup

case succ.right
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
⊢ Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)

tactic: induction' n with n n_ih
state_before: case succ.right
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
⊢ Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
state_after: case succ.right.zero
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
⊢ Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal 0)

case succ.right.succ
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
⊢ Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal (n + 1))

tactic: cases n
state_before: case zero
n : ℕ
⊢ (antidiagonalTuple 0 n).Nodup
state_after: case zero.zero

⊢ (antidiagonalTuple 0 0).Nodup

case zero.succ
n✝ : ℕ
⊢ (antidiagonalTuple 0 (n✝ + 1)).Nodup

tactic: simp
state_before: case zero.zero

⊢ (antidiagonalTuple 0 0).Nodup
state_after: no goals

tactic: simp [eq_comm]
state_before: case zero.succ
n✝ : ℕ
⊢ (antidiagonalTuple 0 (n✝ + 1)).Nodup
state_after: no goals

tactic: intro i _
state_before: case succ.left
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
⊢ ∀ x ∈ antidiagonal n, (map (fun x_1 => Fin.cons x.1 x_1) (antidiagonalTuple k x.2)).Nodup
state_after: case succ.left
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
i : ℕ × ℕ
a✝ : i ∈ antidiagonal n
⊢ (map (fun x => Fin.cons i.1 x) (antidiagonalTuple k i.2)).Nodup

tactic: exact (ih i.snd).map (Fin.cons_right_injective (α := fun _ => ℕ) i.fst)
state_before: case succ.left
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
i : ℕ × ℕ
a✝ : i ∈ antidiagonal n
⊢ (map (fun x => Fin.cons i.1 x) (antidiagonalTuple k i.2)).Nodup
state_after: no goals

tactic: exact List.pairwise_singleton _ _
state_before: case succ.right.zero
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
⊢ Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal 0)
state_after: no goals

tactic: rw [List.Nat.antidiagonal_succ]
state_before: case succ.right.succ
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
⊢ Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal (n + 1))
state_after: case succ.right.succ
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
⊢ Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    ((0, n + 1) :: map (Prod.map Nat.succ id) (antidiagonal n))

tactic: refine List.Pairwise.cons (fun a ha x hx₁ hx₂ => ?_) (n_ih.map _ fun a b h x hx₁ hx₂ => ?_)
state_before: case succ.right.succ
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
⊢ Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    ((0, n + 1) :: map (Prod.map Nat.succ id) (antidiagonal n))
state_after: case succ.right.succ.refine_1
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a : ℕ × ℕ
ha : a ∈ map (Prod.map Nat.succ id) (antidiagonal n)
x : Fin (k + 1) → ℕ
hx₁ : x ∈ map (fun x => Fin.cons (0, n + 1).1 x) (antidiagonalTuple k (0, n + 1).2)
hx₂ : x ∈ map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)
⊢ False

case succ.right.succ.refine_2
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2))
x : Fin (k + 1) → ℕ
hx₁ : x ∈ map (fun x => Fin.cons (Prod.map Nat.succ id a).1 x) (antidiagonalTuple k (Prod.map Nat.succ id a).2)
hx₂ : x ∈ map (fun x => Fin.cons (Prod.map Nat.succ id b).1 x) (antidiagonalTuple k (Prod.map Nat.succ id b).2)
⊢ False

tactic: rw [List.mem_map] at hx₁ hx₂ ha
state_before: case succ.right.succ.refine_1
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a : ℕ × ℕ
ha : a ∈ map (Prod.map Nat.succ id) (antidiagonal n)
x : Fin (k + 1) → ℕ
hx₁ : x ∈ map (fun x => Fin.cons (0, n + 1).1 x) (antidiagonalTuple k (0, n + 1).2)
hx₂ : x ∈ map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)
⊢ False
state_after: case succ.right.succ.refine_1
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a : ℕ × ℕ
ha : ∃ a_1 ∈ antidiagonal n, Prod.map Nat.succ id a_1 = a
x : Fin (k + 1) → ℕ
hx₁ : ∃ a ∈ antidiagonalTuple k (0, n + 1).2, Fin.cons (0, n + 1).1 a = x
hx₂ : ∃ a_1 ∈ antidiagonalTuple k a.2, Fin.cons a.1 a_1 = x
⊢ False

tactic: obtain ⟨⟨a, -, rfl⟩, ⟨x₁, -, rfl⟩, ⟨x₂, -, h⟩⟩ := ha, hx₁, hx₂
state_before: case succ.right.succ.refine_1
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a : ℕ × ℕ
ha : ∃ a_1 ∈ antidiagonal n, Prod.map Nat.succ id a_1 = a
x : Fin (k + 1) → ℕ
hx₁ : ∃ a ∈ antidiagonalTuple k (0, n + 1).2, Fin.cons (0, n + 1).1 a = x
hx₂ : ∃ a_1 ∈ antidiagonalTuple k a.2, Fin.cons a.1 a_1 = x
⊢ False
state_after: case succ.right.succ.refine_1.intro.intro.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a : ℕ × ℕ
x₁ x₂ : Fin k → ℕ
h : Fin.cons (Prod.map Nat.succ id a).1 x₂ = Fin.cons (0, n + 1).1 x₁
⊢ False

tactic: rw [Fin.cons_eq_cons] at h
state_before: case succ.right.succ.refine_1.intro.intro.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a : ℕ × ℕ
x₁ x₂ : Fin k → ℕ
h : Fin.cons (Prod.map Nat.succ id a).1 x₂ = Fin.cons (0, n + 1).1 x₁
⊢ False
state_after: case succ.right.succ.refine_1.intro.intro.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a : ℕ × ℕ
x₁ x₂ : Fin k → ℕ
h : (Prod.map Nat.succ id a).1 = (0, n + 1).1 ∧ x₂ = x₁
⊢ False

tactic: injection h.1
state_before: case succ.right.succ.refine_1.intro.intro.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a : ℕ × ℕ
x₁ x₂ : Fin k → ℕ
h : (Prod.map Nat.succ id a).1 = (0, n + 1).1 ∧ x₂ = x₁
⊢ False
state_after: no goals

tactic: rw [List.mem_map] at hx₁ hx₂
state_before: case succ.right.succ.refine_2
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2))
x : Fin (k + 1) → ℕ
hx₁ : x ∈ map (fun x => Fin.cons (Prod.map Nat.succ id a).1 x) (antidiagonalTuple k (Prod.map Nat.succ id a).2)
hx₂ : x ∈ map (fun x => Fin.cons (Prod.map Nat.succ id b).1 x) (antidiagonalTuple k (Prod.map Nat.succ id b).2)
⊢ False
state_after: case succ.right.succ.refine_2
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2))
x : Fin (k + 1) → ℕ
hx₁ : ∃ a_1 ∈ antidiagonalTuple k (Prod.map Nat.succ id a).2, Fin.cons (Prod.map Nat.succ id a).1 a_1 = x
hx₂ : ∃ a ∈ antidiagonalTuple k (Prod.map Nat.succ id b).2, Fin.cons (Prod.map Nat.succ id b).1 a = x
⊢ False

tactic: obtain ⟨⟨x₁, hx₁, rfl⟩, ⟨x₂, hx₂, h₁₂⟩⟩ := hx₁, hx₂
state_before: case succ.right.succ.refine_2
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2))
x : Fin (k + 1) → ℕ
hx₁ : ∃ a_1 ∈ antidiagonalTuple k (Prod.map Nat.succ id a).2, Fin.cons (Prod.map Nat.succ id a).1 a_1 = x
hx₂ : ∃ a ∈ antidiagonalTuple k (Prod.map Nat.succ id b).2, Fin.cons (Prod.map Nat.succ id b).1 a = x
⊢ False
state_after: case succ.right.succ.refine_2.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2))
x₁ : Fin k → ℕ
hx₁ : x₁ ∈ antidiagonalTuple k (Prod.map Nat.succ id a).2
x₂ : Fin k → ℕ
hx₂ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id b).2
h₁₂ : Fin.cons (Prod.map Nat.succ id b).1 x₂ = Fin.cons (Prod.map Nat.succ id a).1 x₁
⊢ False

tactic: dsimp at h₁₂
state_before: case succ.right.succ.refine_2.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2))
x₁ : Fin k → ℕ
hx₁ : x₁ ∈ antidiagonalTuple k (Prod.map Nat.succ id a).2
x₂ : Fin k → ℕ
hx₂ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id b).2
h₁₂ : Fin.cons (Prod.map Nat.succ id b).1 x₂ = Fin.cons (Prod.map Nat.succ id a).1 x₁
⊢ False
state_after: case succ.right.succ.refine_2.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2))
x₁ : Fin k → ℕ
hx₁ : x₁ ∈ antidiagonalTuple k (Prod.map Nat.succ id a).2
x₂ : Fin k → ℕ
hx₂ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id b).2
h₁₂ : Fin.cons (b.1 + 1) x₂ = Fin.cons (a.1 + 1) x₁
⊢ False

tactic: rw [Fin.cons_eq_cons, Nat.succ_inj'] at h₁₂
state_before: case succ.right.succ.refine_2.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2))
x₁ : Fin k → ℕ
hx₁ : x₁ ∈ antidiagonalTuple k (Prod.map Nat.succ id a).2
x₂ : Fin k → ℕ
hx₂ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id b).2
h₁₂ : Fin.cons (b.1 + 1) x₂ = Fin.cons (a.1 + 1) x₁
⊢ False
state_after: case succ.right.succ.refine_2.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2))
x₁ : Fin k → ℕ
hx₁ : x₁ ∈ antidiagonalTuple k (Prod.map Nat.succ id a).2
x₂ : Fin k → ℕ
hx₂ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id b).2
h₁₂ : b.1 = a.1 ∧ x₂ = x₁
⊢ False

tactic: obtain ⟨h₁₂, rfl⟩ := h₁₂
state_before: case succ.right.succ.refine_2.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2))
x₁ : Fin k → ℕ
hx₁ : x₁ ∈ antidiagonalTuple k (Prod.map Nat.succ id a).2
x₂ : Fin k → ℕ
hx₂ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id b).2
h₁₂ : b.1 = a.1 ∧ x₂ = x₁
⊢ False
state_after: case succ.right.succ.refine_2.intro.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2))
x₂ : Fin k → ℕ
hx₂ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id b).2
h₁₂ : b.1 = a.1
hx₁ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id a).2
⊢ False

tactic: rw [h₁₂] at h
state_before: case succ.right.succ.refine_2.intro.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2))
x₂ : Fin k → ℕ
hx₂ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id b).2
h₁₂ : b.1 = a.1
hx₁ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id a).2
⊢ False
state_after: case succ.right.succ.refine_2.intro.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k b.2))
x₂ : Fin k → ℕ
hx₂ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id b).2
h₁₂ : b.1 = a.1
hx₁ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id a).2
⊢ False

tactic: exact h (List.mem_map_of_mem _ hx₁) (List.mem_map_of_mem _ hx₂)
state_before: case succ.right.succ.refine_2.intro.intro.intro.intro.intro
k : ℕ
ih : ∀ (n : ℕ), (antidiagonalTuple k n).Nodup
n : ℕ
n_ih :
  Pairwise
    (fun a b =>
      (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
        (map (fun x => Fin.cons b.1 x) (antidiagonalTuple k b.2)))
    (antidiagonal n)
a b : ℕ × ℕ
h :
  (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k a.2)).Disjoint
    (map (fun x => Fin.cons a.1 x) (antidiagonalTuple k b.2))
x₂ : Fin k → ℕ
hx₂ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id b).2
h₁₂ : b.1 = a.1
hx₁ : x₂ ∈ antidiagonalTuple k (Prod.map Nat.succ id a).2
⊢ False
state_after: no goals