diff --git a/apps/web/src/routes/kripke/+page.svelte b/apps/web/src/routes/kripke/+page.svelte
index 69ee43f..1f71da3 100644
--- a/apps/web/src/routes/kripke/+page.svelte
+++ b/apps/web/src/routes/kripke/+page.svelte
@@ -1,17 +1,32 @@
-
-
+
diff --git a/apps/web/src/routes/kripke/formula-input.svelte b/apps/web/src/routes/kripke/formula-input.svelte
index 03257ce..62adb1a 100644
--- a/apps/web/src/routes/kripke/formula-input.svelte
+++ b/apps/web/src/routes/kripke/formula-input.svelte
@@ -20,6 +20,7 @@ $effect(() => {
diff --git a/apps/web/src/routes/kripke/frame-input.svelte b/apps/web/src/routes/kripke/frame-input.svelte
new file mode 100644
index 0000000..bd412c2
--- /dev/null
+++ b/apps/web/src/routes/kripke/frame-input.svelte
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
diff --git a/apps/web/src/routes/kripke/vector.ts b/apps/web/src/routes/kripke/vector.ts
new file mode 100644
index 0000000..c9f3f54
--- /dev/null
+++ b/apps/web/src/routes/kripke/vector.ts
@@ -0,0 +1,28 @@
+export type Vector = {
+ x: number;
+ y: number;
+};
+
+export type Radian = number;
+
+export const degree = (value: number) => ((value / 180) * Math.PI) as Radian;
+
+export const sub = (v1: Vector, v2: Vector) =>
+ ({
+ x: v1.x - v2.x,
+ y: v1.y - v2.y,
+ }) as Vector;
+
+export const add = (v1: Vector, v2: Vector) =>
+ ({
+ x: v1.x + v2.x,
+ y: v1.y + v2.y,
+ }) as Vector;
+
+export const theta = ({ x, y }: Vector) => Math.atan2(y, x) as Radian;
+
+export const rotate = ({ x, y }: Vector, rad: Radian) =>
+ ({
+ x: x * Math.cos(rad) - y * Math.sin(rad),
+ y: x * Math.sin(rad) + y * Math.cos(rad),
+ }) as Vector;
diff --git a/packages/kripke/semantics.ts b/packages/kripke/semantics.ts
index 01abe67..9cfcff4 100644
--- a/packages/kripke/semantics.ts
+++ b/packages/kripke/semantics.ts
@@ -8,6 +8,8 @@ export type World = (typeof worlds)[number];
export type Relation = `${World}${World}`;
export const left = (rel: Relation) => rel[0] as World;
export const right = (rel: Relation) => rel[1] as World;
+export const reverse = (rel: Relation) =>
+ `${right(rel)}${left(rel)}` as Relation;
export const relation: Relation[] = worlds.flatMap((w) =>
worlds.map((x) => `${w}${x}` as const),
@@ -148,15 +150,15 @@ export function generateAllFrames() {
}
}
- const mapping: Uint16Array = new Uint16Array(total);
+ const isomorphic: Uint16Array = new Uint16Array(total);
for (let id = 0; id < total; id++) {
const value = map.get(id);
if (value === undefined) throw Error(`impossible (${id})`);
- mapping[id] = value;
+ isomorphic[id] = value;
}
- return { canonicals, mapping };
+ return { canonicals, isomorphic };
}
-const { canonicals, mapping } = generateAllFrames();
-export { canonicals, mapping };
+const { canonicals, isomorphic } = generateAllFrames();
+export { canonicals, isomorphic };