I think you are getting confused with functional programming languages.
Anyway, a functional index is used to speed up access to data where queries that are accessing the data are using database functions.
By way of example, a query such as
select blah from foo where sqrt(blah)=4 would have to perform the
sqrt() operation for each value of
blah. You could optimise this by pre-calculating all values of
sqrt(blah) in a functional index:
create index foo_func on foo (sqrt(blah));
This is where immutability comes in. A function is immutable if and only if the same input will always give the same output. Functional indexes can only use immutable functions. This guarantees that any queries for a given value and related functional index value will always return the same result.