<?xml version='1.0' encoding='UTF-8'?>
<rfc
  version="3"
  category="info"
  docName="draft-le-structured-value-model-01"
  ipr="trust200902"
  submissionType="IETF"
  tocInclude="true"
  sortRefs="false"
  symRefs="true">
  <front>
    <title abbrev="Structured Value Model">A Structured Value Model for Derived Identifiers</title>
    <seriesInfo name="Internet-Draft" value="draft-le-structured-value-model-01"/>
    <author fullname="Thanh Le" initials="T." surname="Le">
      <address>
        <postal>
          <country>VN</country>
        </postal>
        <email>vnlemanhthanh@gmail.com</email>
      </address>
    </author>
    <date/>
    <keyword>derived identifiers</keyword>
    <keyword>identifier comparison</keyword>
    <keyword>structured value</keyword>
    <keyword>scoped identifier</keyword>
    <keyword>comparison domain</keyword>
    <keyword>exact equivalence</keyword>
    <abstract>
      <t>
        Derived identifier constructions that combine local material with identifiers from other
        systems need a defined comparison domain. This document defines a structured value model for
        such constructions and their profiles. A Value contains exact context octets, exact content
        octets, and a finite set of scoped opaque identifiers. Structural admission and equivalence
        are independent of serialization. Equality includes context, content, and complete
        identifier-set membership.
      </t>
      <t>
        The specification gives source mappings and profiles common obligations for fixed inputs,
        imported comparison adaptation, and preservation of participation distinctions. Surrounding
        specifications define concrete mappings, representations, identifier derivations, and the
        shared interpretation needed for interoperability. The model defines no global semantic
        namespace, wire format, cryptographic construction, or trust mechanism.
      </t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" toc="include">
      <name>Introduction</name>
      <t>
        Derived identifier constructions can combine local data with identifiers produced by other
        systems. A trade-document description, for example, can include a document reference and
        identifiers for a buyer, seller, and carrier. Independent implementations need to agree on
        which material enters comparison, how identifiers from different namespaces are qualified,
        and which participant associations distinguish the value being identified.
      </t>
      <t>
        This specification provides a common structural comparison domain. A Value groups context,
        content, and a finite set of scoped opaque identifiers. Context selects interpretation,
        content carries local material, and the identifier field provides reusable qualification and
        complete-set comparison rules for imported results. Equality compares exact octets and
        complete membership. Profiles can reuse these qualification and set-comparison rules across
        concrete encodings and derivations. Independent implementations can compare their mapped
        Values before testing any profile-specific encoding or cryptographic operation.
      </t>
      <t>
        The comparison-contract framework in <xref target="I-D.le-comparing-derived-identifiers"/>
        describes the source-to-result obligations surrounding derived identifiers. This document
        fixes one admitted value domain and its exact equivalence relation. A source mapping defines
        which source distinctions enter that domain; a derived identifier profile defines how Values
        produce identifiers and what output comparison supports. Complete membership suits
        descriptions and configuration snapshots; continuity across changed descriptions is
        addressed in <xref target="complete-membership-and-source-changes"/>.
      </t>
      <t>
        <xref target="mapping-and-derivation-boundaries"/> distinguishes the three comparison
        boundaries. P denotes one fixed source mapping and F one fixed profile derivation. Each
        application of F requires a Value in that profile's derivation domain. Dotted lines mark
        comparisons; the arrows alone assert no preservation or reflection property.
      </t>
      <figure anchor="mapping-and-derivation-boundaries" align="center">
        <name>Mapping and Derivation Comparison Boundaries</name>
        <artset>
          <artwork type="svg" align="center" alt="Two source descriptions map through the same mapping P to Values, then through the same profile derivation F to identifiers. Each column has its own comparison boundary.">
            <svg xmlns="http://www.w3.org/2000/svg" width="660" height="240" viewBox="0 0 660 240" version="1.2" baseProfile="tiny">
              <title>Mapping and Derivation Comparison Boundaries</title>
              <desc>Two source descriptions map through the same mapping P to Values, then through the same profile derivation F to identifiers. Each column has its own comparison boundary.</desc>
              <rect x="0" y="0" width="660" height="240" fill="white"/>
              <text x="90" y="21" font-size="14" text-anchor="middle" font-family="sans-serif" fill="black" font-weight="bold">Sources</text>
              <rect x="19" y="38" width="142" height="42" fill="white" stroke="black" stroke-width="1.4"/>
              <text x="90" y="65" font-size="17" text-anchor="middle" font-family="monospace" fill="black">s1</text>
              <rect x="19" y="174" width="142" height="42" fill="white" stroke="black" stroke-width="1.4"/>
              <text x="90" y="201" font-size="17" text-anchor="middle" font-family="monospace" fill="black">s2</text>
              <line x1="90" y1="84" x2="90" y2="103" stroke="black" stroke-width="1.4" stroke-dasharray="2 4"/>
              <text x="90" y="124" font-size="13" text-anchor="middle" font-family="sans-serif" fill="black">source</text>
              <text x="90" y="142" font-size="13" text-anchor="middle" font-family="sans-serif" fill="black">comparison</text>
              <line x1="90" y1="151" x2="90" y2="170" stroke="black" stroke-width="1.4" stroke-dasharray="2 4"/>
              <text x="330" y="21" font-size="14" text-anchor="middle" font-family="sans-serif" fill="black" font-weight="bold">Values</text>
              <rect x="259" y="38" width="142" height="42" fill="white" stroke="black" stroke-width="1.4"/>
              <text x="330" y="65" font-size="17" text-anchor="middle" font-family="monospace" fill="black">V1</text>
              <rect x="259" y="174" width="142" height="42" fill="white" stroke="black" stroke-width="1.4"/>
              <text x="330" y="201" font-size="17" text-anchor="middle" font-family="monospace" fill="black">V2</text>
              <line x1="330" y1="84" x2="330" y2="103" stroke="black" stroke-width="1.4" stroke-dasharray="2 4"/>
              <text x="330" y="124" font-size="13" text-anchor="middle" font-family="sans-serif" fill="black">model</text>
              <text x="330" y="142" font-size="13" text-anchor="middle" font-family="sans-serif" fill="black">equality</text>
              <line x1="330" y1="151" x2="330" y2="170" stroke="black" stroke-width="1.4" stroke-dasharray="2 4"/>
              <text x="570" y="21" font-size="14" text-anchor="middle" font-family="sans-serif" fill="black" font-weight="bold">Identifiers</text>
              <rect x="499" y="38" width="142" height="42" fill="white" stroke="black" stroke-width="1.4"/>
              <text x="570" y="65" font-size="17" text-anchor="middle" font-family="monospace" fill="black">i1</text>
              <rect x="499" y="174" width="142" height="42" fill="white" stroke="black" stroke-width="1.4"/>
              <text x="570" y="201" font-size="17" text-anchor="middle" font-family="monospace" fill="black">i2</text>
              <line x1="570" y1="84" x2="570" y2="103" stroke="black" stroke-width="1.4" stroke-dasharray="2 4"/>
              <text x="570" y="124" font-size="13" text-anchor="middle" font-family="sans-serif" fill="black">output</text>
              <text x="570" y="142" font-size="13" text-anchor="middle" font-family="sans-serif" fill="black">comparison</text>
              <line x1="570" y1="151" x2="570" y2="170" stroke="black" stroke-width="1.4" stroke-dasharray="2 4"/>
              <line x1="162" y1="59" x2="250.0" y2="59.0" stroke="black" stroke-width="1.4"/>
              <polygon points="258.00,59.00 250.00,62.50 250.00,55.50" fill="black"/>
              <text x="210" y="50" font-size="14" text-anchor="middle" font-family="monospace" fill="black">P</text>
              <line x1="162" y1="195" x2="250.0" y2="195.0" stroke="black" stroke-width="1.4"/>
              <polygon points="258.00,195.00 250.00,198.50 250.00,191.50" fill="black"/>
              <text x="210" y="186" font-size="14" text-anchor="middle" font-family="monospace" fill="black">P</text>
              <line x1="402" y1="59" x2="490.0" y2="59.0" stroke="black" stroke-width="1.4"/>
              <polygon points="498.00,59.00 490.00,62.50 490.00,55.50" fill="black"/>
              <text x="450" y="50" font-size="14" text-anchor="middle" font-family="monospace" fill="black">F</text>
              <line x1="402" y1="195" x2="490.0" y2="195.0" stroke="black" stroke-width="1.4"/>
              <polygon points="498.00,195.00 490.00,198.50 490.00,191.50" fill="black"/>
              <text x="450" y="186" font-size="14" text-anchor="middle" font-family="monospace" fill="black">F</text>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[     Sources                  Values                 Identifiers

  +-----------+            +-----------+            +-----------+
  |    s1     | -- P -->   |    V1     | -- F -->   |    i1     |
  +-----------+            +-----------+            +-----------+
        :                        :                        :
     source                    model                   output
   comparison                equality                comparison
        :                        :                        :

  +-----------+            +-----------+            +-----------+
  |    s2     | -- P -->   |    V2     | -- F -->   |    i2     |
  +-----------+            +-----------+            +-----------+]]></artwork>
        </artset>
      </figure>
      <t>
        Shared interpretation depends on the applicable surrounding definitions; this model
        establishes no global semantic namespace. Concrete representations, cryptographic
        constructions, and trust mechanisms belong to surrounding specifications.
        <xref target="value-model"/> defines the model and gives a short example;
        <xref target="source-mappings-and-imported-identifiers"/> specifies mapping obligations;
        <xref target="derived-identifier-profiles"/> specifies profile obligations; and
        <xref target="worked-mapping-examples"/> develops the trade-document mappings.
      </t>
    </section>
    <section anchor="conventions-and-conformance-scope" toc="include">
      <name>Conventions and Conformance Scope</name>
      <t>
        The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY" in this document are to
        be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
        when, and only when, they appear in all capitals, as shown here.
      </t>
      <t>
        An octet string is a finite sequence of octets. A source mapping converts accepted source
        material into a Value. A derived identifier profile defines how admitted Values in its
        domain produce identifiers. A single specification can define both.
      </t>
      <t>
        The definitions in Sections <xref target="value-types" format="counter"/> through
        <xref target="equivalence" format="counter"/> and the applicable requirements in Sections
        <xref target="source-mappings-and-imported-identifiers" format="counter"/>,
        <xref target="derived-identifier-profiles" format="counter"/>, and
        <xref target="security-considerations" format="counter"/> govern mappings, profiles, and
        implementations that adopt this model. A conformance claim identifies whether it concerns
        model comparison, a source mapping, a derived identifier profile, or a combination, together
        with the applicable definitions and comparison claims. Correct Value comparison alone does
        not establish conformance to a mapping or profile. Mapping and profile implementations apply
        their selected definitions.
      </t>
      <t>
        Sections <xref target="introduction" format="counter"/>,
        <xref target="a-value-in-use" format="counter"/>,
        <xref target="worked-mapping-examples" format="counter"/>, and
        <xref target="relationship-to-existing-work" format="counter"/>, together with
        <xref target="model-test-considerations"/>, provide explanation and examples. These
        conceptual boundaries do not require separate implementation stages or exposed intermediate
        objects.
      </t>
    </section>
    <section anchor="value-model" toc="include">
      <name>Value Model</name>
      <section anchor="value-types" toc="include">
        <name>Value Types</name>
        <t>
          A scoped identifier is a pair of octet strings:
        </t>
        <sourcecode type="text" anchor="scoped-identifier-type">ScopedIdentifier := {
  scope      : finite octet string,
  identifier : finite octet string
}</sourcecode>
        <t>
          Two ScopedIdentifier values are equal if and only if their scope octets are equal and
          their identifier octets are equal. Both components are opaque to the model. Imported
          interpretation is specified under <xref target="imported-interpretation"/>.
        </t>
        <t>
          The comparison domain consists of records of the following type:
        </t>
        <sourcecode type="text" anchor="value-type">Value := {
  context     : finite octet string,
  content     : finite octet string,
  identifiers : finite set of ScopedIdentifier
}</sourcecode>
        <t>
          context selects an interpretation within the applicable surrounding definitions. content
          carries exact local material. identifiers carries the complete set of imported identifier
          members participating in comparison. Sections
          <xref target="context-and-content" format="counter"/> through
          <xref target="participation-and-member-associations" format="counter"/> specify how
          mappings populate these fields.
        </t>
      </section>
      <section anchor="structural-admission-and-empty-values" toc="include">
        <name>Structural Admission and Empty Values</name>
        <t>
          A candidate is structurally admitted if and only if it is a Value of the type in
          <xref target="value-types"/>: context and content are finite octet strings, and
          identifiers is a finite mathematical set whose members each contain finite scope and
          identifier octet strings.
        </t>
        <t>
          Each octet string can be empty, and identifiers can be the empty set. An empty scope or
          identifier is part of an exact member value. In particular, the empty set and a set
          containing the pair of two empty strings are different. A Value with no imported
          identifiers still has the same type; context and content supply its other comparison
          material.
        </t>
        <t>
          Structural admission does not validate arbitrary identifier octets against an imported
          system. A mapping defines any imported-system validation and restrictions, including
          non-empty requirements, before producing the Value. Profile domain restrictions do not
          redefine this mathematical domain. Conformance to a claimed source mapping is addressed in
          <xref target="derivation-and-comparison-claims"/>.
        </t>
        <t>
          These admission conditions are independent of local memory, time, storage, or other
          resource availability. An inability to process an admitted Value is an operational
          refusal, not evidence that the Value lies outside the model domain.
        </t>
      </section>
      <section anchor="equivalence" toc="include">
        <name>Equivalence</name>
        <t>
          Two admitted Values are equivalent if and only if all of the following hold:
        </t>
        <ul spacing="normal">
          <li>
            <t>
              Their context octet strings are equal.
            </t>
          </li>
          <li>
            <t>
              Their content octet strings are equal.
            </t>
          </li>
          <li>
            <t>
              Their identifiers are the same mathematical set under the ScopedIdentifier equality of
              <xref target="value-types"/>.
            </t>
          </li>
        </ul>
        <t>
          This relation, denoted by ~, is reflexive, symmetric, and transitive. It is equality of
          abstract Values. Order of set presentation and repeated presentations of the same member
          do not distinguish Values. Multiplicity or occurrence identity requires explicit
          representation under <xref target="participation-and-member-associations"/>.
        </t>
        <t>
          With context and content unchanged, adding, removing, or substituting members so that the
          mathematical set changes produces a non-equivalent Value. Whether a source change is
          permitted by an application does not alter this equality rule.
        </t>
        <t>
          Implementations comparing admitted Values MUST apply this relation. Implementation
          strategies and resource limits MUST NOT change the logical Value, its exact member
          equality, or its set membership. Imported meaning is specified separately under
          <xref target="imported-interpretation"/>.
        </t>
      </section>
      <section anchor="a-value-in-use" toc="include">
        <name>A Value in Use</name>
        <t>
          This informative example uses the mapping specified in
          <xref target="source-comparison-and-mapping"/>. A trade document references party-a as
          seller and party-b as buyer. The mapping records the document reference in content and
          each party's role in its scope:
        </t>
        <sourcecode type="text" anchor="trade-role-qualified-value">context = "example.org/trade-document/participants/v1"
