difficult
is_invertible