Documentation

Analysis.Section_5_3

Аналіз I, Глава 5.3 #

I have attempted to make the translation as faithful a paraphrasing as possible of the original text. When there is a choice between a more idiomatic Lean solution and a more faithful translation, I have generally chosen the latter. In particular, there will be places where the Lean code could be "golfed" to be more elegant and idiomatic, but I have consciously avoided doing so.

Main constructions and results of this section:

A class of Cauchy sequences that start at zero

Instances
    @[reducible, inline]
    abbrev Chapter5.CauchySequence.mk' {a : } (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) :

    A sequence starting at zero that is Cauchy, can be viewed as a Cauchy sequence.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      @[simp]
      theorem Chapter5.CauchySequence.coe_eq {a : } (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) :
      toSequence = { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }
      @[simp]
      theorem Chapter5.CauchySequence.coe_to_sequence (a : CauchySequence) :
      { n₀ := 0, seq := fun (n : ) => if n 0 then (fun (n : ) => toSequence.seq n) n.toNat else 0, vanish := } = toSequence
      @[simp]
      theorem Chapter5.CauchySequence.coe_coe {a : } (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) :
      (fun (n : ) => toSequence.seq n) = a
      theorem Chapter5.Sequence.equiv_trans {a b c : } (hab : equiv a b) (hbc : equiv b c) :
      equiv a c

      Твердження 5.3.3 / Вправа 5.3.1

      Твердження 5.3.3 / Вправа 5.3.1

      Equations
      • One or more equations did not get rendered due to their size.
      theorem Chapter5.Sequence.isCauchy_of_const (a : ) :
      { n₀ := 0, seq := fun (n : ) => if n 0 then (fun (n : ) => a) n.toNat else 0, vanish := }.isCauchy

      Every constant sequence is Cauchy

      @[reducible, inline]
      Equations
      Instances For
        @[reducible, inline]
        noncomputable abbrev Chapter5.LIM (a : ) :

        It is convenient in Lean to assign the "dummy" value of 0 to LIM a when a is not Cauchy. This requires Classical logic, because the property of being Cauchy is not computable or decidable.

        Equations
        Instances For
          theorem Chapter5.LIM_def {a : } (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) :
          theorem Chapter5.Real.eq_lim (x : Real) :
          ∃ (a : ), { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy x = LIM a

          Визначення 5.3.1 (Real numbers)

          theorem Chapter5.Real.LIM_eq_LIM {a b : } (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) (hb : { n₀ := 0, seq := fun (n : ) => if n 0 then b n.toNat else 0, vanish := }.isCauchy) :

          Визначення 5.3.1 (Real numbers)

          theorem Chapter5.Sequence.add_cauchy {a b : } (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) (hb : { n₀ := 0, seq := fun (n : ) => if n 0 then b n.toNat else 0, vanish := }.isCauchy) :
          { n₀ := 0, seq := fun (n : ) => if n 0 then (a + b) n.toNat else 0, vanish := }.isCauchy

          Lemma 5.3.6 (Sum of Cauchy sequences is Cauchy)

          theorem Chapter5.Sequence.add_equiv_left {a a' : } (b : ) (haa' : equiv a a') :
          equiv (a + b) (a' + b)

          Lemma 5.3.7 (Sum of equivalent sequences is equivalent)

          theorem Chapter5.Sequence.add_equiv_right {b b' : } (a : ) (hbb' : equiv b b') :
          equiv (a + b) (a + b')

          Lemma 5.3.7 (Sum of equivalent sequences is equivalent)

          theorem Chapter5.Sequence.add_equiv {a b a' b' : } (haa' : equiv a a') (hbb' : equiv b b') :
          equiv (a + b) (a' + b')

          Lemma 5.3.7 (Sum of equivalent sequences is equivalent)

          noncomputable instance Chapter5.Real.add_inst :

          Визначення 5.3.4 (Addition of reals)

          Equations
          • One or more equations did not get rendered due to their size.
          theorem Chapter5.Real.add_of_LIM {a b : } (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) (hb : { n₀ := 0, seq := fun (n : ) => if n 0 then b n.toNat else 0, vanish := }.isCauchy) :
          LIM a + LIM b = LIM (a + b)

          Визначення 5.3.4 (Addition of reals)

          theorem Chapter5.Sequence.mul_cauchy {a b : } (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) (hb : { n₀ := 0, seq := fun (n : ) => if n 0 then b n.toNat else 0, vanish := }.isCauchy) :
          { n₀ := 0, seq := fun (n : ) => if n 0 then (a * b) n.toNat else 0, vanish := }.isCauchy

          Твердження 5.3.10 (Product of Cauchy sequences is Cauchy)

          theorem Chapter5.Sequence.mul_equiv_left {a a' : } (b : ) (haa' : equiv a a') :
          equiv (a * b) (a' * b)

          Твердження 5.3.10 (Product of equivalent sequences is equivalent) / Вправа 5.3.2

          theorem Chapter5.Sequence.mul_equiv_right {b b' : } (a : ) (hbb' : equiv b b') :
          equiv (a * b) (a * b')

          Proposition 5.3.10 (Product of equivalent sequences is equivalent) / Вправа 5.3.2

          theorem Chapter5.Sequence.mul_equiv {a b a' b' : } (haa' : equiv a a') (hbb' : equiv b b') :
          equiv (a * b) (a' * b')

          Proposition 5.3.10 (Product of equivalent sequences is equivalent) / Вправа 5.3.2

          noncomputable instance Chapter5.Real.mul_inst :

          Визначення 5.3.9 (Product of reals)

          Equations
          • One or more equations did not get rendered due to their size.
          theorem Chapter5.Real.mul_of_LIM {a b : } (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) (hb : { n₀ := 0, seq := fun (n : ) => if n 0 then b n.toNat else 0, vanish := }.isCauchy) :
          LIM a * LIM b = LIM (a * b)
          theorem Chapter5.Real.ratCast_def (q : ) :
          q = LIM fun (x : ) => q
          @[simp]
          theorem Chapter5.Real.ratCast_inj (q r : ) :
          q = r q = r

          Вправа 5.3.3

          Equations
          Equations
          @[simp]
          theorem Chapter5.Real.LIM_zero :
          (LIM fun (x : ) => 0) = 0
          Equations
          theorem Chapter5.Real.add_of_ratCast (a b : ) :
          a + b = ↑(a + b)
          theorem Chapter5.Real.mul_of_ratCast (a b : ) :
          a * b = ↑(a * b)
          noncomputable instance Chapter5.Real.instNeg :
          Equations
          theorem Chapter5.Real.neg_of_ratCast (a : ) :
          -a = ↑(-a)
          theorem Chapter5.Real.neg_of_LIM (a : ) (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) :
          -LIM a = LIM (-a)

          It may be possible to omit the Cauchy sequence hypothesis here.

          theorem Chapter5.Real.neg_of_cauchy (a : ) (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) :
          { n₀ := 0, seq := fun (n : ) => if n 0 then (-a) n.toNat else 0, vanish := }.isCauchy
          theorem Chapter5.Real.sub_eq_add_neg (x y : Real) :
          x - y = x + -y
          theorem Chapter5.Real.sub_of_cauchy {a b : } (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) (hb : { n₀ := 0, seq := fun (n : ) => if n 0 then b n.toNat else 0, vanish := }.isCauchy) :
          { n₀ := 0, seq := fun (n : ) => if n 0 then (a - b) n.toNat else 0, vanish := }.isCauchy
          theorem Chapter5.Real.sub_of_LIM {a b : } (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) (hb : { n₀ := 0, seq := fun (n : ) => if n 0 then b n.toNat else 0, vanish := }.isCauchy) :
          LIM a - LIM b = LIM (a - b)
          theorem Chapter5.Real.sub_of_ratCast (a b : ) :
          a - b = ↑(a - b)

          Твердження 5.3.12 (laws of algebra)

          Equations

          Твердження 5.3.12 (laws of algebra)

          Equations
          • One or more equations did not get rendered due to their size.
          noncomputable instance Chapter5.Real.instCommRing :

          Твердження 5.3.12 (laws of algebra)

          Equations
          • One or more equations did not get rendered due to their size.
          @[reducible, inline]
          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            @[reducible, inline]

            Визначення 5.3.12 (sequences bounded away from zero). Sequences are indexed to start from zero as this is more convenient for Mathlib purposes.

            Equations
            Instances For
              theorem Chapter5.bounded_away_zero_def (a : ) :
              bounded_away_zero a c > 0, ∀ (n : ), |a n| c
              theorem Chapter5.Real.bounded_away_zero_of_nonzero {x : Real} (hx : x 0) :
              ∃ (a : ), { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy bounded_away_zero a x = LIM a

              Лема 5.3.14

              theorem Chapter5.Real.lim_of_bounded_away_zero {a : } (ha : bounded_away_zero a) (ha_cauchy : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) :
              LIM a 0

              This result was not explicitly stated in the text, but is needed in the theory. It's a good exercise, so I'm setting it as such.

              theorem Chapter5.Real.inv_of_bounded_away_zero_cauchy {a : } (ha : bounded_away_zero a) (ha_cauchy : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) :
              { n₀ := 0, seq := fun (n : ) => if n 0 then a⁻¹ n.toNat else 0, vanish := }.isCauchy

              Лема 5.3.15

              theorem Chapter5.Real.inv_of_equiv {a b : } (ha : bounded_away_zero a) (ha_cauchy : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) (hb : bounded_away_zero b) (hb_cauchy : { n₀ := 0, seq := fun (n : ) => if n 0 then b n.toNat else 0, vanish := }.isCauchy) (hlim : LIM a = LIM b) :

              Лема 5.3.17 (Reciprocation is well-defined)

              noncomputable instance Chapter5.Real.instInv :

              Визначення 5.3.16 (Reciprocation of real numbers). Requires classical logic because we need to assign a "junk" value to the inverse of 0.

              Equations
              theorem Chapter5.Real.inv_def {a : } (h : bounded_away_zero a) (hc : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isCauchy) :
              theorem Chapter5.Real.self_mul_inv {x : Real} (hx : x 0) :
              x * x⁻¹ = 1
              theorem Chapter5.Real.inv_mul_self {x : Real} (hx : x 0) :
              x * x⁻¹ = 1

              Default definition of division

              Equations
              • One or more equations did not get rendered due to their size.
              theorem Chapter5.Real.div_eq (x y : Real) :
              x / y = x * y⁻¹
              noncomputable instance Chapter5.Real.instField :
              Equations
              • One or more equations did not get rendered due to their size.
              theorem Chapter5.Real.mul_right_cancel₀ {x y z : Real} (hz : z 0) (h : x * z = y * z) :
              x = y
              theorem Chapter5.Real.mul_right_nocancel :
              ¬∀ (x y z : Real), z = 0x * z = y * zx = y
              theorem Chapter5.Real.equiv_of_bounded {a b : } (ha : { n₀ := 0, seq := fun (n : ) => if n 0 then a n.toNat else 0, vanish := }.isBounded) (hab : Sequence.equiv a b) :
              { n₀ := 0, seq := fun (n : ) => if n 0 then b n.toNat else 0, vanish := }.isBounded

              Вправа 5.3.4

              theorem Chapter5.Real.Cauchy_of_harmonic :
              { n₀ := 0, seq := fun (n : ) => if n 0 then (fun (n : ) => 1 / (n + 1)) n.toNat else 0, vanish := }.isCauchy

              Вправа 5.3.5

              theorem Chapter5.Real.LIM_of_harmonic :
              (LIM fun (n : ) => 1 / (n + 1)) = 0

              Вправа 5.3.5