Theorem: Function.Embedding.min_injective
File: Mathlib/SetTheory/Cardinal/SchroederBernstein.lean

tactic: simpa only [ne_eq, not_exists, not_forall, not_and] using h
state_before: ι : Type u
β : ι → Type v
I : Nonempty ι
s : Set ((i : ι) → β i)
hs : s ∈ Function.Embedding.sets β
ms : ∀ (a : Set ((i : ι) → β i)), a ∈ Function.Embedding.sets β → s ⊆ a → a = s
h : ¬∃ i, ∀ (y : β i), ∃ x, x ∈ s ∧ x i = y
⊢ ∀ (i : ι), ∃ y, ∀ (x : (i : ι) → β i), x ∈ s → x i ≠ y

tactic: cases' hx with hx hx <;> cases' hy with hy hy
state_before: ι : Type u
β : ι → Type v
I : Nonempty ι
s : Set ((i : ι) → β i)
hs : s ∈ Function.Embedding.sets β
ms : ∀ (a : Set ((i : ι) → β i)), a ∈ Function.Embedding.sets β → s ⊆ a → a = s
h✝ : ¬∃ i, ∀ (y : β i), ∃ x, x ∈ s ∧ x i = y
h : ∀ (i : ι), ∃ y, ∀ (x : (i : ι) → β i), x ∈ s → x i ≠ y
f : (x : ι) → β x
hf : ∀ (x : ι) (x_1 : (i : ι) → β i), x_1 ∈ s → x_1 x ≠ f x
x : (i : ι) → β i
hx : x ∈ insert f s
y : (i : ι) → β i
hy : y ∈ insert f s
⊢ ∀ (i : ι), x i = y i → x = y

tactic: simp [hx, hy]
state_before: case inl.inl
ι : Type u
β : ι → Type v
I : Nonempty ι
s : Set ((i : ι) → β i)
hs : s ∈ Function.Embedding.sets β
ms : ∀ (a : Set ((i : ι) → β i)), a ∈ Function.Embedding.sets β → s ⊆ a → a = s
h✝ : ¬∃ i, ∀ (y : β i), ∃ x, x ∈ s ∧ x i = y
h : ∀ (i : ι), ∃ y, ∀ (x : (i : ι) → β i), x ∈ s → x i ≠ y
f : (x : ι) → β x
hf : ∀ (x : ι) (x_1 : (i : ι) → β i), x_1 ∈ s → x_1 x ≠ f x
x y : (i : ι) → β i
hx : x = f
hy : y = f
⊢ ∀ (i : ι), x i = y i → x = y

tactic: subst x
state_before: case inl.inr
ι : Type u
β : ι → Type v
I : Nonempty ι
s : Set ((i : ι) → β i)
hs : s ∈ Function.Embedding.sets β
ms : ∀ (a : Set ((i : ι) → β i)), a ∈ Function.Embedding.sets β → s ⊆ a → a = s
h✝ : ¬∃ i, ∀ (y : β i), ∃ x, x ∈ s ∧ x i = y
h : ∀ (i : ι), ∃ y, ∀ (x : (i : ι) → β i), x ∈ s → x i ≠ y
f : (x : ι) → β x
hf : ∀ (x : ι) (x_1 : (i : ι) → β i), x_1 ∈ s → x_1 x ≠ f x
x y : (i : ι) → β i
hx : x = f
hy : y ∈ s
⊢ ∀ (i : ι), x i = y i → x = y

tactic: exact fun i e => (hf i y hy e.symm).elim
state_before: case inl.inr
ι : Type u
β : ι → Type v
I : Nonempty ι
s : Set ((i : ι) → β i)
hs : s ∈ Function.Embedding.sets β
ms : ∀ (a : Set ((i : ι) → β i)), a ∈ Function.Embedding.sets β → s ⊆ a → a = s
h✝ : ¬∃ i, ∀ (y : β i), ∃ x, x ∈ s ∧ x i = y
h : ∀ (i : ι), ∃ y, ∀ (x : (i : ι) → β i), x ∈ s → x i ≠ y
f : (x : ι) → β x
hf : ∀ (x : ι) (x_1 : (i : ι) → β i), x_1 ∈ s → x_1 x ≠ f x
y : (i : ι) → β i
hy : y ∈ s
⊢ ∀ (i : ι), f i = y i → f = y

