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

tactic: refine ⟨fun h ↦ ?_, fun ⟨x, y, z, hxy, hyz, hxz, hs⟩ ↦ ?_⟩
state_before: α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
⊢ s.encard = 3 ↔ ∃ x y z, x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ s = {x, y, z}
state_after: case refine_1
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
h : s.encard = 3
⊢ ∃ x y z, x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ s = {x, y, z}

case refine_2
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x✝ : ∃ x y z, x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ s = {x, y, z}
x y z : α
hxy : x ≠ y
hyz : x ≠ z
hxz : y ≠ z
hs : s = {x, y, z}
⊢ s.encard = 3

tactic: rw [hs, encard_insert_of_not_mem, encard_insert_of_not_mem, encard_singleton] <;> aesop
state_before: case refine_2
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x✝ : ∃ x y z, x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ s = {x, y, z}
x y z : α
hxy : x ≠ y
hyz : x ≠ z
hxz : y ≠ z
hs : s = {x, y, z}
⊢ s.encard = 3
state_after: no goals

tactic: obtain ⟨x, hx⟩ := nonempty_of_encard_ne_zero (s := s) (by rw [h]; simp)
state_before: case refine_1
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
h : s.encard = 3
⊢ ∃ x y z, x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ s = {x, y, z}
state_after: case refine_1.intro
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
h : s.encard = 3
x : α
hx : x ∈ s
⊢ ∃ x y z, x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ s = {x, y, z}

tactic: rw [← insert_eq_of_mem hx, ← insert_diff_singleton,
  encard_insert_of_not_mem (fun h ↦ h.2 rfl), (by exact rfl : (3 : ℕ∞) = 2 + 1),
  WithTop.add_right_cancel_iff WithTop.one_ne_top, encard_eq_two] at h
state_before: case refine_1.intro
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
h : s.encard = 3
x : α
hx : x ∈ s
⊢ ∃ x y z, x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ s = {x, y, z}
state_after: case refine_1.intro
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
h : ∃ x_1 y, x_1 ≠ y ∧ s \ {x} = {x_1, y}
hx : x ∈ s
⊢ ∃ x y z, x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ s = {x, y, z}

tactic: obtain ⟨y, z, hne, hs⟩ := h
state_before: case refine_1.intro
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
h : ∃ x_1 y, x_1 ≠ y ∧ s \ {x} = {x_1, y}
hx : x ∈ s
⊢ ∃ x y z, x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ s = {x, y, z}
state_after: case refine_1.intro.intro.intro.intro
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
hx : x ∈ s
y z : α
hne : y ≠ z
hs : s \ {x} = {y, z}
⊢ ∃ x y z, x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ s = {x, y, z}

tactic: refine ⟨x, y, z, ?_, ?_, hne, ?_⟩
state_before: case refine_1.intro.intro.intro.intro
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
hx : x ∈ s
y z : α
hne : y ≠ z
hs : s \ {x} = {y, z}
⊢ ∃ x y z, x ≠ y ∧ x ≠ z ∧ y ≠ z ∧ s = {x, y, z}
state_after: case refine_1.intro.intro.intro.intro.refine_1
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
hx : x ∈ s
y z : α
hne : y ≠ z
hs : s \ {x} = {y, z}
⊢ x ≠ y

case refine_1.intro.intro.intro.intro.refine_2
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
hx : x ∈ s
y z : α
hne : y ≠ z
hs : s \ {x} = {y, z}
⊢ x ≠ z

case refine_1.intro.intro.intro.intro.refine_3
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
hx : x ∈ s
y z : α
hne : y ≠ z
hs : s \ {x} = {y, z}
⊢ s = {x, y, z}

tactic: rw [← hs, insert_diff_singleton, insert_eq_of_mem hx]
state_before: case refine_1.intro.intro.intro.intro.refine_3
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
hx : x ∈ s
y z : α
hne : y ≠ z
hs : s \ {x} = {y, z}
⊢ s = {x, y, z}
state_after: no goals

tactic: rw [h]
state_before: α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
h : s.encard = 3
⊢ s.encard ≠ 0
state_after: α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
h : s.encard = 3
⊢ 3 ≠ 0

tactic: simp
state_before: α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
h : s.encard = 3
⊢ 3 ≠ 0
state_after: no goals

tactic: exact rfl
state_before: α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
h : (s \ {x}).encard + 1 = 3
hx : x ∈ s
⊢ 3 = 2 + 1
state_after: no goals

tactic: rintro rfl
state_before: case refine_1.intro.intro.intro.intro.refine_1
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
hx : x ∈ s
y z : α
hne : y ≠ z
hs : s \ {x} = {y, z}
⊢ x ≠ y
state_after: case refine_1.intro.intro.intro.intro.refine_1
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
hx : x ∈ s
z : α
hne : x ≠ z
hs : s \ {x} = {x, z}
⊢ False

tactic: exact (hs.symm.subset (Or.inl rfl)).2 rfl
state_before: case refine_1.intro.intro.intro.intro.refine_1
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
hx : x ∈ s
z : α
hne : x ≠ z
hs : s \ {x} = {x, z}
⊢ False
state_after: no goals

tactic: rintro rfl
state_before: case refine_1.intro.intro.intro.intro.refine_2
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
hx : x ∈ s
y z : α
hne : y ≠ z
hs : s \ {x} = {y, z}
⊢ x ≠ z
state_after: case refine_1.intro.intro.intro.intro.refine_2
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
hx : x ∈ s
y : α
hne : y ≠ x
hs : s \ {x} = {y, x}
⊢ False

tactic: exact (hs.symm.subset (Or.inr rfl)).2 rfl
state_before: case refine_1.intro.intro.intro.intro.refine_2
α✝ : Type u_1
β : Type u_2
s✝ t : Set α✝
α : Type u_1
s : Set α
x : α
hx : x ∈ s
y : α
hne : y ≠ x
hs : s \ {x} = {y, x}
⊢ False
state_after: no goals