content = "commercial-invoice:1234"
identifiers = {
  ("trade-party/v1/role/buyer",  "party-b"),
  ("trade-party/v1/role/seller", "party-a")
}</sourcecode>
        <t>
          The strings denote exact ASCII octets and the braces denote a mathematical set. Changing
          the order in which the two members are displayed leaves the Value unchanged. Swapping the
          parties between buyer and seller changes the scoped members and therefore the Value.
          <xref target="carrying-participation-in-content"/> shows an alternative mapping that
          carries these associations in content.
        </t>
      </section>
    </section>
    <section anchor="source-mappings-and-imported-identifiers" toc="include">
      <name>Source Mappings and Imported Identifiers</name>
      <section anchor="fixed-inputs-and-mapping-semantics" toc="include">
        <name>Fixed Inputs and Mapping Semantics</name>
        <t>
          A source mapping specifies accepted source material, explicit inputs, and source
          comparison claims. The requirements below cover reproducible Values, intentional
          projection, and preservation and reflection of the declared comparison.
        </t>
        <t>
          For fixed mapping semantics, the same accepted source and explicit inputs MUST determine
          one admitted Value, including its complete identifier set. Result-affecting choices MUST
          NOT be left to implementation discretion or ambient mutable state.
        </t>
        <t>
          A dependency that can change the Value or its interpretation MUST be an explicit input or
          fixed unambiguously by the applicable rules. This includes any relevant version of a
          schema, normalization rule, imported definition, resolver result, clock value, or registry
          state. Fixing a locator without fixing its relevant interpretation is insufficient.
          Acquisition can require a service; model comparison does not itself require that service
          to remain reachable.
        </t>
        <t>
          A mapping can project a richer source object. It MUST make every source distinction that
          its comparison claims require observable in the admitted Value. Intentional exclusions are
          part of the defined source comparison. If an omitted distinction is later required by a
          consumer, that consumer cannot recover it from the resulting Value alone.
        </t>
        <t>
          Source absence, null, sentinels, or exceptional values are not additional model values. A
          source mapping MUST NOT silently coerce them to empty model values. It can explicitly
          define such a projection, but its result MUST be an admitted Value. Representation
          admission and decoding are addressed in
          <xref target="profile-domains-and-representations"/>.
        </t>
        <t>
          A mapping claiming to represent a source equivalence relation by model equality MUST
          define that relation and preserve it: under fixed mapping semantics and explicit inputs,
          equivalent accepted sources produce equal Values. It MUST also reflect that relation:
          non-equivalent accepted sources produce different Values. These obligations concern the
          declared comparison, not every distinction in a richer source object.
        </t>
        <t>
          The obligations apply to the complete Value. A source comparison can retain distinctions
          ignored by an imported comparison, but those distinctions then belong to the declared
          source relation. Adapting imported members alone does not establish whole-source
          preservation or reflection. A comparison property established directly for the complete
          source-to-output construction does not by itself establish preservation by the mapping.
        </t>
      </section>
      <section anchor="context-and-content" toc="include">
        <name>Context and Content</name>
        <t>
          A surrounding specification defines the exact context octets and their interpretation.
          Within one fixed applicable definition, it MUST NOT assign incompatible interpretations to
          the same context octets or silently change an existing imported meaning associated with a
          context and scope.
        </t>
        <t>
          This is a consistency requirement within those definitions, not a global allocation rule.
          Independently governed environments can select equal context octets without agreeing on
          their meaning. A consumer drawing conclusions under imported semantics needs agreement on
          the applicable definitions. Selection, distribution, and authentication of those
          definitions are surrounding protocol responsibilities; they do not add a field to Value
          equality.
        </t>
        <t>
          A new distinct scope meaning can be added without changing context octets when existing
          meanings remain unchanged. Any associated change in profile acceptance or mapping rules
          remains subject to <xref target="changes-to-applicable-semantics"/>.
        </t>
        <t>
          content is exact local material after the source mapping. The model performs no
          normalization, character conversion, decompression, defaulting, or canonicalization. A
          mapping starting from richer content defines any such processing before admission. Context
          identifies the interpretation of the Value as a whole; content holds the local material
          compared within that interpretation.
        </t>
      </section>
      <section anchor="imported-interpretation" toc="include">
        <name>Imported Interpretation</name>
        <t>
          A mapping that imports an identifier system MUST define, for every context value it uses,
          how scope octets select imported identifier semantics and which exact identifier octets
          are carried. Within that applicable context definition, incompatible imported semantics
          MUST NOT use the same scope octets. Different context values can reuse a scope because
          context participates in Value equality.
        </t>
        <t>
          The imported meaning of a member is qualified by:
        </t>
        <t>
          (context, scope, identifier)
        </t>
        <t>
          A distinction that changes the imported identifier interpretation or comparison relation
          MUST be fixed by this tuple under the applicable definitions. It MUST NOT exist only in
          content or ambient state if that would give the same tuple incompatible imported meanings.
          Participation that does not change the imported interpretation is addressed separately in
          <xref target="participation-and-member-associations"/>.
        </t>
        <t>
          This requirement makes imported members interpretable from their qualified tuples under
          the applicable definitions, without consulting content. It is additional to whole-source
          preservation and reflection: distinguishing complete Values through content does not
          establish unambiguous imported meaning for each member.
        </t>
        <t>
          Context is carried once in the containing Value. A consumer copying out a ScopedIdentifier
          MUST NOT assume that its imported meaning is preserved under another context unless a
          surrounding specification establishes that compatibility.
        </t>
        <t>
          A scope can use an allocated name, a self-certifying value, a URI or URN, or another
          stable octet string. The model specifies no scope grammar or lookup mechanism. Equal
          identifier octets under different scopes do not establish a cross-system identity or
          equivalence relation.
        </t>
      </section>
      <section anchor="adapting-imported-comparison" toc="include">
        <name>Adapting Imported Comparison</name>
        <t>
          A mapping MUST identify the imported equivalence relation represented at the exact
          ScopedIdentifier boundary. If the relevant native matching behavior, under its fixed
          interpretation, is not an equivalence relation, the mapping MUST define the equivalence
          being projected into the model. Such a projection is a choice of comparison semantics;
          this model supplies no default conversion of a directional or other non-equivalence match
          into equality.
        </t>
        <t>
          For example, nonempty overlap between identifier sets is not transitive: {a} overlaps {a,
          b}, and {a, b} overlaps {b}, but {a} does not overlap {b}. Equality of one independently
          computed identifier per set cannot represent this relation unchanged. Selecting
          complete-set equality or an equivalence closure changes the comparison and requires an
          explicitly defined source relation.
        </t>
        <t>
          For a fixed imported interpretation and fixed participation qualification, equivalent
          accepted native instances MUST produce equal ScopedIdentifier values. A mapping claiming
          to preserve the imported comparison unchanged MUST also reflect that relation: accepted
          native instances produce an equal pair only if they are equivalent under the imported
          relation. A deliberate merge of native classes is upstream projection and cannot support
          an unchanged-comparison claim.
        </t>
        <t>
          Native adaptation and participation qualification are distinct responsibilities. The
          requirement above governs the resulting pair under a fixed qualification; it does not
          require a separately materialized native class representative. Alias representative
          selection MUST be deterministic under the fixed interpretation. Direct copying suffices
          when native equality is already exact octet equality and the applicable interpretation and
          qualification are fixed.
        </t>
        <t>
          An imported identifier can remain opaque when those octets already represent its relevant
          comparison. The model need not parse or reproduce the imported construction. Any source
          distinction already lost within that construction remains lost at this boundary. Retaining
          its output exactly does not establish uniqueness of its preimages or repair its own false
          matches.
        </t>
        <t>
          <xref target="adapting-native-spellings"/> illustrates adaptation of imported members
          together with the content that records their associations.
        </t>
      </section>
      <section anchor="participation-and-member-associations" toc="include">
        <name>Participation and Member Associations</name>
        <t>
          A source can use an imported identifier in a particular role, relationship, position, or
          occurrence. A mapping MUST preserve every such distinction required by its source
          comparison in the complete Value. It can qualify the member's scope or encode the
          participation and its association with the member in content.
        </t>
        <t>
          When qualification is carried in scope, two roles can produce different ScopedIdentifier
          members for the same native identifier class. When it is carried in content, the same
          member can participate in both roles; content then preserves their associations. The
          imported interpretation itself remains governed by
          <xref target="imported-interpretation"/>.
        </t>
        <t>
          scope is not a general metadata channel. Material placed there qualifies that member; it
          does not replace context for the interpretation of the whole Value. A profile can define a
          family of scope encodings, while the model continues to treat each resulting scope as
          opaque octets.
        </t>
        <t>
          A qualification MAY be carried in scope when it is specific to one imported member's
          participation at this comparison boundary. When a comparison-relevant relationship depends
          on two or more participants, content provides a direct place to encode the participants
          together. If a mapping instead uses member scopes, those scopes MUST encode enough
          association material to preserve the relationship; independently qualifying each endpoint
          is insufficient.
        </t>
        <t>
          A mapping preserving a relationship MUST retain the association between its participants
          and their roles, not just the endpoint identifiers or separate collections of labels.
          Order, multiplicity, and occurrence distinctions likewise require explicit material, such
          as position-qualified scopes or a defined structure in content. They cannot reside only in
          an external relationship table while the same Value is supplied to derivation.
        </t>
        <t>
          These rules specify comparison material without imposing a graph topology or requiring
          traversal or resolution. <xref target="preserving-associations-between-parties"/>
          illustrates grouping between imported members, with the different pairings shown in
          <xref target="different-party-pairings"/>. Application relationship semantics are
          discussed in <xref target="relationship-to-existing-work"/>.
        </t>
      </section>
      <section anchor="complete-membership-and-source-changes" toc="include">
        <name>Complete Membership and Source Changes</name>
        <t>
          Fixed mapping inputs determine the entire identifier set under
          <xref target="fixed-inputs-and-mapping-semantics"/>. An implementation cannot substitute a
          locally discovered or supported subset for that set. A mapping can use a selected snapshot
          or other explicit source input, but changing that input can change the Value.
        </t>
        <t>
          For example, let A and B be distinct ScopedIdentifier values. With equal context and
          content, Values containing {A} and {A, B} are different even if an application describes B
          as a newly learned alias. The application determines whether B belongs in the
          identity-bearing input, is adapted by a fixed import rule to an existing member, or
          remains descriptive information outside this Value.
        </t>
        <t>
          Complete membership can therefore describe a configuration or inventory snapshot whose
          changes are intended to affect comparison. It does not by itself provide continuity of an
          entity across changed descriptions. An application needing that continuity selects stable
          identity-bearing inputs or defines a relation between successive Values. Calling two
          members aliases or alternatives does not change the model's set equality.
        </t>
      </section>
    </section>
    <section anchor="derived-identifier-profiles" toc="include">
      <name>Derived Identifier Profiles</name>
      <t>
        A source mapping determines a Value. A derived identifier profile takes Values in its domain
        and specifies their representations, derivation, and output comparison. The requirements
        below apply after the source distinctions have been represented in the Value.
      </t>
      <section anchor="profile-domains-and-representations" toc="include">
        <name>Profile Domains and Representations</name>
        <t>
          A profile MAY restrict its derivation domain to a subset of structurally admitted Values
          when required by its encoding or downstream operation. Domain membership MUST be
          determined from the Value under fixed profile rules, independent of its accepted
          representation and of local resource availability. Because model equivalence is equality
          of abstract Values, a domain defined solely from the Value is automatically closed under
          that equivalence.
        </t>
        <t>
          A profile defines the admission and decoding of its concrete representations.
          Representation rejection, exclusion from a profile domain, and operational inability to
          process an admitted Value are different conditions. None redefines the model's structural
          admission or equality. Capability minima and operational limits are not additional Value
          fields.
        </t>
        <t>
          The set model does not require every decoder to accept duplicate or reordered
          presentations. A profile specifies which presentations it accepts and how they map into a
          Value. Accepted presentations of the same Value MUST NOT change model equality or split a
          model equivalence class in derivation. In particular, an accepted duplicate presentation
          does not create a second occurrence in a mathematical set.
        </t>
        <t>
          Representation rules specify any transformations and treatment of unsupported source
          forms; they do not infer model membership merely from what a host parser can store.
        </t>
      </section>
      <section anchor="derivation-and-comparison-claims" toc="include">
        <name>Derivation and Comparison Claims</name>
        <t>
          A profile specifies how Values in its derivation domain produce identifiers. Under the
          same fixed applicable derivation semantics, equivalent Values in that domain MUST produce
          equal identifier values at the profile's defined output comparison boundary. A profile
          claiming independent recomputation MUST fix enough input material, rules, and dependencies
          for separate implementations to reproduce that result without hidden result-affecting
          state.
        </t>
        <t>
          The profile defines its encoding or other pre-processing, any cryptographic compression,
          and the construction and comparison of the output. It distinguishes comparison of a
          carrier representation from comparison of a decoded identifier value. Different profile
          semantics need not produce equal identifiers for the same Value.
        </t>
        <t>
          Source mapping and derivation have separate comparison responsibilities. A mapping can
          merge source distinctions before admission; an encoding can merge non-equivalent Values
          before a later primitive receives its input. When a deterministic remaining computation
          receives the same complete input, its equal outputs are not a collision of that later
          primitive. Such loss is considered separately from the primitive's false match properties.
        </t>
        <t>
          Exact model equality does not establish that a profile's derivation is free of false
          matches. The profile characterizes the comparison conclusions its construction supports.
          Consumers also establish any binding they rely on between a received identifier and its
          claimed Value or source.
        </t>
        <t>
          Structural admission and profile-domain admission alone do not establish conformance to a
          claimed source mapping. If a consumer relies on that claim, the mapping or surrounding
          protocol defines the required consistency checks or evidence, including any relationship
          between content associations and identifier-set membership. If reliance depends on
          validation before mapping, the surrounding protocol specifies how completion of that
          validation is established.
        </t>
        <t>
          For example, the content octets "00:" are structurally valid, but no accepted source under
          the mapping in <xref target="carrying-participation-in-content"/> produces them. An empty
          document reference and empty pair set instead produce "0:". Checking this mapping rule is
          distinct from checking the Value's type.
        </t>
        <t>
          For further background on comparison contracts and the limits of supporting evidence, see
          <xref target="I-D.le-comparing-derived-identifiers"/>.
        </t>
      </section>
      <section anchor="changes-to-applicable-semantics" toc="include">
        <name>Changes to Applicable Semantics</name>
        <t>
          A change only in representation leaves a Value unchanged when the accepted representation
          still denotes that Value. A change affecting mapping results, profile-domain membership,
          source or imported comparison rules, imported interpretation, or derivation and output
          comparison rules changes the applicable comparison semantics. Such changes do not redefine
          the model equality specified in <xref target="equivalence"/>. Existing Values and
          identifiers MUST NOT be silently reinterpreted under incompatible changed semantics.
        </t>
        <t>
          A surrounding specification identifies the applicable definitions and any compatibility,
          migration, or continuity rules it provides. A semantic change does not automatically
          require a new model field or globally allocated context. The relevant mapping, context
          definition, or profile specifies how the change is distinguished.
        </t>
      </section>
    </section>
    <section anchor="worked-mapping-examples" toc="include">
      <name>Worked Trade-Document Mapping Examples</name>
      <t>
        Each example fixes an accepted source domain and its mapping rules. An input outside that
        domain has no mapped result under those rules; additional preprocessing requires an
        explicitly defined mapping. These examples define no API or error format.
      </t>
      <section anchor="source-comparison-and-mapping" toc="include">
        <name>Source Comparison and Mapping</name>
        <t>
          This informative example uses a simplified trade-document participant model. It is shaped
          after multi-party commercial-invoice, packing-list, and transport-document workflows. UN
          Verifiable Trade Documents (UNVTD) <xref target="UNVTD"/> provides application context for
          these document families. This example defines its own source domain and comparison
          relation; it does not adopt an external document schema or assert document, shipment,
          legal, or party identity outside that relation.
        </t>
        <t>
          A source contains an exact ASCII document reference and a finite sequence of role and
          party-identifier pairs. Roles are the exact ASCII strings buyer, seller, and carrier.
          Party identifiers are nonempty ASCII tokens using lowercase letters, digits, and hyphen.
          Source equivalence requires equal document references and equal sets of role and
          party-identifier pairs. Entry order and duplicate presentations of a pair are irrelevant.
          No resolver, mutable alias state, or additional relationship semantics participates.
        </t>
        <t>
          The mapping uses the ASCII context example.org/trade-document/participants/v1. It places
          the exact document reference in content. For each source entry, it imports the party
          identifier and qualifies its scope by the participation role:
        </t>
        <sourcecode type="text" anchor="trade-role-qualified-member">scope = "trade-party/v1/role/" followed by the role
