Documentation

Analysis.Section_3_3

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

Я (пр.перекл. Терренс Тао) намагався зробити переклад якомога точнішим перефразуванням оригінального тексту. Коли є вибір між більш ідіоматичним рішенням Lean та більш точним перекладом, я зазвичай обирав останній. Зокрема, будуть місця, де код Lean можна було б "підбуцнути", щоб зробити його більш елегантним та ідіоматичним, але я свідомо уникав цього вибору.

Основні конструкції та результати цього розділу:

У решті книги ми відмовимося від версії функції із Розділу 3 та працюватимемо з поняттям функції із Mathlib. Навіть у цьому розділі ми перейдемо до формалізму Mathlib для деяких прикладів, що стосуються систем числення, таких як або , які не були реалізовані у фреймворку Розділу 3.

structure Chapter3.Function [SetTheory] (X Y : Set) :

Визначення 3.3.1. Function X Y — це структура функцій із X до Y. Аналогічно типу Mathlib X → Y.

Instances For
    theorem Chapter3.Function.ext {inst✝ : SetTheory} {X Y : Set} {x y : Function X Y} (P : x.P = y.P) :
    x = y
    theorem Chapter3.Function.ext_iff {inst✝ : SetTheory} {X Y : Set} {x y : Function X Y} :
    x = y x.P = y.P
    noncomputable instance Chapter3.Function.inst_coefn [SetTheory] (X Y : Set) :
    CoeFun (Function X Y) fun (x : Function X Y) => X.toSubtypeY.toSubtype

    Перетворення функції f: Function X Y із Розділу 3 на функцію Mathlib f: X → Y. Визначення функції із Розділу 3 було неконструктивним, тому тут нам доведеться використати аксіому вибору.

    Equations
    @[reducible, inline]
    noncomputable abbrev Chapter3.Function.to_fn [SetTheory] {X Y : Set} (f : Function X Y) (x : X.toSubtype) :
    Equations
    Instances For
      theorem Chapter3.Function.to_fn_eval [SetTheory] {X Y : Set} (f : Function X Y) (x : X.toSubtype) :
      f.to_fn x = (fun (x : X.toSubtype) => Classical.choose ) x
      @[reducible, inline]
      abbrev Chapter3.Function.mk_fn [SetTheory] {X Y : Set} (f : X.toSubtypeY.toSubtype) :

      Перетворення функції Mathlib на функцію з Розділу 3

      Equations
      Instances For
        theorem Chapter3.Function.eval [SetTheory] {X Y : Set} (f : Function X Y) (x : X.toSubtype) (y : Y.toSubtype) :
        y = (fun (x : X.toSubtype) => Classical.choose ) x f.P x y

        Визначення 3.3.1

        @[simp]
        theorem Chapter3.Function.eval_of [SetTheory] {X Y : Set} (f : X.toSubtypeY.toSubtype) (x : X.toSubtype) :
        (fun (x : X.toSubtype) => Classical.choose ) x = f x
        @[reducible, inline]

        Приклад 3.3.2.

        Equations
        Instances For
          @[reducible, inline]
          Equations
          Instances For
            theorem Chapter3.SetTheory.Set.f_3_3_2a_eval' [SetTheory] (n : ) :
            (fun (x : nat.toSubtype) => Classical.choose ) n = ↑(n + 1)
            theorem Chapter3.SetTheory.Set.f_3_3_2a_eval''' [SetTheory] (n : ) :
            (fun (x : nat.toSubtype) => Classical.choose ) ↑(2 * n + 3) = ↑(2 * n + 4)
            @[reducible, inline]
            Equations
            Instances For
              @[reducible, inline]

              Створює версію ненульового n всередині nat \ {0} для будь-якого натурального числа n.

              Equations
              Instances For
                theorem Chapter3.SetTheory.Set.f_3_3_2c_eval' [SetTheory] (n : ) :
                (fun (x : (nat \ {0}).toSubtype) => Classical.choose ) (coe_nonzero (n + 1) ) = n
                theorem Chapter3.SetTheory.Set.f_3_3_2c_eval''' [SetTheory] (n : ) :
                (fun (x : (nat \ {0}).toSubtype) => Classical.choose ) (coe_nonzero (2 * n + 3) ) = ↑(2 * n + 2)
                @[reducible, inline]

                Приклад 3.3.4. Невикористана змінна _x підкреслена, щоб уникнути спрацьовування лінтера.

                Equations
                Instances For
                  theorem Chapter3.Function.eq_iff [SetTheory] {X Y : Set} (f g : Function X Y) :
                  f = g ∀ (x : X.toSubtype), (fun (x : X.toSubtype) => Classical.choose ) x = (fun (x : X.toSubtype) => Classical.choose ) x

                  Визначення 3.3.7 (Рівність функцій)

                  @[reducible, inline]

                  Приклад 3.3.8 (спрощений). Другу частину прикладу складно відтворити в цьому формалізмі, тому натомість цього пропонується замінник із Mathlib.

                  Equations
                  Instances For
                    @[reducible, inline]

                    Приклад 3.3.9

                    Equations
                    Instances For
                      @[reducible, inline]
                      noncomputable abbrev Chapter3.Function.comp [SetTheory] {X Y Z : Set} (g : Function Y Z) (f : Function X Y) :

                      Визначення 3.3.10 (Композиція)

                      Equations
                      Instances For
                        theorem Chapter3.Function.comp_eval [SetTheory] {X Y Z : Set} (g : Function Y Z) (f : Function X Y) (x : X.toSubtype) :
                        (fun (x : X.toSubtype) => Classical.choose ) x = (fun (x : Y.toSubtype) => Classical.choose ) ((fun (x : X.toSubtype) => Classical.choose ) x)
                        theorem Chapter3.Function.comp_eq_comp [SetTheory] {X Y Z : Set} (g : Function Y Z) (f : Function X Y) :

                        Сумісність з операцією композиції Mathlib. Вам можуть бути корисними тактики ext та simp.

                        theorem Chapter3.SetTheory.Set.comp_assoc [SetTheory] {W X Y Z : Set} (h : Function Y Z) (g : Function X Y) (f : Function W X) :
                        h(gf) = (hg)f

                        Лема 3.3.12 (Композиція асоціативна)

                        @[reducible, inline]
                        Equations
                        Instances For
                          theorem Chapter3.Function.one_to_one_iff [SetTheory] {X Y : Set} (f : Function X Y) :
                          f.one_to_one ∀ (x x' : X.toSubtype), (fun (x : X.toSubtype) => Classical.choose ) x = (fun (x : X.toSubtype) => Classical.choose ) x'x = x'

                          Сумісність із Mathlib-івським Function.Injective. Можливо, ви захочете скористатися тактикою unfold, щоб зрозуміти такі концепції Mathlib, як Function.Injective.

                          Приклад 3.3.15. Одна половина прикладу вимагає цілих чисел, тому виражається за допомогою функцій Mathlib замість функцій із Розділу 3.

                          theorem Chapter3.SetTheory.Set.two_to_one [SetTheory] {X Y : Set} {f : Function X Y} (h : ¬f.one_to_one) :
                          ∃ (x : X.toSubtype) (x' : X.toSubtype), x x' (fun (x : X.toSubtype) => Classical.choose ) x = (fun (x : X.toSubtype) => Classical.choose ) x'

                          Ремарка 3.3.16

                          @[reducible, inline]
                          abbrev Chapter3.Function.onto [SetTheory] {X Y : Set} (f : Function X Y) :

                          Визначення 3.3.17 (Сур'єктивні функції)

                          Equations
                          Instances For

                            Сумісність із Mathlib-івським Function.Surjective

                            @[reducible, inline]
                            Equations
                            Instances For
                              @[reducible, inline]

                              Визначення 3.3.20 (Бієктивні функції)

                              Equations
                              Instances For

                                Сумісність із Mathlib-івським Function.Bijective

                                @[reducible, inline]
                                abbrev Chapter3.f_3_3_21 :
                                Fin 3{3, 4}

                                Приклад 3.3.21 (використовуючи Mathlib)

                                Equations
                                Instances For
                                  theorem Chapter3.Function.bijective_incorrect_def [SetTheory] :
                                  ∃ (X : Set) (Y : Set) (f : Function X Y), (∀ (x : X.toSubtype), ∃! y : Y.toSubtype, y = (fun (x : X.toSubtype) => Classical.choose ) x) ¬f.bijective

                                  Ремарка 3.3.24

                                  @[reducible, inline]
                                  abbrev Chapter3.Function.inverse [SetTheory] {X Y : Set} (f : Function X Y) (h : f.bijective) :

                                  Ми не можемо використовувати позначення f⁻¹ для оберненої функції, оскільки в класі Inv Mathlib-у обернена функція f повинна бути точно такого ж типу, як f, а Function Y X має інший тип, ніж Function X Y.

                                  Equations
                                  Instances For
                                    theorem Chapter3.Function.inverse_eval [SetTheory] {X Y : Set} {f : Function X Y} (h : f.bijective) (y : Y.toSubtype) (x : X.toSubtype) :
                                    x = (fun (x : Y.toSubtype) => Classical.choose ) y (fun (x : X.toSubtype) => Classical.choose ) x = y

                                    Сумісність із Mathlib-овським поняттям інверсивності

                                    theorem Chapter3.Function.refl [SetTheory] {X Y : Set} (f : Function X Y) :
                                    f = f

                                    Вправа 3.3.1

                                    theorem Chapter3.Function.symm [SetTheory] {X Y : Set} (f g : Function X Y) :
                                    f = g g = f
                                    theorem Chapter3.Function.trans [SetTheory] {X Y : Set} {f g h : Function X Y} (hfg : f = g) (hgh : g = h) :
                                    f = h
                                    theorem Chapter3.Function.comp_congr [SetTheory] {X Y Z : Set} {f f' : Function X Y} (hff' : f = f') {g g' : Function Y Z} (hgg' : g = g') :
                                    gf = g'f'
                                    theorem Chapter3.Function.comp_of_inj [SetTheory] {X Y Z : Set} {f : Function X Y} {g : Function Y Z} (hf : f.one_to_one) (hg : g.one_to_one) :

                                    Вправа 3.3.2

                                    theorem Chapter3.Function.comp_of_surj [SetTheory] {X Y Z : Set} {f : Function X Y} {g : Function Y Z} (hf : f.onto) (hg : g.onto) :
                                    (gf).onto
                                    theorem Chapter3.Function.comp_cancel_left [SetTheory] {X Y Z : Set} {f f' : Function X Y} {g : Function Y Z} (heq : gf = gf') (hg : g.one_to_one) :
                                    f = f'

                                    Вправа 3.3.4. Сформулюйте та доведіть теореми або контрприклади у випадку, якщо hg або hf пропущені як гіпотези.

                                    theorem Chapter3.Function.comp_cancel_right [SetTheory] {X Y Z : Set} {f : Function X Y} {g g' : Function Y Z} (heq : gf = g'f) (hf : g.onto) :
                                    g = g'
                                    theorem Chapter3.Function.comp_injective [SetTheory] {X Y Z : Set} {f : Function X Y} {g : Function Y Z} (hinj : (gf).one_to_one) :

                                    Вправа 3.3.5. Наведіть або доведіть теореми чи контрприклади у випадку, якщо f замінено на g або навпаки у висновку.

                                    theorem Chapter3.Function.comp_surjective [SetTheory] {X Y Z : Set} {f : Function X Y} {g : Function Y Z} (hinj : (gf).onto) :
                                    theorem Chapter3.Function.inverse_comp_self [SetTheory] {X Y : Set} {f : Function X Y} (h : f.bijective) (x : X.toSubtype) :
                                    (fun (x : Y.toSubtype) => Classical.choose ) ((fun (x : X.toSubtype) => Classical.choose ) x) = x

                                    Вправа 3.3.6

                                    theorem Chapter3.Function.self_comp_inverse [SetTheory] {X Y : Set} {f : Function X Y} (h : f.bijective) (y : Y.toSubtype) :
                                    (fun (x : X.toSubtype) => Classical.choose ) ((fun (x : Y.toSubtype) => Classical.choose ) y) = y
                                    theorem Chapter3.Function.inverse_inverse [SetTheory] {X Y : Set} {f : Function X Y} (h : f.bijective) :
                                    (f.inverse h).inverse = f
                                    theorem Chapter3.Function.comp_bijective [SetTheory] {X Y Z : Set} {f : Function X Y} {g : Function Y Z} (hf : f.bijective) (hg : g.bijective) :
                                    theorem Chapter3.Function.inv_of_comp [SetTheory] {X Y Z : Set} {f : Function X Y} {g : Function Y Z} (hf : f.bijective) (hg : g.bijective) :
                                    (gf).inverse = f.inverse hfg.inverse hg

                                    Вправа 3.3.7

                                    @[reducible, inline]
                                    abbrev Chapter3.Function.inclusion [SetTheory] {X Y : Set} (h : X Y) :

                                    Вправа 3.3.8

                                    Equations
                                    Instances For
                                      @[reducible, inline]
                                      Equations
                                      Instances For
                                        theorem Chapter3.Function.inclusion_comp [SetTheory] (X Y Z : Set) (hXY : X Y) (hYZ : Y Z) :
                                        theorem Chapter3.Function.comp_id [SetTheory] {A B : Set} (f : Function A B) :
                                        fid A = f
                                        theorem Chapter3.Function.id_comp [SetTheory] {A B : Set} (f : Function A B) :
                                        id Bf = f
                                        theorem Chapter3.Function.comp_inv [SetTheory] {A B : Set} (f : Function A B) (hf : f.bijective) :
                                        ff.inverse hf = id B
                                        theorem Chapter3.Function.inv_comp [SetTheory] {A B : Set} (f : Function A B) (hf : f.bijective) :
                                        f.inverse hff = id A
                                        theorem Chapter3.Function.glue [SetTheory] {X Y Z : Set} (hXY : Disjoint X Y) (f : Function X Z) (g : Function Y Z) :
                                        ∃! h : Function (X Y) Z, hinclusion = f hinclusion = g