{"version":3,"file":"index.mjs","sources":["../src/expressions.ts","../src/basis.ts","../src/mappings.ts","../src/operations.ts","../src/axiom.ts","../src/containers.ts","../src/quantifiers.ts","../src/reasoners.ts","../src/aggregation.ts"],"sourcesContent":["export const TextExpression: RegExp = new RegExp(\"^[a-zA-Z]+$\");\r\nexport const VariableExpression: RegExp = new RegExp(\"^[a-z]$\");\r\nexport const FunctionExpression: RegExp = new RegExp(\"^(~|)([a-zA-Z0-9]+)(|(\\\\[[a-z]\\\\])|(\\\\[[a-z]\\\\,[a-z]\\\\]))$\");\r\nexport const SentenceExpression: RegExp = new RegExp(\"^([a-zA-Z0-9]+)(|(\\\\[([a-zA-Z]+)\\\\])|(\\\\[([a-zA-Z]+)\\\\,([a-zA-Z]+)\\\\]))$\");","import { TextExpression, VariableExpression, FunctionExpression, SentenceExpression } from \"./expressions\";\r\nimport { IStringable, IEvaluable, IFormulableNode } from \"./interfaces\";\r\nimport { Mappings } from \"./mappings\";\r\nimport { Functionality, Population, TruthTable } from \"./containers\";\r\n\r\nexport class Individual implements IStringable{\r\n    private _name: string;\r\n\r\n    constructor(name: string){\r\n        if(name == null)\r\n            throw new Error(\"Name cannot be null.\");\r\n        \r\n        if(name === \"x\" || name === \"y\")\r\n            throw new Error(\"x and y are reserved names.\");\r\n        \r\n        if(!TextExpression.test(name))\r\n            throw new Error(\"Individual name only accepts letters and capital letters.\");\r\n\r\n        this._name = name;\r\n    }\r\n\r\n    get name(){\r\n        return this._name;\r\n    }\r\n\r\n    equals(obj: Individual) : boolean { \r\n        if(obj == null) return false;\r\n        return this._name === obj._name;\r\n    }\r\n\r\n    toString(): string{\r\n        return this._name;\r\n    }\r\n}\r\n\r\nexport class Function implements IFormulableNode {\r\n    private _name: string;\r\n    private _cardinality: Cardinality;\r\n    private _firstVariable: string;\r\n    private _secondVariable: string;\r\n    private _reflexive: boolean;\r\n\r\n    constructor(\r\n        name: string, \r\n        cardinality: Cardinality,\r\n        firstVariable: string = \"x\",\r\n        secondVariable: string = \"y\",\r\n        isReflexive: boolean = false){\r\n        \r\n        this.validateName(name);\r\n        this.validateVariable(firstVariable);\r\n        this.validateVariable(secondVariable);\r\n\r\n        if (cardinality === Cardinality.Two && firstVariable === secondVariable) \r\n            throw new Error(\"Variables must be different\");\r\n\r\n        this._name = name;\r\n        this._cardinality = cardinality;\r\n        this._firstVariable = (cardinality === Cardinality.One || cardinality === Cardinality.Two) \r\n            ? firstVariable \r\n            : null;\r\n        this._secondVariable = (cardinality === Cardinality.Two) \r\n            ? secondVariable \r\n            : null;\r\n\r\n        this.setReflexiveBasedOnCardinality(cardinality, isReflexive);\r\n    }\r\n\r\n    get name(){\r\n        return this._name;\r\n    }\r\n\r\n    get cardinality(){\r\n        return this._cardinality;\r\n    }\r\n\r\n    get firstVariable(){\r\n        return this._firstVariable;\r\n    }\r\n\r\n    get secondVariable(){\r\n        return this._secondVariable;\r\n    }\r\n\r\n    get isReflexive(): boolean{\r\n        return this._reflexive;\r\n    }\r\n\r\n    get variables(): string[]{\r\n        let result = [];\r\n\r\n        if(this._cardinality === Cardinality.One)\r\n        {\r\n            result.push(this._firstVariable);\r\n        }\r\n        else if(this._cardinality === Cardinality.Two)\r\n        {\r\n            result.push(this._firstVariable);\r\n            result.push(this._secondVariable);\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    equals(obj: Function) : boolean { \r\n        if(obj == null) return false;\r\n        return this._name === obj._name\r\n            && this._cardinality === obj._cardinality\r\n            && this._reflexive === obj._reflexive;\r\n    }\r\n\r\n    toString(): string{\r\n        switch (this._cardinality)\r\n        {\r\n            case Cardinality.One:\r\n                return `${this._name}[${this._firstVariable}]`;\r\n\r\n            case Cardinality.Two:\r\n                return `${this._name}[${this._firstVariable},${this._secondVariable}]`;\r\n\r\n            default:\r\n                return this._name;\r\n        }\r\n    }\r\n\r\n    formulate(mappings: Mappings): IEvaluable{\r\n        if (this._cardinality === Cardinality.None)\r\n        {\r\n            return new Sentence(this);\r\n        }\r\n        else if (this._cardinality === Cardinality.One)\r\n        {\r\n            if (!mappings.hasVariable(this._firstVariable)) \r\n                throw new Error(`${this._firstVariable} variable is missing`);\r\n\r\n            return new Sentence(this, mappings.mapping(this._firstVariable));\r\n        }\r\n        else\r\n        {\r\n            if (!mappings.hasVariable(this._firstVariable)) \r\n                throw new Error(`${this._firstVariable} variable is missing`);\r\n            \r\n            if (!mappings.hasVariable(this._secondVariable)) \r\n                throw new Error(`${this._secondVariable} variable is missing`);\r\n\r\n            return new Sentence(\r\n                this, \r\n                mappings.mapping(this._firstVariable), \r\n                mappings.mapping(this._secondVariable));\r\n        }\r\n    }\r\n\r\n    static build(input: string): Function{\r\n        \r\n        if (!this.validate(input)) \r\n            throw new Error(\"Wrong function input.\")\r\n\r\n        let isReflexive: boolean = input.startsWith(\"~\");\r\n        input = input.replace(\"~\", \"\");\r\n\r\n        let parts = input.split('[');\r\n\r\n        if (parts.length > 1)\r\n        {\r\n            let removedCorxet: string = parts[1].replace(\"]\", \"\");\r\n\r\n            if (removedCorxet.includes(\",\"))\r\n            {\r\n                let subParts: string[] = removedCorxet.split(',');\r\n                return new Function(parts[0], Cardinality.Two, subParts[0], subParts[1], isReflexive);\r\n            }\r\n            \r\n            return new Function(parts[0], Cardinality.One, removedCorxet);\r\n        }\r\n        \r\n        return new Function(parts[0], Cardinality.None);\r\n    }\r\n\r\n    static validate(input: string): boolean\r\n    {\r\n        if (input == null) \r\n            throw new Error(\"Input cannot be null.\");\r\n\r\n        return FunctionExpression.test(input);\r\n    }\r\n\r\n    private validateName(name: string): void{\r\n        if (name == null) \r\n            throw new Error(\"Name cannot be null.\");\r\n\r\n        if(!TextExpression.test(name))\r\n            throw new Error(\"Function name only accepts letters and capital letters.\");\r\n    }\r\n\r\n    private validateVariable(variable: string): void{\r\n        if (variable == null) \r\n            throw new Error(\"Variable cannot be null.\");\r\n\r\n        if(!VariableExpression.test(variable))\r\n            throw new Error(\"Variable only accepts lowercase letters.\");\r\n    }\r\n\r\n    private setReflexiveBasedOnCardinality(cardinality: Cardinality, isReflexive: boolean): void\r\n    {\r\n        if (cardinality === Cardinality.Two) this._reflexive = isReflexive;\r\n        else this._reflexive = false;\r\n    }\r\n}\r\n\r\nexport enum Cardinality{\r\n    None = 0,\r\n    One = 1,\r\n    Two = 2\r\n}\r\n\r\nexport class Sentence implements IStringable, IEvaluable{\r\n    private _function: Function;\r\n    private _first: Individual;\r\n    private _second: Individual;\r\n\r\n    constructor(func: Function, first: Individual = null, second: Individual = null){\r\n        if(func == null)\r\n            throw new Error(\"Function cannot be null.\");\r\n\r\n        this._function = func;\r\n\r\n        if(this._function.cardinality === Cardinality.One){\r\n            if(first == null)\r\n                throw new Error(\"First individual cannot be null with the specified cardinality.\");\r\n        }else if(this._function.cardinality === Cardinality.Two){\r\n            if(first == null)\r\n                throw new Error(\"First individual cannot be null with the specified cardinality.\");\r\n            \r\n            if(second == null)\r\n                throw new Error(\"Second individual cannot be null with the specified cardinality.\");\r\n            \r\n            if(first.equals(second)){\r\n                throw new Error(\"Individuals must be different.\");\r\n            }\r\n        }else{\r\n            if(first != null || second != null)\r\n                throw new Error(\"Should not be individuals with a cardinality None function.\");\r\n        }\r\n\r\n        this._first = first;\r\n        this._second = second;\r\n    }\r\n\r\n    get function(){\r\n        return this._function;\r\n    }\r\n\r\n    get first(){\r\n        return this._first;\r\n    }\r\n\r\n    get second(){\r\n        return this._second;\r\n    }\r\n\r\n    toString(): string{\r\n        switch (this._function.cardinality)\r\n        {\r\n            case Cardinality.One:\r\n                return `${this._function.name}[${this._first.toString()}]`;\r\n\r\n            case Cardinality.Two:\r\n                if(this._function.isReflexive){\r\n                    let orderedIndividuals = [this._first.toString(), this._second.toString()].sort();\r\n                    return `${this._function.name}[${orderedIndividuals[0]},${orderedIndividuals[1]}]`;\r\n                }\r\n                else{\r\n                    return `${this._function.name}[${this._first.toString()},${this._second.toString()}]`;\r\n                }\r\n\r\n            default:\r\n                return this._function.toString();\r\n        }\r\n    }\r\n\r\n    equals(obj: Sentence): boolean\r\n    {\r\n        if (obj == null) return false;\r\n\r\n        if (!this._function.equals(obj._function)) return false;\r\n\r\n        if (this._function.cardinality === Cardinality.One)\r\n            return this._first != null \r\n                && obj._first != null\r\n                && this._first.equals(obj._first);\r\n\r\n        if (this._function.cardinality === Cardinality.Two && !this._function.isReflexive)\r\n            return this._first != null\r\n                && obj._first != null\r\n                && this._second != null\r\n                && obj._second != null\r\n                && this._first.equals(obj._first) \r\n                && this._second.equals(obj._second);\r\n\r\n        if (this._function.cardinality === Cardinality.Two && this._function.isReflexive)\r\n            return this._first != null\r\n                && obj._first != null\r\n                && this._second != null\r\n                && obj._second != null\r\n                && ((this._first.equals(obj._first) && this._second.equals(obj._second)) \r\n                    || (this._first.equals(obj._second) && this._second.equals(obj._first)));\r\n\r\n        return true;\r\n    }\r\n\r\n    evaluate(table: TruthTable): boolean{\r\n        return table.exists(this);\r\n    }\r\n\r\n    static validate(input: string): boolean\r\n    {\r\n        if (input == null) \r\n            throw new Error(\"Input cannot be null.\");\r\n\r\n        return SentenceExpression.test(input);\r\n    }\r\n\r\n    static buildStrict(input: string, population: Population, functionality: Functionality): Sentence{\r\n        if (input == null) \r\n            throw new Error(\"Input cannot be null.\");\r\n        if (population == null) \r\n            throw new Error(\"Population cannot be null.\");\r\n        if (functionality == null) \r\n            throw new Error(\"Functionality cannot be null\");\r\n\r\n        if (!this.validate(input)) \r\n            throw new Error(\"Invalid input to create a sentence.\");\r\n\r\n        let parts = input.split('[');\r\n\r\n        if (parts.length > 1)\r\n        {\r\n            var inputWithoutParenthesis = parts[1].replace(\"]\", \"\");\r\n            var subparts = inputWithoutParenthesis.split(',');\r\n\r\n            if (subparts.length > 1)\r\n            {\r\n                var functionNonReflexive = new Function(parts[0], Cardinality.Two);\r\n                var functionReflexive = new Function(parts[0], Cardinality.Two, \"x\", \"y\", true);\r\n\r\n                if (!functionality.exists(functionNonReflexive) && !functionality.exists(functionReflexive))\r\n                    throw new Error(\"Function doesn't exist.\");\r\n\r\n                var func = functionality.exists(functionNonReflexive)\r\n                    ? functionNonReflexive\r\n                    : functionReflexive;\r\n                \r\n                var individual1 = new Individual(subparts[0]);\r\n                if (!population.exists(individual1)) \r\n                    throw new Error(\"First proposed individual doesn't exist.\");\r\n\r\n                var individual2 = new Individual(subparts[1]);\r\n                if (!population.exists(individual2)) \r\n                    throw new Error(\"Second proposed individual doesn't exist\");\r\n\r\n                return new Sentence(func, individual1, individual2);\r\n            }\r\n            else\r\n            {\r\n                var func = new Function(parts[0], Cardinality.One);\r\n                if (!functionality.exists(func)) \r\n                    throw new Error(\"Function doesn't exist.\");\r\n\r\n                var individual1 = new Individual(subparts[0]);\r\n                if (!population.exists(individual1)) \r\n                    throw new Error(\"First proposed individual doesn't exist.\");\r\n\r\n                return new Sentence(func, individual1);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            var func = new Function(parts[0], Cardinality.None);\r\n            if (!functionality.exists(func)) \r\n                throw new Error(\"Function doesn't exist.\");\r\n\r\n            return new Sentence(func);\r\n        }\r\n    }\r\n\r\n    static build(\r\n        functionName: string, \r\n        firstIndividualName: string = null, \r\n        secondIndividualName: string = null, \r\n        reflexive: boolean = false): Sentence\r\n    {\r\n        if (functionName == null || functionName === \"\")\r\n            throw new Error(\"Function name is not valid\");\r\n\r\n        return (firstIndividualName == null || firstIndividualName === \"\")\r\n            ? new Sentence(new Function(functionName, Cardinality.None, \"x\", \"y\", reflexive))\r\n            : (secondIndividualName == null || secondIndividualName === \"\")\r\n                ? new Sentence(\r\n                    new Function(functionName, Cardinality.One, \"x\", \"y\", reflexive), \r\n                    new Individual(firstIndividualName))\r\n                : new Sentence(\r\n                    new Function(functionName, Cardinality.Two, \"x\", \"y\", reflexive),\r\n                    new Individual(firstIndividualName),\r\n                    new Individual(secondIndividualName));\r\n    }\r\n}","import { Individual } from \"./basis\";\r\n\r\nexport class Mappings{\r\n    private _mappings: { [variable: string]: Individual };\r\n\r\n    constructor(){\r\n        this._mappings = {};\r\n    }\r\n\r\n    get variables(): string[]{\r\n        return Object.keys(this._mappings);\r\n    }\r\n\r\n    get hasAllVariablesMapped(): boolean{\r\n        for(let variable of this.variables){\r\n            if(this._mappings[variable] === null)\r\n                return false; \r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    addVariable(variable: string): void\r\n    {\r\n        this.checkVariable(variable);\r\n\r\n        if(variable in this._mappings) \r\n            throw new Error(\"Variable already exists\");\r\n\r\n        this._mappings[variable] = null;\r\n    }\r\n\r\n    addVariables(variables: string[])\r\n    {\r\n        if (variables == null || variables.length === 0) \r\n            throw new Error(\"Variables must contain any value\");\r\n\r\n        for (let variable of variables)\r\n        {\r\n            this.addVariable(variable)\r\n        }\r\n    }\r\n\r\n    map(variable: string, individual: Individual): void\r\n    {\r\n        this.checkVariable(variable);\r\n        this.checkExistingVariable(variable);\r\n\r\n        this.checkIndividual(individual);\r\n\r\n        this._mappings[variable] = individual;\r\n    }\r\n\r\n    mapNext(individual: Individual): void\r\n    {\r\n        this.checkIndividual(individual);\r\n        \r\n        let included: boolean = false;\r\n        for (let variable of this.variables)\r\n        {\r\n            if (this._mappings[variable] === null)\r\n            {\r\n                this._mappings[variable] = individual;\r\n                included = true;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if(!included)\r\n            throw new Error(\"No empty mappings found\");\r\n    }\r\n\r\n    hasVariable(variable: string): boolean\r\n    {\r\n        this.checkVariable(variable);\r\n\r\n        return this.variables.includes(variable);\r\n    }\r\n\r\n    hasMapping(variable: string): boolean\r\n    {\r\n        this.checkVariable(variable);\r\n        this.checkExistingVariable(variable);\r\n\r\n        return this._mappings[variable] !== null;\r\n    }\r\n\r\n    hasIndividual(individual: Individual): boolean\r\n    {\r\n        this.checkIndividual(individual);\r\n\r\n        for(let variable of this.variables){\r\n            if(individual.equals(this._mappings[variable]))\r\n                return true;\r\n        }\r\n        \r\n        return false;\r\n    }\r\n\r\n    mapping(variable: string): Individual\r\n    {\r\n        this.checkVariable(variable);\r\n        this.checkExistingVariable(variable);\r\n\r\n        return this._mappings[variable];\r\n    }\r\n\r\n    removeMapping(variable: string): void\r\n    {\r\n        this.checkVariable(variable);\r\n        this.checkExistingVariable(variable);\r\n\r\n        this._mappings[variable] = null;\r\n    }\r\n\r\n    removeIndividual(individual: Individual): void\r\n    {\r\n        this.checkIndividual(individual);\r\n        if (!this.hasIndividual(individual)) \r\n            throw new Error(\"Individual doesn't exist\")\r\n\r\n        for (let variable of this.variables)\r\n        {\r\n            if (individual.equals(this._mappings[variable]))\r\n            {\r\n                this._mappings[variable] = null;\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    removeVariable(variable: string): void\r\n    {\r\n        this.checkVariable(variable);\r\n        this.checkExistingVariable(variable);\r\n\r\n        delete this._mappings[variable];\r\n    }\r\n\r\n    copy(): Mappings{\r\n        let copy = new Mappings();\r\n        for(let variable of this.variables){\r\n            copy._mappings[variable] = this._mappings[variable];\r\n        }\r\n\r\n        return copy;\r\n    }\r\n\r\n    private checkVariable(variable: string): void\r\n    {\r\n        if (variable == null || variable === \"\")\r\n            throw new Error(\"Variable cannot be null nor empty\");\r\n    }\r\n\r\n    private checkExistingVariable(variable: string): void\r\n    {\r\n        if (!(variable in this._mappings)) \r\n            throw new Error(\"Variable doesn't exist\");\r\n    }\r\n\r\n    private checkIndividual(individual: Individual): void\r\n    {\r\n        if (individual == null)\r\n            throw new Error(\"Individual cannot be null\");\r\n    }\r\n}","import { TruthTable } from \"./containers\";\r\nimport { IEvaluable, IEvaluableNode, IFormulableNode, IStringable } from \"./interfaces\";\r\nimport { Mappings } from \"./mappings\";\r\n\r\ntype UnaryOperation = (a: boolean) => boolean;\r\ntype BinaryOperation = (a: boolean, b: boolean) => boolean;\r\ntype UnaryFormulation = (a: IEvaluable) => IEvaluable;\r\ntype BinaryFormulation = (a: IEvaluable, b: IEvaluable) => IEvaluable;\r\n\r\nconst NegateSymbol: string = \"¬\";\r\nconst AndSymbol: string = \"&\";\r\nconst OrSymbol: string = \"|\";\r\nconst ImplicationSymbol: string = \">\";\r\nconst EquivalenceSymbol: string = \"=\";\r\n\r\nconst unaryToString = (symbol: string, a: IStringable) => \r\n    `${symbol}(${a.toString()})`;\r\nconst binaryToString = (symbol: string, a: IStringable, b: IStringable) => \r\n    `(${a.toString()} ${symbol} ${b.toString()})`;\r\n\r\nabstract class EvaluableUnaryOperation implements IEvaluableNode\r\n{\r\n    private _operation: UnaryOperation;\r\n    private _symbol: string;\r\n\r\n    protected _operand: IEvaluableNode;\r\n\r\n    constructor(symbol: string, operand: IEvaluableNode, operation: UnaryOperation){\r\n        if(symbol == null)\r\n            throw new Error(\"Symbol cannot be null\");\r\n        \r\n        if(operand == null)\r\n            throw new Error(\"Operand cannot be null\");\r\n        \r\n        if(operation == null)\r\n            throw new Error(\"Operation cannot be null\");\r\n\r\n        this._symbol = symbol;\r\n        this._operand = operand;\r\n        this._operation = operation;\r\n    }\r\n\r\n    get operand(){\r\n        return this._operand;\r\n    }\r\n\r\n    evaluate(truthTable: TruthTable): boolean {\r\n        return this._operation(this._operand.evaluate(truthTable));\r\n    }\r\n\r\n    toString(): string {\r\n        return unaryToString(this._symbol, this._operand);\r\n    }\r\n}\r\n\r\nabstract class EvaluableBinaryOperation implements IEvaluableNode\r\n{\r\n    private _operation: BinaryOperation;\r\n    private _symbol: string;\r\n\r\n    protected _operand: IEvaluableNode;\r\n    protected _secondOperand: IEvaluableNode;\r\n\r\n    constructor(symbol: string, operand: IEvaluableNode, secondOperand: IEvaluableNode, operation: BinaryOperation){\r\n        if(symbol == null)\r\n            throw new Error(\"Symbol cannot be null\");\r\n        \r\n        if(operand == null)\r\n            throw new Error(\"Operand cannot be null\");\r\n        \r\n        if(secondOperand == null)\r\n            throw new Error(\"Second operand cannot be null\");\r\n        \r\n        if(operation == null)\r\n            throw new Error(\"Operation cannot be null\");\r\n\r\n        this._symbol = symbol;\r\n        this._operand = operand;\r\n        this._secondOperand = secondOperand;\r\n        this._operation = operation;\r\n    }\r\n\r\n    get operand(){\r\n        return this._operand;\r\n    }\r\n\r\n    get secondOperand(){\r\n        return this._secondOperand;\r\n    }\r\n\r\n    evaluate(truthTable: TruthTable): boolean {\r\n        return this._operation(this._operand.evaluate(truthTable), this._secondOperand.evaluate(truthTable));\r\n    }\r\n\r\n    toString(): string {\r\n        return binaryToString(this._symbol, this._operand, this._secondOperand);\r\n    }\r\n}\r\n\r\nexport class EvaluableNegateOperation extends EvaluableUnaryOperation{\r\n    constructor(operand: IEvaluableNode){\r\n        super(NegateSymbol, operand, (a) => !a);\r\n    }\r\n}\r\n\r\nexport class EvaluableAndOperation extends EvaluableBinaryOperation{\r\n    constructor(operand: IEvaluableNode, secondOperand: IEvaluableNode){\r\n        super(AndSymbol, operand, secondOperand, (a, b) => a && b);\r\n    }\r\n}\r\n\r\nexport class EvaluableOrOperation extends EvaluableBinaryOperation{\r\n    constructor(operand: IEvaluableNode, secondOperand: IEvaluableNode){\r\n        super(OrSymbol, operand, secondOperand, (a, b) => a || b);\r\n    }\r\n}\r\n\r\nexport class EvaluableImplicationOperation extends EvaluableBinaryOperation{\r\n    constructor(operand: IEvaluableNode, secondOperand: IEvaluableNode){\r\n        super(ImplicationSymbol, operand, secondOperand, (a, b) => !a || b);\r\n    }\r\n}\r\n\r\nexport class EvaluableEquivalenceOperation extends EvaluableBinaryOperation{\r\n    constructor(operand: IEvaluableNode, secondOperand: IEvaluableNode){\r\n        super(EquivalenceSymbol, operand, secondOperand, (a, b) => a === b);\r\n    }\r\n}\r\n\r\nabstract class FormulableUnaryOperation implements IFormulableNode\r\n{\r\n    private _symbol: string;\r\n    private _operation: UnaryFormulation;\r\n\r\n    protected _operand: IFormulableNode;\r\n\r\n    constructor(symbol: string, operand: IFormulableNode, operation: UnaryFormulation){\r\n        if(symbol == null)\r\n            throw new Error(\"Symbol cannot be null\");\r\n        \r\n        if(operand == null)\r\n            throw new Error(\"Operand cannot be null\");\r\n        \r\n        if(operation == null)\r\n            throw new Error(\"Operation cannot be null\");\r\n\r\n        this._symbol = symbol;\r\n        this._operand = operand;\r\n        this._operation = operation;\r\n    }\r\n\r\n    get operand(){\r\n        return this._operand;\r\n    }\r\n\r\n    get variables(): string[] {\r\n        return this._operand.variables;    \r\n    }\r\n\r\n    formulate(mappings: Mappings): IEvaluable {\r\n        return this._operation(this._operand.formulate(mappings));\r\n    }\r\n\r\n    toString(): string {\r\n        return unaryToString(this._symbol, this._operand);\r\n    }\r\n}\r\n\r\nabstract class FormulableBinaryOperation implements IFormulableNode\r\n{\r\n    private _symbol: string;\r\n    private _operation: BinaryFormulation;\r\n\r\n    protected _operand: IFormulableNode;\r\n    protected _secondOperand: IFormulableNode;\r\n\r\n    constructor(symbol: string, operand: IFormulableNode, secondOperand: IFormulableNode, operation: BinaryFormulation){\r\n        if(symbol == null)\r\n            throw new Error(\"Symbol cannot be null\");\r\n        \r\n        if(operand == null)\r\n            throw new Error(\"Operand cannot be null\");\r\n\r\n        if(secondOperand == null)\r\n            throw new Error(\"Second operand cannot be null\");\r\n        \r\n        if(operation == null)\r\n            throw new Error(\"Operation cannot be null\");\r\n\r\n        this._symbol = symbol;\r\n        this._operand = operand;\r\n        this._secondOperand = secondOperand;\r\n        this._operation = operation;\r\n    }\r\n\r\n    get operand(){\r\n        return this._operand;\r\n    }\r\n\r\n    get secondOperand(){\r\n        return this._secondOperand;\r\n    }\r\n\r\n    get variables(): string[] {\r\n        let variablesSet = new Set<string>([ \r\n            ...this._operand.variables, \r\n            ...this._secondOperand.variables ]);\r\n        return Array.from(variablesSet);\r\n    }\r\n\r\n    formulate(mappings: Mappings): IEvaluable {\r\n        return this._operation(this._operand.formulate(mappings), this._secondOperand.formulate(mappings));\r\n    }\r\n\r\n    toString(): string {\r\n        return binaryToString(this._symbol, this._operand, this._secondOperand);\r\n    }\r\n}\r\n\r\nexport class FormulableNegateOperation extends FormulableUnaryOperation\r\n{\r\n    constructor(operand: IFormulableNode){\r\n        super(NegateSymbol, operand, a => new EvaluableNegateOperation(a));\r\n    }\r\n}\r\n\r\nexport class FormulableAndOperation extends FormulableBinaryOperation\r\n{\r\n    constructor(operand: IFormulableNode, secondOperand: IFormulableNode){\r\n        super(AndSymbol, operand, secondOperand, (a, b) => new EvaluableAndOperation(a, b));\r\n    }\r\n}\r\n\r\nexport class FormulableOrOperation extends FormulableBinaryOperation\r\n{\r\n    constructor(operand: IFormulableNode, secondOperand: IFormulableNode){\r\n        super(OrSymbol, operand, secondOperand, (a, b) => new EvaluableOrOperation(a, b));\r\n    }\r\n}\r\n\r\nexport class FormulableImplicationOperation extends FormulableBinaryOperation\r\n{\r\n    constructor(operand: IFormulableNode, secondOperand: IFormulableNode){\r\n        super(ImplicationSymbol, operand, secondOperand, (a, b) => new EvaluableImplicationOperation(a, b));\r\n    }\r\n}\r\n\r\nexport class FormulableEquivalenceOperation extends FormulableBinaryOperation\r\n{\r\n    constructor(operand: IFormulableNode, secondOperand: IFormulableNode){\r\n        super(EquivalenceSymbol, operand, secondOperand, (a, b) => new EvaluableEquivalenceOperation(a, b));\r\n    }\r\n}","import { FormulableAndOperation, FormulableImplicationOperation } from \"./operations\";\r\nimport { IFormulable, IStringable, IFormulableNode } from \"./interfaces\";\r\n\r\nexport class Axiom implements IStringable{\r\n    private _premises: IFormulableNode[];\r\n    private _conclusion: IFormulableNode;\r\n\r\n    constructor(premises: IFormulableNode[], conclusion: IFormulableNode)\r\n    {\r\n        if(premises == null || premises.length === 0)\r\n            throw new Error(\"Trhere must be almost one premise.\");\r\n        \r\n        if(conclusion == null)\r\n            throw new Error(\"Conclision cannot be null.\");\r\n        \r\n        let premisesVariables = new Set<string>();\r\n        for(let premise of premises)\r\n            for(let variable of premise.variables)\r\n                premisesVariables.add(variable);\r\n\r\n        for(let variable of conclusion.variables)\r\n            if(!premisesVariables.has(variable))\r\n                throw new Error(\"Conclusion variables must be a subset of the premises variables.\");\r\n        \r\n        this._premises = premises;\r\n        this._conclusion = conclusion;\r\n    }\r\n\r\n    get premises(){\r\n        return this._premises;\r\n    }\r\n\r\n    get conclusion(){\r\n        return this._conclusion;\r\n    }\r\n\r\n    get premise(): IFormulableNode{\r\n        if (this._premises.length === 1)\r\n            return this._premises[0];\r\n        \r\n        let actualAnd: FormulableAndOperation = null;\r\n        let lastFormulable: IFormulable = null;\r\n\r\n        for (let i = this._premises.length - 1; i >= 0; i--)\r\n        {\r\n            if (lastFormulable != null)\r\n            {\r\n                if (actualAnd == null)\r\n                {\r\n                    actualAnd = new FormulableAndOperation(this._premises[i], lastFormulable);\r\n                }\r\n                else\r\n                {\r\n                    actualAnd = new FormulableAndOperation(this._premises[i], actualAnd);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                lastFormulable = this._premises[i];\r\n            }\r\n        }\r\n\r\n        return actualAnd;\r\n    }\r\n\r\n    get formulable(): IFormulableNode{\r\n        return new FormulableImplicationOperation(this.premise, this._conclusion);\r\n    }\r\n\r\n    toString(): string{\r\n        return `${this._premises.map(premise => `(${premise.toString()})`).join(' & ')} > ${this.conclusion.toString()}`;\r\n    }\r\n\r\n    equals(other: Axiom): boolean{\r\n        return this.toString() === other.toString();\r\n    }\r\n}","import { Individual, Function, Sentence } from \"./basis\";\r\nimport { Axiom } from \"./axiom\";\r\nimport { IStringable } from \"./interfaces\";\r\n\r\nexport abstract class Container<T extends IStringable>{\r\n    private _items: Map<string, T>;\r\n\r\n    constructor(items: T[] = []){\r\n        this._items = new Map<string, T>();\r\n\r\n        if(items != null){\r\n            for(let item of items){\r\n                this._items.set(item.toString(), item);\r\n            }\r\n        }\r\n    }\r\n\r\n    get elements(): T[]{\r\n        let result = [];\r\n        for(let item of this._items.values())\r\n            result.push(item);\r\n        \r\n        return result;\r\n    }\r\n\r\n    add(item: T): void{\r\n        this.validateItem(item);\r\n        \r\n        this._items.set(item.toString(), item);\r\n    }\r\n\r\n    remove(item: T): boolean{\r\n        this.validateItem(item);\r\n        \r\n        return this._items.delete(item.toString());\r\n    }\r\n\r\n    exists(item: T): boolean{\r\n        this.validateItem(item);\r\n        \r\n        return this._items.has(item.toString());\r\n    }\r\n\r\n    get(itemStringRepresentation: string): T{\r\n        if(itemStringRepresentation == null || itemStringRepresentation === \"\")\r\n            throw new Error(\"Input cannot be null or empty\");\r\n        \r\n        return this._items.get(itemStringRepresentation);\r\n    }\r\n\r\n    private validateItem(item: T): void{\r\n        if(item == null)\r\n            throw new Error(\"Input cannot be null.\");\r\n    }\r\n}\r\n\r\nexport class Population extends Container<Individual>{}\r\nexport class Functionality extends Container<Function>{}\r\nexport class Rules extends Container<Axiom>{}\r\n\r\nexport class TruthTable extends Container<Sentence>{\r\n    static get empty(): TruthTable{\r\n        return new TruthTable();\r\n    }\r\n\r\n    join(truthTable: TruthTable): boolean\r\n    {\r\n        let anyAdded: boolean = false;\r\n        for (let item of truthTable.elements)\r\n        {\r\n            if (!this.exists(item))\r\n            {\r\n                anyAdded = true;\r\n                this.add(item);\r\n            }\r\n        }\r\n\r\n        return anyAdded;\r\n    }\r\n\r\n    with(sentence: Sentence): TruthTable\r\n    {\r\n        this.add(sentence);\r\n        return this;\r\n    }\r\n\r\n    copy(): TruthTable\r\n    {\r\n        let copy = new TruthTable();\r\n        for (var item of this.elements)\r\n        {\r\n            copy.add(item);\r\n        }\r\n\r\n        return copy;\r\n    }\r\n\r\n    existsFunction(func: Function): boolean {\r\n        return this.elements.some(sentence => sentence.function.equals(func));\r\n    }\r\n\r\n    removeFunction(func: Function): number {\r\n        let index = 0;\r\n        let removedElements = 0;\r\n        while(index < this.elements.length){\r\n            if(func.equals(this.elements[index].function)){\r\n                this.remove(this.elements[index]);\r\n                removedElements++;\r\n            }\r\n            else{\r\n                index++;\r\n            }\r\n        }\r\n\r\n        return removedElements;\r\n    }\r\n}","import { IFormulable } from \"./interfaces\";\r\nimport { Population, TruthTable } from \"./containers\";\r\nimport { Mappings } from \"./mappings\";\r\nimport { Individual } from \"./basis\";\r\n\r\nexport function existencialQuantifier(\r\n    premise: IFormulable, \r\n    formulable: IFormulable, \r\n    population: Population, \r\n    truthTable: TruthTable): boolean {\r\n    \r\n    checkInputs(premise, formulable, population, truthTable);\r\n    \r\n    let mappingsList = getPremiseValidMappings(premise, population, truthTable);\r\n    if(mappingsList.length === 0)\r\n        return false;\r\n\r\n    for (let mapping of mappingsList)\r\n    {\r\n        var evaluable = formulable.formulate(mapping);\r\n        if (evaluable.evaluate(truthTable)) \r\n            return true;\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\nexport function universalQuantifier(\r\n    premise: IFormulable, \r\n    formulable: IFormulable, \r\n    population: Population, \r\n    truthTable: TruthTable): boolean {\r\n    \r\n    checkInputs(premise, formulable, population, truthTable);\r\n\r\n    let mappingsList = getPremiseValidMappings(premise, population, truthTable);\r\n    if(mappingsList.length === 0)\r\n        return false;\r\n    \r\n    for (let mapping of mappingsList)\r\n    {\r\n        var evaluable = formulable.formulate(mapping);\r\n        if (!evaluable.evaluate(truthTable)) \r\n            return false;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nfunction checkInputs(\r\n    premise: IFormulable, \r\n    formulable: IFormulable, \r\n    population: Population, \r\n    truthTable: TruthTable): void\r\n{\r\n    if (premise == null)\r\n        throw new Error(\"Premise cannot be null.\");\r\n\r\n    if (formulable == null)\r\n        throw new Error(\"Formulable cannot be null.\");\r\n\r\n    if (population == null)\r\n        throw new Error(\"Population cannot be null.\");\r\n\r\n    if (truthTable == null)\r\n        throw new Error(\"Truth table cannot be null.\");\r\n\r\n    var premiseVariables = premise.variables;\r\n    var formulableVariables = formulable.variables;\r\n\r\n    if(premiseVariables.length === 0 || formulableVariables.length === 0) \r\n        throw new Error(\"Formulations without variables cannot be quantified.\");\r\n\r\n    if(premiseVariables.length > population.elements.length) \r\n        throw new Error(\"There is not enough population to fill all variables.\");\r\n}\r\n\r\nfunction getPremiseValidMappings(\r\n    premise: IFormulable, \r\n    population: Population, \r\n    truthTable: TruthTable): Mappings[]\r\n{\r\n    let result: Mappings[] = [];\r\n    \r\n    for (let individual of population.elements)\r\n    {\r\n        let mappings = new Mappings();\r\n        mappings.addVariables(premise.variables);\r\n\r\n        mappings.mapNext(individual);\r\n\r\n        if (mappings.hasAllVariablesMapped)\r\n        {\r\n            var evaluable = premise.formulate(mappings);\r\n            if (evaluable.evaluate(truthTable))\r\n            {\r\n                result.push(mappings.copy());\r\n            }\r\n        }\r\n        else\r\n        {\r\n            var otherIndividuals = getNonUsedIndividuals(mappings, population.elements);\r\n\r\n            var subMappings = getPremiseValidSubMappings(premise, mappings, otherIndividuals, truthTable);\r\n            result.push(...subMappings);\r\n        }\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nfunction getNonUsedIndividuals(mappings: Mappings, population: Individual[]): Individual[]\r\n{\r\n    return population\r\n        .filter(individual => !mappings.hasIndividual(individual));\r\n}\r\n\r\nfunction getPremiseValidSubMappings(\r\n    premise: IFormulable, \r\n    mappings: Mappings, \r\n    population: Individual[], \r\n    truthTable: TruthTable): Mappings[]\r\n{\r\n    let result: Mappings[] = [];\r\n\r\n    for (let individual of population)\r\n    {\r\n        mappings.mapNext(individual);\r\n\r\n        if (mappings.hasAllVariablesMapped)\r\n        {\r\n            var evaluable = premise.formulate(mappings);\r\n\r\n            if (evaluable.evaluate(truthTable))\r\n            {\r\n                result.push(mappings.copy());\r\n            }\r\n\r\n            mappings.removeIndividual(individual);\r\n        }\r\n        else\r\n        {\r\n            var otherIndividuals = getNonUsedIndividuals(mappings, population);\r\n            var subMappings = getPremiseValidSubMappings(premise, mappings, otherIndividuals, truthTable);\r\n            result.push(...subMappings);\r\n            mappings.removeIndividual(individual);\r\n        }\r\n    }\r\n\r\n    return result;\r\n}","import { Individual, Sentence } from \"./basis\";\r\nimport { Axiom } from \"./axiom\";\r\nimport { Mappings } from \"./mappings\";\r\nimport { Rules, Population, TruthTable } from \"./containers\";\r\nimport { IFormulable } from \"./interfaces\";\r\nimport { EvaluableNegateOperation } from \"./operations\";\r\n\r\nexport function modusPonens(\r\n    rules: Rules, \r\n    population: Population, \r\n    truthTable: TruthTable, \r\n    added: Sentence[] = []): ModusPonensResult{\r\n    \r\n    if (rules == null)\r\n        throw new Error(\"Rules cannot be null.\");\r\n\r\n    if (population == null)\r\n        throw new Error(\"Population cannot be null.\");\r\n\r\n    if (truthTable == null)\r\n        throw new Error(\"TruthTable cannot be null.\");\r\n\r\n    if (added == null)\r\n        throw new Error(\"Added cannot be null.\");\r\n\r\n    if (rules.elements.length === 0) \r\n        throw new Error(\"Rules cannot be empty.\");\r\n    \r\n    for (let rule of rules.elements)\r\n        if (rule.formulable.variables.length > population.elements.length)\r\n            throw new Error(\"There are less individuals in population than variables inside rules.\");\r\n\r\n    let result = new ModusPonensResult();\r\n    for (let sentence of added.filter(s => !s.evaluate(truthTable)))\r\n    {\r\n        result.add(sentence);\r\n        truthTable.add(sentence);\r\n    }\r\n\r\n    let lastCount = -1;\r\n\r\n    while(result.count > lastCount)\r\n    {\r\n        lastCount = result.count;\r\n\r\n        for (let axiom of rules.elements)\r\n        {\r\n            let subresult = infere(axiom, population, truthTable);\r\n            result.merge(subresult);\r\n        }\r\n\r\n        updateTruthTable(truthTable, result);\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nfunction infere(rule: Axiom, population: Population, truthTable: TruthTable): ModusPonensResult\r\n{\r\n    let result = new ModusPonensResult();\r\n\r\n    let premise = rule.premise;\r\n\r\n    if (population.elements.length > 0)\r\n    {\r\n        for (let individual of population.elements)\r\n        {\r\n            let mappings = new Mappings();\r\n            mappings.addVariables(premise.variables);\r\n\r\n            mappings.mapNext(individual);\r\n\r\n            if (mappings.hasAllVariablesMapped)\r\n            {\r\n                evaluateAxiomConclusion(rule, truthTable, result, premise, mappings);\r\n            }\r\n            else\r\n            {\r\n                var otherIndividuals = getNonUsedIndividuals(mappings, population.elements);\r\n\r\n                var subResult = subInfere(rule, mappings, otherIndividuals, truthTable);\r\n                result.merge(subResult);\r\n            }\r\n        }\r\n    }\r\n    else\r\n    {\r\n        evaluateAxiomConclusion(rule, truthTable, result, premise, new Mappings());\r\n    }\r\n    \r\n    return result;\r\n}\r\n\r\nfunction subInfere(\r\n    rule: Axiom, \r\n    mappings: Mappings, \r\n    population: Individual[], \r\n    truthTable: TruthTable): ModusPonensResult\r\n{\r\n    let result = new ModusPonensResult();\r\n\r\n    let premise = rule.premise;\r\n\r\n    for (let individual of population)\r\n    {\r\n        mappings.mapNext(individual);\r\n\r\n        if (mappings.hasAllVariablesMapped)\r\n        {\r\n            evaluateAxiomConclusion(rule, truthTable, result, premise, mappings);\r\n\r\n            mappings.removeIndividual(individual);\r\n        }\r\n        else\r\n        {\r\n            var otherIndividuals = getNonUsedIndividuals(mappings, population);\r\n            var subResult = subInfere(rule, mappings, otherIndividuals, truthTable);\r\n            result.merge(subResult);\r\n            mappings.removeIndividual(individual);\r\n        }\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nfunction updateTruthTable(truthTable: TruthTable, result: ModusPonensResult): void\r\n{\r\n    result.purgeIncongruences();\r\n    for (let sentence of result.added.filter(s => !s.evaluate(truthTable)))\r\n        truthTable.add(sentence);\r\n    \r\n    for (let sentence of result.removed.filter(s => s.evaluate(truthTable)))\r\n        truthTable.remove(sentence);\r\n}\r\n\r\nfunction evaluateAxiomConclusion(\r\n    rule: Axiom, \r\n    truthTable: TruthTable, \r\n    result: ModusPonensResult, \r\n    premise: IFormulable, \r\n    mappings: Mappings): void\r\n{\r\n    var evaluable = premise.formulate(mappings);\r\n    if (evaluable.evaluate(truthTable))\r\n    {\r\n        let conclusion = rule.conclusion.formulate(mappings);\r\n        let posibleNegation = conclusion as EvaluableNegateOperation;\r\n        if(posibleNegation.operand === undefined) // Check if the type is a Sentence or a NegatedOperation\r\n        {\r\n            var conclusionSentence = conclusion as Sentence;\r\n            if (!conclusionSentence.evaluate(truthTable)) result.add(conclusionSentence);\r\n        }\r\n        else\r\n        {\r\n            var conclusionSentence = posibleNegation.operand as Sentence;\r\n            if (conclusionSentence.evaluate(truthTable)) result.quit(conclusionSentence);\r\n        }\r\n    }\r\n}\r\n\r\nfunction getNonUsedIndividuals(mappings: Mappings, population: Individual[]): Individual[]{\r\n    return population\r\n        .filter(individual => !mappings.hasIndividual(individual));\r\n}\r\n\r\nexport class ModusPonensResult{\r\n    private _added: Map<string, Sentence>;\r\n    private _removed: Map<string, Sentence>;\r\n\r\n    constructor(){\r\n        this._added = new Map<string, Sentence>();\r\n        this._removed = new Map<string, Sentence>();\r\n    }\r\n\r\n    get added(): Sentence[]{\r\n        return Array.from(this._added.values());\r\n    }\r\n\r\n    get removed(): Sentence[]{\r\n        return Array.from(this._removed.values());\r\n    }\r\n\r\n    get count(): number{\r\n        return this._added.size + this._removed.size;\r\n    }\r\n\r\n    get any(): boolean{\r\n        return this.count > 0;\r\n    }\r\n\r\n    add(sentence: Sentence): void{\r\n        if(sentence == null)\r\n            throw Error(\"Sentence cannot be null.\");\r\n        \r\n        this._added.set(sentence.toString(), sentence);\r\n    }\r\n\r\n    quit(sentence: Sentence): void{\r\n        if(sentence == null)\r\n            throw Error(\"Sentence cannot be null.\");\r\n        \r\n        this._removed.set(sentence.toString(), sentence);\r\n    }\r\n\r\n    merge(result: ModusPonensResult): void{\r\n        if(result == null)\r\n            throw Error(\"Result cannot be null.\");\r\n        \r\n        for(let added of result._added)\r\n            this._added.set(added[0], added[1]);\r\n        \r\n        for(let removed of result._removed){\r\n            this._removed.set(removed[0], removed[1]);\r\n        }\r\n    }\r\n\r\n    purgeIncongruences(): void{\r\n        for(let added of this._added){\r\n            this._removed.delete(added[0]);\r\n        }\r\n    }\r\n}","import { TruthTable, Population, Functionality, Rules } from './containers'\r\n\r\nexport class LogicAgent{\r\n    private _table: TruthTable;\r\n    private _population: Population;\r\n    private _functions: Functionality;\r\n    private _rules: Rules;\r\n\r\n    constructor(){\r\n        this._table = new TruthTable();\r\n        this._population = new Population();\r\n        this._functions = new Functionality();\r\n        this._rules = new Rules();\r\n    }\r\n\r\n    get table(){\r\n        return this._table;\r\n    }\r\n\r\n    get population(){\r\n        return this._population;\r\n    }\r\n\r\n    get functions(){\r\n        return this._functions;\r\n    }\r\n\r\n    get rules(){\r\n        return this._rules;\r\n    }\r\n\r\n    set table(input: TruthTable){\r\n        if(input == null)\r\n            throw new Error(\"Truth table cannot be null.\");\r\n\r\n        this._table = input;\r\n    }\r\n\r\n    set population(input: Population){\r\n        if(input == null)\r\n            throw new Error(\"Population cannot be null.\");\r\n\r\n        this._population = input;\r\n    }\r\n\r\n    set functions(input: Functionality){\r\n        if(input == null)\r\n            throw new Error(\"Functionality cannot be null.\");\r\n\r\n        this._functions = input;\r\n    }\r\n\r\n    set rules(input: Rules){\r\n        if(input == null)\r\n            throw new Error(\"Rules cannot be null.\");\r\n\r\n        this._rules = input;\r\n    }\r\n}"],"names":["Cardinality","TextExpression","RegExp","VariableExpression","FunctionExpression","SentenceExpression","Individual","name","this","_name","Error","test","equals","obj","toString","_createClass","key","get","Function","cardinality","firstVariable","secondVariable","isReflexive","_cardinality","_firstVariable","_secondVariable","_reflexive","validateName","validateVariable","Two","One","setReflexiveBasedOnCardinality","_proto2","prototype","formulate","mappings","None","Sentence","hasVariable","mapping","build","input","validate","startsWith","parts","replace","split","length","removedCorxet","includes","subParts","variable","result","push","func","first","second","_function","_first","_second","orderedIndividuals","sort","_proto3","evaluate","table","exists","buildStrict","population","functionality","subparts","functionNonReflexive","functionReflexive","individual1","individual2","functionName","firstIndividualName","secondIndividualName","reflexive","Mappings","_mappings","addVariable","checkVariable","addVariables","variables","_step","_iterator","done","value","map","individual","checkExistingVariable","checkIndividual","_proto","mapNext","_step2","included","_iterator2","_createForOfIteratorHelperLoose","hasMapping","hasIndividual","_step3","_iterator3","removeMapping","removeIndividual","_step4","_iterator4","removeVariable","copy","_step5","_iterator5","Object","keys","_iterator6","_step6","unaryToString","symbol","a","binaryToString","b","EvaluableUnaryOperation","operand","operation","_operation","_symbol","_operand","truthTable","EvaluableBinaryOperation","secondOperand","_secondOperand","EvaluableNegateOperation","_EvaluableUnaryOperat","NegateSymbol","_inheritsLoose","EvaluableAndOperation","_EvaluableBinaryOpera","AndSymbol","EvaluableOrOperation","_EvaluableBinaryOpera2","OrSymbol","EvaluableImplicationOperation","_EvaluableBinaryOpera3","ImplicationSymbol","EvaluableEquivalenceOperation","_EvaluableBinaryOpera4","call","FormulableUnaryOperation","FormulableBinaryOperation","variablesSet","Set","concat","Array","from","FormulableNegateOperation","_FormulableUnaryOpera","FormulableAndOperation","_FormulableBinaryOper","FormulableOrOperation","_FormulableBinaryOper2","FormulableImplicationOperation","_FormulableBinaryOper3","FormulableEquivalenceOperation","_FormulableBinaryOper4","Axiom","premises","conclusion","_premises","_conclusion","premise","premisesVariables","add","has","join","other","actualAnd","lastFormulable","i","Container","items","_items","Map","item","set","validateItem","remove","itemStringRepresentation","values","Population","Functionality","Rules","_Container3","apply","arguments","TruthTable","_Container4","anyAdded","elements","sentence","existsFunction","some","removeFunction","index","removedElements","existencialQuantifier","formulable","checkInputs","mappingsList","getPremiseValidMappings","universalQuantifier","premiseVariables","hasAllVariablesMapped","subMappings","getPremiseValidSubMappings","getNonUsedIndividuals","filter","modusPonens","rules","added","ModusPonensResult","s","lastCount","count","axiom","subresult","infere","merge","updateTruthTable","rule","evaluateAxiomConclusion","subResult","subInfere","purgeIncongruences","_iterator7","removed","_step7","conclusionSentence","posibleNegation","undefined","quit","_added","_removed","_step8","_iterator8","_step9","_iterator9","_step10","_iterator10","size","LogicAgent","_table","_population","_functions","_rules"],"mappings":"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"}