identifier = exact party identifier</sourcecode>
        <t>
          identifiers is the set of the resulting pairs. These displayed strings denote exact ASCII
          octets; the notation is illustrative, not a wire format.
        </t>
        <t keepWithNext="true">
          Source A has document reference commercial-invoice:1234 and entries:
        </t>
        <t>
          [(seller, party-a), (buyer, party-b)]
        </t>
        <t>
          Its complete mapped Value is shown in <xref target="a-value-in-use"/>.
        </t>
        <t>
          The mapping retains exactly the document reference and pair set defining source
          equivalence. The fixed scope prefix and restricted role alphabet distinguish
          participation, and exact identifier octets distinguish the party identifiers. This gives a
          general preservation and reflection argument for this example's source relation.
        </t>
      </section>
      <section anchor="comparison-cases" toc="include">
        <name>Comparison Cases</name>
        <t>
          Each case uses the same mapping and document reference commercial-invoice:1234 unless
          stated otherwise:
        </t>
        <sourcecode type="text" anchor="comparison-case-inputs">A: [(seller, party-a), (buyer, party-b)]
B: [(buyer, party-b), (seller, party-a), (seller, party-a)]
C: [(seller, party-b), (buyer, party-a)]
D: [(seller, party-a), (buyer, party-a)]
E: document commercial-invoice:1235 with A's entries
F: A's entries plus (carrier, party-c)</sourcecode>
        <t>
          A and B yield equivalent Values. Entry order and repeated presentation of an existing
          role/party pair do not change the mathematical set.
        </t>
        <t>
          A and C yield non-equivalent Values because the party/role associations are reversed.
          Retaining {buyer, seller} separately from {party-a, party-b} would erase that distinction.
        </t>
        <t>
          D contains two different scoped members even though both identifier components are
          party-a. It differs from A and from a source containing only one of D's roles. Repetition
          of one exact member would not express the other role.
        </t>
        <t>
          E differs from A in content while preserving the identifier set. F differs from A by an
          additional distinct set member while preserving context and content. These are model
          inequalities regardless of whether a trade workflow permits the source changes.
        </t>
        <t>
          An empty participant sequence maps to the empty identifier set and retains the exact
          document reference in content. Model admission permits that Value. Any application
          requirement for particular trade roles belongs to its source or profile rules.
        </t>
      </section>
      <section anchor="carrying-participation-in-content" toc="include">
        <name>Carrying Participation in Content</name>
        <t>
          An alternative mapping uses context example.org/trade-document/participants-content/v2 and
          unqualified scope trade-party/v1. Its identifier set contains each distinct party
          identifier once. Content carries the document reference and the complete association
          structure.
        </t>
        <t>
          <xref target="participation-content-mapping"/> illustrates this mapping for Source A. C
          abbreviates the context above, and S abbreviates the scope trade-party/v1. Adjacent quoted
          content fragments concatenate without added octets; their line breaks are only for
          display. In this mapping, the identifiers field retains the distinct scoped party
          identifiers, while content retains the document reference and role/party associations.
        </t>
        <figure anchor="participation-content-mapping" align="center">
          <name>Source A Mapped into Content Associations</name>
          <artset>
            <artwork type="svg" align="center" alt="Source A has document reference commercial-invoice:1234, seller party-a, and buyer party-b. Mapping P places the reference and associations in content, and the distinct scoped parties in identifiers. C and S are defined in the surrounding text; content fragments concatenate without added octets.">
              <svg xmlns="http://www.w3.org/2000/svg" width="660" height="360" viewBox="0 0 660 360" version="1.2" baseProfile="tiny">
                <title>Source A Mapped into Content Associations</title>
                <desc>Source A has document reference commercial-invoice:1234, seller party-a, and buyer party-b. Mapping P places the reference and associations in content, and the distinct scoped parties in identifiers. C and S are defined in the surrounding text; content fragments concatenate without added octets.</desc>
                <rect x="0" y="0" width="660" height="360" fill="white"/>
                <text x="124" y="26" font-size="14" text-anchor="middle" font-family="sans-serif" fill="black" font-weight="bold">Source A</text>
                <text x="487" y="26" font-size="14" text-anchor="middle" font-family="sans-serif" fill="black" font-weight="bold">Mapped Value</text>
                <rect x="12" y="50" width="224" height="210" fill="white" stroke="black" stroke-width="1.4"/>
                <text x="26" y="81" font-size="13" text-anchor="start" font-family="sans-serif" fill="black">document reference</text>
                <text x="26" y="107" font-size="13" text-anchor="start" font-family="monospace" fill="black">commercial-invoice:1234</text>
                <text x="26" y="170" font-size="13" text-anchor="start" font-family="monospace" fill="black">seller</text>
                <line x1="85" y1="166" x2="115.0" y2="166.0" stroke="black" stroke-width="1.4"/>
                <polygon points="123.00,166.00 115.00,169.50 115.00,162.50" fill="black"/>
                <text x="137" y="170" font-size="13" text-anchor="start" font-family="monospace" fill="black">party-a</text>
                <text x="26" y="201" font-size="13" text-anchor="start" font-family="monospace" fill="black">buyer</text>
                <line x1="85" y1="197" x2="115.0" y2="197.0" stroke="black" stroke-width="1.4"/>
                <polygon points="123.00,197.00 115.00,200.50 115.00,193.50" fill="black"/>
                <text x="137" y="201" font-size="13" text-anchor="start" font-family="monospace" fill="black">party-b</text>
                <line x1="238" y1="164" x2="316.0" y2="164.0" stroke="black" stroke-width="1.4"/>
                <polygon points="324.00,164.00 316.00,167.50 316.00,160.50" fill="black"/>
                <text x="281" y="149" font-size="15" text-anchor="middle" font-family="monospace" fill="black">P</text>
                <rect x="326" y="50" width="322" height="294" fill="white" stroke="black" stroke-width="1.4"/>
                <text x="342" y="79" font-size="14" text-anchor="start" font-family="monospace" fill="black">context = C</text>
                <line x1="326" y1="101" x2="648" y2="101" stroke="black" stroke-width="1.4"/>
                <text x="342" y="128" font-size="13" text-anchor="start" font-family="sans-serif" fill="black">content (concatenated)</text>
                <text x="342" y="156" font-size="14" text-anchor="start" font-family="monospace" fill="black">"23:commercial-invoice:1234"</text>
                <text x="342" y="179" font-size="14" text-anchor="start" font-family="monospace" fill="black">";buyer=party-b"</text>
                <text x="342" y="202" font-size="14" text-anchor="start" font-family="monospace" fill="black">";seller=party-a"</text>
                <line x1="326" y1="225" x2="648" y2="225" stroke="black" stroke-width="1.4"/>
                <text x="342" y="250" font-size="14" text-anchor="start" font-family="monospace" fill="black">identifiers = {</text>
                <text x="342" y="274" font-size="14" text-anchor="start" font-family="monospace" fill="black">  (S, "party-a"),</text>
                <text x="342" y="297" font-size="14" text-anchor="start" font-family="monospace" fill="black">  (S, "party-b")</text>
                <text x="342" y="321" font-size="14" text-anchor="start" font-family="monospace" fill="black">}</text>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[         Source A                            Mapped Value

+-------------------------+        +-------------------------------+
| document reference:     |        | context = C                   |
| commercial-invoice:1234 |        |                               |
|                         |        +-------------------------------+
|                         |        | content (concatenated):       |
| seller --> party-a      |   P    | "23:commercial-invoice:1234"  |
|                         | -----> | ";buyer=party-b"              |
| buyer  --> party-b      |        | ";seller=party-a"             |
|                         |        |                               |
|                         |        +-------------------------------+
+-------------------------+        | identifiers = {               |
                                   |   (S, "party-a"),             |
                                   |   (S, "party-b")              |
                                   | }                             |
                                   +-------------------------------+]]></artwork>
          </artset>
        </figure>
        <t>
          Start content with the length of the document reference in octets, encoded as ASCII
          decimal digits with no leading zeros except "0" for an empty reference. Append ":" and the
          exact reference octets. Then sort the distinct role/party pairs lexicographically by ASCII
          role and then ASCII party identifier, with a proper prefix ordered before the longer
          string. Append each pair as ";" followed by the role, "=" and the party identifier. An
          empty pair set adds no suffix. The length prefix delimits the reference even when it
          contains ":", ";", "=", or text resembling a role/party suffix. The restricted role and
          party alphabets make the remaining suffix unambiguous.
        </t>
        <t>
          A and B then produce:
        </t>
        <sourcecode type="text" anchor="trade-content-qualified-value">context = "example.org/trade-document/participants-content/v2"
