Theorem: Set.surj_on_of_inj_on_of_ncard_le
File: Mathlib/Data/Set/Card.lean

tactic: intro b hb
state_before: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
⊢ ∀ b ∈ t, ∃ a, ∃ (ha : a ∈ s), b = f a ha
state_after: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
⊢ ∃ a, ∃ (ha : a ∈ s), b = f a ha

tactic: set f' : s → t := fun x ↦ ⟨f x.1 x.2, hf _ _⟩
state_before: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
⊢ ∃ a, ∃ (ha : a ∈ s), b = f a ha
state_after: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
⊢ ∃ a, ∃ (ha : a ∈ s), b = f a ha

tactic: have finj : f'.Injective := by
  rintro ⟨x, hx⟩ ⟨y, hy⟩ hxy
  simp only [f', Subtype.mk.injEq] at hxy ⊢
  apply hinj _ _ hx hy hxy
state_before: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
⊢ ∃ a, ∃ (ha : a ∈ s), b = f a ha
state_after: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
⊢ ∃ a, ∃ (ha : a ∈ s), b = f a ha

tactic: have hft := ht.fintype
state_before: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
⊢ ∃ a, ∃ (ha : a ∈ s), b = f a ha
state_after: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
⊢ ∃ a, ∃ (ha : a ∈ s), b = f a ha

tactic: have hft' := Fintype.ofInjective f' finj
state_before: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
⊢ ∃ a, ∃ (ha : a ∈ s), b = f a ha
state_after: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
⊢ ∃ a, ∃ (ha : a ∈ s), b = f a ha

tactic: set f'' : ∀ a, a ∈ s.toFinset → β := fun a h ↦ f a (by simpa using h)
state_before: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
⊢ ∃ a, ∃ (ha : a ∈ s), b = f a ha
state_after: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
⊢ ∃ a, ∃ (ha : a ∈ s), b = f a ha

tactic: convert @Finset.surj_on_of_inj_on_of_card_le _ _ _ t.toFinset f'' _ _ _ _ (by simpa)
state_before: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
⊢ ∃ a, ∃ (ha : a ∈ s), b = f a ha
state_after: case h.e'_2.h.h.e'_1.a
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
x✝ : α
⊢ x✝ ∈ s ↔ x✝ ∈ s.toFinset

case convert_1
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
⊢ ∀ (a : α) (ha : a ∈ s.toFinset), f'' a ha ∈ t.toFinset

case convert_2
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
⊢ ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s.toFinset) (ha₂ : a₂ ∈ s.toFinset), f'' a₁ ha₁ = f'' a₂ ha₂ → a₁ = a₂

case convert_3
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
⊢ t.toFinset.card ≤ s.toFinset.card

tactic: rwa [← ncard_eq_toFinset_card', ← ncard_eq_toFinset_card']
state_before: case convert_3
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
⊢ t.toFinset.card ≤ s.toFinset.card
state_after: no goals

tactic: rintro ⟨x, hx⟩ ⟨y, hy⟩ hxy
state_before: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
⊢ Function.Injective f'
state_after: case mk.mk
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : f' ⟨x, hx⟩ = f' ⟨y, hy⟩
⊢ ⟨x, hx⟩ = ⟨y, hy⟩

tactic: simp only [f', Subtype.mk.injEq] at hxy ⊢
state_before: case mk.mk
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : f' ⟨x, hx⟩ = f' ⟨y, hy⟩
⊢ ⟨x, hx⟩ = ⟨y, hy⟩
state_after: case mk.mk
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : f x ⋯ = f y ⋯
⊢ x = y

tactic: apply hinj _ _ hx hy hxy
state_before: case mk.mk
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
x : α
hx : x ∈ s
y : α
hy : y ∈ s
hxy : f x ⋯ = f y ⋯
⊢ x = y
state_after: no goals

tactic: simpa using h
state_before: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
a : α
h : a ∈ s.toFinset
⊢ a ∈ s
state_after: no goals

tactic: simpa
state_before: α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
⊢ ?m.177975 ∈ t.toFinset
state_after: no goals

tactic: simp
state_before: case h.e'_2.h.h.e'_1.a
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
x✝ : α
⊢ x✝ ∈ s ↔ x✝ ∈ s.toFinset
state_after: no goals

tactic: simp [hf]
state_before: case convert_1
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
⊢ ∀ (a : α) (ha : a ∈ s.toFinset), f'' a ha ∈ t.toFinset
state_after: no goals

tactic: intros a₁ a₂ ha₁ ha₂ h
state_before: case convert_2
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
⊢ ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s.toFinset) (ha₂ : a₂ ∈ s.toFinset), f'' a₁ ha₁ = f'' a₂ ha₂ → a₁ = a₂
state_after: case convert_2
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
a₁ a₂ : α
ha₁ : a₁ ∈ s.toFinset
ha₂ : a₂ ∈ s.toFinset
h : f'' a₁ ha₁ = f'' a₂ ha₂
⊢ a₁ = a₂

tactic: rw [mem_toFinset] at ha₁ ha₂
state_before: case convert_2
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
a₁ a₂ : α
ha₁ : a₁ ∈ s.toFinset
ha₂ : a₂ ∈ s.toFinset
h : f'' a₁ ha₁ = f'' a₂ ha₂
⊢ a₁ = a₂
state_after: case convert_2
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
a₁ a₂ : α
ha₁✝ : a₁ ∈ s.toFinset
ha₁ : a₁ ∈ s
ha₂✝ : a₂ ∈ s.toFinset
ha₂ : a₂ ∈ s
h : f'' a₁ ha₁✝ = f'' a₂ ha₂✝
⊢ a₁ = a₂

tactic: exact hinj _ _ ha₁ ha₂ h
state_before: case convert_2
α : Type u_1
β : Type u_2
s t✝ : Set α
f✝ : α → β
t : Set β
f : (a : α) → a ∈ s → β
hf : ∀ (a : α) (ha : a ∈ s), f a ha ∈ t
hinj : ∀ (a₁ a₂ : α) (ha₁ : a₁ ∈ s) (ha₂ : a₂ ∈ s), f a₁ ha₁ = f a₂ ha₂ → a₁ = a₂
hst : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
b : β
hb : b ∈ t
f' : ↑s → ↑t := fun x => ⟨f ↑x ⋯, ⋯⟩
finj : Function.Injective f'
hft : Fintype ↑t
hft' : Fintype ↑s
f'' : (a : α) → a ∈ s.toFinset → β := fun a h => f a ⋯
a₁ a₂ : α
ha₁✝ : a₁ ∈ s.toFinset
ha₁ : a₁ ∈ s
ha₂✝ : a₂ ∈ s.toFinset
ha₂ : a₂ ∈ s
h : f'' a₁ ha₁✝ = f'' a₂ ha₂✝
⊢ a₁ = a₂
state_after: no goals