You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.6 KiB
Plaintext
94 lines
2.6 KiB
Plaintext
import Adam.Metadata
|
|
import Mathlib
|
|
|
|
Game "Adam"
|
|
World "Function"
|
|
Level 10
|
|
|
|
Title "Inverse"
|
|
|
|
Introduction
|
|
"
|
|
Eigentlich hast du nur beiläufig Robo gefragt, ob bijektiv nicht auch bedeute, dass
|
|
eine Inverse Funktion bestehe. Jetzt steht ihr aber schon seit einer halben Stunde rum
|
|
und der Gelehrte möchte wissen, wie das den genau ginge.
|
|
|
|
Offensichtlich kennt er diese Aussage als `Function.bijective_iff_has_inverse` aus seinen Büchern,
|
|
aber er möchte, dass Du ihm das hier und jetzt nochmals von Grund auf zeigst.
|
|
"
|
|
|
|
open Function
|
|
set_option pp.rawOnError true
|
|
Statement bijective_iff_has_inverse "" {A B : Type} (f : A → B) :
|
|
Bijective f ↔ ∃ g, LeftInverse g f ∧ RightInverse g f := by
|
|
Branch
|
|
exfalso
|
|
Hint "Das war eine blöde Idee
|
|
dd
|
|
|
|
ddds
|
|
"
|
|
Hint (hidden := true) "constructor"
|
|
constructor
|
|
Hint "intro h" -- does not show
|
|
intro h
|
|
Hint "rcases h with ⟨h₁, h₂⟩" -- shows too late: 1, 2 after
|
|
rcases h with ⟨h₁, h₂⟩
|
|
Hint (strict := true) "let g := fun x => (h₂ x).choose" -- shows correct + 1 after
|
|
let g := fun x => (h₂ x).choose
|
|
Hint "use g"
|
|
use g
|
|
Hint "constructor" -- does not show
|
|
constructor
|
|
Hint "intro x" -- does not show
|
|
intro x
|
|
Hint "simp" -- Error updating: Error fetching goals: Rpc error: InternalError: unknown universe metavariable '?_uniq.286465'. Try again.
|
|
simp
|
|
Hint "apply h₁"
|
|
apply h₁
|
|
Hint "apply Exists.choose_spec (h₂ (f x))"
|
|
apply Exists.choose_spec (h₂ (f x))
|
|
Hint "intro y" -- Error updating: Error fetching goals: Rpc error: InternalError: unknown universe metavariable '?_uniq.286465'. Try again.
|
|
intro y
|
|
Hint "simp"
|
|
simp
|
|
Hint "apply Exists.choose_spec (h₂ y)"
|
|
apply Exists.choose_spec (h₂ y)
|
|
Hint "intro ⟨g, h₁, h₂⟩"
|
|
intro ⟨g, h₁, h₂⟩
|
|
Hint "constructor"
|
|
constructor
|
|
Hint "intro a b hab"
|
|
intro a b hab
|
|
Hint (strict := true) "have h : g (f a) = g (f b)"
|
|
have h : g (f a) = g (f b)
|
|
Hint "apply congrArg"
|
|
apply congrArg
|
|
Hint "assumption"
|
|
assumption
|
|
Hint "rw [h₁, h₁] at h"
|
|
rw [h₁, h₁] at h
|
|
Hint "assumption"
|
|
assumption
|
|
Hint "intro x"
|
|
intro x
|
|
Hint "use g x"
|
|
use g x
|
|
Hint "rw [h₂]"
|
|
rw [h₂]
|
|
|
|
-- NewDefinition LeftInverse RightInverse
|
|
-- NewLemma Exists.choose Exists.choose_spec congrArg congrFun
|
|
-- DisabledLemma Function.bijective_iff_has_inverse
|
|
|
|
Hint (A B: Type) (f : A → B) (h : Bijective f) :
|
|
(∃ g, LeftInverse g f ∧ RightInverse g f) → Bijective f =>
|
|
"Test"
|
|
|
|
Conclusion
|
|
"Endlich entkommt ihr dem Tempel.
|
|
|
|
**Robo**: Da würden mich keine zehn Pferde nochmals hineinbringen!
|
|
|
|
**Du**: Von wegen Pferden, wie viele PS hat eigentlich unser Raumschiff?"
|