minimum necessary function