diff options
| author | Akshay Nair <phenax5@gmail.com> | 2023-12-12 17:58:46 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2023-12-12 18:03:08 +0530 |
| commit | ade99f3f1fc2da1d51a82f1376c61ad609d60ff1 (patch) | |
| tree | 1b0a5a092baae86df93112b76bad948d72bb7df7 /src/util.ts | |
| parent | 60331b72ab37e581b0fb405c2eff862e16b52ac2 (diff) | |
| download | ts-theorem-provinator-ade99f3f1fc2da1d51a82f1376c61ad609d60ff1.tar.gz ts-theorem-provinator-ade99f3f1fc2da1d51a82f1376c61ad609d60ff1.zip | |
feat: associativity and commutativity for addition
Diffstat (limited to '')
| -rw-r--r-- | src/util.ts | 24 |
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'>; |
