From ade99f3f1fc2da1d51a82f1376c61ad609d60ff1 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Tue, 12 Dec 2023 17:58:46 +0530 Subject: feat: associativity and commutativity for addition --- src/util.ts | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/util.ts') 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> = ) : never; -// interface Kind { -// _: V; -// return: unknown; -// } -// type Ap = (K & { _: V })['return']; +export interface Kind { + _: V; + return: R; +} +export type Ap = (K & { _: V })['return']; export type ChainRewrites[], O extends Op> = Rws extends [] ? O - : Rws extends [infer R extends Rewrite, ...infer Rs extends Rewrite[]] - ? ChainRewrites> - : never; + : Rws extends [infer R extends Rewrite, ...infer Rs extends Rewrite[]] + ? ChainRewrites> + : never; + +export type VerifyEquation> = + Eq['right'] extends 'true' ? true : false & Eq['right']; + +export type Eq = ([a] extends [b] ? ([b] extends [a] ? true : false & { lhs: a; rhs: b }) : false & { lhs: a; rhs: b }); + +export type Equation = { op: '=', a: A, b: B }; +export type Refl = Rewrite, 'true'>; -- cgit v1.3.1