Uma maneira de pensar em entropia é "informações médias a serem obtidas", então acho que é melhor voltar à modelagem de informações. Conheço duas abordagens básicas para modelar matematicamente as informações. (Perdoe-me por fornecer referências à Wikipedia, mas IMHO não são ruins.)
Informações de Shannon , que analisam conjuntos de símbolos, distribuições de probabilidade nesses, códigos que podem transferir informações entre conjuntos de símbolos e comprimentos desses códigos. Os conceitos gerais de eficiência de código, ruído, detecção e correção de erros via redundância etc. são apresentados em termos da teoria da informação de Shannon. Uma maneira de expressar informações é dizer que é o comprimento do menor código binário que pode representar um símbolo. Isso é baseado na probabilidade, que é um valor numérico atribuído a um símbolo ou evento por algum observador.
Informações de Solomonoff (ou Kolmogorov ). Aqui está outra explicação. Nesta formulação, o conteúdo de informações de um símbolo ou evento é representado pela duração do programa mais curto que pode ser calculado. Aqui, novamente, é relativo, não a um observador que atribui probabilidade, mas a uma máquina universal que pode executar o programa. Como toda máquina universal pode ser simulada por uma máquina de Turing universal, isso significa, em certo sentido, que o conteúdo de informação do símbolo ou evento não é relativo, mas absoluto.
Se posso ter a liberdade de dizer o que acho que isso significa em termos cotidianos, sobre o qual escrevi um livro , significa simplesmente que a complexidade de um programa é sua duração, quando coisas como a especificação funcional e a linguagem são mantidas constantes, com a devida adequação. permissões para coisas como comentários e comprimentos de nomes. Mas há um problema com isso - o "tarpit APL", onde concisão é igual a incompreensibilidade.
É muito melhor considerar (como eu estudava a IA) que as especificações funcionais do programa consistem em um modelo mental, que não é apenas real, mas codificado de forma eficiente, ou seja, com redundância pequena o suficiente para mudar de idéia sobre os requisitos Isso pode ser feito sem muito risco de torná-lo internamente inconsistente - ou seja, com um "bug". Então, o processo de programação é um canal de informação que toma como entrada o modelo mental e sua saída é o código-fonte de trabalho. Então, quando uma alteração é feita no modelo mental, esse delta deve ser alimentado através do processo de programação e transformado em um delta correspondente no código-fonte. Esse delta é facilmente medido. Diferencie a fonte antes de aplicar esse delta e depois de aplicá-lo (completamente, com todos os bugs resolvidos), e conte o número de blocos de código inseridos, excluídos e substituídos. Quanto menor, melhor a linguagem do código-fonte representa a linguagem na qual o modelo mental é representado (em termos de substantivos, verbos e estrutura). Se essa medida é, de alguma forma, calculada a média do espaço de prováveis mudanças funcionais, esse é um conceito de entropia do idioma de origem e menos é melhor. Há um termo para isso -Linguagem Específica de Domínio (DSL)
Sinto muito se as referências são fracas / pessoais, mas acho que essa questão geral é muito importante.