aboutsummaryrefslogtreecommitdiff
path: root/src/util.ts
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2023-12-12 17:58:46 +0530
committerAkshay Nair <phenax5@gmail.com>2023-12-12 18:03:08 +0530
commitade99f3f1fc2da1d51a82f1376c61ad609d60ff1 (patch)
tree1b0a5a092baae86df93112b76bad948d72bb7df7 /src/util.ts
parent60331b72ab37e581b0fb405c2eff862e16b52ac2 (diff)
downloadts-theorem-provinator-ade99f3f1fc2da1d51a82f1376c61ad609d60ff1.tar.gz
ts-theorem-provinator-ade99f3f1fc2da1d51a82f1376c61ad609d60ff1.zip
feat: associativity and commutativity for addition
Diffstat (limited to '')
-rw-r--r--src/util.ts24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/util.ts b/src/util.ts
index 5556f70..f6067ae 100644
--- a/src/util.ts
+++ b/src/util.ts
@@ -18,14 +18,22 @@ export type ApplyRewrite<O extends Op, R extends Rewrite<Op, Op>> =
)
: never;
-// interface Kind<V = unknown> {
-// _: V;
-// return: unknown;
-// }
-// type Ap<K extends Kind, V> = (K & { _: V })['return'];
+export interface Kind<V = unknown, R = unknown> {
+ _: V;
+ return: R;
+}
+export type Ap<K extends Kind, V> = (K & { _: V })['return'];
export type ChainRewrites<Rws extends Rewrite<Op, Op>[], O extends Op> =
Rws extends [] ? O
- : Rws extends [infer R extends Rewrite<Op, Op>, ...infer Rs extends Rewrite<Op, Op>[]]
- ? ChainRewrites<Rs, ApplyRewrite<O, R>>
- : never;
+ : Rws extends [infer R extends Rewrite<Op, Op>, ...infer Rs extends Rewrite<Op, Op>[]]
+ ? ChainRewrites<Rs, ApplyRewrite<O, R>>
+ : never;
+
+export type VerifyEquation<Eq extends Rewrite<Op, Op>> =
+ Eq['right'] extends 'true' ? true : false & Eq['right'];
+
+export type Eq<a, b> = ([a] extends [b] ? ([b] extends [a] ? true : false & { lhs: a; rhs: b }) : false & { lhs: a; rhs: b });
+
+export type Equation<A extends Op, B extends Op> = { op: '=', a: A, b: B };
+export type Refl<A extends Op> = Rewrite<Equation<A, A>, 'true'>;