css
This commit is contained in:
@@ -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,19 +16,18 @@ 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.
|
||||
|
||||
`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`:
|
||||
"
|
||||
|
||||
-- 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.
|
||||
|
||||
-- Die Taktik `tauto` macht das automatisch, aber um dies zu lernen ist `tauto` hier deaktiviert.
|
||||
-- Benutze also `intro`:
|
||||
|
||||
namespace MySet
|
||||
|
||||
open Set
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user