As Erlang is an almost pure functional programming language, I’d imagine this was possible:
case X of
foo(Z) -> ...
end.
where foo(Z) is a decidable-invertible pure (side-effect free) bijective function, e.g.:
foo(input) -> output.
Then, in the case that X = output, Z would match as input.
Is it possible to use such semantics, with or without other syntax than my example, in Erlang?
No, Erlang only supports literal patterns!
And your original request is not an easy one. Just because there is a an inverse doesn’t mean that it is easy to find. Practically it would that the compiler would have to make two versions of functions.