import { Op, Rewrite, ChainRewrites, Sym, Equation, VerifyEquation, assert, ApplyRewrite, Evaluate, OpToStr, SubstEq } from './utils/theorem'; export namespace equation { type F = { op: 'F', a: X }; export type Reflexivity = Rewrite, 'true'>; export type Symmetry = Rewrite, Equation>; export type Congruence = Rewrite, Equation, F>>; 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 namespace spec { export type substitution = [ assert>>, ] } export interface Transitivity_Proof { type: 'rewrite', known: { 'a = b': Equation, 'b = c': Equation, }, left: Equation, Equation>; // (a = b) = (b = c) right: ChainRewrites<[ SubstEq, // (b = b) = (b = c) SubstEq>>, // (b = b) = (c = b) Reflexivity, // true = (b = b) Reflexivity, // true = true Reflexivity<'true'>, ], this['left']>; }; export namespace spec { export type transitivity = [ assert>>, ] } }