-- Mathlib/LinearAlgebra/Dimension/ErdosKaplansky.lean
theorem max_aleph0_card_le_rank_fun_nat : max ℵ₀ #K ≤ Module.rank K (ℕ → K)

Proof state:
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : ℵ₀ < #K
this✝ : Module.rank K (ℕ → K) < #K
ιK : Type u
bK : Basis ιK K (ℕ → K)
L : Subfield K := Subfield.closure (Set.range fun i => bK i.1 i.2)
this : Module (↥L)ᵐᵒᵖ K := Module.compHom K (RingHom.op L.subtype)
ιL : Type u
bL : Basis ιL (↥L)ᵐᵒᵖ K
hLK : #ιL < ℵ₀
⊢ #K ≤ #↥L

Tactic:
haveI := @Fintype.ofFinite _ (lt_aleph0_iff_finite.mp hLK)

Result:
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : ℵ₀ < #K
this✝¹ : Module.rank K (ℕ → K) < #K
ιK : Type u
bK : Basis ιK K (ℕ → K)
L : Subfield K := Subfield.closure (Set.range fun i => bK i.1 i.2)
this✝ : Module (↥L)ᵐᵒᵖ K := Module.compHom K (RingHom.op L.subtype)
ιL : Type u
bL : Basis ιL (↥L)ᵐᵒᵖ K
hLK : #ιL < ℵ₀
this : Fintype ιL
⊢ #K ≤ #↥L

Proof state:
case inr.intro.mk.intro.mk.intro
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : ℵ₀ < #K
this✝ : Module.rank K (ℕ → K) < #K
ιK : Type u
bK : Basis ιK K (ℕ → K)
L : Subfield K := Subfield.closure (Set.range fun i => bK i.1 i.2)
hLK : #↥L < #K
this : Module (↥L)ᵐᵒᵖ K := Module.compHom K (RingHom.op L.subtype)
ιL : Type u
bL : Basis ιL (↥L)ᵐᵒᵖ K
card_ιL : ℵ₀ ≤ #ιL
e : ℕ ↪ ιL
rep_e : ∑ a ∈ (bK.repr (⇑bL ∘ ⇑e)).support, (bK.repr (⇑bL ∘ ⇑e)) a • bK a = ⇑bL ∘ ⇑e
⊢ False

Tactic:
set c := bK.repr (bL ∘ e)

Result:
case inr.intro.mk.intro.mk.intro
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : ℵ₀ < #K
this✝ : Module.rank K (ℕ → K) < #K
ιK : Type u
bK : Basis ιK K (ℕ → K)
L : Subfield K := Subfield.closure (Set.range fun i => bK i.1 i.2)
hLK : #↥L < #K
this : Module (↥L)ᵐᵒᵖ K := Module.compHom K (RingHom.op L.subtype)
ιL : Type u
bL : Basis ιL (↥L)ᵐᵒᵖ K
card_ιL : ℵ₀ ≤ #ιL
e : ℕ ↪ ιL
c : ιK →₀ K := bK.repr (⇑bL ∘ ⇑e)
rep_e : ∑ a ∈ c.support, c a • bK a = ⇑bL ∘ ⇑e
⊢ False

Proof state:
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
⊢ #K ≤ Module.rank K (ℕ → K)

Tactic:
obtain card_K | card_K := le_or_lt #K ℵ₀

Result:
case inl
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : #K ≤ ℵ₀
⊢ #K ≤ Module.rank K (ℕ → K)

case inr
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : ℵ₀ < #K
⊢ #K ≤ Module.rank K (ℕ → K)

