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/tests.ts | 58 ++++++++++++++++++++++++---------------------------------- 1 file changed, 24 insertions(+), 34 deletions(-) (limited to 'src/tests.ts') diff --git a/src/tests.ts b/src/tests.ts index d56cb30..f4530b4 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,49 +1,54 @@ -import { Add, Assoc, Assoc0, Assoc1, Commutativity, Identity, Succ } from './index'; -import { ApplyRewrite, ChainRewrites, Flip, Rewrite } from './util'; +import { addition } from './index'; +import { Add } from './nat'; +import { ApplyRewrite, ChainRewrites, Flip, Eq, VerifyEquation } from './util'; -type Eq = ([a] extends [b] ? ([b] extends [a] ? true : false & { a: a; b: b }) : false & { a: a; b: b }); type assert = T; export type specIdentity = [ assert>, Identity<'B'>>, + ApplyRewrite>, addition.Identity<'B'>>, Add<'A', 'B'> >>, assert, '0'>, Identity>>, + ApplyRewrite, '0'>, addition.Identity>>, Add<'A', 'B'> >>, assert, Flip>>>, + ApplyRewrite, Flip>>>, Add, '0'> >>, assert>>, Identity<'C'>>, + ApplyRewrite>>, addition.Identity<'C'>>, Add<'A', Add<'B', 'C'>> >>, ] export type specCommutativity = [ assert, Commutativity<'A', 'B'>>, + ApplyRewrite, addition.Commutativity<'A', 'B'>>, Add<'B', 'A'> >>, assert, 'C'>, Commutativity<'A', 'B'>>, + ApplyRewrite, 'C'>, addition.Commutativity<'A', 'B'>>, Add, 'C'> >>, assert>, Commutativity<'B', 'C'>>, + ApplyRewrite>, addition.Commutativity<'B', 'C'>>, Add<'A', Add<'C', 'B'>> >>, ] +export type specCommutativityInduction = [ + assert>>, + assert>>, +] + export type specChainRewrites = [ assert, - Identity<'B'>, + addition.Commutativity<'0', 'B'>, + addition.Identity<'B'>, ], Add, 'C'> >, @@ -52,10 +57,10 @@ export type specChainRewrites = [ assert, - Identity<'B'>, - Flip>>, - Commutativity, '0'>, + addition.Commutativity<'0', 'B'>, + addition.Identity<'B'>, + Flip>>, + addition.Commutativity, '0'>, ], Add, 'C'> >, @@ -63,23 +68,8 @@ export type specChainRewrites = [ >>, ] -export type specAssoc0 = [ - assert, 'C'>, Assoc0<'B', 'C'>>, - Add<'0', Add<'B', 'C'>> - >>, - assert>, 'C'>, Assoc0, 'C'>>, - Add<'0', Add, 'C'>> - >>, -] - -export type specAssocN = [ - assert, 'C'>, Assoc<'A', 'B', 'C'>>, - Add<'A', Add<'B', 'C'>> - >>, +export type specAssociativityInduction = [ + assert>>, + assert>>, ] - - -- cgit v1.3.1