5. Projects🔗

Summary: In the second phase of this course, students can assign themselves projects. For this, they were asked to look for simple exercises, e.g. from their first year courses. Here comes a list of exercises they used.

5.1. Induction (Luis Jaschke und Felicitas Kissel)

Compute the following sums and products, and show your result by induction.

declaration uses 'sorry'example (n : ) : k n, k * k = n * (n + 1) * (2*n + 1) / 6 := n:kFinset.Iic n, k * k = n * (n + 1) * (2 * n + 1) / 6 All goals completed! 🐙 declaration uses 'sorry'example (n : ) : k n, k * k * k = n * n * (n + 1) * (n + 1) / 4 := n:kFinset.Iic n, k * k * k = n * n * (n + 1) * (n + 1) / 4 All goals completed! 🐙 declaration uses 'sorry'example (n : ) : k n, 2 * k - 1 = sorry := n:kFinset.Iic n, 2 * k - 1 = sorry All goals completed! 🐙 declaration uses 'sorry'example (n : ) : k n, (1 + 1 / (k + 1)) = sorry := n:kFinset.Iic n, (1 + 1 / (k + 1)) = sorry All goals completed! 🐙 declaration uses 'sorry'example (q : ) (hq : abs q < 1) : Filter.Tendsto (fun n q^n) atTop (nhds 0) := atTop:Filter q:hq:|q| < 1Filter.Tendsto (fun n => q ^ n) atTop (nhds 0) All goals completed! 🐙

5.2. Own addition on ℚ (Adrian Eckstein und Debora Ortlieb)

def own_add (a b : ) : := a * b + 2 * a + 2 * b + 2 notation a " ⊕ " b:60 => own_add a b lemma declaration uses 'sorry'own_mul_komm (a b : ) : (a b) = b a := a:b:ab = ba All goals completed! 🐙 lemma declaration uses 'sorry'own_mul_assoc (a b c : ) : ((a b) c) = a (b c) := a:b:c:(ab)c = abc All goals completed! 🐙 lemma declaration uses 'sorry'own_mul_right_neutral (a : ) : (a (-1)) = a := a:a-1 = a All goals completed! 🐙 lemma declaration uses 'sorry'own_mul_left_neutral (a : ) : ((-1) a) = a := a:(-1)a = a All goals completed! 🐙 declaration uses 'sorry'example (n : ) : k n, (1 - 1 / (k + 1)) = sorry := n:kFinset.Iic n, (1 - 1 / (k + 1)) = sorry All goals completed! 🐙

5.3. Fixed points and contractions (Jule Kiesele, Anna Vitiello)

variable {α : Type*} [MetricSpace α] (f : α α) (h_con : q < 1, x y, dist (f x) (f y) q * dist x y) (x y : α) declaration uses 'sorry'example (hxy : f x = f y) : x = y := α:Type u_1inst✝:MetricSpace αf:ααh_con:q < 1, ∀ (x y : α), dist (f x) (f y)q * dist x yx:αy:αhxy:f x = f yx = y All goals completed! 🐙 variable [CompleteSpace α] declaration uses 'sorry'example : x, f x = x := α:Type u_1inst✝¹:MetricSpace αf:ααh_con:q < 1, ∀ (x y : α), dist (f x) (f y)q * dist x yx:αy:αinst✝:CompleteSpace αx, f x = x All goals completed! 🐙

5.4. Path-connected spaces (Jasper Ganten)