content = "23:commercial-invoice:1234;buyer=party-b;seller=party-a"
identifiers = {
  ("trade-party/v1", "party-a"),
  ("trade-party/v1", "party-b")
}</sourcecode>
        <t>
          C has the same identifier set but different content:
        </t>
        <t>
          "23:commercial-invoice:1234;buyer=party-a;seller=party-b"
        </t>
        <t>
          D produces one identifier member and content retaining both roles:
        </t>
        <sourcecode type="text" anchor="trade-content-single-party-value">identifiers = {("trade-party/v1", "party-a")}
content = "23:commercial-invoice:1234;buyer=party-a;seller=party-a"</sourcecode>
        <t>
          Thus the complete Value retains participation even when the member itself does not
          distinguish roles. Equal source references and pair sets produce identical framed content
          and identifier sets. Conversely, the length prefix recovers the exact reference; the
          remaining suffix recovers the complete role/party pair set. Equal Values therefore imply
          source equivalence. This establishes preservation and reflection for this mapping.
        </t>
        <t>
          The context version identifies these framing rules under
          <xref target="changes-to-applicable-semantics"/>. This mapping and the scope-qualified
          mapping in <xref target="source-comparison-and-mapping"/> produce different Values. They
          are distinct mappings, so the model requires no convergence between their derived
          identifiers. These examples instantiate no derivation; their arguments establish mapping
          and model-equality properties only.
        </t>
        <t>
          <xref target="additional-framing-cases"/> gives additional cases for this mapping,
          including proper-prefix ordering and empty inputs.
        </t>
      </section>
      <section anchor="combining-independently-governed-systems" toc="include">
        <name>Combining Independently Governed Systems</name>
        <t>
          This further example combines two fictional, independently governed party-identifier
          systems used by one trade application. The global system compares identifiers exactly. The
          local system also compares identifiers exactly but only within an exact jurisdiction
          namespace. Their interpretation rules are fixed here; no registry, resolver, or mutable
          alias information participates.
        </t>
        <t>
          A source contains an exact ASCII document reference and a finite sequence of entries, each
          in exactly one of these forms:
        </t>
        <sourcecode type="text" anchor="multi-system-source-entries">(global, role, identifier)
