code: def union(self, *others: 'Substitution') -> 'Substitution':
          
          new_subst = Substitution(self)
          for other in others:
              for variable_name, replacement in other.items():
                  new_subst.try_add_variable(variable_name, replacement)
          return new_subst
docs: Try to merge the substitutions.
  
          If a variable occurs in multiple substitutions, try to merge the replacements.
          See :meth:`union_with_variable` to see how replacements are merged.
  
          Does not modify any of the original substitutions.
  
          Example:
  
          >>> subst1 = Substitution({'x': Multiset(['a', 'b']), 'z': a})
          >>> subst2 = Substitution({'x': ('a', 'b'), 'y': ('c', )})
          >>> print(subst1.union(subst2))
          {x ↦ (a, b), y ↦ (c), z ↦ a}
  
          Args:
              others:
                  The other substitutions to merge with this one.
  
          Returns:
              The new substitution with the other substitutions merged.
  
          Raises:
              ValueError:
                  if a variable occurs in multiple substitutions but cannot be merged because the
                  substitutions conflict.