UNPKG

lean4-code-actions

Version:

Refactorings and snippets for Lean 4

20 lines (18 loc) 858 B
import { BasicArithmetic } from '../arithmetic' import { assertTwo } from '../assert' export const verify = <T>(arithmetic: BasicArithmetic<T>) => (a: T) => (b: T) => { const { zero, one, add, sub, mul, div, eq, lte } = arithmetic const assertEq = assertTwo(eq) const assertLte = assertTwo(lte) const sum = add(a, b) const product = mul(a, b) const dividend = div(a, b) assertEq(add(a, zero), a, 'add(a, zero)', 'a') assertEq(sub(a, zero), a, 'sub(a, zero)', 'a') assertEq(mul(a, zero), zero, 'mul(a, zero)', 'zero') assertEq(mul(a, one), a, 'mul(a, one)', 'a') assertEq(div(a, one), a, 'div(a, one)', 'a') assertEq(sub(sum, b), a, 'sub(sum, b)', 'a') assertEq(div(product, b), a, 'div(product, b)', 'a') assertLte(mul(dividend, b), a, 'mul(dividend, b)', 'a', {}, 'Due to integer division, the output may be less than input') }