(local, jurisdiction, role, identifier)</sourcecode>
        <t>
          global and local are literal system tags. Roles are buyer, seller, or carrier.
          Jurisdiction and identifier values are nonempty ASCII tokens using lowercase letters,
          digits, and hyphen. Source equivalence requires equal document references and equal sets
          of entries. System tags, jurisdictions, roles, and identifiers remain exact. Order and
          repeated presentations of the same entry are irrelevant. These rules assert no identity
          relation between the two systems.
        </t>
        <t>
          The mapping uses context example.org/trade-document/two-systems/v1 and the exact document
          reference as content. For each entry, it constructs a member as follows; identifiers is
          the set of those members:
        </t>
        <sourcecode type="text" anchor="multi-system-global-member">global entry:
  scope = "trade-registry/v1/role/" followed by role
  identifier = exact identifier</sourcecode>
        <sourcecode type="text" anchor="multi-system-local-member">local entry:
  scope = "local-party/v1/jurisdiction/" followed by jurisdiction,
          then "/role/" followed by role
  identifier = exact identifier</sourcecode>
        <t>
          These strings denote exact ASCII octets. The disjoint system prefixes and restricted
          jurisdiction alphabet make the scope encoding unambiguous.
        </t>
        <t keepWithNext="true">
          A source with document reference bill-of-lading:5678 and these entries:
        </t>
        <t>
          [(global, seller, party-a), (local, east, buyer, party-a), (local, west, buyer, party-a)]
        </t>
        <t>
          maps to:
        </t>
        <sourcecode type="text" anchor="multi-system-example-value">context = "example.org/trade-document/two-systems/v1"
content = "bill-of-lading:5678"
identifiers = {
  ("trade-registry/v1/role/seller",             "party-a"),
  ("local-party/v1/jurisdiction/east/role/buyer", "party-a"),
  ("local-party/v1/jurisdiction/west/role/buyer", "party-a")
}</sourcecode>
        <t>
          All three identifier components have equal octets, but the scoped members are distinct.
          Reordering or repeating entries leaves the Value unchanged. Changing a role changes
          participation without changing the underlying identifier octets. Changing jurisdiction
          east to north instead changes the imported namespace.
        </t>
        <t>
          Encoding jurisdiction only in content while reusing one scope for all local namespaces
          would violate <xref target="imported-interpretation"/>, even if complete Values remained
          distinguishable. Participation can instead be carried with its associations in content by
          a separately specified mapping, as in <xref target="carrying-participation-in-content"/>.
        </t>
        <t>
          The document reference is retained exactly. Each member uniquely retains its system, role,
          identifier, and jurisdiction where applicable. Sources with equal document references and
          equal entry sets yield equal Values; equal Values recover those same source components.
          This establishes preservation and reflection for the declared source relation without
          selecting an identifier derivation.
        </t>
      </section>
      <section anchor="adapting-native-spellings" toc="include">
        <name>Adapting Native Spellings</name>
        <t>
          This separate example uses a fictional party-identifier system with ASCII case-insensitive
          comparison. Sources have the form defined in
          <xref target="source-comparison-and-mapping"/>, except that party identifiers can also
          contain uppercase ASCII letters. Roles and document references remain exact. No resolver
          or mutable alias state participates.
        </t>
        <t>
          Define lower(p) by replacing each ASCII letter A through Z with its corresponding letter a
          through z and leaving every other accepted octet unchanged. Native identifiers are
          equivalent exactly when their lower(p) octets are equal. Source equivalence requires equal
          document references and equal sets of (role, lower(p)) pairs. Entry order and repetitions
          of a normalized pair are irrelevant.
        </t>
        <t>
          The mapping uses context example.org/trade-document/ascii-ci/v1 and scope
          trade-party-ascii-ci/v1. It replaces each party identifier p with lower(p), then applies
          the content framing, distinct-pair sorting, and identifier-set construction from
          <xref target="carrying-participation-in-content"/> to those normalized entries. The
          reference octets are unchanged. All displayed strings denote exact ASCII octets.
        </t>
        <t keepWithNext="true">
          With document reference invoice:1, these sources are equivalent:
        </t>
        <sourcecode type="text" anchor="native-spelling-sources">S1: [(seller, Party-A), (buyer, party-b)]