open Set section PathConnected variable {X : Type*} [TopologicalSpace X] /-- An intuitive definition of path connectedness: A set `S` is path connected if it is nonempty and any two points in `S` can be joined by a continuous path in `S`. -/ def IsPathConnected' (S : Set X) : Prop := S.Nonempty x y : X, x S y S γ : Set.Icc (0 : ) 1 X, Continuous γ γ 0 = x γ 1 = y t, γ t S /-- `IsPathConnected'` is equivalent to Mathlib's `IsPathConnected`. -/ theorem pathConnected_iff (A : Set X) : IsPathConnected A IsPathConnected' A := X:Type u_2inst✝:TopologicalSpace XA:Set XIsPathConnected AIsPathConnected' A X:Type u_2inst✝:TopologicalSpace XA:Set XIsPathConnected AIsPathConnected' AX:Type u_2inst✝:TopologicalSpace XA:Set XIsPathConnected' AIsPathConnected A X:Type u_2inst✝:TopologicalSpace XA:Set XIsPathConnected AIsPathConnected' A -- Mathlib ⇒ Intuitive X:Type u_2inst✝:TopologicalSpace XA:Set Xp1:Xhp1:p1Ah1:∀ {y : X}, yAJoinedIn A p1 yIsPathConnected' A -- show that the set is nonempty X:Type u_2inst✝:TopologicalSpace XA:Set Xp1:Xhp1:p1Ah1:∀ {y : X}, yAJoinedIn A p1 y∀ (x y : X), xAyA → ∃ γ, Continuous γγ 0 = xγ 1 = y∀ (t : ↑(Icc 0 1)), γ tA X:Type u_2inst✝:TopologicalSpace XA:Set Xp1:Xhp1:p1Ah1:∀ {y : X}, yAJoinedIn A p1 yp2:Xp3:Xhp2:p2Ahp3:p3Aγ, Continuous γγ 0 = p2γ 1 = p3∀ (t : ↑(Icc 0 1)), γ tA -- construct a path from p2 to p3 by using the -- transitivity of the JoinedIn relation X:Type u_2inst✝:TopologicalSpace XA:Set Xp1:Xhp1:p1Ah1:∀ {y : X}, yAJoinedIn A p1 yp2:Xp3:Xhp2:p2Ahp3:p3Aγ:_root_.Path p2 p3:∀ (t : ↑unitInterval), γ tAγ, Continuous γγ 0 = p2γ 1 = p3∀ (t : ↑(Icc 0 1)), γ tA All goals completed! 🐙 X:Type u_2inst✝:TopologicalSpace XA:Set XIsPathConnected' AIsPathConnected A -- Intuitive ⇒ Mathlib X:Type u_2inst✝:TopologicalSpace XA:Set Xhne:A.NonemptyhC:∀ (x y : X), xAyA → ∃ γ, Continuous γγ 0 = xγ 1 = y∀ (t : ↑(Icc 0 1)), γ tAIsPathConnected A X:Type u_2inst✝:TopologicalSpace XA:Set XhC:∀ (x y : X), xAyA → ∃ γ, Continuous γγ 0 = xγ 1 = y∀ (t : ↑(Icc 0 1)), γ tAx:Xhx:xAIsPathConnected A X:Type u_2inst✝:TopologicalSpace XA:Set XhC:∀ (x y : X), xAyA → ∃ γ, Continuous γγ 0 = xγ 1 = y∀ (t : ↑(Icc 0 1)), γ tAx:Xhx:xAy:Xhy:yAJoinedIn A x y X:Type u_2inst✝:TopologicalSpace XA:Set XhC:∀ (x y : X), xAyA → ∃ γ, Continuous γγ 0 = xγ 1 = y∀ (t : ↑(Icc 0 1)), γ tAx:Xhx:xAy:Xhy:yAγ:↑(Icc 0 1) → Xγ_cont:Continuous γγ0:γ 0 = xγ1:γ 1 = y:∀ (t : ↑(Icc 0 1)), γ tAJoinedIn A x y -- construct a Path type from my intuitive definition X:Type u_2inst✝:TopologicalSpace XA:Set XhC:∀ (x y : X), xAyA → ∃ γ, Continuous γγ 0 = xγ 1 = y∀ (t : ↑(Icc 0 1)), γ tAx:Xhx:xAy:Xhy:yAγ:↑(Icc 0 1) → Xγ_cont:Continuous γγ0:γ 0 = xγ1:γ 1 = y:∀ (t : ↑(Icc 0 1)), γ tAp:_root_.Path x y := { toFun := γ, continuous_toFun := γ_cont, source' := γ0, target' := γ1 }JoinedIn A x y All goals completed! 🐙 /-- If `A` and `B` are path connected, and their intersetion is nonempty, `A ∪ B` is pathconnected. -/ theorem my_task {A B : Set X} (hA : IsPathConnected A) (hB : IsPathConnected B) (hAB : (A B).Nonempty) : IsPathConnected (A B) := X:Type u_2inst✝:TopologicalSpace XA:Set XB:Set XhA:IsPathConnected AhB:IsPathConnected BhAB:(AB).NonemptyIsPathConnected (AB) -- select a point z in the intersection X:Type u_2inst✝:TopologicalSpace XA:Set XB:Set XhA:IsPathConnected AhB:IsPathConnected Bx:XhxA:xAhxB:xBIsPathConnected (AB) X:Type u_2inst✝:TopologicalSpace XA:Set XB:Set XhA:IsPathConnected AhB:IsPathConnected Bx:XhxA:xAhxB:xBxAB∀ {y : X}, yABJoinedIn (AB) x y X:Type u_2inst✝:TopologicalSpace XA:Set XB:Set XhA:IsPathConnected AhB:IsPathConnected Bx:XhxA:xAhxB:xBy:Xhy:yABJoinedIn (AB) x y -- split in cases depending on where y is X:Type u_2inst✝:TopologicalSpace XA:Set XB:Set XhA:IsPathConnected AhB:IsPathConnected Bx:XhxA:xAhxB:xBy:XhyA:yAJoinedIn (AB) x yX:Type u_2inst✝:TopologicalSpace XA:Set XB:Set XhA:IsPathConnected AhB:IsPathConnected Bx:XhxA:xAhxB:xBy:XhyB:yBJoinedIn (AB) x y X:Type u_2inst✝:TopologicalSpace XA:Set XB:Set XhA:IsPathConnected AhB:IsPathConnected Bx:XhxA:xAhxB:xBy:XhyA:yAJoinedIn (AB) x y -- y ∈ A then x and y are joined in A X:Type u_2inst✝:TopologicalSpace XA:Set XB:Set XhA:IsPathConnected AhB:IsPathConnected Bx:XhxA:xAhxB:xBy:XhyA:yAjoinedInA:JoinedIn A x yJoinedIn (AB) x y -- but then also in the superset A ∪ B All goals completed! 🐙 X:Type u_2inst✝:TopologicalSpace XA:Set XB:Set XhA:IsPathConnected AhB:IsPathConnected Bx:XhxA:xAhxB:xBy:XhyB:yBJoinedIn (AB) x y -- y ∈ A then x and y are joined in B X:Type u_2inst✝:TopologicalSpace XA:Set XB:Set XhA:IsPathConnected AhB:IsPathConnected Bx:XhxA:xAhxB:xBy:XhyB:yBjoinedInB:JoinedIn B x yJoinedIn (AB) x y -- but then also in the superset A ∪ B All goals completed! 🐙 end PathConnected

5.5. Parallel inequality (Moritz Graßnitzer, Natalie Jahnes)

Parallel inequality, or a homomorphism is injective iff its kernel is trivial.

5.6. There is only one prime triplet (Patrick Nasdala, Max Lehr)

There is only one prime triplet, i.e. only one n : ℕ prime, such that n + 2 and n + 4 are prime as well.

declaration uses 'sorry'example (n : ) : Nat.Prime n Nat.Prime (n + 2) Nat.Prime (n + 4) n = 3 := α:Type u_1inst✝¹:MetricSpace αf:ααh_con:q < 1, ∀ (x y : α), dist (f x) (f y)q * dist x yx:αy:αinst✝:CompleteSpace αn:Nat.Prime nNat.Prime (n + 2)Nat.Prime (n + 4)n = 3 All goals completed! 🐙

5.7. An equivalence on sets (Emma Reichel, Luisa Caspary)

We have U ⊆ V ↔ U = U ∩ V ↔ V = U ∪ V. So, the following needs to be proved:

variable (U V : Set α) declaration uses 'sorry'example : (U V) U = U V := α:Type u_1inst✝¹:MetricSpace αf:ααh_con:q < 1, ∀ (x y : α), dist (f x) (f y)q * dist x yx:αy:αinst✝:CompleteSpace αU:Set αV:Set αUVU = UV All goals completed! 🐙 declaration uses 'sorry'example : U = U V V = U V:= α:Type u_1inst✝¹:MetricSpace αf:ααh_con:q < 1, ∀ (x y : α), dist (f x) (f y)q * dist x yx:αy:αinst✝:CompleteSpace αU:Set αV:Set αU = UVV = UV All goals completed! 🐙 declaration uses 'sorry'example : V = U V U V := α:Type u_1inst✝¹:MetricSpace αf:ααh_con:q < 1, ∀ (x y : α), dist (f x) (f y)q * dist x yx:αy:αinst✝:CompleteSpace αU:Set αV:Set αV = UVUV All goals completed! 🐙