diff options
| author | Akshay Nair <phenax5@gmail.com> | 2023-12-12 18:47:06 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2023-12-12 18:47:06 +0530 |
| commit | 999c2314c0d649646a53e7cc440ae3f4aa1a3d61 (patch) | |
| tree | d475be6c55343b5ccc05d2d014897708182789cd /src/tests.ts | |
| parent | ade99f3f1fc2da1d51a82f1376c61ad609d60ff1 (diff) | |
| download | ts-theorem-provinator-999c2314c0d649646a53e7cc440ae3f4aa1a3d61.tar.gz ts-theorem-provinator-999c2314c0d649646a53e7cc440ae3f4aa1a3d61.zip | |
feat: commutativity + identity for multiplication
Diffstat (limited to 'src/tests.ts')
| -rw-r--r-- | src/tests.ts | 94 |
1 files changed, 46 insertions, 48 deletions
diff --git a/src/tests.ts b/src/tests.ts index f4530b4..5c066dc 100644 --- a/src/tests.ts +++ b/src/tests.ts @@ -1,47 +1,6 @@ -import { addition } from './index'; -import { Add } from './nat'; -import { ApplyRewrite, ChainRewrites, Flip, Eq, VerifyEquation } from './util'; - -type assert<T extends true> = T; - -export type specIdentity = [ - assert<Eq< - ApplyRewrite<Add<'A', Add<'B', '0'>>, addition.Identity<'B'>>, - Add<'A', 'B'> - >>, - assert<Eq< - ApplyRewrite<Add<Add<'A', 'B'>, '0'>, addition.Identity<Add<'A', 'B'>>>, - Add<'A', 'B'> - >>, - assert<Eq< - ApplyRewrite<Add<'A', 'B'>, Flip<addition.Identity<Add<'A', 'B'>>>>, - Add<Add<'A', 'B'>, '0'> - >>, - assert<Eq< - ApplyRewrite<Add<'A', Add<'B', Add<'C', '0'>>>, addition.Identity<'C'>>, - Add<'A', Add<'B', 'C'>> - >>, -] - -export type specCommutativity = [ - assert<Eq< - ApplyRewrite<Add<'A', 'B'>, addition.Commutativity<'A', 'B'>>, - Add<'B', 'A'> - >>, - assert<Eq< - ApplyRewrite<Add<Add<'A', 'B'>, 'C'>, addition.Commutativity<'A', 'B'>>, - Add<Add<'B', 'A'>, 'C'> - >>, - assert<Eq< - ApplyRewrite<Add<'A', Add<'B', 'C'>>, addition.Commutativity<'B', 'C'>>, - Add<'A', Add<'C', 'B'>> - >>, -] - -export type specCommutativityInduction = [ - assert<VerifyEquation<addition.Comm_Base<'B'>>>, - assert<VerifyEquation<addition.Comm_Inductive<'A', 'B'>>>, -] +import { addition, multiplication } from './index'; +import { Add, Multiply, Succ } from './nat'; +import { ApplyRewrite, ChainRewrites, Flip, Eq, VerifyEquation, Equation, assert } from './util'; export type specChainRewrites = [ assert<Eq< @@ -68,8 +27,47 @@ export type specChainRewrites = [ >>, ] -export type specAssociativityInduction = [ - assert<VerifyEquation<addition.Assoc_Base<'B', 'C'>>>, - assert<VerifyEquation<addition.Assoc_Inductive<'A', 'B', 'C'>>>, -] +export namespace spec_addition { + export type specIdentity = [ + assert<Eq< + ApplyRewrite<Add<'A', Add<'B', '0'>>, addition.Identity<'B'>>, + Add<'A', 'B'> + >>, + assert<Eq< + ApplyRewrite<Add<Add<'A', 'B'>, '0'>, addition.Identity<Add<'A', 'B'>>>, + Add<'A', 'B'> + >>, + assert<Eq< + ApplyRewrite<Add<'A', 'B'>, Flip<addition.Identity<Add<'A', 'B'>>>>, + Add<Add<'A', 'B'>, '0'> + >>, + assert<Eq< + ApplyRewrite<Add<'A', Add<'B', Add<'C', '0'>>>, addition.Identity<'C'>>, + Add<'A', Add<'B', 'C'>> + >>, + ] + + export type specCommutativity = [ + assert<Eq< + ApplyRewrite<Add<'A', 'B'>, addition.Commutativity<'A', 'B'>>, + Add<'B', 'A'> + >>, + assert<Eq< + ApplyRewrite<Add<Add<'A', 'B'>, 'C'>, addition.Commutativity<'A', 'B'>>, + Add<Add<'B', 'A'>, 'C'> + >>, + assert<Eq< + ApplyRewrite<Add<'A', Add<'B', 'C'>>, addition.Commutativity<'B', 'C'>>, + Add<'A', Add<'C', 'B'>> + >>, + ] +} +export namespace multiplication_spec { + export type specCommutativity = [ + assert<Eq< + ApplyRewrite<Multiply<Multiply<'A', 'B'>, 'C'>, multiplication.Commutativity<'A', 'B'>>, + Multiply<Multiply<'B', 'A'>, 'C'> + >>, + ] +} |
