Core.InverseSourceCompute the inverse image of a term wrt an injective function.
cache f s is equivalent to f s but f s is computed only once unless the rules of s are changed.
inverse_const s s' returns s0 if s has a rule of the form s (s0 ...) ↪ s' ....
cached version of prod_graph.
inverse_prod s s' returns (s0,s1,s2,b) if s has a rule of the form s (s0 _ _) ↪ Π x:s1 _, s2 r with b=true iff x occurs in r, and either s1 has a rule of the form s1 (s3 ...) ↪ s' ... or s1 == s'.