Theorem: Combinatorics.Subspace.exists_mono_in_high_dimension_fin
File: Mathlib/Combinatorics/HalesJewett.lean

Proof steps:
state_before: η✝ : Type u_1
α✝ : Type u_2
ι : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
⊢ ∃ n, ∀ (C : (Fin n → α) → κ), ∃ l, IsMono C l
state_after: case intro.intro
η✝ : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
ι : Type
ιfin : Fintype ι
hι : ∀ (C : (ι → α) → κ), ∃ l, IsMono C l
⊢ ∃ n, ∀ (C : (Fin n → α) → κ), ∃ l, IsMono C l
tactic: obtain ⟨ι, ιfin, hι⟩ := exists_mono_in_high_dimension α κ η
state_before: case intro.intro
η✝ : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
ι : Type
ιfin : Fintype ι
hι : ∀ (C : (ι → α) → κ), ∃ l, IsMono C l
⊢ ∃ n, ∀ (C : (Fin n → α) → κ), ∃ l, IsMono C l
state_after: case intro.intro
η✝ : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
ι : Type
ιfin : Fintype ι
hι : ∀ (C : (ι → α) → κ), ∃ l, IsMono C l
C : (Fin (Fintype.card ι) → α) → κ
⊢ ∃ l, IsMono C l
tactic: refine ⟨Fintype.card ι, fun C ↦ ?_⟩
state_before: case intro.intro
η✝ : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
ι : Type
ιfin : Fintype ι
hι : ∀ (C : (ι → α) → κ), ∃ l, IsMono C l
C : (Fin (Fintype.card ι) → α) → κ
⊢ ∃ l, IsMono C l
state_after: case intro.intro.intro.intro
η✝ : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
ι : Type
ιfin : Fintype ι
hι : ∀ (C : (ι → α) → κ), ∃ l, IsMono C l
C : (Fin (Fintype.card ι) → α) → κ
l : Subspace η α ι
c : κ
cl : ∀ (x : η → α), (fun v => C (v ∘ ⇑(Fintype.equivFin ι).symm)) (↑l x) = c
⊢ ∃ l, IsMono C l
tactic: obtain ⟨l, c, cl⟩ := hι fun v ↦ C (v ∘ (Fintype.equivFin _).symm)
state_before: case intro.intro.intro.intro
η✝ : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
ι : Type
ιfin : Fintype ι
hι : ∀ (C : (ι → α) → κ), ∃ l, IsMono C l
C : (Fin (Fintype.card ι) → α) → κ
l : Subspace η α ι
c : κ
cl : ∀ (x : η → α), (fun v => C (v ∘ ⇑(Fintype.equivFin ι).symm)) (↑l x) = c
⊢ ∃ l, IsMono C l
state_after: case intro.intro.intro.intro
η✝ : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
ι : Type
ιfin : Fintype ι
hι : ∀ (C : (ι → α) → κ), ∃ l, IsMono C l
C : (Fin (Fintype.card ι) → α) → κ
l : Subspace η α ι
c : κ
cl : ∀ (x : η → α), (fun v => C (v ∘ ⇑(Fintype.equivFin ι).symm)) (↑l x) = c
e : η
⊢ ∃ i, (l.idxFun ∘ ⇑(Fintype.equivFin ι).symm) i = Sum.inr e
tactic: refine ⟨⟨l.idxFun ∘ (Fintype.equivFin _).symm, fun e ↦ ?_⟩, c, cl⟩
state_before: case intro.intro.intro.intro
η✝ : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
ι : Type
ιfin : Fintype ι
hι : ∀ (C : (ι → α) → κ), ∃ l, IsMono C l
C : (Fin (Fintype.card ι) → α) → κ
l : Subspace η α ι
c : κ
cl : ∀ (x : η → α), (fun v => C (v ∘ ⇑(Fintype.equivFin ι).symm)) (↑l x) = c
e : η
⊢ ∃ i, (l.idxFun ∘ ⇑(Fintype.equivFin ι).symm) i = Sum.inr e
state_after: case intro.intro.intro.intro.intro
η✝ : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
ι : Type
ιfin : Fintype ι
hι : ∀ (C : (ι → α) → κ), ∃ l, IsMono C l
C : (Fin (Fintype.card ι) → α) → κ
l : Subspace η α ι
c : κ
cl : ∀ (x : η → α), (fun v => C (v ∘ ⇑(Fintype.equivFin ι).symm)) (↑l x) = c
e : η
i : ι
hi : l.idxFun i = Sum.inr e
⊢ ∃ i, (l.idxFun ∘ ⇑(Fintype.equivFin ι).symm) i = Sum.inr e
tactic: obtain ⟨i, hi⟩ := l.proper e
state_before: case intro.intro.intro.intro.intro
η✝ : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
ι : Type
ιfin : Fintype ι
hι : ∀ (C : (ι → α) → κ), ∃ l, IsMono C l
C : (Fin (Fintype.card ι) → α) → κ
l : Subspace η α ι
c : κ
cl : ∀ (x : η → α), (fun v => C (v ∘ ⇑(Fintype.equivFin ι).symm)) (↑l x) = c
e : η
i : ι
hi : l.idxFun i = Sum.inr e
⊢ ∃ i, (l.idxFun ∘ ⇑(Fintype.equivFin ι).symm) i = Sum.inr e
state_after: case h
η✝ : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
ι : Type
ιfin : Fintype ι
hι : ∀ (C : (ι → α) → κ), ∃ l, IsMono C l
C : (Fin (Fintype.card ι) → α) → κ
l : Subspace η α ι
c : κ
cl : ∀ (x : η → α), (fun v => C (v ∘ ⇑(Fintype.equivFin ι).symm)) (↑l x) = c
e : η
i : ι
hi : l.idxFun i = Sum.inr e
⊢ (l.idxFun ∘ ⇑(Fintype.equivFin ι).symm) ((Fintype.equivFin ι) i) = Sum.inr e
tactic: use Fintype.equivFin _ i
state_before: case h
η✝ : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ✝ : Type u_4
α : Type u_5
κ : Type u_6
η : Type u_7
inst✝² : Finite α
inst✝¹ : Finite κ
inst✝ : Finite η
ι : Type
ιfin : Fintype ι
hι : ∀ (C : (ι → α) → κ), ∃ l, IsMono C l
C : (Fin (Fintype.card ι) → α) → κ
l : Subspace η α ι
c : κ
cl : ∀ (x : η → α), (fun v => C (v ∘ ⇑(Fintype.equivFin ι).symm)) (↑l x) = c
e : η
i : ι
hi : l.idxFun i = Sum.inr e
⊢ (l.idxFun ∘ ⇑(Fintype.equivFin ι).symm) ((Fintype.equivFin ι) i) = Sum.inr e
state_after: no goals
tactic: simpa using hi