diff --git a/.vscode/settings.json b/.vscode/settings.json
index 023a7ca..cc73bfb 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -21,5 +21,6 @@
},
"[jsonc]": {
"editor.defaultFormatter": "biomejs.biome"
- }
+ },
+ "biome.lspBin": "./node_modules/@biomejs/biome/bin/biome"
}
diff --git a/apps/web/src/routes/kripke/+page.svelte b/apps/web/src/routes/kripke/+page.svelte
index fea63c1..6b98785 100644
--- a/apps/web/src/routes/kripke/+page.svelte
+++ b/apps/web/src/routes/kripke/+page.svelte
@@ -62,7 +62,7 @@ onMount(() => {
You can also play Random Challenge.
-
+
diff --git a/apps/web/src/routes/kripke/components/game.svelte b/apps/web/src/routes/kripke/components/game.svelte
index 605dd92..7c8dd67 100644
--- a/apps/web/src/routes/kripke/components/game.svelte
+++ b/apps/web/src/routes/kripke/components/game.svelte
@@ -48,7 +48,9 @@ let formula: Formula | undefined = $state(undefined);
let formulaStr = $derived(
formula ? prettyPrint(formula, { symbols: latexSymbols }) : "",
);
-let frame: Frame = $state(getFrame(0));
+let frame: Frame = $state(
+ getFrame(moves.findLast((move) => move.type === "guess")?.frameId ?? 0),
+);
let frameId = $derived(getId(frame));
let remainingRelations = $derived(relationSize - frame.relations.size);
diff --git a/apps/web/src/routes/kripke/components/rules.svelte b/apps/web/src/routes/kripke/components/rules.svelte
index 3f856d2..75580f8 100644
--- a/apps/web/src/routes/kripke/components/rules.svelte
+++ b/apps/web/src/routes/kripke/components/rules.svelte
@@ -2,8 +2,11 @@
import Katex from "$lib/components/katex.svelte";
import LuHeart from "lucide-svelte/icons/heart";
+let { relationSize }: { relationSize: number } = $props();
+
const frame = "\\footnotesize \\mathcal{F} = \\left";
-const numberConstraint = "\\footnotesize |W| = 4";
+const worldConstraint = "\\footnotesize |W| = 4";
+const relationConstraint = `\\footnotesize |R| = ${relationSize}`;
const f = "\\footnotesize \\mathcal{F}";
const validCount =
"\\footnotesize \\mathrm{N}(\\varphi) = \\bigl| \\Set{ w \\in W | \\forall \\mathop{\\Vdash}\\, (w \\Vdash \\varphi) } \\bigr|";
@@ -12,11 +15,8 @@ const validCount =
Rules
-
- A Kripke frame with 4 worlds is generated:
- , where .
-
- -
- The game tells you how many accessibility relations are in the frame , but not the exact shape of it.
+ A Kripke frame with 4 worlds and {relationSize} relation(s) is generated:
+ , where and .
-
You have a total of 10 moves ().
@@ -32,7 +32,7 @@ const validCount =
-
Guess the Kripke frame.
- If your frame is equal or isomorphic to the secret frame , you win.
+ If your frame is equal or isomorphic to , you win.
diff --git a/apps/web/src/routes/kripke/random/[seed]/+page.svelte b/apps/web/src/routes/kripke/random/[seed]/+page.svelte
index fd9b305..f9a8db9 100644
--- a/apps/web/src/routes/kripke/random/[seed]/+page.svelte
+++ b/apps/web/src/routes/kripke/random/[seed]/+page.svelte
@@ -50,13 +50,13 @@ $effect(() => {
Random Challenge!
- - The answer of the game is determined by a seed number {@render seedNumber()}, which changes on every reload.
+ - The answer of the game is determined by a seed number {@render seedNumber()}.
- You can right-click on the seed number to obtain a permalink to this exact game.
- Unlike Daily Challenge, the progress of the game does not persist.
- You can also play Daily Challenge, if you have not yet.
-
+