Proof state:
case inr.intro.mk.intro.mk.intro.intro.intro.intro.intro.intro
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : ℵ₀ < #K
this✝² : Module.rank K (ℕ → K) < #K
ιK : Type u
bK : Basis ιK K (ℕ → K)
L : Subfield K := Subfield.closure (Set.range fun i => bK i.1 i.2)
hLK : #↥L < #K
this✝¹ : Module (↥L)ᵐᵒᵖ K := Module.compHom K (RingHom.op L.subtype)
ιL : Type u
bL : Basis ιL (↥L)ᵐᵒᵖ K
card_ιL : ℵ₀ ≤ #ιL
e : ℕ ↪ ιL
t : Finset ℕ
g : ℕ → (↥L)ᵐᵒᵖ
i✝ : ℕ
hi✝ : i✝ ∈ t
hgi : g i✝ ≠ 0
s : Finset ιK
f : ℕ → { x // x ∈ s } → ↥L := fun i j => ⟨bK (↑j) i, ⋯⟩
this✝ : ¬LinearIndependent (↥L)ᵐᵒᵖ f
c : ιK →₀ K
rep_e : ∑ a ∈ s, c a • bK a = ⇑bL ∘ ⇑e
i : ιK
hi : i ∈ s
eq0 : ∑ x ∈ t, L.subtype ((g x • f x) ⟨i, hi⟩) = L.subtype (0 ⟨i, hi⟩)
this : SMulCommClass (↥L)ᵐᵒᵖ K K
⊢ ∑ x ∈ t, g x • c i • bK i x = 0

Tactic:
simp_rw [smul_comm _ (c i), ← Finset.smul_sum]

Result:
case inr.intro.mk.intro.mk.intro.intro.intro.intro.intro.intro
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : ℵ₀ < #K
this✝² : Module.rank K (ℕ → K) < #K
ιK : Type u
bK : Basis ιK K (ℕ → K)
L : Subfield K := Subfield.closure (Set.range fun i => bK i.1 i.2)
hLK : #↥L < #K
this✝¹ : Module (↥L)ᵐᵒᵖ K := Module.compHom K (RingHom.op L.subtype)
ιL : Type u
bL : Basis ιL (↥L)ᵐᵒᵖ K
card_ιL : ℵ₀ ≤ #ιL
e : ℕ ↪ ιL
t : Finset ℕ
g : ℕ → (↥L)ᵐᵒᵖ
i✝ : ℕ
hi✝ : i✝ ∈ t
hgi : g i✝ ≠ 0
s : Finset ιK
f : ℕ → { x // x ∈ s } → ↥L := fun i j => ⟨bK (↑j) i, ⋯⟩
this✝ : ¬LinearIndependent (↥L)ᵐᵒᵖ f
c : ιK →₀ K
rep_e : ∑ a ∈ s, c a • bK a = ⇑bL ∘ ⇑e
i : ιK
hi : i ∈ s
eq0 : ∑ x ∈ t, L.subtype ((g x • f x) ⟨i, hi⟩) = L.subtype (0 ⟨i, hi⟩)
this : SMulCommClass (↥L)ᵐᵒᵖ K K
⊢ c i • ∑ x ∈ t, g x • bK i x = 0

Proof state:
case inl
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : #K ≤ ℵ₀
⊢ #K ≤ Module.rank K (ℕ → K)

Tactic:
exact card_K.trans aleph0_le

Result:
no goals

Proof state:
case inr.intro.mk.intro.mk.intro.intro.intro.intro.intro.intro
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : ℵ₀ < #K
this✝¹ : Module.rank K (ℕ → K) < #K
ιK : Type u
bK : Basis ιK K (ℕ → K)
L : Subfield K := Subfield.closure (Set.range fun i => bK i.1 i.2)
hLK : #↥L < #K
this✝ : Module (↥L)ᵐᵒᵖ K := Module.compHom K (RingHom.op L.subtype)
ιL : Type u
bL : Basis ιL (↥L)ᵐᵒᵖ K
card_ιL : ℵ₀ ≤ #ιL
e : ℕ ↪ ιL
t : Finset ℕ
g : ℕ → (↥L)ᵐᵒᵖ
i : ℕ
hi : i ∈ t
hgi : g i ≠ 0
s : Finset ιK
f : ℕ → { x // x ∈ s } → ↥L := fun i j => ⟨bK (↑j) i, ⋯⟩
this : ¬LinearIndependent (↥L)ᵐᵒᵖ f
eq0 : ∑ i ∈ t, g i • f i = 0
c : ιK →₀ K
rep_e : ∑ a ∈ s, c a • bK a = ⇑bL ∘ ⇑e
⊢ ∑ x ∈ t, ∑ x_1 ∈ s, g x • c x_1 • bK x_1 x = 0

Tactic:
rw [Finset.sum_comm]

Result:
case inr.intro.mk.intro.mk.intro.intro.intro.intro.intro.intro
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : ℵ₀ < #K
this✝¹ : Module.rank K (ℕ → K) < #K
ιK : Type u
bK : Basis ιK K (ℕ → K)
L : Subfield K := Subfield.closure (Set.range fun i => bK i.1 i.2)
hLK : #↥L < #K
this✝ : Module (↥L)ᵐᵒᵖ K := Module.compHom K (RingHom.op L.subtype)
ιL : Type u
bL : Basis ιL (↥L)ᵐᵒᵖ K
card_ιL : ℵ₀ ≤ #ιL
e : ℕ ↪ ιL
t : Finset ℕ
g : ℕ → (↥L)ᵐᵒᵖ
i : ℕ
hi : i ∈ t
hgi : g i ≠ 0
s : Finset ιK
f : ℕ → { x // x ∈ s } → ↥L := fun i j => ⟨bK (↑j) i, ⋯⟩
this : ¬LinearIndependent (↥L)ᵐᵒᵖ f
eq0 : ∑ i ∈ t, g i • f i = 0
c : ιK →₀ K
rep_e : ∑ a ∈ s, c a • bK a = ⇑bL ∘ ⇑e
⊢ ∑ y ∈ s, ∑ x ∈ t, g x • c y • bK y x = 0

Proof state:
case inr.intro.mk.intro.mk.intro.intro.intro.intro.intro.intro
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : ℵ₀ < #K
this✝¹ : Module.rank K (ℕ → K) < #K
ιK : Type u
bK : Basis ιK K (ℕ → K)
L : Subfield K := Subfield.closure (Set.range fun i => bK i.1 i.2)
hLK : #↥L < #K
this✝ : Module (↥L)ᵐᵒᵖ K := Module.compHom K (RingHom.op L.subtype)
ιL : Type u
bL : Basis ιL (↥L)ᵐᵒᵖ K
card_ιL : ℵ₀ ≤ #ιL
e : ℕ ↪ ιL
t : Finset ℕ
g : ℕ → (↥L)ᵐᵒᵖ
i✝ : ℕ
hi✝ : i✝ ∈ t
hgi : g i✝ ≠ 0
s : Finset ιK
f : ℕ → { x // x ∈ s } → ↥L := fun i j => ⟨bK (↑j) i, ⋯⟩
this : ¬LinearIndependent (↥L)ᵐᵒᵖ f
c : ιK →₀ K
rep_e : ∑ a ∈ s, c a • bK a = ⇑bL ∘ ⇑e
i : ιK
hi : i ∈ s
eq0 : ∑ x ∈ t, L.subtype ((g x • f x) ⟨i, hi⟩) = L.subtype (0 ⟨i, hi⟩)
⊢ ∑ x ∈ t, g x • c i • bK i x = 0

Tactic:
have : SMulCommClass Lᵐᵒᵖ K K := ⟨fun _ _ _ ↦ mul_assoc _ _ _⟩

Result:
case inr.intro.mk.intro.mk.intro.intro.intro.intro.intro.intro
K : Type u
inst✝ : DivisionRing K
aleph0_le : ℵ₀ ≤ Module.rank K (ℕ → K)
card_K : ℵ₀ < #K
this✝² : Module.rank K (ℕ → K) < #K
ιK : Type u
bK : Basis ιK K (ℕ → K)
L : Subfield K := Subfield.closure (Set.range fun i => bK i.1 i.2)
hLK : #↥L < #K
this✝¹ : Module (↥L)ᵐᵒᵖ K := Module.compHom K (RingHom.op L.subtype)
ιL : Type u
bL : Basis ιL (↥L)ᵐᵒᵖ K
card_ιL : ℵ₀ ≤ #ιL
e : ℕ ↪ ιL
t : Finset ℕ
g : ℕ → (↥L)ᵐᵒᵖ
i✝ : ℕ
hi✝ : i✝ ∈ t
hgi : g i✝ ≠ 0
s : Finset ιK
f : ℕ → { x // x ∈ s } → ↥L := fun i j => ⟨bK (↑j) i, ⋯⟩
this✝ : ¬LinearIndependent (↥L)ᵐᵒᵖ f
c : ιK →₀ K
rep_e : ∑ a ∈ s, c a • bK a = ⇑bL ∘ ⇑e
i : ιK
hi : i ∈ s
eq0 : ∑ x ∈ t, L.subtype ((g x • f x) ⟨i, hi⟩) = L.subtype (0 ⟨i, hi⟩)
this : SMulCommClass (↥L)ᵐᵒᵖ K K
⊢ ∑ x ∈ t, g x • c i • bK i x = 0