This commit is contained in:
Jon Eugster
2023-04-03 19:51:27 +02:00
parent f636a8d833
commit 68606aab99
41 changed files with 579 additions and 407 deletions
@@ -9,31 +9,38 @@ Title ""
open Set
set_option tactic.hygienic false
Introduction
"
Wenn man mit Abildungen auf Mengen arbeitet, muss man in Lean etwas aufpassen, um
die Typen (z.B. `(U : Type _)`) und Mengen von diesen Typen (z.B. `(S : Set U)`)
zu unterscheiden.
Abbildungen sind prinzipiell immer auf Typen definiert. Wenn eine Funktion nicht
auf dem ganzen Typen definiert ist, hat man prinzipiell zwei Optionen:
1. Nach dem Motto \"Chunk in, chunk out\" werden in der Mathlib Funktionen
oft einfach auf irgendwas gesetzt wenn sie nicht definiert sind, so gibt `1 / 0` in `ℕ`
einfach `0`. Dies funktioniert, weil dann alle relevanten Theoreme, die von `x / n`
handeln, dann Annahmen der Form `(h : n ≠ 0)` haben.
2. Man kann auch Funktionen auf *Subtypen* definieren, also z.B. auf `ℕ+`.
Das Bild einer Funktion ist eine Menge, die als `f '' S` geschrieben wird.
In der Mathe ist das normalerweise als $f(S)$ geschrieben.
Mit `ext i` kann man Gleichheit von Mengen angehen.
"
-- Wenn man mit Abildungen auf Mengen arbeitet, muss man in Lean etwas aufpassen, um
-- die Typen (z.B. `(U : Type _)`) und Mengen von diesen Typen (z.B. `(S : Set U)`)
-- zu unterscheiden.
-- Abbildungen sind prinzipiell immer auf Typen definiert. Wenn eine Funktion nicht
-- auf dem ganzen Typen definiert ist, hat man prinzipiell zwei Optionen:
-- 1. Nach dem Motto \"Junk in, junk out\" werden in der Mathlib Funktionen
-- oft einfach auf irgendwas gesetzt wenn sie nicht definiert sind, so gibt `1 / 0` in `ℕ`
-- einfach `0`. Dies funktioniert, weil dann alle relevanten Theoreme, die von `x / n`
-- handeln, dann Annahmen der Form `(h : n ≠ 0)` haben.
-- 2. Man kann auch Funktionen auf *Subtypen* definieren, also z.B. auf `ℕ+`.
-- /- Image of Union -/
-- lemma image_unionₓ
Statement
""
(S T : Set ℕ) (f : ℕ → ℕ) : (f '' S) ∪ (f '' T) = f '' (S ∪ T) := by
Hint "Fang mal mit `ext i` an."
ext i
rw [mem_union]
simp_rw [mem_image]
@@ -63,3 +70,6 @@ Statement
constructor
assumption
assumption
NewTactic ext
LemmaTab "Set"
@@ -7,15 +7,27 @@ Level 2
Title ""
open Set
Introduction
"
Das Urbild einer Menge `U` unter einer Funktion `f` ist mit `f ⁻¹' U` bezeichnet.
Note: `f ⁻¹` ist das abstrakte, gruppentheoretische Inverse von `f`, was generell nicht existieren muss,
deshalb wurde die andere Notation hier gewählt
"
Statement
""
(U : Set ℕ) (f : ℕ → ℕ) : U ⊆ f ⁻¹' (f '' U) := by
Hint "Fang wieder mal mit `intro` an."
intro x hx
Hint "Mit `rw [preimage]` kannst du sehen, wie das Urbild definiert ist."
rw [preimage]
Hint "Also musst du jetzt ein Element `y` angeben sodass `f y` in `f '' U` liegt."
use x
constructor
assumption
rfl
NewDefinition Set.preimage
@@ -9,6 +9,8 @@ Title ""
Introduction
"
Wenn man Aussagen über Familien von Mengen machen will, macht man das mit
`(N : I → Set V)`, also also Funktionen von einer Indexmenge.
"
Statement