]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/icl/doc/html/boost_icl/semantics/collectors__maps_of_sets.html
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / icl / doc / html / boost_icl / semantics / collectors__maps_of_sets.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Collectors: Maps of Sets</title>
5 <link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.74.0">
7 <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Icl">
8 <link rel="up" href="../semantics.html" title="Semantics">
9 <link rel="prev" href="maps.html" title="Maps">
10 <link rel="next" href="quantifiers__maps_of_numbers.html" title="Quantifiers: Maps of Numbers">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="maps.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../semantics.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="quantifiers__maps_of_numbers.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section boost_icl_semantics_collectors__maps_of_sets" lang="en">
26 <div class="titlepage"><div><div><h3 class="title">
27 <a name="boost_icl.semantics.collectors__maps_of_sets"></a><a class="link" href="collectors__maps_of_sets.html" title="Collectors: Maps of Sets">Collectors:
28 Maps of Sets</a>
29 </h3></div></div></div>
30 <p>
31 Icl <code class="computeroutput"><span class="identifier">Collectors</span></code>, behave like
32 <code class="computeroutput"><span class="identifier">Sets</span></code>. This can be understood
33 easily, if we consider, that every map of sets can be transformed to an equivalent
34 set of pairs. For instance in the pseudocode below map <code class="computeroutput"><span class="identifier">m</span></code>
35
36 </p>
37 <pre class="programlisting"><span class="identifier">icl</span><span class="special">::</span><span class="identifier">map</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span><span class="identifier">set</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">m</span> <span class="special">=</span> <span class="special">{(</span><span class="number">1</span><span class="special">-&gt;{</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">}),</span> <span class="special">(</span><span class="number">2</span><span class="special">-&gt;{</span><span class="number">1</span><span class="special">})};</span>
38 </pre>
39 <p>
40 is equivalent to set <code class="computeroutput"><span class="identifier">s</span></code>
41 </p>
42 <pre class="programlisting"><span class="identifier">icl</span><span class="special">::</span><span class="identifier">set</span><span class="special">&lt;</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">s</span> <span class="special">=</span> <span class="special">{(</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">),(</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">),</span> <span class="comment">//representing 1-&gt;{1,2}
43 </span> <span class="special">(</span><span class="number">2</span><span class="special">,</span><span class="number">1</span><span class="special">)</span> <span class="special">};</span> <span class="comment">//representing 2-&gt;{1}
44 </span></pre>
45 <p>
46 </p>
47 <p>
48 Also the results of add, subtract and other operations on <code class="computeroutput"><span class="identifier">map</span>
49 <span class="identifier">m</span></code> and <code class="computeroutput"><span class="identifier">set</span>
50 <span class="identifier">s</span></code> preserves the equivalence of
51 the containers <span class="emphasis"><em><span class="bold"><strong>almost</strong></span></em></span>
52 perfectly:
53 </p>
54 <pre class="programlisting"><span class="identifier">m</span> <span class="special">+=</span> <span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="number">3</span><span class="special">);</span>
55 <span class="identifier">m</span> <span class="special">==</span> <span class="special">{(</span><span class="number">1</span><span class="special">-&gt;{</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">}),</span> <span class="special">(</span><span class="number">2</span><span class="special">-&gt;{</span><span class="number">1</span><span class="special">})};</span> <span class="comment">//aggregated on collision of key value 1
56 </span><span class="identifier">s</span> <span class="special">+=</span> <span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="number">3</span><span class="special">);</span>
57 <span class="identifier">s</span> <span class="special">==</span> <span class="special">{(</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">),(</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">),(</span><span class="number">1</span><span class="special">,</span><span class="number">3</span><span class="special">),</span> <span class="comment">//representing 1-&gt;{1,2,3}
58 </span> <span class="special">(</span><span class="number">2</span><span class="special">,</span><span class="number">1</span><span class="special">)</span> <span class="special">};</span> <span class="comment">//representing 2-&gt;{1}
59 </span></pre>
60 <p>
61 </p>
62 <p>
63 The equivalence of <code class="computeroutput"><span class="identifier">m</span></code> and
64 <code class="computeroutput"><span class="identifier">s</span></code> is only violated if an
65 empty set occurres in <code class="computeroutput"><span class="identifier">m</span></code> by
66 subtraction of a value pair:
67 </p>
68 <pre class="programlisting"><span class="identifier">m</span> <span class="special">-=</span> <span class="special">(</span><span class="number">2</span><span class="special">,</span><span class="number">1</span><span class="special">);</span>
69 <span class="identifier">m</span> <span class="special">==</span> <span class="special">{(</span><span class="number">1</span><span class="special">-&gt;{</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">}),</span> <span class="special">(</span><span class="number">2</span><span class="special">-&gt;{})};</span> <span class="comment">//aggregated on collision of key value 2
70 </span><span class="identifier">s</span> <span class="special">-=</span> <span class="special">(</span><span class="number">2</span><span class="special">,</span><span class="number">1</span><span class="special">);</span>
71 <span class="identifier">s</span> <span class="special">==</span> <span class="special">{(</span><span class="number">1</span><span class="special">,</span><span class="number">1</span><span class="special">),(</span><span class="number">1</span><span class="special">,</span><span class="number">2</span><span class="special">),(</span><span class="number">1</span><span class="special">,</span><span class="number">3</span><span class="special">)</span> <span class="comment">//representing 1-&gt;{1,2,3}
72 </span> <span class="special">};</span> <span class="comment">//2-&gt;{} is not represented in s
73 </span></pre>
74 <p>
75 </p>
76 <p>
77 This problem can be dealt with in two ways.
78 </p>
79 <div class="orderedlist"><ol type="1">
80 <li>
81 Deleting value pairs form the Collector, if it's associated value becomes
82 a neutral value or <code class="computeroutput"><span class="identifier">identity_element</span></code>.
83 </li>
84 <li>
85 Using a different equality, called distinct equality in the laws to validate.
86 Distinct equality only accounts for value pairs that that carry values
87 unequal to the <code class="computeroutput"><span class="identifier">identity_element</span></code>.
88 </li>
89 </ol></div>
90 <p>
91 Solution (1) led to the introduction of map traits, particularly trait <span class="emphasis"><em><span class="bold"><strong>partial_absorber</strong></span></em></span>, which is the default
92 setting in all icl's map templates.
93 </p>
94 <p>
95 Solution (2), is applied to check the semantics of icl::Maps for the partial_enricher
96 trait that does not delete value pairs that carry identity elements. Distinct
97 equality is implemented by a non member function called <code class="computeroutput"><span class="identifier">is_distinct_equal</span></code>.
98 Throughout this chapter distinct equality in pseudocode and law denotations
99 is denoted as <code class="computeroutput"><span class="special">=</span><span class="identifier">d</span><span class="special">=</span></code> operator.
100 </p>
101 <p>
102 The validity of the sets of laws that make up <code class="computeroutput"><span class="identifier">Set</span></code>
103 semantics should now be quite evident. So the following text shows the laws
104 that are validated for all <code class="computeroutput"><span class="identifier">Collector</span></code>
105 types <code class="computeroutput"><span class="identifier">C</span></code>. Which are <code class="computeroutput"><a class="link" href="../../boost/icl/map.html" title="Class template map">icl::map</a></code><code class="computeroutput"><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">S</span><span class="special">,</span><span class="identifier">T</span><span class="special">&gt;</span></code>,
106 <code class="computeroutput"><a class="link" href="../../boost/icl/interval_map.html" title="Class template interval_map">interval_map</a></code><code class="computeroutput"><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">S</span><span class="special">,</span><span class="identifier">T</span><span class="special">&gt;</span></code> and <code class="computeroutput"><a class="link" href="../../boost/icl/split_interval_map.html" title="Class template split_interval_map">split_interval_map</a></code><code class="computeroutput"><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">S</span><span class="special">,</span><span class="identifier">T</span><span class="special">&gt;</span></code> where <code class="computeroutput"><span class="identifier">CodomainT</span></code>
107 type <code class="computeroutput"><span class="identifier">S</span></code> is a model of <code class="computeroutput"><span class="identifier">Set</span></code> and <code class="computeroutput"><span class="identifier">Trait</span></code>
108 type <code class="computeroutput"><span class="identifier">T</span></code> is either <code class="computeroutput"><a class="link" href="../../boost/icl/partial_absorber.html" title="Struct partial_absorber">partial_absorber</a></code> or <code class="computeroutput"><a class="link" href="../../boost/icl/partial_enricher.html" title="Struct partial_enricher">partial_enricher</a></code>.
109 </p>
110 <a name="boost_icl.semantics.collectors__maps_of_sets.laws_on_set_union__set_intersection_and_set_difference"></a><h6>
111 <a name="id1090371"></a>
112 <a class="link" href="collectors__maps_of_sets.html#boost_icl.semantics.collectors__maps_of_sets.laws_on_set_union__set_intersection_and_set_difference">Laws
113 on set union, set intersection and set difference</a>
114 </h6>
115 <p>
116
117 </p>
118 <pre class="programlisting"><span class="identifier">Associativity</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,+,==</span> <span class="special">&gt;:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">,</span><span class="identifier">c</span><span class="special">;</span> <span class="identifier">a</span><span class="special">+(</span><span class="identifier">b</span><span class="special">+</span><span class="identifier">c</span><span class="special">)</span> <span class="special">==</span> <span class="special">(</span><span class="identifier">a</span><span class="special">+</span><span class="identifier">b</span><span class="special">)+</span><span class="identifier">c</span>
119 <span class="identifier">Neutrality</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,+,==</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">;</span> <span class="identifier">a</span><span class="special">+</span><span class="identifier">C</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">a</span>
120 <span class="identifier">Commutativity</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,+,==</span> <span class="special">&gt;:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">;</span> <span class="identifier">a</span><span class="special">+</span><span class="identifier">b</span> <span class="special">==</span> <span class="identifier">b</span><span class="special">+</span><span class="identifier">a</span>
121
122 <span class="identifier">Associativity</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,&amp;,==</span> <span class="special">&gt;:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">,</span><span class="identifier">c</span><span class="special">;</span> <span class="identifier">a</span><span class="special">&amp;(</span><span class="identifier">b</span><span class="special">&amp;</span><span class="identifier">c</span><span class="special">)</span> <span class="special">==(</span><span class="identifier">a</span><span class="special">&amp;</span><span class="identifier">b</span><span class="special">)&amp;</span><span class="identifier">c</span>
123 <span class="identifier">Commutativity</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,&amp;,==</span> <span class="special">&gt;:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">;</span> <span class="identifier">a</span><span class="special">&amp;</span><span class="identifier">b</span> <span class="special">==</span> <span class="identifier">b</span><span class="special">&amp;</span><span class="identifier">a</span>
124
125 <span class="identifier">RightNeutrality</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,-,==</span> <span class="special">&gt;:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">;</span> <span class="identifier">a</span><span class="special">-</span><span class="identifier">C</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">a</span>
126 <span class="identifier">Inversion</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,-,=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">;</span> <span class="identifier">a</span> <span class="special">-</span> <span class="identifier">a</span> <span class="special">=</span><span class="identifier">v</span><span class="special">=</span> <span class="identifier">C</span><span class="special">()</span>
127 </pre>
128 <p>
129 </p>
130 <p>
131 All the fundamental laws could be validated for all icl Maps in their instantiation
132 as Maps of Sets or Collectors. As expected, Inversion only holds for distinct
133 equality, if the map is not a <code class="computeroutput"><span class="identifier">partial_absorber</span></code>.
134 </p>
135 <p>
136
137 </p>
138 <pre class="programlisting"> <span class="special">+</span> <span class="special">&amp;</span> <span class="special">-</span>
139 <span class="identifier">Associativity</span> <span class="special">==</span> <span class="special">==</span>
140 <span class="identifier">Neutrality</span> <span class="special">==</span> <span class="special">==</span>
141 <span class="identifier">Commutativity</span> <span class="special">==</span> <span class="special">==</span>
142 <span class="identifier">Inversion</span> <span class="identifier">partial_absorber</span> <span class="special">==</span>
143 <span class="identifier">partial_enricher</span> <span class="special">=</span><span class="identifier">d</span><span class="special">=</span>
144 </pre>
145 <p>
146 </p>
147 <a name="boost_icl.semantics.collectors__maps_of_sets.distributivity_laws"></a><h6>
148 <a name="id1091034"></a>
149 <a class="link" href="collectors__maps_of_sets.html#boost_icl.semantics.collectors__maps_of_sets.distributivity_laws">Distributivity
150 Laws</a>
151 </h6>
152 <p>
153
154 </p>
155 <pre class="programlisting"> <span class="identifier">Distributivity</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,+,&amp;,=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">,</span><span class="identifier">c</span><span class="special">;</span> <span class="identifier">a</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">b</span> <span class="special">&amp;</span> <span class="identifier">c</span><span class="special">)</span> <span class="special">=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">+</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&amp;</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">+</span> <span class="identifier">c</span><span class="special">)</span>
156 <span class="identifier">Distributivity</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,&amp;,+,=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">,</span><span class="identifier">c</span><span class="special">;</span> <span class="identifier">a</span> <span class="special">&amp;</span> <span class="special">(</span><span class="identifier">b</span> <span class="special">+</span> <span class="identifier">c</span><span class="special">)</span> <span class="special">=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">&amp;</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">&amp;</span> <span class="identifier">c</span><span class="special">)</span>
157 <span class="identifier">RightDistributivity</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,+,-,=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">,</span><span class="identifier">c</span><span class="special">;</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">+</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">c</span> <span class="special">=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">-</span> <span class="identifier">c</span><span class="special">)</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">b</span> <span class="special">-</span> <span class="identifier">c</span><span class="special">)</span>
158 <span class="identifier">RightDistributivity</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,&amp;,-,=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">,</span><span class="identifier">c</span><span class="special">;</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">&amp;</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">c</span> <span class="special">=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">-</span> <span class="identifier">c</span><span class="special">)</span> <span class="special">&amp;</span> <span class="special">(</span><span class="identifier">b</span> <span class="special">-</span> <span class="identifier">c</span><span class="special">)</span>
159 </pre>
160 <p>
161 </p>
162 <p>
163 Results for the distributivity laws are almost identical to the validation
164 of sets except that for a <code class="computeroutput"><span class="identifier">partial_enricher</span>
165 <span class="identifier">map</span></code> the law <code class="computeroutput"><span class="special">(</span><span class="identifier">a</span> <span class="special">&amp;</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">-</span>
166 <span class="identifier">c</span> <span class="special">==</span>
167 <span class="special">(</span><span class="identifier">a</span> <span class="special">-</span> <span class="identifier">c</span><span class="special">)</span>
168 <span class="special">&amp;</span> <span class="special">(</span><span class="identifier">b</span> <span class="special">-</span> <span class="identifier">c</span><span class="special">)</span></code> holds for lexicographical equality.
169 </p>
170 <p>
171
172 </p>
173 <pre class="programlisting"> <span class="special">+,&amp;</span> <span class="special">&amp;,+</span>
174 <span class="identifier">Distributivity</span> <span class="identifier">joining</span> <span class="special">==</span> <span class="special">==</span>
175 <span class="identifier">splitting</span> <span class="identifier">partial_absorber</span> <span class="special">=</span><span class="identifier">e</span><span class="special">=</span> <span class="special">=</span><span class="identifier">e</span><span class="special">=</span>
176 <span class="identifier">partial_enricher</span> <span class="special">=</span><span class="identifier">e</span><span class="special">=</span> <span class="special">==</span>
177
178 <span class="special">+,-</span> <span class="special">&amp;,-</span>
179 <span class="identifier">RightDistributivity</span> <span class="identifier">joining</span> <span class="special">==</span> <span class="special">==</span>
180 <span class="identifier">splitting</span> <span class="special">=</span><span class="identifier">e</span><span class="special">=</span> <span class="special">==</span>
181 </pre>
182 <p>
183 </p>
184 <a name="boost_icl.semantics.collectors__maps_of_sets.demorgan_s_law_and_symmetric_difference"></a><h6>
185 <a name="id1091906"></a>
186 <a class="link" href="collectors__maps_of_sets.html#boost_icl.semantics.collectors__maps_of_sets.demorgan_s_law_and_symmetric_difference">DeMorgan's
187 Law and Symmetric Difference</a>
188 </h6>
189 <p>
190
191 </p>
192 <pre class="programlisting"><span class="identifier">DeMorgan</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,+,&amp;,=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">,</span><span class="identifier">c</span><span class="special">;</span> <span class="identifier">a</span> <span class="special">-</span> <span class="special">(</span><span class="identifier">b</span> <span class="special">+</span> <span class="identifier">c</span><span class="special">)</span> <span class="special">=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">-</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">&amp;</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">-</span> <span class="identifier">c</span><span class="special">)</span>
193 <span class="identifier">DeMorgan</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,&amp;,+,=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">,</span><span class="identifier">c</span><span class="special">;</span> <span class="identifier">a</span> <span class="special">-</span> <span class="special">(</span><span class="identifier">b</span> <span class="special">&amp;</span> <span class="identifier">c</span><span class="special">)</span> <span class="special">=</span><span class="identifier">v</span><span class="special">=</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">-</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">-</span> <span class="identifier">c</span><span class="special">)</span>
194 </pre>
195 <p>
196 </p>
197 <p>
198
199 </p>
200 <pre class="programlisting"> <span class="special">+,&amp;</span> <span class="special">&amp;,+</span>
201 <span class="identifier">DeMorgan</span> <span class="identifier">joining</span> <span class="special">==</span> <span class="special">==</span>
202 <span class="identifier">splitting</span> <span class="special">==</span> <span class="special">=</span><span class="identifier">e</span><span class="special">=</span>
203 </pre>
204 <p>
205 </p>
206 <p>
207
208 </p>
209 <pre class="programlisting"><span class="identifier">SymmetricDifference</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">,==</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">C</span> <span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">,</span><span class="identifier">c</span><span class="special">;</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">+</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">-</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">*</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">==</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">-</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">b</span> <span class="special">-</span> <span class="identifier">a</span><span class="special">)</span>
210 </pre>
211 <p>
212 </p>
213 <p>
214 Reviewing the validity tables above shows, that the sets of valid laws for
215 <code class="computeroutput"><span class="identifier">icl</span> <span class="identifier">Sets</span></code>
216 and <code class="computeroutput"><span class="identifier">icl</span> <span class="identifier">Maps</span>
217 <span class="identifier">of</span> <span class="identifier">Sets</span></code>
218 that are <span class="emphasis"><em>identity absorbing</em></span> are exactly the same. As
219 expected, only for Maps of Sets that represent empty sets as associated values,
220 called <span class="emphasis"><em>identity enrichers</em></span>, there are marginal semantic
221 differences.
222 </p>
223 </div>
224 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
225 <td align="left"></td>
226 <td align="right"><div class="copyright-footer">Copyright &#169; 2007 -2010 Joachim Faulhaber<br>Copyright &#169; 1999 -2006 Cortex Software GmbH<p>
227 Distributed under the Boost Software License, Version 1.0. (See accompanying
228 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
229 </p>
230 </div></td>
231 </tr></table>
232 <hr>
233 <div class="spirit-nav">
234 <a accesskey="p" href="maps.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../semantics.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="quantifiers__maps_of_numbers.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
235 </div>
236 </body>
237 </html>