Module docstring
{"# Topology on the rational numbers
The structure of a metric space on ℚ is introduced in this file, induced from ℝ.
"}
{"# Topology on the rational numbers
The structure of a metric space on ℚ is introduced in this file, induced from ℝ.
"}
Rat.instMetricSpace
      instance
     : MetricSpace ℚ
        instance : MetricSpace ℚ :=
  MetricSpace.induced (↑) Rat.cast_injective Real.metricSpace
        Rat.dist_eq
      theorem
     (x y : ℚ) : dist x y = |(x : ℝ) - y|
        theorem dist_eq (x y : ℚ) : dist x y = |(x : ℝ) - y| := rfl
        Rat.dist_cast
      theorem
     (x y : ℚ) : dist (x : ℝ) y = dist x y
        
      Rat.uniformContinuous_coe_real
      theorem
     : UniformContinuous ((↑) : ℚ → ℝ)
        theorem uniformContinuous_coe_real : UniformContinuous ((↑) : ℚ → ℝ) :=
  uniformContinuous_comap
        Rat.isUniformEmbedding_coe_real
      theorem
     : IsUniformEmbedding ((↑) : ℚ → ℝ)
        theorem isUniformEmbedding_coe_real : IsUniformEmbedding ((↑) : ℚ → ℝ) :=
  isUniformEmbedding_comap Rat.cast_injective
        Rat.isDenseEmbedding_coe_real
      theorem
     : IsDenseEmbedding ((↑) : ℚ → ℝ)
        theorem isDenseEmbedding_coe_real : IsDenseEmbedding ((↑) : ℚ → ℝ) :=
  isUniformEmbedding_coe_real.isDenseEmbedding Rat.denseRange_cast
        Rat.isEmbedding_coe_real
      theorem
     : IsEmbedding ((↑) : ℚ → ℝ)
        theorem isEmbedding_coe_real : IsEmbedding ((↑) : ℚ → ℝ) :=
  isDenseEmbedding_coe_real.isEmbedding
        Rat.continuous_coe_real
      theorem
     : Continuous ((↑) : ℚ → ℝ)
        theorem continuous_coe_real : Continuous ((↑) : ℚ → ℝ) :=
  uniformContinuous_coe_real.continuous
        Nat.dist_cast_rat
      theorem
     (x y : ℕ) : dist (x : ℚ) y = dist x y
        @[norm_cast, simp]
theorem Nat.dist_cast_rat (x y : ℕ) : dist (x : ℚ) y = dist x y := by
  rw [← Nat.dist_cast_real, ← Rat.dist_cast]; congr
        Nat.isUniformEmbedding_coe_rat
      theorem
     : IsUniformEmbedding ((↑) : ℕ → ℚ)
        theorem Nat.isUniformEmbedding_coe_rat : IsUniformEmbedding ((↑) : ℕ → ℚ) :=
  isUniformEmbedding_bot_of_pairwise_le_dist zero_lt_one <| by simpa using Nat.pairwise_one_le_dist
        Nat.isClosedEmbedding_coe_rat
      theorem
     : IsClosedEmbedding ((↑) : ℕ → ℚ)
        theorem Nat.isClosedEmbedding_coe_rat : IsClosedEmbedding ((↑) : ℕ → ℚ) :=
  isClosedEmbedding_of_pairwise_le_dist zero_lt_one <| by simpa using Nat.pairwise_one_le_dist
        Int.dist_cast_rat
      theorem
     (x y : ℤ) : dist (x : ℚ) y = dist x y
        @[norm_cast, simp]
theorem Int.dist_cast_rat (x y : ℤ) : dist (x : ℚ) y = dist x y := by
  rw [← Int.dist_cast_real, ← Rat.dist_cast]; congr
        Int.isUniformEmbedding_coe_rat
      theorem
     : IsUniformEmbedding ((↑) : ℤ → ℚ)
        theorem Int.isUniformEmbedding_coe_rat : IsUniformEmbedding ((↑) : ℤ → ℚ) :=
  isUniformEmbedding_bot_of_pairwise_le_dist zero_lt_one <| by simpa using Int.pairwise_one_le_dist
        Int.isClosedEmbedding_coe_rat
      theorem
     : IsClosedEmbedding ((↑) : ℤ → ℚ)
        theorem Int.isClosedEmbedding_coe_rat : IsClosedEmbedding ((↑) : ℤ → ℚ) :=
  isClosedEmbedding_of_pairwise_le_dist zero_lt_one <| by simpa using Int.pairwise_one_le_dist
        Rat.instNoncompactSpace
      instance
     : NoncompactSpace ℚ
        instance : NoncompactSpace ℚ := Int.isClosedEmbedding_coe_rat.noncompactSpace
        Rat.uniformContinuous_add
      theorem
     : UniformContinuous fun p : ℚ × ℚ => p.1 + p.2
        theorem uniformContinuous_add : UniformContinuous fun p : ℚℚ × ℚ => p.1 + p.2 :=
  Rat.isUniformEmbedding_coe_real.isUniformInducing.uniformContinuous_iff.2 <| by
    simp only [Function.comp_def, Rat.cast_add]
    exact Real.uniformContinuous_add.comp
      (Rat.uniformContinuous_coe_real.prodMap Rat.uniformContinuous_coe_real)
        Rat.uniformContinuous_neg
      theorem
     : UniformContinuous (@Neg.neg ℚ _)
        theorem uniformContinuous_neg : UniformContinuous (@Neg.neg ℚ _) :=
  Metric.uniformContinuous_iff.2 fun ε ε0 =>
    ⟨_, ε0, fun _ _ h => by simpa only [abs_sub_comm, dist_eq, cast_neg, neg_sub_neg] using h⟩
        Rat.instIsUniformAddGroup
      instance
     : IsUniformAddGroup ℚ
        
      Rat.instIsTopologicalAddGroup
      instance
     : IsTopologicalAddGroup ℚ
        instance : IsTopologicalAddGroup ℚ := inferInstance
        Rat.instOrderTopology
      instance
     : OrderTopology ℚ
        instance : OrderTopology ℚ := induced_orderTopology _ Rat.cast_lt exists_rat_btwn
        Rat.uniformContinuous_abs
      theorem
     : UniformContinuous (abs : ℚ → ℚ)
        theorem uniformContinuous_abs : UniformContinuous (abs : ℚ → ℚ) :=
  Metric.uniformContinuous_iff.2 fun ε ε0 =>
    ⟨ε, ε0, fun _ _ h =>
      lt_of_le_of_lt (by simpa [Rat.dist_eq] using abs_abs_sub_abs_le_abs_sub _ _) h⟩
        Rat.instIsTopologicalRing
      instance
     : IsTopologicalRing ℚ
        instance : IsTopologicalRing ℚ := inferInstance
        Rat.totallyBounded_Icc
      theorem
     (a b : ℚ) : TotallyBounded (Icc a b)
        nonrec theorem totallyBounded_Icc (a b : ℚ) : TotallyBounded (Icc a b) := by
  simpa only [preimage_cast_Icc]
    using totallyBounded_preimage Rat.isUniformEmbedding_coe_real.isUniformInducing
      (totallyBounded_Icc (a : ℝ) b)
        NNRat.instMetricSpace
      instance
     : MetricSpace ℚ≥0
        instance : MetricSpace ℚ≥0 :=
  Subtype.metricSpace
        NNRat.dist_eq
      theorem
     (p q : ℚ≥0) : dist p q = dist (p : ℚ) (q : ℚ)
        
      NNRat.nndist_eq
      theorem
     (p q : ℚ≥0) : nndist p q = nndist (p : ℚ) (q : ℚ)
        
      NNRat.instIsTopologicalSemiring
      instance
     : IsTopologicalSemiring ℚ≥0
        instance : IsTopologicalSemiring ℚ≥0 where
  toContinuousAdd := continuousAdd_induced Nonneg.coeRingHom
  toContinuousMul := continuousMul_induced Nonneg.coeRingHom
        NNRat.instContinuousSub
      instance
     : ContinuousSub ℚ≥0
        
      NNRat.instOrderTopology
      instance
     : OrderTopology ℚ≥0
        instance : OrderTopology ℚ≥0 := orderTopology_of_ordConnected (t := Set.Ici 0)
        NNRat.instHasContinuousInv₀
      instance
     : HasContinuousInv₀ ℚ≥0
        instance : HasContinuousInv₀ ℚ≥0 := inferInstance