import { PropositionalFormula } from '../types.js';
export class PropositionalValidator {
evaluate(formula: PropositionalFormula, valuation: { [atom: string]: boolean }): boolean {
switch (formula.type) {
case 'variable':
return valuation[formula.name] || false;
case 'unary':
return !this.evaluate(formula.operand, valuation);
case 'binary':
if (formula.operator === 'and' || formula.operator === '∧') {
return this.evaluate(formula.left, valuation) && this.evaluate(formula.right, valuation);
} else if (formula.operator === 'or' || formula.operator === '∨') {
return this.evaluate(formula.left, valuation) || this.evaluate(formula.right, valuation);
} else if (formula.operator === 'implies' || formula.operator === '→') {
const antecedentTrue = this.evaluate(formula.left, valuation);
const consequentTrue = this.evaluate(formula.right, valuation);
return !antecedentTrue || consequentTrue;
} else if (formula.operator === 'iff' || formula.operator === '↔') {
const leftTrue = this.evaluate(formula.left, valuation);
const rightTrue = this.evaluate(formula.right, valuation);
return leftTrue === rightTrue;
}
return false;
default:
throw new Error(`Unknown formula type: ${(formula as any).type}`);
}
}
}