Theorem: HallMarriageTheorem.hall_cond_of_restrict
File: Mathlib/Combinatorics/Hall/Finite.lean

tactic: classical
  rw [← card_image_of_injective s' Subtype.coe_injective]
  convert ht (s'.image fun z => z.1) using 1
  apply congr_arg
  ext y
  simp
state_before: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑↑s
⊢ s'.card ≤ (s'.biUnion fun a' => t ↑a').card
state_after: no goals

tactic: rw [← card_image_of_injective s' Subtype.coe_injective]
state_before: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑↑s
⊢ s'.card ≤ (s'.biUnion fun a' => t ↑a').card
state_after: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑↑s
⊢ (image (fun a => ↑a) s').card ≤ (s'.biUnion fun a' => t ↑a').card

tactic: convert ht (s'.image fun z => z.1) using 1
state_before: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑↑s
⊢ (image (fun a => ↑a) s').card ≤ (s'.biUnion fun a' => t ↑a').card
state_after: case h.e'_4
ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑↑s
⊢ (s'.biUnion fun a' => t ↑a').card = ((image (fun z => ↑z) s').biUnion t).card

tactic: apply congr_arg
state_before: case h.e'_4
ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑↑s
⊢ (s'.biUnion fun a' => t ↑a').card = ((image (fun z => ↑z) s').biUnion t).card
state_after: case h.e'_4.h
ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑↑s
⊢ (s'.biUnion fun a' => t ↑a') = (image (fun z => ↑z) s').biUnion t

tactic: ext y
state_before: case h.e'_4.h
ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑↑s
⊢ (s'.biUnion fun a' => t ↑a') = (image (fun z => ↑z) s').biUnion t
state_after: case h.e'_4.h.a
ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑↑s
y : α
⊢ (y ∈ s'.biUnion fun a' => t ↑a') ↔ y ∈ (image (fun z => ↑z) s').biUnion t

tactic: simp
state_before: case h.e'_4.h.a
ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑↑s
y : α
⊢ (y ∈ s'.biUnion fun a' => t ↑a') ↔ y ∈ (image (fun z => ↑z) s').biUnion t
state_after: no goals