S2: [(buyer, PARTY-B), (seller, party-a), (seller, PARTY-A)]</sourcecode>
        <t keepWithNext="true">
          Both produce:
        </t>
        <sourcecode type="text" anchor="native-spelling-value">context = "example.org/trade-document/ascii-ci/v1"
content = "9:invoice:1;buyer=party-b;seller=party-a"
identifiers = {
  ("trade-party-ascii-ci/v1", "party-a"),
  ("trade-party-ascii-ci/v1", "party-b")
}</sourcecode>
        <t>
          Equal source classes produce identical content and identifier sets. Conversely, the framed
          content recovers the exact reference and normalized role/party pair set that define source
          equivalence. The mapping therefore preserves and reflects that relation. Different
          normalized role/party pair sets remain distinguishable.
        </t>
        <t>
          If only imported members were adapted while content retained native party spellings, S1
          and S2 would have equal identifier sets but different Values. That would violate
          whole-source preservation for this declared source relation, despite successful member
          adaptation. The model performs no further normalization to repair such a mapping.
        </t>
      </section>
      <section anchor="preserving-associations-between-parties" toc="include">
        <name>Preserving Associations Between Parties</name>
        <t>
          This example records directed document-exchange links between parties. A source contains
          an exact ASCII document reference and a finite sequence of ordered (sender, recipient)
          pairs. Each endpoint is a nonempty ASCII party identifier using lowercase letters, digits,
          and hyphen, compared exactly under the fictional trade-party/v1 system. Source equivalence
          requires equal document references and equal sets of ordered pairs. Sequence order and
          repeated presentations of a pair are irrelevant. The links describe associations; they do
          not prove delivery or authorization.
        </t>
        <t>
          The mapping uses context example.org/trade-document/links/v1 and scope trade-party/v1. The
          identifier set contains each distinct endpoint identifier once, regardless of which
          position it occupies. Start content with the length-prefixed document reference defined in
          <xref target="carrying-participation-in-content"/>. Sort the distinct ordered pairs
          lexicographically by ASCII sender and then recipient, with a proper prefix before the
          longer string. Append each pair as ";", the sender, ">", and the recipient. An empty pair
          set adds no suffix. The restricted endpoint alphabet excludes both separators.
        </t>
        <t keepWithNext="true">
          With document reference invoice:1, compare:
        </t>
        <sourcecode type="text" anchor="grouping-source-pairs">X: [(party-a, party-b), (party-c, party-d)]
Y: [(party-a, party-d), (party-c, party-b)]</sourcecode>
        <t>
          <xref target="different-party-pairings"/> shows the same endpoint sets with different
          ordered pairs. In graphical renderings, the Y links may cross; such a crossing does not
          join the links or introduce another party.
        </t>
        <figure anchor="different-party-pairings" align="center">
          <name>Same Endpoints with Different Pairings</name>
          <artset>
            <artwork type="svg" align="center" alt="In X, party-a links to party-b and party-c to party-d. In Y, party-a links to party-d and party-c to party-b. The sender and recipient sets are unchanged. Crossed lines in Y do not join.">
              <svg xmlns="http://www.w3.org/2000/svg" width="660" height="220" viewBox="0 0 660 220" version="1.2" baseProfile="tiny">
                <title>Same Endpoints with Different Pairings</title>
                <desc>In X, party-a links to party-b and party-c to party-d. In Y, party-a links to party-d and party-c to party-b. The sender and recipient sets are unchanged. Crossed lines in Y do not join.</desc>
                <rect x="0" y="0" width="660" height="220" fill="white"/>
                <text x="165" y="22" font-size="16" text-anchor="middle" font-family="sans-serif" fill="black" font-weight="bold">X</text>
                <text x="70" y="44" font-size="12" text-anchor="middle" font-family="sans-serif" fill="black">sender</text>
                <text x="260" y="44" font-size="12" text-anchor="middle" font-family="sans-serif" fill="black">recipient</text>
                <rect x="20" y="55" width="100" height="40" fill="white" stroke="black" stroke-width="1.4"/>
                <text x="70" y="80" font-size="14" text-anchor="middle" font-family="monospace" fill="black">party-a</text>
                <rect x="210" y="55" width="100" height="40" fill="white" stroke="black" stroke-width="1.4"/>
                <text x="260" y="80" font-size="14" text-anchor="middle" font-family="monospace" fill="black">party-b</text>
                <rect x="20" y="143" width="100" height="40" fill="white" stroke="black" stroke-width="1.4"/>
                <text x="70" y="168" font-size="14" text-anchor="middle" font-family="monospace" fill="black">party-c</text>
                <rect x="210" y="143" width="100" height="40" fill="white" stroke="black" stroke-width="1.4"/>
                <text x="260" y="168" font-size="14" text-anchor="middle" font-family="monospace" fill="black">party-d</text>
                <line x1="121" y1="75" x2="201.0" y2="75.0" stroke="black" stroke-width="1.4"/>
                <polygon points="209.00,75.00 201.00,78.50 201.00,71.50" fill="black"/>
                <line x1="121" y1="163" x2="201.0" y2="163.0" stroke="black" stroke-width="1.4"/>
                <polygon points="209.00,163.00 201.00,166.50 201.00,159.50" fill="black"/>
                <text x="495" y="22" font-size="16" text-anchor="middle" font-family="sans-serif" fill="black" font-weight="bold">Y</text>
                <text x="400" y="44" font-size="12" text-anchor="middle" font-family="sans-serif" fill="black">sender</text>
                <text x="590" y="44" font-size="12" text-anchor="middle" font-family="sans-serif" fill="black">recipient</text>
                <rect x="350" y="55" width="100" height="40" fill="white" stroke="black" stroke-width="1.4"/>
                <text x="400" y="80" font-size="14" text-anchor="middle" font-family="monospace" fill="black">party-a</text>
                <rect x="540" y="55" width="100" height="40" fill="white" stroke="black" stroke-width="1.4"/>
                <text x="590" y="80" font-size="14" text-anchor="middle" font-family="monospace" fill="black">party-b</text>
                <rect x="350" y="143" width="100" height="40" fill="white" stroke="black" stroke-width="1.4"/>
                <text x="400" y="168" font-size="14" text-anchor="middle" font-family="monospace" fill="black">party-c</text>
                <rect x="540" y="143" width="100" height="40" fill="white" stroke="black" stroke-width="1.4"/>
                <text x="590" y="168" font-size="14" text-anchor="middle" font-family="monospace" fill="black">party-d</text>
                <line x1="451" y1="75" x2="533.3431457505076" y2="157.34314575050763" stroke="black" stroke-width="1.4"/>
                <polygon points="539.00,163.00 530.87,159.82 535.82,154.87" fill="black"/>
                <line x1="451" y1="163" x2="533.3431457505076" y2="80.65685424949238" stroke="black" stroke-width="1.4"/>
                <polygon points="539.00,75.00 535.82,83.13 530.87,78.18" fill="black"/>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[X:                            Y:

party-a ----> party-b          party-a ----> party-d
party-c ----> party-d          party-c ----> party-b]]></artwork>
          </artset>
        </figure>
        <t keepWithNext="true">
          Both Values have:
        </t>
        <sourcecode type="text" anchor="grouping-common-fields">context = "example.org/trade-document/links/v1"
identifiers = {
  ("trade-party/v1", "party-a"),
  ("trade-party/v1", "party-b"),
  ("trade-party/v1", "party-c"),
  ("trade-party/v1", "party-d")
}</sourcecode>
        <t keepWithNext="true">
          Their content differs:
        </t>
        <sourcecode type="text" anchor="grouping-content-values">X: "9:invoice:1;party-a>party-b;party-c>party-d"
