Theorem: Behrend.map_injOn
File: Mathlib/Combinatorics/Additive/Behrend.lean

tactic: intro x₁ hx₁ x₂ hx₂ h
state_before: α : Type ?u.385070
β : Type ?u.385073
n d k N : ℕ
x : Fin n → ℕ
⊢ Set.InjOn ↑(map d) {x | ∀ (i : Fin n), x i < d}

tactic: induction' n with n ih
state_before: α : Type ?u.385070
β : Type ?u.385073
n d k N : ℕ
x x₁ : Fin n → ℕ
hx₁ : x₁ ∈ {x | ∀ (i : Fin n), x i < d}
x₂ : Fin n → ℕ
hx₂ : x₂ ∈ {x | ∀ (i : Fin n), x i < d}
h : ↑(map d) x₁ = ↑(map d) x₂
⊢ x₁ = x₂

tactic: rw [forall_const] at ih
state_before: case succ
α : Type ?u.385070
β : Type ?u.385073
n✝ d k N : ℕ
x✝ x₁✝ : Fin n✝ → ℕ
hx₁✝ : x₁✝ ∈ {x | ∀ (i : Fin n✝), x i < d}
x₂✝ : Fin n✝ → ℕ
hx₂✝ : x₂✝ ∈ {x | ∀ (i : Fin n✝), x i < d}
h✝ : ↑(map d) x₁✝ = ↑(map d) x₂✝
n : ℕ
ih :
  ∀ {x : Fin n → ℕ} ⦃x₁ : Fin n → ℕ⦄,
    x₁ ∈ {x | ∀ (i : Fin n), x i < d} →
      ∀ ⦃x₂ : Fin n → ℕ⦄, x₂ ∈ {x | ∀ (i : Fin n), x i < d} → ↑(map d) x₁ = ↑(map d) x₂ → x₁ = x₂
x x₁ : Fin (succ n) → ℕ
hx₁ : x₁ ∈ {x | ∀ (i : Fin (succ n)), x i < d}
x₂ : Fin (succ n) → ℕ
hx₂ : x₂ ∈ {x | ∀ (i : Fin (succ n)), x i < d}
h : ↑(map d) x₁ = ↑(map d) x₂
⊢ x₁ = x₂

tactic: ext i
state_before: case succ
α : Type ?u.385070
β : Type ?u.385073
n✝ d k N : ℕ
x✝ x₁✝ : Fin n✝ → ℕ
hx₁✝ : x₁✝ ∈ {x | ∀ (i : Fin n✝), x i < d}
x₂✝ : Fin n✝ → ℕ
hx₂✝ : x₂✝ ∈ {x | ∀ (i : Fin n✝), x i < d}
h✝ : ↑(map d) x₁✝ = ↑(map d) x₂✝
n : ℕ
ih :
  ∀ ⦃x₁ : Fin n → ℕ⦄,
    x₁ ∈ {x | ∀ (i : Fin n), x i < d} →
      ∀ ⦃x₂ : Fin n → ℕ⦄, x₂ ∈ {x | ∀ (i : Fin n), x i < d} → ↑(map d) x₁ = ↑(map d) x₂ → x₁ = x₂
x x₁ : Fin (succ n) → ℕ
hx₁ : x₁ ∈ {x | ∀ (i : Fin (succ n)), x i < d}
x₂ : Fin (succ n) → ℕ
hx₂ : x₂ ∈ {x | ∀ (i : Fin (succ n)), x i < d}
h : ↑(map d) x₁ = ↑(map d) x₂
⊢ x₁ = x₂

tactic: have x := (map_eq_iff hx₁ hx₂).1 h
state_before: case succ.h
α : Type ?u.385070
β : Type ?u.385073
n✝ d k N : ℕ
x✝ x₁✝ : Fin n✝ → ℕ
hx₁✝ : x₁✝ ∈ {x | ∀ (i : Fin n✝), x i < d}
x₂✝ : Fin n✝ → ℕ
hx₂✝ : x₂✝ ∈ {x | ∀ (i : Fin n✝), x i < d}
h✝ : ↑(map d) x₁✝ = ↑(map d) x₂✝
n : ℕ
ih :
  ∀ ⦃x₁ : Fin n → ℕ⦄,
    x₁ ∈ {x | ∀ (i : Fin n), x i < d} →
      ∀ ⦃x₂ : Fin n → ℕ⦄, x₂ ∈ {x | ∀ (i : Fin n), x i < d} → ↑(map d) x₁ = ↑(map d) x₂ → x₁ = x₂
x x₁ : Fin (succ n) → ℕ
hx₁ : x₁ ∈ {x | ∀ (i : Fin (succ n)), x i < d}
x₂ : Fin (succ n) → ℕ
hx₂ : x₂ ∈ {x | ∀ (i : Fin (succ n)), x i < d}
h : ↑(map d) x₁ = ↑(map d) x₂
i : Fin (succ n)
⊢ x₁ i = x₂ i

