Liskov’s Abstract Data Types
In the retrospect she just realizes what mathematical abstractions, such as Sets or Groups are, when treated in a systematic way, including necessary representations and implementations.
She emphasized Sets of function signatures (interfaces), while the another, now obvious, level is type-classes, which define a set of required (to implement) interfaces.
Abstract Data Types are the most fundamental building block of all programming, and in a sense a direct application of the universal abstraction principle (of not being concerned with or not even knowing all the details) which the Mind uses.
This realization is way more important than the Liskov Substitution Principle for OOP.
Defining an abstract public (exported) interface is only the beginning. Stating informally the “algebraic laws” and invariants for pairs of functions is what amounts to a specification of an abstract interface.
This idea is not new. Sets in math are defined exactly like that - in terms of operations which can be performed and algebraic laws and invariants. Another example would be Groups.
Her earlier book “Abstraction and Specification in Program Development” is a must-read.