Y: "9:invoice:1;party-a>party-d;party-c>party-b"</sourcecode>
        <t>
          The sources have the same sender set and the same recipient set. Separate collections of
          sender-qualified and recipient-qualified identifiers would therefore erase their different
          pairings. The mapped content preserves those pairings, so X and Y yield non-equivalent
          Values. Reordering or repeating a source's existing pairs leaves its Value unchanged.
        </t>
        <t>
          Equal document references and ordered-pair sets produce identical content and identifier
          sets. Conversely, the length prefix recovers the exact reference, and the delimited suffix
          recovers every ordered pair. Equal Values therefore imply source equivalence. This
          establishes preservation and reflection for the mapping, including empty references, empty
          pair sets, and links whose sender and recipient identifiers are equal.
        </t>
      </section>
    </section>
    <section anchor="relationship-to-existing-work" toc="include">
      <name>Relationship to Existing Work</name>
      <t>
        Scoped identifiers, composite records, exact octet comparison, and finite sets are
        established techniques. This specification combines them into a reusable comparison domain
        with obligations for mappings and profiles. The same information could be expressed in
        another structure or entirely within content; the dedicated identifier field provides reuse
        of qualification and set comparison rules, not additional expressive power.
      </t>
      <t>
        <xref target="RFC6943"/> discusses canonicalization and other identifier comparison methods.
        <xref target="RFC3444"/> distinguishes information models from data models; that distinction
        is an architectural analogy. <xref target="RFC8949"/> separates an abstract data model from
        serialization choices. This document defines values independently of representation, leaving
        concrete encodings to profiles. <xref target="I-D.le-comparing-derived-identifiers"/>
        provides the broader comparison-contract framework.
      </t>
      <t>
        Other specifications give collections of identifiers and relationships different meanings.
        <xref target="RFC9493"/> describes aliases identifying the same subject.
        <xref target="RFC9525"/> uses reference identifiers when matching service identities; its
        Section 6.5 preserves the association between an application service type and its domain
        name rather than recombining components from different reference identifiers. This is a
        concrete precedent for the association-preservation concern in
        <xref target="participation-and-member-associations"/>.
      </t>
      <t>
        UNVTD <xref target="UNVTD"/> provides schemas and semantic resources for trade documents,
        including commercial invoices, packing lists, and bills of lading. These document families
        provide application context for <xref target="worked-mapping-examples"/>, whose source
        comparison relations and mappings are specified independently here.
      </t>
      <t>
        The UN Transparency Protocol Identity Resolver <xref target="UNTP-IDR"/> supports discovery
        and verification across identifier schemes and specifies conventions for consistent
        identifier representation. Its "Identifier Representation" section illustrates failed
        matching across credentials when one product is named using different URL and URN forms. In
        this model, any adaptation of such forms is fixed by the surrounding mapping under
        <xref target="imported-interpretation"/> and <xref target="adapting-imported-comparison"/>;
        model equality compares the resulting exact octets. Resolution and verification remain
        operations of the surrounding system.
      </t>
      <t>
        Controlled Identifiers <xref target="W3C-CID-1.0"/> and DIDs <xref target="W3C-DID-1.1"/>
        define application-specific alias, verification, and control relationships. The version of
        Recognized Entities cited here <xref target="W3C-RECOGNIZED-ENTITIES-1.0"/> defines
        recognition and action relationships among entities and recognition systems.
      </t>
      <t>
        Those application relationships require their own interpretation. Recognition,
        authorization, control, succession, validity, and trust semantics remain properties of the
        surrounding system. When a source comparison requires a relationship among imported members,
        a source mapping can represent the comparison-relevant association under
        <xref target="participation-and-member-associations"/>; bare co-membership alone does not
        encode it. The model does not absorb the imported systems' internal derivation, resolution,
        lifecycle, or trust mechanisms.
      </t>
    </section>
    <section anchor="security-considerations" toc="include">
      <name>Security Considerations</name>
      <t>
        A mapping can erase a required distinction or make equivalent sources yield non-equivalent
        Values through ambiguous parsing, unadapted native spellings, omitted associations, or
        inconsistent source processing. A consumer assesses these properties against the intended
        source relation. Loss within imported identifiers and loss in a later derivation are
        separate boundaries, as described in Sections
        <xref target="adapting-imported-comparison" format="counter"/> and
        <xref target="derivation-and-comparison-claims" format="counter"/>.
      </t>
      <t>
        Changing the admitted identifier set changes Value equality even when the application
        authorizes that change. An unauthorized omission, insertion, or substitution is an integrity
        failure when it violates the applicable mapping or the binding required by the consuming
        protocol. Duplicate presentations that leave the mathematical set unchanged do not by
        themselves change model equality. These effects are determined before attributing any
        equality to a downstream cryptographic collision.
      </t>
      <t>
        A surrounding protocol MUST protect the definitions that affect comparison and any
        attacker-controlled selection of those definitions according to its threat model. Protection
        can concern both acquiring authentic material and selecting the applicable mapping, context,
        imported interpretation, or profile. A stable name or authenticated locator alone does not
        fix mutable interpretation.
      </t>
      <t>
        Model equality authenticates neither a source nor its claimed identifier binding. Authority,
        freshness, revocation, provenance, and trust require separate evidence. Local resource
        limits remain necessary where appropriate for denial-of-service protection; refusal is not
        evidence of non-equivalence.
      </t>
    </section>
    <section anchor="privacy-considerations" toc="include">
      <name>Privacy Considerations</name>
      <t>
        Stable or low-entropy material in a Value can permit correlation or offline guessing when
        used in a deterministic derived identifier. Hashing alone does not make that material
        confidential.
      </t>
      <t>
        Combining identifiers from independently governed systems can create linkage even when model
        co-membership asserts no cross-system identity. A particular combination can identify a
        smaller set of possible sources than any member alone. Exposing only a stable opaque result
        for that combination can retain correlation or guessing risks without exposing the
        individual member octets.
      </t>
      <t>
        Applications assess which identifying inputs are necessary, how widely derived identifiers
        are exposed, and whether their comparison purpose permits excluding unnecessary material.
        Persistent identifiers and linkability are discussed more generally in
        <xref target="RFC6973"/>. Model opacity is a comparison boundary, not a confidentiality
        guarantee.
      </t>
    </section>
    <section anchor="iana-considerations" toc="include">
      <name>IANA Considerations</name>
      <t>
        This document has no IANA actions.
      </t>
    </section>
  </middle>
  <back>
    <references anchor="references">
      <name>References</name>
      <references anchor="normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner"/>
            <date month="March" year="1997"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba"/>
            <date month="May" year="2017"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.le-comparing-derived-identifiers" target="https://datatracker.ietf.org/doc/html/draft-le-comparing-derived-identifiers-01">
          <front>
            <title>A Framework for Comparing Independently Derived Identifiers</title>
            <author initials="T." surname="Le" fullname="Thanh Le"/>
            <date day="7" month="September" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-le-comparing-derived-identifiers-01"/>
        </reference>
        <reference anchor="RFC3444" target="https://www.rfc-editor.org/info/rfc3444">
          <front>
            <title>On the Difference between Information Models and Data Models</title>
            <author initials="A." surname="Pras" fullname="A. Pras"/>
            <author initials="J." surname="Schoenwaelder" fullname="J. Schoenwaelder"/>
            <date month="January" year="2003"/>
          </front>
          <seriesInfo name="RFC" value="3444"/>
          <seriesInfo name="DOI" value="10.17487/RFC3444"/>
        </reference>
        <reference anchor="RFC6943" target="https://www.rfc-editor.org/info/rfc6943">
          <front>
            <title>Issues in Identifier Comparison for Security Purposes</title>
            <author initials="D." surname="Thaler" fullname="D. Thaler" role="editor"/>
            <date month="May" year="2013"/>
          </front>
          <seriesInfo name="RFC" value="6943"/>
          <seriesInfo name="DOI" value="10.17487/RFC6943"/>
        </reference>
        <reference anchor="RFC6973" target="https://www.rfc-editor.org/info/rfc6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author initials="A." surname="Cooper" fullname="A. Cooper"/>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig"/>
            <author initials="B." surname="Aboba" fullname="B. Aboba"/>
            <author initials="J." surname="Peterson" fullname="J. Peterson"/>
            <author initials="J." surname="Morris" fullname="J. Morris"/>
            <author initials="M." surname="Hansen" fullname="M. Hansen"/>
            <author initials="R." surname="Smith" fullname="R. Smith"/>
            <date month="July" year="2013"/>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author initials="C." surname="Bormann" fullname="C. Bormann"/>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman"/>
            <date month="December" year="2020"/>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9493" target="https://www.rfc-editor.org/info/rfc9493">
          <front>
            <title>Subject Identifiers for Security Event Tokens</title>
            <author initials="A." surname="Backman" fullname="A. Backman"/>
            <author initials="M." surname="Scurtescu" fullname="M. Scurtescu"/>
            <author initials="P." surname="Jain" fullname="P. Jain"/>
            <date month="December" year="2023"/>
          </front>
          <seriesInfo name="RFC" value="9493"/>
          <seriesInfo name="DOI" value="10.17487/RFC9493"/>
        </reference>
        <reference anchor="RFC9525" target="https://www.rfc-editor.org/info/rfc9525">
          <front>
            <title>Service Identity in TLS</title>
            <author initials="P." surname="Saint-Andre" fullname="P. Saint-Andre"/>
            <author initials="R." surname="Salz" fullname="R. Salz"/>
            <date month="November" year="2023"/>
          </front>
          <seriesInfo name="RFC" value="9525"/>
          <seriesInfo name="DOI" value="10.17487/RFC9525"/>
        </reference>
        <reference anchor="UNVTD" target="https://unvtd.unece.org/overview/">
          <front>
            <title>UN/CEFACT Verifiable Trade Documents</title>
            <author>
              <organization abbrev="UN/CEFACT">United Nations Centre for Trade Facilitation and Electronic Business</organization>
            </author>
            <date day="28" month="July" year="2026"/>
          </front>
          <annotation>
            Project overview, last updated 28 July 2026. Accessed 11 September 2026.
          </annotation>
        </reference>
        <reference anchor="UNTP-IDR" target="https://untp.unece.org/docs/0.7.0/specification/IdentityResolver/">
          <front>
            <title>UN Transparency Protocol: Identity Resolver</title>
            <author>
              <organization abbrev="UN/CEFACT">United Nations Centre for Trade Facilitation and Electronic Business</organization>
            </author>
          </front>
          <seriesInfo name="Version" value="0.7.0"/>
          <annotation>
            Versioned specification for pre-production pilot implementations. Accessed 11 September
            2026.
          </annotation>
        </reference>
        <reference anchor="W3C-CID-1.0" target="https://www.w3.org/TR/2025/REC-cid-1.0-20250515/">
          <front>
            <title>Controlled Identifiers v1.0</title>
            <author initials="M." surname="Sporny" fullname="Manu Sporny" role="editor"/>
            <author initials="M. B." surname="Jones" fullname="Michael B. Jones" role="editor"/>
            <date day="15" month="May" year="2025"/>
          </front>
          <seriesInfo name="W3C" value="Recommendation"/>
          <annotation>
            Latest version available at <eref target="https://www.w3.org/TR/cid-1.0/"/>.
          </annotation>
        </reference>
        <reference anchor="W3C-DID-1.1" target="https://www.w3.org/TR/2026/CR-did-1.1-20260305/">
          <front>
            <title>Decentralized Identifiers (DIDs) v1.1</title>
            <author initials="M." surname="Sporny" fullname="Manu Sporny" role="editor"/>
            <author initials="D." surname="Zagidulin" fullname="Dmitri Zagidulin" role="editor"/>
            <date day="5" month="March" year="2026"/>
          </front>
          <seriesInfo name="W3C" value="Candidate Recommendation Snapshot"/>
          <annotation>
            Latest version available at <eref target="https://www.w3.org/TR/did-1.1/"/>.
          </annotation>
        </reference>
        <reference anchor="W3C-RECOGNIZED-ENTITIES-1.0" target="https://www.w3.org/TR/2026/WD-vc-recognized-entities-1.0-20260906/">
          <front>
            <title>Recognized Entities v1.0</title>
            <author initials="I. H. J." surname="Jeyakumar" fullname="Isaac Henderson Johnson Jeyakumar" role="editor"/>
            <author initials="M." surname="Sporny" fullname="Manu Sporny" role="editor"/>
            <date day="6" month="September" year="2026"/>
          </front>
          <seriesInfo name="W3C" value="Working Draft"/>
          <annotation>
            Latest version available at
            <eref target="https://www.w3.org/TR/vc-recognized-entities-1.0/"/>.
          </annotation>
        </reference>
      </references>
    </references>
    <section anchor="model-test-considerations" toc="include">
      <name>Model Test Considerations</name>
      <t>
        These informative cases test model semantics without choosing a wire format, hash, API, or
        minimum resource capacity.
      </t>
      <ul spacing="normal">
        <li>
          <t>
            Distinguish an empty set from a set containing an empty scope and identifier pair.
            Accept finite empty octet strings at the model boundary; apply any imported-system
            restrictions in the mapping or profile.
          </t>
        </li>
        <li>
          <t>
            Preserve arbitrary octets, including zero octets and values outside ASCII. Changing a
            scope or identifier octet changes the pair; a leading zero octet is not discarded by
            model comparison.
          </t>
        </li>
        <li>
          <t>
            For presentations accepted by a profile, verify that order and repeated members do not
            change the represented set. Test representation rejection separately; model set equality
            does not prescribe decoder acceptance.
          </t>
        </li>
        <li>
          <t>
            Hold imported interpretation and participation fixed when testing equivalent native
            spellings. Exercise reflection as well as preservation when an import mapping claims to
            retain native comparison unchanged.
          </t>
        </li>
        <li>
          <t>
            Test declared source equivalence against the complete Value. Equal imported members do
            not compensate for content that retains a spelling distinction excluded by the source
            relation. Exercise the equivalent sources and the incomplete-adaptation case in
            <xref target="adapting-native-spellings"/>.
          </t>
        </li>
        <li>
          <t>
            Test role swaps, the same native identifier in different roles, and distinctions in
            position or occurrence. Check the association structure when participation is carried in
            content.
          </t>
        </li>
        <li>
          <t>
            In <xref target="carrying-participation-in-content"/>, compare "invoice:1" with pairs
            {(buyer, party-a), (seller, party-a)} against "invoice:1;buyer=party-a" with only
            {(seller, party-a)}. The identifier sets are equal; the framed content differs. Cover
            delimiter characters, suffix-like reference text, and empty references and pair sets,
            separately and together.
          </t>
        </li>
        <li>
          <t>
            Preserve grouping across multiple relationships when the source relation requires it.
            The edge sets {(a, b), (c, d)} and {(a, d), (c, b)} differ even though their input and
            output endpoint sets are identical. Role-qualified endpoints alone lose grouping.
            <xref target="preserving-associations-between-parties"/> supplies a complete mapping and
            mapped Values for this case.
          </t>
        </li>
        <li>
          <t>
            Keep equal identifier octets under different systems or tenants distinct when their
            imported meanings differ. Vary participation separately from imported interpretation, as
            in <xref target="combining-independently-governed-systems"/>.
          </t>
        </li>
        <li>
          <t>
            Check the intended native relation before adapting it to equality. Non-transitive
            overlap, as in <xref target="adapting-imported-comparison"/>, cannot be preserved
            unchanged by one independently computed identifier per source.
          </t>
        </li>
        <li>
          <t>
            Change context, content, or a distinct set member independently and check the resulting
            model inequality. Equal context octets from unrelated definitions do not establish
            imported semantic compatibility.
          </t>
        </li>
        <li>
          <t>
            Test fixed-input mapping reproducibility and explicit dependency selection. Keep
            structural rejection, profile-domain exclusion, and resource refusal distinct. A
            structurally admitted Value with inconsistent content associations and identifier-set
            membership is not evidence of conformance to the mapping in
            <xref target="carrying-participation-in-content"/>.
          </t>
        </li>
        <li>
          <t>
            In a concrete derivation profile, test tuple framing, complete set encoding, and
            equivalent accepted representations. Evidence about these profile properties is
            additional to evidence about model equality.
          </t>
        </li>
      </ul>
      <t>
        The additional cases in <xref target="additional-framing-cases"/> use the mapping in
        <xref target="carrying-participation-in-content"/>. Every Value has context
        example.org/trade-document/participants-content/v2. The following input sequences P0, P1,
        and P2 produce identifier sets I0, I1, and I2, respectively:
      </t>
      <sourcecode type="text" anchor="additional-framing-inputs">P0 = []
