@@ -2,11 +2,8 @@ import Mathlib
22
33open Topology
44
5- lemma continuous_symm {ι : Type *} [Finite ι] (f : (ι → ℂ) ≃ (ι → ℂ)) (hf : Continuous f) : Continuous f.symm := sorry
6-
75lemma 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+
70111lemma 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
659719set_option synthInstance.maxHeartbeats 90000
660720noncomputable 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