import { Add, Assoc, Assoc0, Assoc1, Commutativity, Identity, Succ } from './index'; import { ApplyRewrite, ChainRewrites, Flip, Rewrite } 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'>>, Add<'A', 'B'> >>, assert, '0'>, Identity>>, Add<'A', 'B'> >>, assert, Flip>>>, Add, '0'> >>, assert>>, Identity<'C'>>, Add<'A', Add<'B', 'C'>> >>, ] export type specCommutativity = [ assert, Commutativity<'A', 'B'>>, Add<'B', 'A'> >>, assert, 'C'>, Commutativity<'A', 'B'>>, Add, 'C'> >>, assert>, Commutativity<'B', 'C'>>, Add<'A', Add<'C', 'B'>> >>, ] export type specChainRewrites = [ assert, Identity<'B'>, ], Add, 'C'> >, Add<'B', 'C'> >>, assert, Identity<'B'>, Flip>>, Commutativity, '0'>, ], Add, 'C'> >, Add<'0', Add<'B', 'C'>> >>, ] 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'>> >>, ]