import Definitions.Def_CerednikDrinfeld_DrinfeldHolomorphic
import Definitions.Def_ValuationSubring_CompletionRatClosure
import Definitions.Def_ValuationSubring_CompletionDecompositionAction
import Mathlib.FieldTheory.Fixed
import Mathlib.Topology.Algebra.Field

set_option autoImplicit false

noncomputable section

open CerednikDrinfeld

namespace ValuationSubring

variable (A : ValuationSubring (AlgebraicClosure ℚ)) [Fact (A.DecompositionIsometric ℚ)]

theorem smul_completion_eq_self_of_mem_ratClosure (σ : A.decompositionSubgroup ℚ)
    {x : A.valuation.Completion} (hx : x ∈ ratClosure A) : σ • x = x := by

  have hc : IsClosed {y : A.valuation.Completion | σ • y = y} :=
    isClosed_eq (continuous_smul_completion σ) continuous_id
  have hle : ratClosure A ≤ FixedBy.subfield A.valuation.Completion σ :=
    Subfield.topologicalClosure_minimal ⊥ bot_le hc
  exact hle hx

def decompositionToIsometricAut :
    A.decompositionSubgroup ℚ →* Omega.IsometricAut ↥(ratClosure A) A.valuation.Completion where
  toFun σ :=
    { toRingEquiv := completionRingAut σ
      isometry := fun x => valuation_smul_completion σ x
      fix := fun a => smul_completion_eq_self_of_mem_ratClosure A σ a.2 }
  map_one' := by
    apply Omega.IsometricAut.ext
    ext x
    change (1 : ↥(A.decompositionSubgroup ℚ)) • x = x
    exact one_smul _ x
  map_mul' σ τ := by
    apply Omega.IsometricAut.ext
    ext x
    change (σ * τ) • x = σ • (τ • x)
    exact mul_smul σ τ x

@[simp] theorem decompositionToIsometricAut_toRingEquiv_apply (σ : A.decompositionSubgroup ℚ)
    (x : A.valuation.Completion) :
    (decompositionToIsometricAut A σ).toRingEquiv x = σ • x := rfl

theorem decompositionToIsometricAut_toRingEquiv (σ : A.decompositionSubgroup ℚ) :
    (decompositionToIsometricAut A σ).toRingEquiv = completionRingAut σ := rfl

theorem decompositionToIsometricAut_coe (σ : A.decompositionSubgroup ℚ) (a : AlgebraicClosure ℚ) :
    (decompositionToIsometricAut A σ).toRingEquiv ((a : AlgebraicClosure ℚ) : A.valuation.Completion) =
      (((σ : AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) a : AlgebraicClosure ℚ) : A.valuation.Completion) :=
  smul_completion_coe σ a

theorem decompositionToIsometricAut_toRingEquiv_symm_apply (σ : A.decompositionSubgroup ℚ)
    (x : A.valuation.Completion) :
    (decompositionToIsometricAut A σ).toRingEquiv.symm x = σ⁻¹ • x := by
  rw [← Omega.IsometricAut.inv_toRingEquiv, ← map_inv]
  rfl

end ValuationSubring

end
