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

@ -4,7 +4,7 @@ import { Alert, FormControlLabel, Switch } from '@mui/material';
import Markdown from '../Markdown'; import Markdown from '../Markdown';
function Hint({hint} : {hint: GameHint}) { 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[]}) { export function Hints({hints} : {hints: GameHint[]}) {

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

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

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

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

@ -15,30 +15,14 @@ Title "Konkrete Vektorräume"
Introduction Introduction
" "
Häufig in der linearen Algebra hat man ganz einfach Vektoren über `` oder `` Den $\\mathbb{Q}$-Vektorraum $\\mathbb{Q}^3$ definiert man am besten mit
und möchte diese explizit definieren. der lokalen Notation
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:
``` ```
notation `ℚ²` := Fin 2 local notation `ℚ³` := Fin 3 →
``` ```
Das mag auf den ersten Blick etwas unintuitiv erscheinen, hat aber den Vorteil, Dabei ist `Fin 3` die Indexmenge $\\{0, 1, 2\\}$.
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) →
```
Die schreibweise für einen Vektor ist `![ _, _ ]`. Zu beachten ist, Die schreibweise für einen Vektor ist `![ _, _ ]`. Zu beachten ist,
dass man bei Zahlen explizit einen Typ angeben muss, sonst denkt sich 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. Für jede Komponente kann man dann mit `simp` und `ring` weiterkommen.
" "
notation "ℚ³" => Fin 3 → local notation "ℚ³" => Fin 3 →
notation "^(" n ")" => (Fin n) → local notation "^(" n ")" => (Fin n) →
Statement Statement
"" ""

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

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

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

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

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

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

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

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

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

@ -1,6 +1,6 @@
import TestGame.Metadata import TestGame.Metadata
import TestGame.Options.BigOperators import TestGame.ToBePorted
import Mathlib.Algebra.BigOperators.Fin import Mathlib.Algebra.BigOperators.Fin
import Mathlib.Tactic.Ring 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 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 -- lemma not_odd {n : } : ¬ Odd n ↔ Even n := by
-- sorry -- sorry

Loading…
Cancel
Save