> [!note] Disclaimer
> This note has been replaced by a more detailed blog post, [Identity in software design](https://adrianodigiovanni.com/identity-in-software-design/). The post offers expanded insights and examples on the concepts mentioned here. For the latest information, please check the blog.
Software designers tackle the challenge of [[Identity over time]] by defining software entity identities based on specific criteria, frequently asking: *a* is the same *what* as *b*? ([[References#^8d3ca6|Gallois, 2016]])
Identity in software can be considered as [[Relative Identity (RI)]], where *what* is referred to as the [[Sortal]].
![[Relative Identity (RI)#^9f8cf6]]
![[Sortal#^3872f6]]
Both [[Relative Identity (RI)]] and [[Sortal]] are concepts within philosophical discussions on [[Identity theory]].
![[Sortal#^678a53]]
In software design, sortals can be considered a subset of types having specific behavior related to identification and quantification. For example:
- **Reference types** are identified by their memory address ([[Reference equality]].
- **Value types** are identified by their content ([[Value equality]]).
- **Entity types** are identified by a unique identifier ([[Value equality]] with respect to the unique identifier).
- **Interfaces, protocols, and contracts** are identified by their behavior.
- **Version types** are identified by unique identifiers like version numbers or timestamps ([[Value equality]]).
In [[Domain-Driven Design (DDD)]], both [[Entity|Entities]] and [[Value Object|Value Objects]] are sortals.
In summary, any type that incorporates such identification or quantification behavior can be classified as a sortal.