Theorem: Finset.card_le_card_of_forall_subsingleton
File: Mathlib/Combinatorics/Enumerative/DoubleCounting.lean

tactic: classical
  rw [← mul_one s.card, ← mul_one t.card]
  exact card_mul_le_card_mul r
    (fun a h ↦ card_pos.2 (by
      rw [← coe_nonempty, coe_bipartiteAbove]
      exact hs _ h : (t.bipartiteAbove r a).Nonempty))
    (fun b h ↦ card_le_one.2 (by
      simp_rw [mem_bipartiteBelow]
      exact ht _ h))
state_before: α : Type u_1
β : Type u_2
r : α → β → Prop
s : Finset α
t : Finset β
a a' : α
b b' : β
inst✝¹ : DecidablePred (r a)
inst✝ : (a : α) → Decidable (r a b)
m n : ℕ
hs : ∀ a ∈ s, ∃ b ∈ t, r a b
ht : ∀ b ∈ t, {a | a ∈ s ∧ r a b}.Subsingleton
⊢ s.card ≤ t.card
state_after: no goals

tactic: rw [← mul_one s.card, ← mul_one t.card]
state_before: α : Type u_1
β : Type u_2
r : α → β → Prop
s : Finset α
t : Finset β
a a' : α
b b' : β
inst✝¹ : DecidablePred (r a)
inst✝ : (a : α) → Decidable (r a b)
m n : ℕ
hs : ∀ a ∈ s, ∃ b ∈ t, r a b
ht : ∀ b ∈ t, {a | a ∈ s ∧ r a b}.Subsingleton
⊢ s.card ≤ t.card
state_after: α : Type u_1
β : Type u_2
r : α → β → Prop
s : Finset α
t : Finset β
a a' : α
b b' : β
inst✝¹ : DecidablePred (r a)
inst✝ : (a : α) → Decidable (r a b)
m n : ℕ
hs : ∀ a ∈ s, ∃ b ∈ t, r a b
ht : ∀ b ∈ t, {a | a ∈ s ∧ r a b}.Subsingleton
⊢ s.card * 1 ≤ t.card * 1

tactic: exact card_mul_le_card_mul r
  (fun a h ↦ card_pos.2 (by
    rw [← coe_nonempty, coe_bipartiteAbove]
    exact hs _ h : (t.bipartiteAbove r a).Nonempty))
  (fun b h ↦ card_le_one.2 (by
    simp_rw [mem_bipartiteBelow]
    exact ht _ h))
state_before: α : Type u_1
β : Type u_2
r : α → β → Prop
s : Finset α
t : Finset β
a a' : α
b b' : β
inst✝¹ : DecidablePred (r a)
inst✝ : (a : α) → Decidable (r a b)
m n : ℕ
hs : ∀ a ∈ s, ∃ b ∈ t, r a b
ht : ∀ b ∈ t, {a | a ∈ s ∧ r a b}.Subsingleton
⊢ s.card * 1 ≤ t.card * 1
state_after: no goals

tactic: rw [← coe_nonempty, coe_bipartiteAbove]
state_before: α : Type u_1
β : Type u_2
r : α → β → Prop
s : Finset α
t : Finset β
a✝ a' : α
b b' : β
inst✝¹ : DecidablePred (r a✝)
inst✝ : (a : α) → Decidable (r a b)
m n : ℕ
hs : ∀ a ∈ s, ∃ b ∈ t, r a b
ht : ∀ b ∈ t, {a | a ∈ s ∧ r a b}.Subsingleton
a : α
h : a ∈ s
⊢ (bipartiteAbove r t a).Nonempty
state_after: α : Type u_1
β : Type u_2
r : α → β → Prop
s : Finset α
t : Finset β
a✝ a' : α
b b' : β
inst✝¹ : DecidablePred (r a✝)
inst✝ : (a : α) → Decidable (r a b)
m n : ℕ
hs : ∀ a ∈ s, ∃ b ∈ t, r a b
ht : ∀ b ∈ t, {a | a ∈ s ∧ r a b}.Subsingleton
a : α
h : a ∈ s
⊢ {b | b ∈ t ∧ r a b}.Nonempty

tactic: exact hs _ h
state_before: α : Type u_1
β : Type u_2
r : α → β → Prop
s : Finset α
t : Finset β
a✝ a' : α
b b' : β
inst✝¹ : DecidablePred (r a✝)
inst✝ : (a : α) → Decidable (r a b)
m n : ℕ
hs : ∀ a ∈ s, ∃ b ∈ t, r a b
ht : ∀ b ∈ t, {a | a ∈ s ∧ r a b}.Subsingleton
a : α
h : a ∈ s
⊢ {b | b ∈ t ∧ r a b}.Nonempty
state_after: no goals

tactic: simp_rw [mem_bipartiteBelow]
state_before: α : Type u_1
β : Type u_2
r : α → β → Prop
s : Finset α
t : Finset β
a a' : α
b✝ b' : β
inst✝¹ : DecidablePred (r a)
inst✝ : (a : α) → Decidable (r a b✝)
m n : ℕ
hs : ∀ a ∈ s, ∃ b ∈ t, r a b
ht : ∀ b ∈ t, {a | a ∈ s ∧ r a b}.Subsingleton
b : β
h : b ∈ t
⊢ ∀ a ∈ bipartiteBelow r s b, ∀ b_1 ∈ bipartiteBelow r s b, a = b_1
state_after: α : Type u_1
β : Type u_2
r : α → β → Prop
s : Finset α
t : Finset β
a a' : α
b✝ b' : β
inst✝¹ : DecidablePred (r a)
inst✝ : (a : α) → Decidable (r a b✝)
m n : ℕ
hs : ∀ a ∈ s, ∃ b ∈ t, r a b
ht : ∀ b ∈ t, {a | a ∈ s ∧ r a b}.Subsingleton
b : β
h : b ∈ t
⊢ ∀ (a : α), a ∈ s ∧ r a b → ∀ (b_1 : α), b_1 ∈ s ∧ r b_1 b → a = b_1

tactic: exact ht _ h
state_before: α : Type u_1
β : Type u_2
r : α → β → Prop
s : Finset α
t : Finset β
a a' : α
b✝ b' : β
inst✝¹ : DecidablePred (r a)
inst✝ : (a : α) → Decidable (r a b✝)
m n : ℕ
hs : ∀ a ∈ s, ∃ b ∈ t, r a b
ht : ∀ b ∈ t, {a | a ∈ s ∧ r a b}.Subsingleton
b : β
h : b ∈ t
⊢ ∀ (a : α), a ∈ s ∧ r a b → ∀ (b_1 : α), b_1 ∈ s ∧ r b_1 b → a = b_1
state_after: no goals