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

Proof steps:
state_before: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
⊢ s'.card ≤ (s'.biUnion fun x' => t ↑x' \ s.biUnion t).card
state_after: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
this : DecidableEq ι
⊢ s'.card ≤ (s'.biUnion fun x' => t ↑x' \ s.biUnion t).card
tactic: haveI := Classical.decEq ι
state_before: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
this : DecidableEq ι
⊢ s'.card ≤ (s'.biUnion fun x' => t ↑x' \ s.biUnion t).card
state_after: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
this : DecidableEq ι
disj : Disjoint s (image (fun z => ↑z) s')
⊢ s'.card ≤ (s'.biUnion fun x' => t ↑x' \ s.biUnion t).card
tactic: have disj : Disjoint s (s'.image fun z => z.1) := by
    simp only [disjoint_left, not_exists, mem_image, exists_prop, SetCoe.exists, exists_and_right,
      exists_eq_right, Subtype.coe_mk]
    intro x hx hc _
    exact absurd hx hc
state_before: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
this : DecidableEq ι
disj : Disjoint s (image (fun z => ↑z) s')
⊢ s'.card ≤ (s'.biUnion fun x' => t ↑x' \ s.biUnion t).card
state_after: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
this✝ : DecidableEq ι
disj : Disjoint s (image (fun z => ↑z) s')
this : s'.card = (s ∪ image (fun z => ↑z) s').card - s.card
⊢ s'.card ≤ (s'.biUnion fun x' => t ↑x' \ s.biUnion t).card
tactic: have : s'.card = (s ∪ s'.image fun z => z.1).card - s.card := by
    simp [disj, card_image_of_injective _ Subtype.coe_injective, Nat.add_sub_cancel_left]
state_before: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
this✝ : DecidableEq ι
disj : Disjoint s (image (fun z => ↑z) s')
this : s'.card = (s ∪ image (fun z => ↑z) s').card - s.card
⊢ s'.card ≤ (s'.biUnion fun x' => t ↑x' \ s.biUnion t).card
state_after: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
this✝ : DecidableEq ι
disj : Disjoint s (image (fun z => ↑z) s')
this : s'.card = (s ∪ image (fun z => ↑z) s').card - s.card
⊢ (s ∪ image (fun z => ↑z) s').card - (s.biUnion t).card ≤ (s'.biUnion fun x' => t ↑x' \ s.biUnion t).card
tactic: rw [this, hus]
state_before: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
this✝ : DecidableEq ι
disj : Disjoint s (image (fun z => ↑z) s')
this : s'.card = (s ∪ image (fun z => ↑z) s').card - s.card
⊢ (s ∪ image (fun z => ↑z) s').card - (s.biUnion t).card ≤ (s'.biUnion fun x' => t ↑x' \ s.biUnion t).card
state_after: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
this✝ : DecidableEq ι
disj : Disjoint s (image (fun z => ↑z) s')
this : s'.card = (s ∪ image (fun z => ↑z) s').card - s.card
⊢ ((s ∪ image (fun z => ↑z) s').biUnion t).card - (s.biUnion t).card ≤ (s'.biUnion fun x' => t ↑x' \ s.biUnion t).card
tactic: refine (Nat.sub_le_sub_right (ht _) _).trans ?_
state_before: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
this✝ : DecidableEq ι
disj : Disjoint s (image (fun z => ↑z) s')
this : s'.card = (s ∪ image (fun z => ↑z) s').card - s.card
⊢ ((s ∪ image (fun z => ↑z) s').biUnion t).card - (s.biUnion t).card ≤ (s'.biUnion fun x' => t ↑x' \ s.biUnion t).card
state_after: ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
this✝ : DecidableEq ι
disj : Disjoint s (image (fun z => ↑z) s')
this : s'.card = (s ∪ image (fun z => ↑z) s').card - s.card
⊢ ((s ∪ image (fun z => ↑z) s').biUnion t \ s.biUnion t).card ≤ (s'.biUnion fun x' => t ↑x' \ s.biUnion t).card

ι✝ : Type u
α : Type v
inst✝¹ : DecidableEq α
t✝ : ι✝ → Finset α
inst✝ : Fintype ι✝
ι : Type u
t : ι → Finset α
s : Finset ι
hus : s.card = (s.biUnion t).card
ht : ∀ (s : Finset ι), s.card ≤ (s.biUnion t).card
s' : Finset ↑(↑s)ᶜ
this✝ : DecidableEq ι
disj : Disjoint s (image (fun z => ↑z) s')
this : s'.card = (s ∪ image (fun z => ↑z) s').card - s.card
⊢ s.biUnion t ⊆ (s ∪ image (fun z => ↑z) s').biUnion t
tactic: rw [← card_sdiff]