tactic: refine' Fin.cases x.1 (congr_fun <| ih (fun _ => _) (fun _ => _) x.2) i
state_before: case succ.h
α : Type ?u.385070
β : Type ?u.385073
n✝ d k N : ℕ
x✝¹ x₁✝ : Fin n✝ → ℕ
hx₁✝ : x₁✝ ∈ {x | ∀ (i : Fin n✝), x i < d}
x₂✝ : Fin n✝ → ℕ
hx₂✝ : x₂✝ ∈ {x | ∀ (i : Fin n✝), x i < d}
h✝ : ↑(map d) x₁✝ = ↑(map d) x₂✝
n : ℕ
ih :
  ∀ ⦃x₁ : Fin n → ℕ⦄,
    x₁ ∈ {x | ∀ (i : Fin n), x i < d} →
      ∀ ⦃x₂ : Fin n → ℕ⦄, x₂ ∈ {x | ∀ (i : Fin n), x i < d} → ↑(map d) x₁ = ↑(map d) x₂ → x₁ = x₂
x✝ x₁ : Fin (succ n) → ℕ
hx₁ : x₁ ∈ {x | ∀ (i : Fin (succ n)), x i < d}
x₂ : Fin (succ n) → ℕ
hx₂ : x₂ ∈ {x | ∀ (i : Fin (succ n)), x i < d}
h : ↑(map d) x₁ = ↑(map d) x₂
i : Fin (succ n)
x : x₁ 0 = x₂ 0 ∧ ↑(map d) ((fun i => x₁ i) ∘ Fin.succ) = ↑(map d) ((fun i => x₂ i) ∘ Fin.succ)
⊢ x₁ i = x₂ i

tactic: simp
state_before: case zero
α : Type ?u.385070
β : Type ?u.385073
n d k N : ℕ
x✝ x₁✝ : Fin n → ℕ
hx₁✝ : x₁✝ ∈ {x | ∀ (i : Fin n), x i < d}
x₂✝ : Fin n → ℕ
hx₂✝ : x₂✝ ∈ {x | ∀ (i : Fin n), x i < d}
h✝ : ↑(map d) x₁✝ = ↑(map d) x₂✝
x x₁ : Fin zero → ℕ
hx₁ : x₁ ∈ {x | ∀ (i : Fin zero), x i < d}
x₂ : Fin zero → ℕ
hx₂ : x₂ ∈ {x | ∀ (i : Fin zero), x i < d}
h : ↑(map d) x₁ = ↑(map d) x₂
⊢ x₁ = x₂

tactic: exact hx₁ _
state_before: case succ.h.refine'_1
α : Type ?u.385070
β : Type ?u.385073
n✝ d k N : ℕ
x✝² x₁✝ : Fin n✝ → ℕ
hx₁✝ : x₁✝ ∈ {x | ∀ (i : Fin n✝), x i < d}
x₂✝ : Fin n✝ → ℕ
hx₂✝ : x₂✝ ∈ {x | ∀ (i : Fin n✝), x i < d}
h✝ : ↑(map d) x₁✝ = ↑(map d) x₂✝
n : ℕ
ih :
  ∀ ⦃x₁ : Fin n → ℕ⦄,
    x₁ ∈ {x | ∀ (i : Fin n), x i < d} →
      ∀ ⦃x₂ : Fin n → ℕ⦄, x₂ ∈ {x | ∀ (i : Fin n), x i < d} → ↑(map d) x₁ = ↑(map d) x₂ → x₁ = x₂
x✝¹ x₁ : Fin (succ n) → ℕ
hx₁ : x₁ ∈ {x | ∀ (i : Fin (succ n)), x i < d}
x₂ : Fin (succ n) → ℕ
hx₂ : x₂ ∈ {x | ∀ (i : Fin (succ n)), x i < d}
h : ↑(map d) x₁ = ↑(map d) x₂
i : Fin (succ n)
x : x₁ 0 = x₂ 0 ∧ ↑(map d) ((fun i => x₁ i) ∘ Fin.succ) = ↑(map d) ((fun i => x₂ i) ∘ Fin.succ)
x✝ : Fin n
⊢ x₁ (Fin.succ x✝) < d

tactic: exact hx₂ _
state_before: case succ.h.refine'_2
α : Type ?u.385070
β : Type ?u.385073
n✝ d k N : ℕ
x✝² x₁✝ : Fin n✝ → ℕ
hx₁✝ : x₁✝ ∈ {x | ∀ (i : Fin n✝), x i < d}
x₂✝ : Fin n✝ → ℕ
hx₂✝ : x₂✝ ∈ {x | ∀ (i : Fin n✝), x i < d}
h✝ : ↑(map d) x₁✝ = ↑(map d) x₂✝
n : ℕ
ih :
  ∀ ⦃x₁ : Fin n → ℕ⦄,
    x₁ ∈ {x | ∀ (i : Fin n), x i < d} →
      ∀ ⦃x₂ : Fin n → ℕ⦄, x₂ ∈ {x | ∀ (i : Fin n), x i < d} → ↑(map d) x₁ = ↑(map d) x₂ → x₁ = x₂
x✝¹ x₁ : Fin (succ n) → ℕ
hx₁ : x₁ ∈ {x | ∀ (i : Fin (succ n)), x i < d}
x₂ : Fin (succ n) → ℕ
hx₂ : x₂ ∈ {x | ∀ (i : Fin (succ n)), x i < d}
h : ↑(map d) x₁ = ↑(map d) x₂
i : Fin (succ n)
x : x₁ 0 = x₂ 0 ∧ ↑(map d) ((fun i => x₁ i) ∘ Fin.succ) = ↑(map d) ((fun i => x₂ i) ∘ Fin.succ)
x✝ : Fin n
⊢ x₂ (Fin.succ x✝) < d