Theorem: Cardinal.mk_preimage_of_subset_range_lift
File: Mathlib/SetTheory/Cardinal/Basic.lean

tactic: rw [lift_mk_le.{0}]
state_before: α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
⊢ lift.{u, v} #↑s ≤ lift.{v, u} #↑(f ⁻¹' s)
state_after: α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
⊢ Nonempty (↑s ↪ ↑(f ⁻¹' s))

tactic: refine ⟨⟨?_, ?_⟩⟩
state_before: α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
⊢ Nonempty (↑s ↪ ↑(f ⁻¹' s))
state_after: case refine_1
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
⊢ ↑s → ↑(f ⁻¹' s)

case refine_2
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
⊢ Injective ?refine_1

tactic: rintro ⟨y, hy⟩ ⟨y', hy'⟩
state_before: case refine_2
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
⊢ Injective fun a =>
    Subtype.casesOn a fun y hy =>
      Subtype.casesOn (Classical.subtype_of_exists ⋯) fun x property =>
        Eq.ndrec (motive := fun y => y ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨x, hy⟩) property hy
state_after: case refine_2.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
y : β
hy : y ∈ s
y' : β
hy' : y' ∈ s
⊢ (fun a =>
          Subtype.casesOn a fun y hy =>
            Subtype.casesOn (Classical.subtype_of_exists ⋯) fun x property =>
              Eq.ndrec (motive := fun y => y ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨x, hy⟩) property hy)
        ⟨y, hy⟩ =
      (fun a =>
          Subtype.casesOn a fun y hy =>
            Subtype.casesOn (Classical.subtype_of_exists ⋯) fun x property =>
              Eq.ndrec (motive := fun y => y ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨x, hy⟩) property hy)
        ⟨y', hy'⟩ →
    ⟨y, hy⟩ = ⟨y', hy'⟩

tactic: dsimp
state_before: case refine_2.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
y : β
hy : y ∈ s
y' : β
hy' : y' ∈ s
⊢ (fun a =>
          Subtype.casesOn a fun y hy =>
            Subtype.casesOn (Classical.subtype_of_exists ⋯) fun x property =>
              Eq.ndrec (motive := fun y => y ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨x, hy⟩) property hy)
        ⟨y, hy⟩ =
      (fun a =>
          Subtype.casesOn a fun y hy =>
            Subtype.casesOn (Classical.subtype_of_exists ⋯) fun x property =>
              Eq.ndrec (motive := fun y => y ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨x, hy⟩) property hy)
        ⟨y', hy'⟩ →
    ⟨y, hy⟩ = ⟨y', hy'⟩
state_after: case refine_2.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
y : β
hy : y ∈ s
y' : β
hy' : y' ∈ s
⊢ Eq.rec (motive := fun x x_1 => x ∈ s → ↑(f ⁻¹' s)) (fun hy_1 => ⟨↑(Classical.subtype_of_exists ⋯), hy_1⟩) ⋯ ⋯ =
      Eq.rec (motive := fun x x_1 => x ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨↑(Classical.subtype_of_exists ⋯), hy⟩) ⋯ ⋯ →
    ⟨y, hy⟩ = ⟨y', hy'⟩

tactic: rcases Classical.subtype_of_exists (h hy) with ⟨x, rfl⟩
state_before: case refine_2.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
y : β
hy : y ∈ s
y' : β
hy' : y' ∈ s
⊢ Eq.rec (motive := fun x x_1 => x ∈ s → ↑(f ⁻¹' s)) (fun hy_1 => ⟨↑(Classical.subtype_of_exists ⋯), hy_1⟩) ⋯ ⋯ =
      Eq.rec (motive := fun x x_1 => x ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨↑(Classical.subtype_of_exists ⋯), hy⟩) ⋯ ⋯ →
    ⟨y, hy⟩ = ⟨y', hy'⟩
state_after: case refine_2.mk.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
y' : β
hy' : y' ∈ s
x : α
hy : f x ∈ s
⊢ Eq.rec (motive := fun x_1 x => x_1 ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨↑⟨x, ⋯⟩, hy⟩) ⋯ ⋯ =
      Eq.rec (motive := fun x x_1 => x ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨↑(Classical.subtype_of_exists ⋯), hy⟩) ⋯ ⋯ →
    ⟨f x, hy⟩ = ⟨y', hy'⟩

tactic: rcases Classical.subtype_of_exists (h hy') with ⟨x', rfl⟩
state_before: case refine_2.mk.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
y' : β
hy' : y' ∈ s
x : α
hy : f x ∈ s
⊢ Eq.rec (motive := fun x_1 x => x_1 ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨↑⟨x, ⋯⟩, hy⟩) ⋯ ⋯ =
      Eq.rec (motive := fun x x_1 => x ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨↑(Classical.subtype_of_exists ⋯), hy⟩) ⋯ ⋯ →
    ⟨f x, hy⟩ = ⟨y', hy'⟩
state_after: case refine_2.mk.mk.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
x : α
hy : f x ∈ s
x' : α
hy' : f x' ∈ s
⊢ Eq.rec (motive := fun x_1 x => x_1 ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨↑⟨x, ⋯⟩, hy⟩) ⋯ ⋯ =
      Eq.rec (motive := fun x x_1 => x ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨↑⟨x', ⋯⟩, hy⟩) ⋯ ⋯ →
    ⟨f x, hy⟩ = ⟨f x', hy'⟩

tactic: simp
state_before: case refine_2.mk.mk.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
x : α
hy : f x ∈ s
x' : α
hy' : f x' ∈ s
⊢ Eq.rec (motive := fun x_1 x => x_1 ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨↑⟨x, ⋯⟩, hy⟩) ⋯ ⋯ =
      Eq.rec (motive := fun x x_1 => x ∈ s → ↑(f ⁻¹' s)) (fun hy => ⟨↑⟨x', ⋯⟩, hy⟩) ⋯ ⋯ →
    ⟨f x, hy⟩ = ⟨f x', hy'⟩
state_after: case refine_2.mk.mk.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
x : α
hy : f x ∈ s
x' : α
hy' : f x' ∈ s
⊢ x = x' → f x = f x'

tactic: intro hxx'
state_before: case refine_2.mk.mk.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
x : α
hy : f x ∈ s
x' : α
hy' : f x' ∈ s
⊢ x = x' → f x = f x'
state_after: case refine_2.mk.mk.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
x : α
hy : f x ∈ s
x' : α
hy' : f x' ∈ s
hxx' : x = x'
⊢ f x = f x'

tactic: rw [hxx']
state_before: case refine_2.mk.mk.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
x : α
hy : f x ∈ s
x' : α
hy' : f x' ∈ s
hxx' : x = x'
⊢ f x = f x'
state_after: no goals

tactic: rintro ⟨y, hy⟩
state_before: case refine_1
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
⊢ ↑s → ↑(f ⁻¹' s)
state_after: case refine_1.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
y : β
hy : y ∈ s
⊢ ↑(f ⁻¹' s)

tactic: rcases Classical.subtype_of_exists (h hy) with ⟨x, rfl⟩
state_before: case refine_1.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
y : β
hy : y ∈ s
⊢ ↑(f ⁻¹' s)
state_after: case refine_1.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
x : α
hy : f x ∈ s
⊢ ↑(f ⁻¹' s)

tactic: exact ⟨x, hy⟩
state_before: case refine_1.mk.mk
α✝ β✝ : Type u
c : Cardinal.{?u.227849}
α : Type u
β : Type v
f : α → β
s : Set β
h : s ⊆ range f
x : α
hy : f x ∈ s
⊢ ↑(f ⁻¹' s)
state_after: no goals