static boolean setEquals(AttributeValue a, AttributeValue b, boolean caseInsensitive) {
        if (!areBothProjections(a, b)) {
            return false;
        }

        Collection<? extends AttributeValue> aValues = a.getFlattenedValues();
        Collection<? extends AttributeValue> bValues = b.getFlattenedValues();
        return isSubset(aValues, bValues, caseInsensitive)
                && isSubset(bValues, aValues, caseInsensitive);
    }
Compares the given attribute values by flattening each side of the
comparison, and comparing each value.

<p>This method is necessary in order to support matching on projections
using projection semantics.

@param singleComparison Comparison to apply to each element.
@return Returns the created comparator.
smithy-model/src/main/java/software/amazon/smithy/model/selector/AttributeComparator.java