pull/54/head
Jon Eugster 2 years ago
parent 10a12a8e77
commit a4623a8241

@ -179,9 +179,9 @@ function PlayableLevel({worldId, levelId}) {
<Split minSize={0} snapOffset={200} sizes={[50, 25, 25]} className={`app-content level ${level.isLoading ? 'hidden' : ''}`}>
<div className="exercise-panel">
<div ref={introductionPanelRef} className="introduction-panel">
<Alert severity="info" sx={{ mt: 1 }}>
<div className="message info">
<Markdown>{level?.data?.introduction}</Markdown>
</Alert>
</div>
</div>
<div className="exercise">
{/* <h4>Aufgabe:</h4> */}
@ -205,9 +205,9 @@ function PlayableLevel({worldId, levelId}) {
</EditorContext.Provider>
{completed && <div className="conclusion">
<Alert severity="info" sx={{ mt: 1 }}>
<div className="message info">
<Markdown>{level?.data?.conclusion}</Markdown>
</Alert>
</div>
{levelId >= gameInfo.data?.worldSize[worldId] ?
<Button to={`/`}><FontAwesomeIcon icon={faHome} /></Button> :
<Button to={`/world/${worldId}/level/${levelId + 1}`}>
@ -237,11 +237,11 @@ function Introduction({worldId}) {
<LevelAppBar isLoading={gameInfo.isLoading} levelTitle="Einführung" worldId={worldId} levelId={0} />
<div style={gameInfo.isLoading ? {display: "none"} : null} className="exercise-panel">
<div className="introduction-panel">
<Alert severity="info" sx={{ mt: 1 }}>
<div className="message info">
<Markdown>
{gameInfo.data?.worlds.nodes[worldId].introduction}
</Markdown>
</Alert>
</div>
</div>
<div className="conclusion">
{0 == gameInfo.data?.worldSize[worldId] ?

@ -4,7 +4,7 @@ import { Alert, FormControlLabel, Switch } from '@mui/material';
import Markdown from '../Markdown';
function Hint({hint} : {hint: GameHint}) {
return <Alert severity="info" sx={{ mt: 1 }}><Markdown>{hint.text}</Markdown></Alert>
return <div className="message info"><Markdown>{hint.text}</Markdown></div>
}
export function Hints({hints} : {hints: GameHint[]}) {

@ -4,9 +4,9 @@
padding: 5px 10px;
border-radius: 3px 3px 3px 3px;
}
.message.information {
color: #059;
background-color: #BEF;
.message.info {
/* color: #059; */
background-color: #DDF6FF;
}
.message.warning {
color: #9F6000;

@ -1,7 +1,7 @@
import TestGame.Metadata
import Mathlib
import TestGame.Options.BigOperators
import TestGame.ToBePorted
set_option tactic.hygienic false

@ -1,7 +1,7 @@
import TestGame.Metadata
import Mathlib
import TestGame.Options.BigOperators
import TestGame.ToBePorted
set_option tactic.hygienic false

@ -74,13 +74,14 @@ Statement
· Hint "**Robo**: Jetzt musst du alle eigenschaften eines $\\mathbb\{Q}$-Moduls zeigen,
das sind also 6 einzelne Goals."
intro b
Hint "**Robo**: Mit `change (1 : ) * b = b` kannst du das Goal umschreiben, damit
Hint "**Robo**: Mit `change (1 : ) * {b} = {b}` kannst du das Goal umschreiben, damit
dann andere Taktiken besser damit arbeiten können."
change (1 : ) * b = b
Hint "**Robo**: Den Teil kannst du mit `simp` beweisen."
simp
· intro x y b
Hint "**Robo**: Benutze `change` um `•` durch `*` zu ersetzen."
Hint (hidden := true) "**Robo**: Explizit `change ({x} * {y} : ) * {b} = {x} * ({y} * {b})`"
change (x * y : ) * b = x * (y * b)
Hint "**Robo**: Mit `simp` und `ring` kannst du den Rest beweisen."
simp
@ -88,13 +89,17 @@ Statement
· intro a
simp
· intro a x y
Hint (hidden := true) "**Robo**: Explizit `change {a} * ({x} + {y}) = {a} * {x} + {a} * {y}`"
change a * (x + y) = a * x + a * y
ring
· intro r s x
Hint (hidden := true) "**Robo**: Explizit
`change ({r} + {s} : ) * {x} = {r} * {x} + {s} * {x}`"
change (r + s : ) * x = r * x + s * x
simp
ring
· intro a
Hint (hidden := true) "**Robo**: Explizit `change (0 : ) * {a} = 0`"
change (0 : ) * a = 0
simp

@ -15,30 +15,14 @@ Title "Konkrete Vektorräume"
Introduction
"
Häufig in der linearen Algebra hat man ganz einfach Vektoren über `` oder ``
und möchte diese explizit definieren.
Reele Vektorräume definiert man in Lean am besten als Funktion von einem Indexset.
So ist `Fin 2` eine Menge, die nur `0` und `1` enthält
und `ℚ²` wird als `Fin 2 → ` definiert. Hier machen wir uns eine
lokale notation dafür:
Den $\\mathbb{Q}$-Vektorraum $\\mathbb{Q}^3$ definiert man am besten mit
der lokalen Notation
```
notation `ℚ²` := Fin 2
local notation `ℚ³` := Fin 3 →
```
Das mag auf den ersten Blick etwas unintuitiv erscheinen, hat aber den Vorteil,
dass man die ganze
Infrastruktur für Funktionen einfach direkt für Vektoren und
Matrizen mitgebrauchen kann.
Wir können uns auch noch ein paar andere standardmässige ``-Vektorräume definieren.
```
notation \"ℚ³\" => Fin 3 →
notation \"^(\" n \")\" => (Fin n) →
```
Dabei ist `Fin 3` die Indexmenge $\\{0, 1, 2\\}$.
Die schreibweise für einen Vektor ist `![ _, _ ]`. Zu beachten ist,
dass man bei Zahlen explizit einen Typ angeben muss, sonst denkt sich
@ -61,8 +45,8 @@ Dann eine Vektorgleichung komponentenweise aufteilt.
Für jede Komponente kann man dann mit `simp` und `ring` weiterkommen.
"
notation "ℚ³" => Fin 3 →
notation "^(" n ")" => (Fin n) →
local notation "ℚ³" => Fin 3 →
local notation "^(" n ")" => (Fin n) →
Statement
""

@ -16,18 +16,17 @@ Introduction
"
Ihr bemerkt, dass mit dem Jungen noch zwei andere
Kinder zuhörten. Eines der beiden Mädchen hat ebenfalls eine Frage.
"
-- Hat man zwei Mengen `(A B : Set )` kann man fragen, ob diese Teilmengen
-- voneinander sind: `A ⊆ B` (`\\sub`/`\\ss`) ist die Notation für Teilmengen, die auch gleich
-- sein können.
Hat man zwei Mengen `(A B : Set )` kann man fragen, ob diese Teilmengen
voneinander sind: `A ⊆ B` (`\\sub`/`\\ss`) ist die Notation für Teilmengen, die auch gleich
sein können.
`A ⊆ B` ist als `∀ x, x ∈ A → x ∈ B` definiert, das heisst, ein `⊆` kann immer auch mit `intro x hx`
angegangen werden.
-- `A ⊆ B` ist als `∀ x, x ∈ A → x ∈ B` definiert, das heisst, ein `⊆` kann immer auch mit `intro x hx`
-- angegangen werden.
Die Taktik `tauto` macht das automatisch, aber um dies zu lernen ist `tauto` hier deaktiviert.
Benutze also `intro`:
"
-- Die Taktik `tauto` macht das automatisch, aber um dies zu lernen ist `tauto` hier deaktiviert.
-- Benutze also `intro`:
namespace MySet

@ -1,6 +1,6 @@
import TestGame.Metadata
import TestGame.Options.BigOperators
import TestGame.ToBePorted
set_option tactic.hygienic false

@ -1,6 +1,6 @@
import TestGame.Metadata
import TestGame.Options.BigOperators
import TestGame.ToBePorted
import Mathlib
set_option tactic.hygienic false

@ -3,7 +3,7 @@ import TestGame.Metadata
import Mathlib.Algebra.BigOperators.Fin
import Mathlib.Tactic.Ring
import TestGame.Options.BigOperators
import TestGame.ToBePorted
set_option tactic.hygienic false

@ -1,6 +1,6 @@
import TestGame.Metadata
import TestGame.Options.BigOperators
import TestGame.ToBePorted
import Mathlib.Algebra.BigOperators.Fin
import Mathlib.Tactic.Ring

@ -1,6 +1,6 @@
import TestGame.Metadata
import TestGame.Options.BigOperators
import TestGame.ToBePorted
import Mathlib.Algebra.BigOperators.Fin
import Mathlib.Tactic.Ring

@ -1,6 +1,6 @@
import TestGame.Metadata
import TestGame.Options.BigOperators
import TestGame.ToBePorted
import Mathlib.Algebra.BigOperators.Fin
import Mathlib.Tactic.Ring

@ -1,6 +1,6 @@
import TestGame.Metadata
import TestGame.Options.BigOperators
import TestGame.ToBePorted
import Mathlib.Algebra.BigOperators.Fin
set_option tactic.hygienic false

@ -1,6 +1,6 @@
import TestGame.Metadata
import TestGame.Options.BigOperators
import TestGame.ToBePorted
import Mathlib.Algebra.BigOperators.Fin
set_option tactic.hygienic false

@ -1,6 +1,6 @@
import TestGame.Metadata
import TestGame.Options.BigOperators
import TestGame.ToBePorted
import Mathlib.Algebra.BigOperators.Fin
import Mathlib.Tactic.Ring

@ -1,17 +0,0 @@
import Mathlib.Algebra.BigOperators.Fin
open BigOperators
open Lean PrettyPrinter Delaborator SubExpr
@[ delab app.Finset.sum]
def delabFinsetSum : Delab := do
guard $ (← getExpr).getAppNumArgs == 5
guard $ ((← getExpr).getArg! 3).isAppOf' ``Finset.univ
guard $ ((← getExpr).getArg! 4).isLambda
withNaryArg 4 do
let α ← withBindingDomain delab
withBindingBodyUnusedName fun n => do
let n : TSyntax `ident := ⟨n⟩
let b ← delab
`(∑ $n:ident : $α, $b)

@ -1,5 +1,28 @@
import Mathlib
open BigOperators
/-! # Delab Problems -/
open Lean PrettyPrinter Delaborator SubExpr
@[delab app.Finset.sum]
def delabFinsetSum : Delab := do
guard $ (← getExpr).getAppNumArgs == 5
guard $ ((← getExpr).getArg! 3).isAppOf' ``Finset.univ
guard $ ((← getExpr).getArg! 4).isLambda
withNaryArg 4 do
let α ← withBindingDomain delab
withBindingBodyUnusedName fun n => do
let n : TSyntax `ident := ⟨n⟩
let b ← delab
`(∑ $n:ident : $α, $b)
/-! # Other Stuff -/
-- lemma not_odd {n : } : ¬ Odd n ↔ Even n := by
-- sorry

Loading…
Cancel
Save