import { Op, Rewrite, ChainRewrites, Sym, Equation, VerifyEquation, assert, SubstEq } from './utils/theorem'; export namespace equation { type F = { op: 'F', a: X }; export type Reflexivity = Rewrite, 'true'>; export type Commutativity = Rewrite, Equation>; export type Congruence = Rewrite, Equation, F>>; export namespace proof { export interface SubstituteEq_Proof { type: 'rewrite', known: { 'a = b': Equation, }, left: Equation, F>; // f(a) = f(b) right: ChainRewrites<[ Sym>, // a = b SubstEq, // b = b Reflexivity, ], this['left']>; }; export type substitution = [ assert>>, ] } export namespace proof { export interface Transitivity_Proof { type: 'rewrite', known: { 'a = b': Equation, 'b = c': Equation, }, left: Equation; // a = c right: ChainRewrites<[ SubstEq, // b = c Rewrite, // true ], this['left']>; }; export type transitivity = [ assert>>, ] } }