Skip to content

Commit

Permalink
init
Browse files Browse the repository at this point in the history
  • Loading branch information
mbkybky committed Oct 26, 2024
1 parent d3d7ff3 commit 3d05f49
Show file tree
Hide file tree
Showing 5 changed files with 151 additions and 0 deletions.
60 changes: 60 additions & 0 deletions Others/Finite.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/-
Copyright (c) 2024 Yongle Hu. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yongle Hu
-/
import Mathlib.NumberTheory.NumberField.Basic

section

open Ideal

attribute [local instance] Ideal.Quotient.field in
/-- If `p` is a non-zero ideal of the `ℤ`, then `ℤ ⧸ p` is finite. -/
theorem Int.Quotient.finite_of_ne_bot {I : Ideal ℤ} (h : I ≠ ⊥) : Finite (ℤ ⧸ I) := by
have equiv := Int.quotientSpanEquivZMod (Submodule.IsPrincipal.generator I)
rw [span_singleton_generator I] at equiv
haveI : NeZero (Submodule.IsPrincipal.generator I).natAbs := ⟨fun eq ↦
h ((Submodule.IsPrincipal.eq_bot_iff_generator_eq_zero I).mpr (Int.natAbs_eq_zero.mp eq))⟩
exact Finite.of_equiv (ZMod (Submodule.IsPrincipal.generator I).natAbs) equiv.symm

/-- In particular, if `p` is a maximal ideal of the `ℤ`, then `ℤ ⧸ p` is a finite field. -/
instance Int.Quotient.finite_of_is_maxiaml (p : Ideal ℤ) [hpm : p.IsMaximal] :
Finite (ℤ ⧸ p) :=
finite_of_ne_bot (Ring.ne_bot_of_isMaximal_of_not_isField hpm Int.not_isField)

/- #check Module.finite_of_finite
#check FiniteDimensional.fintypeOfFintype
def Module.Finite.finiteOfFinite {R M : Type*} [CommRing R] [Finite R] [AddCommMonoid M] [Module R M]
[Module.Finite R M] : Finite M := by
have := exists_fin' R M --exact .of_surjective f hf
sorry -/

variable {R : Type*} [CommRing R] [h : Module.Finite ℤ R]

theorem Ideal.Quotient.finite_of_module_finite_int {I : Ideal R} (hp : I ≠ ⊥) : Finite (R ⧸ I) := sorry

-- `NoZeroSMulDivisors` can be removed
instance Ideal.Quotient.finite_of_module_finite_int_of_isMaxiaml [NoZeroSMulDivisors ℤ R] [IsDomain R]
(p : Ideal R) [hpm : p.IsMaximal] : Finite (R ⧸ p) :=
Ideal.Quotient.finite_of_module_finite_int <| Ring.ne_bot_of_isMaximal_of_not_isField hpm <|
fun hf => Int.not_isField <|
(Algebra.IsIntegral.isField_iff_isField (NoZeroSMulDivisors.algebraMap_injective ℤ R)).mpr hf

end

namespace NumberField

variable {K : Type*} [Field K] [NumberField K]

/-- For any nonzero ideal `I` of `𝓞 K`, `(𝓞 K) ⧸ I` has only finite elements.
Note that if `I` is maximal, then `Finite ((𝓞 K) ⧸ I)` can be obtained by `inferInstance`. -/
theorem quotientFiniteOfNeBot {I : Ideal (𝓞 K)} (h : I ≠ ⊥) : Finite ((𝓞 K) ⧸ I) :=
Ideal.Quotient.finite_of_module_finite_int h

example (p : Ideal (𝓞 K)) [p.IsMaximal] : Finite ((𝓞 K) ⧸ p) := inferInstance

/- instance quotientFiniteOfIsMaxiaml (p : Ideal (𝓞 K)) [hpm : p.IsMaximal] : Finite ((𝓞 K) ⧸ p) :=
quotientFiniteOfNeBot (Ring.ne_bot_of_isMaximal_of_not_isField hpm (RingOfIntegers.not_isField K)) -/

end NumberField
12 changes: 12 additions & 0 deletions Others/FractionRing.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/-
Copyright (c) 2024 Yongle Hu. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yongle Hu
-/
import Mathlib.LinearAlgebra.FiniteDimensional.Defs

attribute [local instance] FractionRing.liftAlgebra

