mathematics_in_lean

My solutions for this book

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
  101. 101
  102. 102
  103. 103
  104. 104
  105. 105
  106. 106
  107. 107
  108. 108
  109. 109
  110. 110
  111. 111
import Mathlib.Tactic
import Mathlib.Data.Real.Basic

namespace C03S03

section
variable (a b : )

def FnUb (f :   ) (a : ) : Prop :=
   x, f x  a

def FnLb (f :   ) (a : ) : Prop :=
   x, a  f x

def FnHasUb (f :   ) :=
   a, FnUb f a

def FnHasLb (f :   ) :=
   a, FnLb f a

variable (f :   )

example (h :  a,  x, f x < a) : ¬FnHasLb f := by
  rintro a, ha
  rcases h a with x, hx
  have := ha x
  linarith

example : ¬FnHasUb fun x  x := by
  rintro a, ha
  have : a + 1  a := ha (a + 1)
  linarith

example (h : Monotone f) (h' : f a < f b) : a < b := by
  apply lt_of_not_ge
  intro h''
  apply absurd h'
  apply not_lt_of_ge (h h'')

example (h : a  b) (h' : f b < f a) : ¬Monotone f := by
  intro h''
  apply absurd h'
  apply not_lt_of_ge
  apply h'' h

example : ¬ {f :   }, Monotone f   {a b}, f a  f b  a  b := by
  intro h
  let f := fun x :   (0 : )
  have monof : Monotone f := by
    intro a b leab
    rfl
  have h' : f 1  f 0 := le_refl _
  have : (1 : )  0 := h monof h'
  linarith

example (x : ) (h :  ε > 0, x < ε) : x  0 := by
  apply le_of_not_gt
  intro h'
  linarith [h _ h']

end

section
variable {α : Type*} (P : α  Prop) (Q : Prop)

example (h : ¬ x, P x) :  x, ¬P x := by
  intro x Px
  apply h
  use x

example (h :  x, ¬P x) : ¬ x, P x := by
  rintro x, Px
  exact h x Px

example (h :  x, ¬P x) : ¬ x, P x := by
  intro h'
  rcases h with x, nPx
  apply nPx
  apply h'

example (h : ¬¬Q) : Q := by
  by_contra h'
  exact h h'

example (h : Q) : ¬¬Q := by
  intro h'
  exact h' h

end

section
variable (f :   )

example (h : ¬FnHasUb f) :  a,  x, f x > a := by
  intro a
  by_contra h'
  apply h
  use a
  intro x
  apply le_of_not_gt
  intro h''
  apply h'
  use x

example (h : ¬Monotone f) :  x y, x  y  f y < f x := by
  rw [Monotone] at h
  push_neg  at h
  exact h

end