Skip to content

Commit 103c544

Browse files
committed
finish proof
1 parent 65062ef commit 103c544

File tree

1 file changed

+102
-41
lines changed

1 file changed

+102
-41
lines changed

Axgroth/Basic.lean

Lines changed: 102 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@ import Mathlib
22

33
open Topology
44

5-
lemma continuous_symm {ι : Type*} [Finite ι] (f : (ι → ℂ) ≃ (ι → ℂ)) (hf : Continuous f) : Continuous f.symm := sorry
6-
75
lemma Dense.eq_of_eqOn {α β : Type*} [TopologicalSpace α] [TopologicalSpace β] [T2Space β]
8-
{s : Set α} (hs : Dense s)
9-
{f g : α → β} (hf : Continuous f) (hg : Continuous g)
6+
{s : Set α} (hs : Dense s) {f g : α → β} (hf : Continuous f) (hg : Continuous g)
107
(h : ∀ x ∈ s, f x = g x) : f = g := by
118
ext x
129
rw [← hs.extend_unique_at (f := fun x => f x) _ hg.continuousAt,
@@ -20,8 +17,34 @@ lemma tendsto_inv_cobounded {𝕜 : Type*} [NormedDivisionRing 𝕜] :
2017
Filter.Tendsto (.⁻¹) (𝓝[≠] (0 : 𝕜)) (Bornology.cobounded 𝕜) := by
2118
simp only [Filter.Tendsto, Filter.map_inv, Filter.inv_nhdsWithin_ne_zero, le_refl]
2219

23-
lemma thing2 {ι : Type*} [Fintype ι] (f : (ι → ℂ) ≃ (ι → ℂ)) (hf : Continuous f)
24-
{s : Set (ι → ℂ)} (i : ι) (hs : Dense s) {x : ι → ℂ}
20+
-- lemma thing2 {ι : Type*} [Fintype ι] (f : (ι → ℂ) ≃ (ι → ℂ)) (hf : Continuous f)
21+
-- {s : Set (ι → ℂ)} (i : ι) (hs : Dense s) {x : ι → ℂ}
22+
-- (hg : Filter.Tendsto (fun x => f.symm x i) (𝓝[s] x) (Bornology.cobounded _)) : False := by
23+
-- have : Filter.Tendsto f (𝓝[f ⁻¹' s] (f.symm x)) (𝓝[s] f (f.symm x)) :=
24+
-- tendsto_nhdsWithin_iff.2 ⟨hf.continuousAt.mono_left nhdsWithin_le_nhds,
25+
-- eventually_nhdsWithin_of_forall <| by simp⟩
26+
-- simp only [Equiv.apply_symm_apply] at this
27+
-- have : Filter.Tendsto (fun x => x i) (𝓝[f ⁻¹' s] f.symm x) (Bornology.cobounded _) := by
28+
-- simpa [Function.comp_def] using hg.comp this
29+
-- simp only [Filter.Tendsto, Metric.cobounded_eq_cocompact, Filter.le_def, Filter.mem_cocompact,
30+
-- Filter.mem_map, mem_nhdsWithin, forall_exists_index, and_imp] at this
31+
-- rcases this (Metric.closedBall (f.symm x i) 1)ᶜ (Metric.closedBall (f.symm x i) 1)
32+
-- (by exact isCompact_closedBall (f.symm x i) 1) (fun _ a => a) with ⟨U, hU⟩
33+
-- rcases Metric.isOpen_iff.1 hU.1 (f.symm x) hU.2.1 with ⟨ε, ε0, hε⟩
34+
-- have hs : Dense (f⁻¹' s) := Dense.preimage hs (by
35+
-- refine (Equiv.continuous_symm_iff f).mp ?_
36+
-- exact continuous_symm _ hf)
37+
-- rcases hs.exists_mem_open Metric.isOpen_ball
38+
-- ⟨f.symm x, show f.symm x ∈ Metric.ball (f.symm x) (min ε 1) by simp [ε0]⟩ with ⟨y, hy⟩
39+
-- have h1 := @hU.2.2 y (Set.mem_inter (hε (Metric.ball_subset_ball (by simp) hy.2)) hy.1)
40+
-- simp only [Metric.mem_ball, lt_inf_iff, zero_lt_one, dist_pi_lt_iff] at hy
41+
-- have h2 := hy.2.2 i
42+
-- simp only [Set.preimage_compl, Set.mem_compl_iff, Set.mem_preimage, Metric.mem_closedBall,
43+
-- not_le] at h1 h2
44+
-- linarith
45+
46+
lemma thing3 {ι : Type*} [Fintype ι] (f : (ι → ℂ) ≃ (ι → ℂ)) (hf : Continuous f)
47+
{s : Set (ι → ℂ)} (i : ι) (hs : Dense (f ⁻¹' s)) {x : ι → ℂ}
2548
(hg : Filter.Tendsto (fun x => f.symm x i) (𝓝[s] x) (Bornology.cobounded _)) : False := by
2649
have : Filter.Tendsto f (𝓝[f ⁻¹' s] (f.symm x)) (𝓝[s] f (f.symm x)) :=
2750
tendsto_nhdsWithin_iff.2 ⟨hf.continuousAt.mono_left nhdsWithin_le_nhds,
@@ -34,9 +57,6 @@ lemma thing2 {ι : Type*} [Fintype ι] (f : (ι → ℂ) ≃ (ι → ℂ)) (hf :
3457
rcases this (Metric.closedBall (f.symm x i) 1)ᶜ (Metric.closedBall (f.symm x i) 1)
3558
(by exact isCompact_closedBall (f.symm x i) 1) (fun _ a => a) with ⟨U, hU⟩
3659
rcases Metric.isOpen_iff.1 hU.1 (f.symm x) hU.2.1 with ⟨ε, ε0, hε⟩
37-
have hs : Dense (f⁻¹' s) := Dense.preimage hs (by
38-
refine (Equiv.continuous_symm_iff f).mp ?_
39-
exact continuous_symm _ hf)
4060
rcases hs.exists_mem_open Metric.isOpen_ball
4161
⟨f.symm x, show f.symm x ∈ Metric.ball (f.symm x) (min ε 1) by simp [ε0]⟩ with ⟨y, hy⟩
4262
have h1 := @hU.2.2 y (Set.mem_inter (hε (Metric.ball_subset_ball (by simp) hy.2)) hy.1)
@@ -67,6 +87,27 @@ lemma thing {ι : Type*} [Fintype ι] [Nonempty ι] (f : (ι → ℂ) ≃ (ι
6787
simp only [Set.mem_compl_iff, Metric.mem_closedBall, not_le, Metric.mem_ball, lt_inf_iff] at h1 h2
6888
linarith
6989

90+
-- lemma thing {ι : Type*} [Fintype ι] [Nonempty ι] (f : (ι → ℂ) ≃ (ι → ℂ)) (hf : Continuous f)
91+
-- {s : Set (ι → ℂ)} (hs : Dense (f ⁻¹' s)) {x : ι → ℂ}
92+
-- (hg : Filter.Tendsto f.symm (𝓝[s] x) (Bornology.cobounded _)) : False := by
93+
-- have : Filter.Tendsto f (𝓝[f ⁻¹' s] (f.symm x)) (𝓝[s] f (f.symm x)) :=
94+
-- tendsto_nhdsWithin_iff.2 ⟨hf.continuousAt.mono_left nhdsWithin_le_nhds,
95+
-- eventually_nhdsWithin_of_forall <| by simp⟩
96+
-- simp only [Equiv.apply_symm_apply] at this
97+
-- have : Filter.Tendsto (fun x => x) (𝓝[f ⁻¹' s] f.symm x) (Bornology.cobounded _) := by
98+
-- simpa using hg.comp this
99+
-- simp only [Filter.Tendsto, Filter.map_id', Metric.cobounded_eq_cocompact, Filter.le_def,
100+
-- Filter.mem_cocompact, mem_nhdsWithin, forall_exists_index, and_imp] at this
101+
-- rcases this (Metric.closedBall (f.symm x) 1)ᶜ (Metric.closedBall (f.symm x) 1)
102+
-- (by exact isCompact_closedBall (f.symm x) 1) (fun _ a => a) with ⟨U, hU⟩
103+
-- rcases Metric.isOpen_iff.1 hU.1 (f.symm x) hU.2.1 with ⟨ε, ε0, hε⟩
104+
-- rcases hs.exists_mem_open Metric.isOpen_ball
105+
-- ⟨f.symm x, show f.symm x ∈ Metric.ball (f.symm x) (min ε 1) by simp [ε0]⟩ with ⟨y, hy⟩
106+
-- have h1 := hU.2.2 (Set.mem_inter (hε (Metric.ball_subset_ball (by simp) hy.2)) hy.1)
107+
-- have h2 := hy.2
108+
-- simp only [Set.mem_compl_iff, Metric.mem_closedBall, not_le, Metric.mem_ball, lt_inf_iff] at h1 h2
109+
-- linarith
110+
70111
lemma thing' (f : ℂ ≃ ℂ) (hf : Continuous f) (x : ℂ)
71112
(hg : Filter.Tendsto f.symm (𝓝[≠] x) (Filter.cocompact _)) : False := by
72113
have : Filter.Tendsto f (𝓝[≠] (f.symm x)) (𝓝[≠] f (f.symm x)) :=
@@ -540,31 +581,52 @@ lemma exists_mvPolynomial_inverse_aux [Finite ι] [Algebra K ℂ] (p : ι → Mv
540581
rcases exists_MvRatFunc_inverse p hInj with ⟨f, r, s, hrs, hs0, f_eq, f_symm_eq⟩
541582
let := Fintype.ofFinite ι
542583
have f_eq' : ↑f = (fun x i => aeval x (p i)) := by simp [funext_iff, f_eq]
543-
have hs : Dense { x : ι → ℂ | ∀ i, (s i).aeval x ≠ 0 } := by
544-
simp only [ne_eq]
545-
convert dense_zero (p := ∏ j, (s j).map (algebraMap K ℂ)) ?_
546-
· simp only [Finset.prod_ne_zero_iff, map_prod, Finset.mem_univ, true_implies]
547-
apply forall_congr'
548-
intro j
549-
rw [aeval_def, eval_map, ← coe_eval₂Hom]
550-
· simp [Finset.prod_eq_zero_iff]
551-
intro j
552-
rw [map_eq_zero_iff]
553-
exact hs0 _
554-
apply MvPolynomial.map_injective
555-
exact FaithfulSMul.algebraMap_injective K ℂ
584+
let d : Set (ι → ℂ) := { x | ∀ i, (s i).aeval x ≠ 0 }
585+
have d_eq : d = { x | (∏ j, (s j).map (algebraMap K ℂ)).eval x ≠ 0 } := by
586+
ext x
587+
simp only [Finset.prod_ne_zero_iff, map_prod, Finset.mem_univ, true_implies, Set.mem_setOf_eq]
588+
apply forall_congr'
589+
intro j
590+
rw [aeval_def, eval_map, ← coe_eval₂Hom]
591+
have preimage_d_eq : (f ⁻¹' d) = { x | (((∏ j, (s j)).bind₁ p).map (algebraMap K ℂ)).eval x ≠ 0 } := by
592+
rw [f_eq', d_eq]
593+
ext x
594+
simp only [map_prod, eval_map, ne_eq, Set.preimage_setOf_eq, Set.mem_setOf_eq]
595+
simp only [← coe_eval₂Hom, ← coe_eval₂Hom, eval₂Hom_bind₁]
596+
simp [aeval_def]
597+
598+
have hs : Dense d := by
599+
rw [d_eq]
600+
apply dense_zero
601+
simp [Finset.prod_eq_zero_iff]
602+
intro j
603+
rw [map_eq_zero_iff]
604+
exact hs0 _
605+
apply MvPolynomial.map_injective
606+
exact FaithfulSMul.algebraMap_injective K ℂ
607+
have thing_ne_zero : (((∏ j, (s j)).bind₁ p).map (algebraMap K ℂ)) ≠ 0 := by
608+
intro h
609+
rw [h] at preimage_d_eq
610+
apply_fun (f '' .) at preimage_d_eq
611+
simp at preimage_d_eq
612+
rw [preimage_d_eq] at hs
613+
simp [dense_iff_closure_eq] at hs
614+
simp [Set.ext_iff] at hs
615+
have preimage_d_dense : Dense (f ⁻¹' d) := by
616+
rw [preimage_d_eq]
617+
apply dense_zero
618+
exact thing_ne_zero
556619
have : ∀ i, IsUnit (s i) := by
557620
intro i
558621
by_contra hu
559622
have : ∃ x : ι → ℂ, (s i).aeval x = 0 ∧ (r i).aeval x ≠ 0 :=
560623
exists_eq_zero_ne_zero (r i) (s i) (hrs _) hu
561624
rcases this with ⟨x, hxs, hxr⟩
562625
have : Nonempty ι := ⟨i⟩
563-
564-
apply @thing2 ι _ f (by
626+
apply @thing3 ι _ f (by
565627
rw [f_eq']
566628
continuity)
567-
{ x | ∀ i, (s i).aeval x ≠ 0 } i hs x
629+
d i preimage_d_dense x
568630
rw [Filter.tendsto_congr' (f₂ := fun x => aeval x (r i) / aeval x (s i))]
569631
· simp only [div_eq_mul_inv]
570632
let u : (ι → ℂ) → (ℂ × ℂ) := fun x => (aeval x (r i), (aeval x (s i))⁻¹)
@@ -642,19 +704,17 @@ lemma exists_mvPolynomial_inverse_aux [Finite ι] [Algebra K ℂ] (p : ι → Mv
642704
refine ⟨?_, ?_⟩
643705
· intro x hx
644706
rw [f_eq]
645-
· intro x
646-
rw [← _root_.funext_iff]
647-
revert x
648-
rw [← _root_.funext_iff]
649-
apply hs.eq_of_eqOn
650-
apply continuous_symm
651-
rw [f_eq']
652-
continuity
707+
· intro x i
708+
have h1 : ∀ j, aeval x (s j) ≠ 0 := by
709+
intro j h
710+
have := hv j
711+
apply_fun aeval x at this
712+
rw [map_mul, h] at this
713+
simp at this
714+
rw [f_symm_eq x h1 i, div_eq_iff (h1 _)]
653715
simp only
654-
continuity
655-
simp [funext_iff]
656-
intro x h1 i
657-
rw [f_symm_eq x h1 i, div_eq_iff (h1 _), mul_assoc, ← map_mul, ← hv, map_one, mul_one]
716+
rw [← map_mul, mul_assoc, ← hv]
717+
simp
658718

659719
set_option synthInstance.maxHeartbeats 90000
660720
noncomputable def toComplex [CharZero K] (hK : Cardinal.mk K ≤ Cardinal.continuum) : K →+* ℂ :=
@@ -670,7 +730,7 @@ noncomputable def toComplex [CharZero K] (hK : Cardinal.mk K ≤ Cardinal.contin
670730
refine le_trans (Algebra.IsAlgebraic.cardinalMk_le_max K _) ?_
671731
simp only [Cardinal.aleph0_le_mk, sup_of_le_left, hK]
672732
have h2 : Cardinal.lift (Cardinal.mk ℂ) ≤ Cardinal.mk ( AlgebraicClosure (FractionRing (MvPolynomial ℂ (AlgebraicClosure K)))) := by
673-
conv_rhs => rw [← Cardinal.lift_id (Cardinal.mk ( AlgebraicClosure (FractionRing (MvPolynomial ℂ (AlgebraicClosure K)))))]
733+
conv_rhs => rw [← Cardinal.lift_id (Cardinal.mk (AlgebraicClosure (FractionRing (MvPolynomial ℂ (AlgebraicClosure K)))))]
674734
apply Cardinal.lift_mk_le.2
675735
refine ⟨⟨?_, ?_⟩⟩
676736
· intro x
@@ -688,9 +748,8 @@ noncomputable def toComplex [CharZero K] (hK : Cardinal.mk K ≤ Cardinal.contin
688748
simp
689749
f4.toRingHom.comp <| f3.comp <| f2.comp <| f1
690750

691-
lemma exists_mvPolynomial_inverse [Finite ι] [CharZero K] [Algebra K L] [IsAlgClosed L]
692-
(p : ι → MvPolynomial ι K)
693-
(hInj : Function.Injective (fun x i => (aeval x (p i) : L))) :
751+
lemma exists_mvPolynomial_inverse {K L ι : Type*} [Field K] [Field L] [Finite ι] [CharZero K] [Algebra K L] [IsAlgClosed L]
752+
(p : ι → MvPolynomial ι K) (hInj : Function.Injective (fun x i => (aeval x (p i) : L))) :
694753
∃ q : ι → MvPolynomial ι K, (∀ i, (p i).bind₁ q = .X i) ∧ (∀ i, (q i).bind₁ p = .X i) := by
695754
let := Classical.decEq K
696755
let := Fintype.ofFinite ι
@@ -806,3 +865,5 @@ lemma exists_mvPolynomial_inverse [Finite ι] [CharZero K] [Algebra K L] [IsAlgC
806865
rw [eval, eval₂Hom_bind₁]
807866
simp
808867
exact this
868+
869+
#print axioms exists_mvPolynomial_inverse

0 commit comments

Comments
 (0)