Theorem: uniqueMul_of_twoUniqueMul
File: Mathlib/Algebra/Group/UniqueProds.lean

tactic: by_cases hc : A.card ≤ 1 ∧ B.card ≤ 1
state_before: G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : A.Nonempty
hB : B.Nonempty
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b
state_after: case pos
G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : A.Nonempty
hB : B.Nonempty
hc : A.card ≤ 1 ∧ B.card ≤ 1
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b

case neg
G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : A.Nonempty
hB : B.Nonempty
hc : ¬(A.card ≤ 1 ∧ B.card ≤ 1)
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b

tactic: simp_rw [not_and_or, not_le] at hc
state_before: case neg
G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : A.Nonempty
hB : B.Nonempty
hc : ¬(A.card ≤ 1 ∧ B.card ≤ 1)
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b
state_after: case neg
G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : A.Nonempty
hB : B.Nonempty
hc : 1 < A.card ∨ 1 < B.card
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b

tactic: rw [← Finset.card_pos] at hA hB
state_before: case neg
G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : A.Nonempty
hB : B.Nonempty
hc : 1 < A.card ∨ 1 < B.card
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b
state_after: case neg
G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : 0 < A.card
hB : 0 < B.card
hc : 1 < A.card ∨ 1 < B.card
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b

tactic: obtain ⟨p, hp, _, _, _, hu, _⟩ := h (Nat.one_lt_mul_iff.mpr ⟨hA, hB, hc⟩)
state_before: case neg
G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : 0 < A.card
hB : 0 < B.card
hc : 1 < A.card ∨ 1 < B.card
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b
state_after: case neg.intro.intro.intro.intro.intro.intro
G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : 0 < A.card
hB : 0 < B.card
hc : 1 < A.card ∨ 1 < B.card
p : G × G
hp : p ∈ A ×ˢ B
w✝ : G × G
left✝¹ : w✝ ∈ A ×ˢ B
left✝ : p ≠ w✝
hu : UniqueMul A B p.1 p.2
right✝ : UniqueMul A B w✝.1 w✝.2
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b

tactic: rw [Finset.mem_product] at hp
state_before: case neg.intro.intro.intro.intro.intro.intro
G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : 0 < A.card
hB : 0 < B.card
hc : 1 < A.card ∨ 1 < B.card
p : G × G
hp : p ∈ A ×ˢ B
w✝ : G × G
left✝¹ : w✝ ∈ A ×ˢ B
left✝ : p ≠ w✝
hu : UniqueMul A B p.1 p.2
right✝ : UniqueMul A B w✝.1 w✝.2
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b
state_after: case neg.intro.intro.intro.intro.intro.intro
G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : 0 < A.card
hB : 0 < B.card
hc : 1 < A.card ∨ 1 < B.card
p : G × G
hp : p.1 ∈ A ∧ p.2 ∈ B
w✝ : G × G
left✝¹ : w✝ ∈ A ×ˢ B
left✝ : p ≠ w✝
hu : UniqueMul A B p.1 p.2
right✝ : UniqueMul A B w✝.1 w✝.2
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b

tactic: exact ⟨p.1, hp.1, p.2, hp.2, hu⟩
state_before: case neg.intro.intro.intro.intro.intro.intro
G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : 0 < A.card
hB : 0 < B.card
hc : 1 < A.card ∨ 1 < B.card
p : G × G
hp : p.1 ∈ A ∧ p.2 ∈ B
w✝ : G × G
left✝¹ : w✝ ∈ A ×ˢ B
left✝ : p ≠ w✝
hu : UniqueMul A B p.1 p.2
right✝ : UniqueMul A B w✝.1 w✝.2
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b
state_after: no goals

tactic: exact UniqueMul.of_card_le_one hA hB hc.1 hc.2
state_before: case pos
G : Type u_1
inst✝ : Mul G
A B : Finset G
h : 1 < A.card * B.card → ∃ p1 ∈ A ×ˢ B, ∃ p2 ∈ A ×ˢ B, p1 ≠ p2 ∧ UniqueMul A B p1.1 p1.2 ∧ UniqueMul A B p2.1 p2.2
hA : A.Nonempty
hB : B.Nonempty
hc : A.card ≤ 1 ∧ B.card ≤ 1
⊢ ∃ a ∈ A, ∃ b ∈ B, UniqueMul A B a b
state_after: no goals