instance {A B : Type*} [CommRing A] [IsDomain A] [CommRing B] [IsDomain B] [Algebra A B]
[Module.Finite A B] [NoZeroSMulDivisors A B] :
FiniteDimensional (FractionRing A) (FractionRing B) := sorry
17 changes: 17 additions & 0 deletions Others/Normal.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/-
Copyright (c) 2024 Yongle Hu. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yongle Hu
-/
import Mathlib.FieldTheory.PurelyInseparable
import Mathlib.NumberTheory.NumberField.Basic
import Mathlib.RingTheory.Valuation.ValuationRing

attribute [local instance] Ideal.Quotient.field

variable {A B : Type*} [CommRing A] [IsDomain A] [CommRing B] [IsDomain B] [Algebra A B]
(p : Ideal A) (P : Ideal B) [p.IsMaximal] [P.IsMaximal] [P.LiesOver p]
(K L : Type*) [Field K] [Field L] [Algebra A K] [IsFractionRing A K] [Algebra B L] [Algebra K L]
[Algebra A L] [IsScalarTower A B L] [IsScalarTower A K L] [Normal K L]

example : Normal (A ⧸ p) (B ⧸ P) := sorry
29 changes: 29 additions & 0 deletions Others/restrictScalarsHom.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/-
Copyright (c) 2024 Yongle Hu. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yongle Hu
-/
import Mathlib.Algebra.Algebra.Subalgebra.Tower
import Mathlib.LinearAlgebra.Dimension.Finrank

variable (R S A : Type*) [CommSemiring R] [CommSemiring S] [Semiring A] [Algebra R S] [Algebra S A]
[Algebra R A] [IsScalarTower R S A]

def AlgEquiv.restrictScalarsHom : (A ≃ₐ[S] A) →* (A ≃ₐ[R] A) where
toFun f := AlgEquiv.restrictScalars R f
map_one' := rfl
map_mul' _ _ := rfl

theorem AlgEquiv.restrictScalarsHom_injective : Function.Injective (AlgEquiv.restrictScalarsHom R S A) :=
AlgEquiv.restrictScalars_injective R

theorem AlgEquiv.restrictScalarsHom_bot_surjective :
Function.Surjective (AlgEquiv.restrictScalarsHom R (⊥ : Subalgebra R S) S) := sorry

noncomputable def subalgebra_bot_aut_equiv : (S ≃ₐ[(⊥ : Subalgebra R S)] S) ≃* (S ≃ₐ[R] S) :=
MulEquiv.ofBijective _
⟨AlgEquiv.restrictScalarsHom_injective R _ S, AlgEquiv.restrictScalarsHom_bot_surjective R S⟩

noncomputable def aut_equiv_of_finrank_eq_one {R S : Type*} (A : Type*) [CommSemiring R] [CommRing S]
[Semiring A] [Algebra R S] [Algebra S A] [Algebra R A] [IsScalarTower R S A]
(h : Module.finrank R S = 1) : (A ≃ₐ[S] A) ≃* (A ≃ₐ[R] A) := sorry
33 changes: 33 additions & 0 deletions Others/separableClosure.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/-
Copyright (c) 2024 Yongle Hu. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yongle Hu
-/
import Mathlib.FieldTheory.PurelyInseparable

namespace separableClosure

variable (K L : Type*) [Field K] [Field L] [Algebra K L] [Normal K L]

#check IsPurelyInseparable.injective_comp_algebraMap

#check instUniqueAlgHomOfIsPurelyInseparable

#check separableClosure.isPurelyInseparable

theorem restrictNormalHom_injective : Function.Injective
(AlgEquiv.restrictNormalHom (F := K) (K₁ := L) (separableClosure K L)) := by
sorry

noncomputable def restrictNormalEquiv : (L ≃ₐ[K] L) ≃*
(separableClosure K L) ≃ₐ[K] (separableClosure K L) :=
MulEquiv.ofBijective _
⟨restrictNormalHom_injective K L, AlgEquiv.restrictNormalHom_surjective L⟩

example (e : PowerBasis K (separableClosure K L)) (σ τ : L ≃ₐ[K] L) (h : σ e.gen = τ e.gen) : σ = τ := by
sorry

example [FiniteDimensional K L] : ∃ x : L, ∀ σ τ : L ≃ₐ[K] L, σ x = τ x → σ = τ := by
sorry

end separableClosure

0 comments on commit 3d05f49

Please sign in to comment.