import { addition, multiplication } from '../natural-numbers'; import { Add, Multiply, _0 } from '../utils/nat'; import { ApplyRewrite, Sym, Eq, VerifyEquation, Equation, assert, Evaluate } from '../utils/theorem'; export namespace spec_addition { export type specIdentity = [ assert>, addition.Identity<'B'>>, Add<'A', 'B'> >>, assert, _0>, addition.Identity>>, Add<'A', 'B'> >>, assert, Sym>>>, 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'>> >>, ] }