Theorem: IsLocalization.card_le
File: Mathlib/RingTheory/Localization/Cardinality.lean

tactic: cases fintypeOrInfinite R
state_before: R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
⊢ #L ≤ #R
state_after: case inl
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Fintype R
⊢ #L ≤ #R

case inr
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
⊢ #L ≤ #R

tactic: erw [← Cardinal.mul_eq_self <| Cardinal.aleph0_le_mk R]
state_before: case inr
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
⊢ #L ≤ #R
state_after: case inr
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
⊢ #L ≤ #R * #R

tactic: set f : R × R → L := fun aa => IsLocalization.mk' _ aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
state_before: case inr
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
⊢ #L ≤ #R * #R
state_after: case inr
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
⊢ #L ≤ #R * #R

tactic: refine @Cardinal.mk_le_of_surjective _ _ f fun a => ?_
state_before: case inr
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
⊢ #L ≤ #R * #R
state_after: case inr
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
a : L
⊢ ∃ a_1, f a_1 = a

tactic: obtain ⟨x, y, h⟩ := IsLocalization.mk'_surjective S a
state_before: case inr
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
a : L
⊢ ∃ a_1, f a_1 = a
state_after: case inr.intro.intro
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
a : L
x : R
y : ↥S
h : mk' L x y = a
⊢ ∃ a_1, f a_1 = a

tactic: use (x, y)
state_before: case inr.intro.intro
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
a : L
x : R
y : ↥S
h : mk' L x y = a
⊢ ∃ a_1, f a_1 = a
state_after: case h
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
a : L
x : R
y : ↥S
h : mk' L x y = a
⊢ f (x, ↑y) = a

tactic: dsimp [f]
state_before: case h
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
a : L
x : R
y : ↥S
h : mk' L x y = a
⊢ f (x, ↑y) = a
state_after: case h
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
a : L
x : R
y : ↥S
h : mk' L x y = a
⊢ mk' L x (if h : ↑y ∈ S then ⟨↑y, h⟩ else 1) = a

tactic: rwa [dif_pos <| show ↑y ∈ S from y.2, SetLike.eta]
state_before: case h
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
a : L
x : R
y : ↥S
h : mk' L x y = a
⊢ mk' L x (if h : ↑y ∈ S then ⟨↑y, h⟩ else 1) = a
state_after: no goals

tactic: exact Cardinal.mk_le_of_surjective (IsArtinianRing.localization_surjective S _)
state_before: case inl
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Fintype R
⊢ #L ≤ #R
state_after: no goals