3.3 KiB
Level
A level is a single exercise that should be solved by the user. Here is an example:
import GameServer.Commands -- also import everything else you need.
Game "NNG"
World "Addition"
Level 2 -- must start at `1` and be consequtive.
Title "add_zero"
Introduction "" -- optional. Is displayed throughout the level.
Statement MyNat.zero_add -- optional. if name is specified, the lemma will be added to the inventory in future levels.
"description in mathematical term" -- optional. mathematical description
(n : ℕ) : n + 0 = n := by -- statement: exactly how it would be in a `theorem`. (bug: forgets about implicit arguments)
intro k
rw [add_zero]
Hint "look at {k}." -- hint at this place. `{k}` gets the user's name for the variable (bug currently)
Hint (hidden := true) "more" -- hidden hint
use n
Branch -- A branch in the proof. Does not modify the goal but useful
simp -- to place hints at dead ends etc.
tauto
rw [add_comm]
rfl
LemmaTab "Nat" -- optional. specify the tab that's open in the lemma inventory
NewLemma add_zero -- optional. add lemma to inventory
NewTactic rw -- optional. add tactic to inventory
NewDefinition Nat -- optional. add definition to inventory
DisabledLemma add_zero -- optional. disable specific lemmas
DisabledTactic tauto simp -- optional. disable tactics
OnlyLemma add_zero -- optional. disable all lemmas but these
OnlyTactic assumption rw -- optional. disable all tactics but these
Conclusion "" -- optional. Show when level completed
And in the following there are some tips that might be important.
Imports
You're level can import levels from the same world
import NNG.Levels.Addition.Level_1
as well as entire other worlds
import NNG.Levels.Multiplication
However, you must not import a single level in a different world's level or it will mess up the World introduction texts (bug?)
Documentation (Lemmas, Tactics, Definitions)
It will complain when the specified lemma/tactic names do not have documentation.
In that case you need to add LemmaDoc
/TacticDoc
/DefinitionDoc
entries in the
doc part (and ctrl+shift+X
-reload your file in VSCode). See info under Game > Documentation
World
combines multiple levels, like a chapter. Description pending.
Game
Combines different games in form of a directed graph. Description pending.
Documentation
It is recommended to have all documentation for the inventory centrally and import it in the levels
LemmaDoc MyNat.add_squared as "add_squared" in "Pow"
"(missing)"
TacticDoc constructor
"(missing)"
DefinitionDoc One as "1"
"(missing)"
Notes:
- The lemma name must be fully qualified. The string display name can be arbitrary.
- Tactics must have their proper name. use
TacticDoc «have» ""
if it does not work without french quotes. - Definition names can be arbitrary. E.g. I used
DefinitionDoc Symbol.Fun as "fun x ↦ x" "(missing)"
once.
There will be features added to get automatic information from mathlib!