From 60331b72ab37e581b0fb405c2eff862e16b52ac2 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sun, 10 Dec 2023 19:24:31 +0530 Subject: cheated for associativity for a=n --- src/index.ts | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) (limited to 'src/index.ts') diff --git a/src/index.ts b/src/index.ts index 5164412..575c446 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,21 +1,41 @@ import { Op, Rewrite, ChainRewrites, Flip } from './util'; export type Add = { op: '+'; a: A; b: B }; +export type Succ = Add<'1', A>; export type Identity = Rewrite, A>; export type Commutativity = Rewrite, Add>; export interface Assoc0 { type: 'rewrite', - left: Add, B>; + left: Add, B>; // (0 + a) + b right: ChainRewrites<[ - Commutativity<'0', A>, - Identity, - Flip>>, - Commutativity, '0'>, + Commutativity<'0', A>, // = (a + 0) + b + Identity, // = a + b + Flip>>, // = (a + b) + 0 + Commutativity, '0'>, // = 0 + (a + b) ], this['left']>; }; +export type Assoc1 = Rewrite, B>, Succ>>; + +export interface Assoc { + type: 'rewrite', + left: Add, C>; // (a + b) + c + right: ChainRewrites<[ + Rewrite>, // = CHEATING + Assoc1, // = succ(a + b) + c + Assoc1, C>, // = succ(a + b + c) + Rewrite, // CHEATING. TODO: figure out recursion + Assoc0, // Induction base case + Rewrite<'0', A>, // CHEATING + Flip>>, // = succ(a) + (b + c) + Rewrite, A>, // = CHEATING + ], this['left']>; +}; + +// type _x = ApplyRewrite, 'C'>, AssocN<'A', 'B', 'C'>> + /* Assoc: (a + b) + c = a + (b + c) @@ -26,7 +46,12 @@ For a = 0, = (b + c) + 0 -- flip id = 0 + (b + c) -- comm -For a = succ(), - +For a' = succ(a), +(succ(a) + b) + c += succ(a + b) + c += succ((a + b) + c) +----- rec += succ(a + (b + c)) += succ(a) + (b + c) */ -- cgit v1.3.1