import type { RingMin } from './Ring' import { Ring } from './Ring' /* * ------------------------------------------- * model * ------------------------------------------- */ export interface Field extends Ring { readonly degree: (a: A) => number readonly div_: (x: A, y: A) => A readonly div: (y: A) => (x: A) => A readonly mod_: (x: A, y: A) => A readonly mod: (y: A) => (x: A) => A } export type FieldMin = RingMin & { readonly degree: (a: A) => number readonly div_: (x: A, y: A) => A readonly mod_: (x: A, y: A) => A } export function Field(F: FieldMin): Field { return { ...Ring(F), degree: F.degree, div_: F.div_, div: (y) => (x) => F.div_(x, y), mod_: F.mod_, mod: (y) => (x) => F.mod_(x, y) } }