Декларативность относительна, она всегда рассматривается в сравнении с чем-либо и представляет собой более высокий уровень абстракции над рассматриваемым "объектом/подходом". В докладе Матвея про композ, есть хорошая иллюстрация на поколениях языков, где рассматривается сложение чисел как:
1. Условный машинный код "010101001.."
2. Более абстрактный, на ассемблере:
MOV AL, NUM1
ADD AL, NUM2
2й вариант выступает декларативным относительного первого.
Потом рассматривается 3й вариант уже на каком-нибудь Kotlin, где
val a = x + y
и он уже более абстрактный, декларативный по отношению ко 2му варианту
фулл:
https://www.youtube.com/watch?v=ze-Lp0Xevh4&ab_channel=Mobius