chop-logic-core
Version:
Core classes, methods and functions for calculating logical formulas and constructing proofs within the Chop Logic project.
153 lines (113 loc) โข 6.23 kB
Markdown
# Chop Logic Core
[](https://opensource.org/licenses/MIT)
[](https://codecov.io/gh/ChopLogic/chop-logic-core)
[](https://sonarcloud.io/summary/new_code?id=ChopLogic_chop-logic-core)
[](https://conventionalcommits.org)
[](https://biomejs.dev)
[](https://github.com/ChopLogic/chop-logic-core/actions/workflows/npm.yml)
[](https://keepachangelog.com/en/1.1.0/)
[](https://semver.org/spec/v2.0.0)
[](https://dashboard.stryker-mutator.io/reports/github.com/ChopLogic/chop-logic-core/main)
**Chop Logic Core** is a TypeScript library providing core functions for working with **symbolic logic**. It is part of the broader [Chop Logic](https://github.com/ChopLogic) project and offers essential utilities for logic processing and deduction.
## โจ Features
- ๐ ๏ธ Factory methods for building logical symbols, operators, expressions, and well-formed formulas (WFF).
- ๐ Tools for analyzing formulas:
- Variable extraction
- Sub-formula extraction
- Truth table generation
- Formula evaluation
- Well-formedness checks
- โ๏ธ Inference rules from:
- Hilbert-style Calculus
- Natural Deduction Calculus (Introduction & Elimination rules)
- ๐งช Utilities for formula validation and consistency checks.
- ๐ฃ Tokenizer for parsing and handling logical strings.
## ๐ฆ Installation
You can install `chop-logic-core` via npm:
```sh
npm install chop-logic-core
```
Or using yarn:
```sh
yarn add chop-logic-core
```
## โ๏ธ Available Scripts
The following npm scripts are available for development and maintenance:
- **`npm run build`** โ Builds both ESM and CJS versions of the library.
- **`npm run prepare`** โ Runs build and husky commands.
- **`npm run clean`** โ Removes the generated `lib` folder.
- **`npm run format`** โ Formats all supported files using Biome.
- **`npm run lint`** โ Runs Biome linter to check for code style and quality issues.
- **`npm run lint:errors`** โ Shows only error-level diagnostics from Biome (limited to 100).
- **`npm run lint:warnings`** โ Shows only warning-level diagnostics from Biome (limited to 100 issues).
- **`npm run lint:fix`** โ Automatically fixes Biome issues where possible.
- **`npm run test`** โ Runs Jest in watch mode.
- **`npm run test:ci`** โ Runs Jest in CI mode, allowing zero tests to pass.
- **`npm run test:coverage`** โ Generates a test coverage report.
- **`npm run typecheck`** โ Performs a full type check without emitting output.
- **`npm run docs`** โ Generates documentation using typedoc.
- **`release:version`** โ Bumps the version (`patch`, `minor`, or `major`), commits the change, creates a Git tag, and pushes to `main`. Usage:
`npm run release:version patch`
## ๐ง Usage
### Creating and Evaluating Formulas
```ts
import {
createPropExpression,
createPropFormula,
calculatePropFormula,
} from "chop-logic-core";
// Create an implication: p โ q
const formula = createPropFormula(createPropExpression("p => q"));
// Evaluate the formula with different truth assignments
const result1 = calculatePropFormula(formula, { p: true, q: true }); // true
const result2 = calculatePropFormula(formula, { p: true, q: false }); // false
```
### Building Proofs
```ts
import { buildHilbertProof } from "chop-logic-core";
const proof = buildHilbertProof(goalFormula)
.addPremise(premiseA, "Given")
.addAxiom(axiomPayload, "Axiom II")
.addDerivedStep(derivedPayload, "Modus Ponens")
.build();
if (proof.isComplete()) {
console.log("Proof is valid!");
}
```
### Truth Table Generation
```ts
import { generatePropTruthTable } from "chop-logic-core";
// Generate a truth table for a formula
const formula = createPropFormula(createPropExpression("(~A & B)"));
const truthTable = generatePropTruthTable(formula);
// Returns all rows with different truth assignments
```
### Validations and Checks
```ts
import {
isConjunctionIntroductionApplicable,
PropFormula,
Operator
} from "chop-logic-core";
const formula1: PropFormula = { operator: Operator.Var, values: ["P"] };
const formula2: PropFormula = { operator: Operator.Var, values: ["Q"] };
// Check if inference rules are applicable to your formulas
const applicable = isConjunctionIntroductionApplicable([formula1, formula2]);
```
For more comprehensive examples and detailed API documentation, visit the [full documentation](https://choplogic.github.io/chop-logic-core).
## ๐ Contributing
Contributions are welcome! If you find a bug or have an idea for improvement, feel free to open an issue or submit a pull request. Please check the [Contribution guide](CONTRIBUTING.md) for additional info.
1. Fork the repository.
2. Clone your fork.
3. Create a new feature branch.
4. Implement and test your changes.
5. Submit a pull request!
## ๐ License
This project is licensed under **MIT**. See the [LICENSE](LICENSE) file for details.
## ๐ Links
- **GitHub Repository:** [chop-logic-core](https://github.com/ChopLogic/chop-logic-core)
- **Issue Tracker:** [Report Issues](https://github.com/ChopLogic/chop-logic-core/issues)
- **npm package**: [chop-logic-core](https://www.npmjs.com/package/chop-logic-core)
- **Changelog:** [Version History](CHANGELOG.md)
---
Let's build better logic tools together! ๐