P1 = [(buyer, party-a)]
P2 = [(seller, party-ab), (seller, party-a)]

I0 = {}
I1 = {("trade-party/v1", "party-a")}
I2 = {("trade-party/v1", "party-a"),
      ("trade-party/v1", "party-ab")}</sourcecode>
      <table anchor="additional-framing-cases">
        <name>Additional Content-Framing Cases</name>
        <thead>
          <tr>
            <th>Case</th>
            <th>Reference</th>
            <th>Pairs</th>
            <th>Content</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>T1</td>
            <td><tt>""</tt></td>
            <td>P0</td>
            <td><tt>"0:"</tt></td>
          </tr>
          <tr>
            <td>T2</td>
            <td><tt>"invoice:1"</tt></td>
            <td>P0</td>
            <td><tt>"9:invoice:1"</tt></td>
          </tr>
          <tr>
            <td>T3</td>
            <td><tt>""</tt></td>
            <td>P1</td>
            <td><tt>"0:;buyer=party-a"</tt></td>
          </tr>
          <tr>
            <td>T4</td>
            <td><tt>""</tt></td>
            <td>P2</td>
            <td><tt>"0:;seller=party-a;seller=party-ab"</tt></td>
          </tr>
          <tr>
            <td>T5</td>
            <td>hex 00</td>
            <td>P0</td>
            <td>hex 31 3a 00</td>
          </tr>
        </tbody>
      </table>
      <t>
        Quoted strings denote exact ASCII octets without the quotation marks. In T5, hex notation
        denotes octets directly: the reference is one NUL octet, and content is ASCII "1:" followed
        by that octet. The ASCII reference domain does not exclude control octets. T4 exercises
        proper-prefix ordering of party-a before party-ab under the same role. These cases do not
        extend the example's source domain to non-ASCII octets.
      </t>
      <t>
        Selected cases can refute a universal claim but do not establish it over an unbounded
        domain. Mapping arguments in <xref target="worked-mapping-examples"/> rely on the declared
        source relation and complete mapping rules, not solely on the displayed cases.
      </t>
    </section>
  </back>
</rfc>
