# Liskov Substitution Principle

Record: `arch:liskov-substitution`
Kind: principle
Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)
Severity: mandatory
Scope: class, interface, type hierarchy
Aliases: LSP
Canonical: https://banes-lab.com/ontology#arch-liskov-substitution

## Repair

- Refactored by: Replace Inheritance, Extract Interface, Split Hierarchy
- Detected by: overridden method contract divergence
- Violated by: subclass weakening postconditions or strengthening preconditions
- Measured by: contract test pass rate across subtypes
- Enforced by: contract tests, type tests

## requires

- [Contract Preservation](https://banes-lab.com/records/lex/contract-preservation.md)
- [Preconditions](https://banes-lab.com/records/arch/preconditions.md)
- [Postconditions](https://banes-lab.com/records/arch/postconditions.md)
- [Invariants](https://banes-lab.com/records/arch/invariants.md)

## reinforces

- [Polymorphism](https://banes-lab.com/records/arch/polymorphism.md)
- [Type Safety](https://banes-lab.com/records/arch/type-safety.md)

## enables

- [Safe Substitution](https://banes-lab.com/records/lex/safe-substitution.md)
- [Substitutability](https://banes-lab.com/records/lex/substitutability.md)

## conflicts-with

- [Broken Inheritance](https://banes-lab.com/records/lex/broken-inheritance.md)
- [Incompatible Override](https://banes-lab.com/records/lex/incompatible-override.md)

## tensions-with

- [Narrow Specialized Behavior](https://banes-lab.com/records/lex/narrow-specialized-behavior.md)

## tensions

- [Liskov Substitution Principle (LSP) Narrow Specialized Behavior](https://banes-lab.com/records/tension/liskov-substitution-principle-lsp-narrow-specialized-behavior.md)

## referenced-by

- [Design by Contract](https://banes-lab.com/records/arch/design-by-contract.md)
