Theorem: Set.MapsTo.exists_equiv_extend_of_card_eq
File: Mathlib/Data/Fintype/Sum.lean

tactic: classical
  let s' : Finset α := s.toFinset
  have hfst' : s'.image f ⊆ t := by simpa [← Finset.coe_subset] using hfst
  have hfs' : Set.InjOn f s' := by simpa using hfs
  obtain ⟨g, hg⟩ := Finset.exists_equiv_extend_of_card_eq hαt hfst' hfs'
  refine' ⟨g, fun i hi => _⟩
  apply hg
  simpa using hi
state_before: α : Type u_1
β : Type u_2
inst✝ : Fintype α
t : Finset β
hαt : Fintype.card α = card t
s : Set α
f : α → β
hfst : MapsTo f s ↑t
hfs : InjOn f s
⊢ ∃ g, ∀ (i : α), i ∈ s → ↑(↑g i) = f i

tactic: let s' : Finset α := s.toFinset
state_before: α : Type u_1
β : Type u_2
inst✝ : Fintype α
t : Finset β
hαt : Fintype.card α = card t
s : Set α
f : α → β
hfst : MapsTo f s ↑t
hfs : InjOn f s
⊢ ∃ g, ∀ (i : α), i ∈ s → ↑(↑g i) = f i

tactic: have hfst' : s'.image f ⊆ t := by simpa [← Finset.coe_subset] using hfst
state_before: α : Type u_1
β : Type u_2
inst✝ : Fintype α
t : Finset β
hαt : Fintype.card α = card t
s : Set α
f : α → β
hfst : MapsTo f s ↑t
hfs : InjOn f s
s' : Finset α := toFinset s
⊢ ∃ g, ∀ (i : α), i ∈ s → ↑(↑g i) = f i

tactic: have hfs' : Set.InjOn f s' := by simpa using hfs
state_before: α : Type u_1
β : Type u_2
inst✝ : Fintype α
t : Finset β
hαt : Fintype.card α = card t
s : Set α
f : α → β
hfst : MapsTo f s ↑t
hfs : InjOn f s
s' : Finset α := toFinset s
hfst' : Finset.image f s' ⊆ t
⊢ ∃ g, ∀ (i : α), i ∈ s → ↑(↑g i) = f i

tactic: obtain ⟨g, hg⟩ := Finset.exists_equiv_extend_of_card_eq hαt hfst' hfs'
state_before: α : Type u_1
β : Type u_2
inst✝ : Fintype α
t : Finset β
hαt : Fintype.card α = card t
s : Set α
f : α → β
hfst : MapsTo f s ↑t
hfs : InjOn f s
s' : Finset α := toFinset s
hfst' : Finset.image f s' ⊆ t
hfs' : InjOn f ↑s'
⊢ ∃ g, ∀ (i : α), i ∈ s → ↑(↑g i) = f i

tactic: refine' ⟨g, fun i hi => _⟩
state_before: case intro
α : Type u_1
β : Type u_2
inst✝ : Fintype α
t : Finset β
hαt : Fintype.card α = card t
s : Set α
f : α → β
hfst : MapsTo f s ↑t
hfs : InjOn f s
s' : Finset α := toFinset s
hfst' : Finset.image f s' ⊆ t
hfs' : InjOn f ↑s'
g : α ≃ { x // x ∈ t }
hg : ∀ (i : α), i ∈ s' → ↑(↑g i) = f i
⊢ ∃ g, ∀ (i : α), i ∈ s → ↑(↑g i) = f i

tactic: apply hg
state_before: case intro
α : Type u_1
β : Type u_2
inst✝ : Fintype α
t : Finset β
hαt : Fintype.card α = card t
s : Set α
f : α → β
hfst : MapsTo f s ↑t
hfs : InjOn f s
s' : Finset α := toFinset s
hfst' : Finset.image f s' ⊆ t
hfs' : InjOn f ↑s'
g : α ≃ { x // x ∈ t }
hg : ∀ (i : α), i ∈ s' → ↑(↑g i) = f i
i : α
hi : i ∈ s
⊢ ↑(↑g i) = f i

tactic: simpa using hi
state_before: case intro.a
α : Type u_1
β : Type u_2
inst✝ : Fintype α
t : Finset β
hαt : Fintype.card α = card t
s : Set α
f : α → β
hfst : MapsTo f s ↑t
hfs : InjOn f s
s' : Finset α := toFinset s
hfst' : Finset.image f s' ⊆ t
hfs' : InjOn f ↑s'
g : α ≃ { x // x ∈ t }
hg : ∀ (i : α), i ∈ s' → ↑(↑g i) = f i
i : α
hi : i ∈ s
⊢ i ∈ s'

tactic: simpa [← Finset.coe_subset] using hfst
state_before: α : Type u_1
β : Type u_2
inst✝ : Fintype α
t : Finset β
hαt : Fintype.card α = card t
s : Set α
f : α → β
hfst : MapsTo f s ↑t
hfs : InjOn f s
s' : Finset α := toFinset s
⊢ Finset.image f s' ⊆ t

tactic: simpa using hfs
state_before: α : Type u_1
β : Type u_2
inst✝ : Fintype α
t : Finset β
hαt : Fintype.card α = card t
s : Set α
f : α → β
hfst : MapsTo f s ↑t
hfs : InjOn f s
s' : Finset α := toFinset s
hfst' : Finset.image f s' ⊆ t
⊢ InjOn f ↑s'