tactic: subst y
state_before: case inr.inl
ι : Type u
β : ι → Type v
I : Nonempty ι
s : Set ((i : ι) → β i)
hs : s ∈ Function.Embedding.sets β
ms : ∀ (a : Set ((i : ι) → β i)), a ∈ Function.Embedding.sets β → s ⊆ a → a = s
h✝ : ¬∃ i, ∀ (y : β i), ∃ x, x ∈ s ∧ x i = y
h : ∀ (i : ι), ∃ y, ∀ (x : (i : ι) → β i), x ∈ s → x i ≠ y
f : (x : ι) → β x
hf : ∀ (x : ι) (x_1 : (i : ι) → β i), x_1 ∈ s → x_1 x ≠ f x
x y : (i : ι) → β i
hx : x ∈ s
hy : y = f
⊢ ∀ (i : ι), x i = y i → x = y

tactic: exact fun i e => (hf i x hx e).elim
state_before: case inr.inl
ι : Type u
β : ι → Type v
I : Nonempty ι
s : Set ((i : ι) → β i)
hs : s ∈ Function.Embedding.sets β
ms : ∀ (a : Set ((i : ι) → β i)), a ∈ Function.Embedding.sets β → s ⊆ a → a = s
h✝ : ¬∃ i, ∀ (y : β i), ∃ x, x ∈ s ∧ x i = y
h : ∀ (i : ι), ∃ y, ∀ (x : (i : ι) → β i), x ∈ s → x i ≠ y
f : (x : ι) → β x
hf : ∀ (x : ι) (x_1 : (i : ι) → β i), x_1 ∈ s → x_1 x ≠ f x
x : (i : ι) → β i
hx : x ∈ s
⊢ ∀ (i : ι), x i = f i → x = f

tactic: exact hs x hx y hy
state_before: case inr.inr
ι : Type u
β : ι → Type v
I : Nonempty ι
s : Set ((i : ι) → β i)
hs : s ∈ Function.Embedding.sets β
ms : ∀ (a : Set ((i : ι) → β i)), a ∈ Function.Embedding.sets β → s ⊆ a → a = s
h✝ : ¬∃ i, ∀ (y : β i), ∃ x, x ∈ s ∧ x i = y
h : ∀ (i : ι), ∃ y, ∀ (x : (i : ι) → β i), x ∈ s → x i ≠ y
f : (x : ι) → β x
hf : ∀ (x : ι) (x_1 : (i : ι) → β i), x_1 ∈ s → x_1 x ≠ f x
x y : (i : ι) → β i
hx : x ∈ s
hy : y ∈ s
⊢ ∀ (i : ι), x i = y i → x = y

tactic: let ⟨sa, ea⟩ := hf a
state_before: ι : Type u
β : ι → Type v
I : Nonempty ι
s : Set ((i : ι) → β i)
hs : s ∈ Function.Embedding.sets β
ms : ∀ (a : Set ((i : ι) → β i)), a ∈ Function.Embedding.sets β → s ⊆ a → a = s
i : ι
e : ∀ (y : β i), ∃ x, x ∈ s ∧ x i = y
f : β i → (i : ι) → β i
hf : ∀ (x : β i), f x ∈ s ∧ f x i = x
j : ι
a b : β i
e' : (fun a => f a j) a = (fun a => f a j) b
⊢ a = b

tactic: let ⟨sb, eb⟩ := hf b
state_before: ι : Type u
β : ι → Type v
I : Nonempty ι
s : Set ((i : ι) → β i)
hs : s ∈ Function.Embedding.sets β
ms : ∀ (a : Set ((i : ι) → β i)), a ∈ Function.Embedding.sets β → s ⊆ a → a = s
i : ι
e : ∀ (y : β i), ∃ x, x ∈ s ∧ x i = y
f : β i → (i : ι) → β i
hf : ∀ (x : β i), f x ∈ s ∧ f x i = x
j : ι
a b : β i
e' : (fun a => f a j) a = (fun a => f a j) b
sa : f a ∈ s
ea : f a i = a
⊢ a = b

tactic: rw [← ea, ← eb, hs _ sa _ sb _ e']
state_before: ι : Type u
β : ι → Type v
I : Nonempty ι
s : Set ((i : ι) → β i)
hs : s ∈ Function.Embedding.sets β
ms : ∀ (a : Set ((i : ι) → β i)), a ∈ Function.Embedding.sets β → s ⊆ a → a = s
i : ι
e : ∀ (y : β i), ∃ x, x ∈ s ∧ x i = y
f : β i → (i : ι) → β i
hf : ∀ (x : β i), f x ∈ s ∧ f x i = x
j : ι
a b : β i
e' : (fun a => f a j) a = (fun a => f a j) b
sa : f a ∈ s
ea : f a i = a
sb : f b ∈ s
eb : f b i = b
⊢ a = b