import { addition, multiplication } from './index'; import { Add, Multiply, Succ } from './nat'; import { ApplyRewrite, ChainRewrites, Flip, Eq, VerifyEquation, Equation, assert, Evaluate } from './util'; export type specChainRewrites = [ assert, addition.Identity<'B'>, ], Add, 'C'> >, Add<'B', 'C'> >>, assert, addition.Identity<'B'>, Flip>>, addition.Commutativity, '0'>, ], Add, 'C'> >, Add<'0', Add<'B', 'C'>> >>, ] export namespace spec_addition { export type specIdentity = [ assert>, addition.Identity<'B'>>, Add<'A', 'B'> >>, assert, '0'>, addition.Identity>>, Add<'A', 'B'> >>, assert, Flip>>>, Add, '0'> >>, assert>>, addition.Identity<'C'>>, Add<'A', Add<'B', 'C'>> >>, ] export type specCommutativity = [ assert, addition.Commutativity<'A', 'B'>>, Add<'B', 'A'> >>, assert, 'C'>, addition.Commutativity<'A', 'B'>>, Add, 'C'> >>, assert>, addition.Commutativity<'B', 'C'>>, Add<'A', Add<'C', 'B'>> >>, ] } export namespace multiplication_spec { export type specCommutativity = [ assert, 'C'>, multiplication.Commutativity<'A', 'B'>>, Multiply, 'C'> >>, ] export type specDistributivity = [ assert>, Add, Multiply<'B', 'C'>> >>, ] export type specAssociativity = [ assert>, Multiply<'A', Multiply<'B', 'C'>> >>, ] }