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.
lean4game/CREATE_GAME.md

98 lines
3.3 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Level
A level is a single exercise that should be solved by the user. Here is an example:
```lean
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
```lean
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!