Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Quantifiers: Maps of Numbers

Boost , Chapter 1. Boost.Icl , Semantics

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
Subtraction on Quantifiers

С<Sets>и<Collectors>семантика<operator->заключается в том, что изустановленная разницаозначает, что вы можете вычесть только то, что было помещено в контейнер раньше.<Quantifiers>, чтосчитатьиликоличественноих ключевые значения в некотором роде, семантика<operator ->может быть различной.

Вопрос в том, как вычитание должно быть определено здесь?

//Pseudocode:
icl::map<int,some_number> q = {(1->1)};
q -= (2->1);

Если<some_number>—<unsigned>,— разница в наборе— вычитание имеет смысл.

icl::map<int,some_number> q = {(1->1)};
q -= (2->1);   // key 2 is not in the map so  
q == {(1->1)}; // q is unchanged by 'aggregate on collision'

Если<some_number>является<signed>числовым типом, результат также может быть следующим:

icl::map<int,some_number> q = {(1->1)};
q -= (2->1);             // subtracting works like  
q == {(1->1), (2-> -1)}; // adding the inverse element

Как указано в примере, вычитание пары значений ключа<(k,v)>, очевидно, может быть определено как добавлениеобратного элементадля этого ключа<(k,-v)>, если ключ еще не сохранен на карте.

Partial and Total Quantifiers and Infinite Vectors

Другая концепция, о которой мы можем думать, заключается в том, что в<Quantifier>каждый<key_value>первоначально количественно определен<0>-времени, где<0>означает нейтральный элемент числового<CodomainT>типа. Такой<Quantifier>будет полностью определен на всех значениях его<DomainT>типа и может быть задуман как<InfiniteVector>.

Для создания бесконечного вектора, который полностью определен на его домене, мы можем установить параметр карты<Trait>на значение<total_absorber>.<total_absorber>особенно хорошо подходит для<Quantifier>, если он<CodomainT>имеет обратный элемент, как и все подписанные числовые типы. Как мы увидим далее в этом разделе, этот вид совокупности<Quantifier>обладает основными свойствами, которые обеспечивают элементы векторного пространства.

Intersection on Quantifiers

Другое различие между<Collectors>и<Quantifiers>— это семантика<operator&>, которая имеет значение пересечения множества<Collectors>.

Дляагрегата по принципу перекрытияоперация<&>должна быть передана для объединения связанных значений при перекрытии интервалов или столкновении ключей. Этого нельзя сделать для<Quantifiers>, так как числовые типы не реализуют пересечения.

Для<CodomainT>типов, не являющихся моделями<Sets><operator&>, определенаагрегация на пересечении доменов. Вместо<codomain_intersect>функтора<codomain_combine>используется операция агрегации:

//Pseudocode example for partial Quantifiers p, q:
interval_map<int,int> p, q;
p     = {[1     3)->1   };
q     = {   ([2    4)->1};
p & q =={    [2 3)->2   };

Таким образом, сложение или агрегирование связанных значений выполняется как для<operator+>, но пары значений, которые не имеют общих ключей, не добавляются к результату.

Для<Quantifier>, которая является моделью<InfiniteVector>и которая поэтому определена для каждого ключевого значения<DomainT>типа, это определение<operator &>вырождается в те же сематики, что<operaotor+>реализует:

//Pseudocode example for total Quantifiers p, q:
interval_map<int,int> p, q;
p   = {[min   1)[1      3)[3         max]};
          ->0      ->1         ->0
q   = {[min        2)[2      4)[4    max]};
            ->0         ->1       ->0
p&q =={[min   1)[1  2)[2 3)[3 4)[4   max]};
          ->0    ->1   ->2  ->1    ->0

Laws for Quantifiers of unsigned Numbers

Семантика icl Maps of Numbers отличается для неподписанных или подписанных чисел. Таким образом, наборы законов, которые действительны для Квантификаторов, будут отличаться в зависимости от инстанциации неподписанного или подписанного типа номера в качестве<CodomainT>параметра.

Опять же, мы представляем исследованные наборы законов, на этот раз для<Quantifier>типов<Q>, которые являются<icl::map><<D,N,T>>,<interval_map><<D,N,T>>и<split_interval_map><<D,N,T>>, где<CodomainT>тип<N>является<Number>и<Trait>тип<T>является одной из черт карты icl.

Associativity<Q,+,== >: Q a,b,c; a+(b+c) == (a+b)+c
Neutrality<Q,+,== >   : Q a;       a+Q() == a
Commutativity<Q,+,== >: Q a,b;       a+b == b+a
Associativity<Q,&,== >: Q a,b,c; a&(b&c) ==(a&b)&c
Commutativity<Q,&,== >: Q a,b;       a&b == b&a
RightNeutrality<Q,-,== >: Q a;   a-Q() ==  a
Inversion<Q,-,=v= >     : Q a;   a - a =v= Q()

Для<unsignedQuantifier>, icl Карты<unsignednumbers>применяются те же основные законы, которые действительны для<Collectors>:

                               +    &    -
Associativity                  ==   ==
Neutrality                     ==        ==
Commutativity                  ==   ==
Inversion absorbs_identities             ==
          enriches_identities            =d=

CommutativeModoid снова CommutativeModoid. .

Другие законы, действительные для<Collectors>, не действительны для<unsignedQuantifier>.

Laws for Quantifiers of signed Numbers

Для<Quantifiers>подписанных чисел, или<signedQuantifiers>, структура действительных законов несколько отличается:

                               +    &    -
Associativity                  =v=  =v=
Neutrality                     ==        ==
Commutativity                  ==   ==
Inversion absorbs_identities             ==
          enriches_identities            =d=

Различия помечены как<=v=>, что указывает на то, что закон ассоциативности не является однозначно действительным для одного отношения равенства<==>, как это было в случае<Collector>и<unsignedQuntifier>карт.

Различия заключаются в следующем:

                                   +
Associativity         icl::map     ==
                  interval_map     ==
            split_interval_map     =e=

Для<operator+>ассоциативность на<split_interval_maps>действительна только при равенстве элементов<=e=>, что не является большим ограничением, поскольку требуется только равенство элементов.

Для<operator&>ассоциативность нарушается для всех карт, которые являются частичными поглотителями. Для полных поглотителей ассоциативность действительна для равенства элементов. Все карты, имеющиеобогатитель идентичностипризнак, являются ассоциативными. лексикографическое равенство<==>.

Associativity                        &
   absorbs_identities && !is_total   false
   absorbs_identities &&  is_total   =e=
   enriches_identities               ==

Обратите внимание, что все законы, которые устанавливают коммутативный моноид для<operator+>и элемент идентичности<Q()>, действительны для<signedQuantifiers>. Кроме того, симметричная разница, которая не удерживает<unsigned Qunatifiers>, действительна для<signedQunatifiers>.

SymmetricDifference<Q,== > : Q a,b,c; (a + b) - (a & b) == (a - b) + (b - a)

Для<signedTotalQuantifier><Qt>симметричная разница вырождается в тривиальную форму, поскольку<operator &>и<operator +>становятся идентичными.

SymmetricDifference<Qt,== > : Qt a,b,c; (a + b) - (a + b) == (a - b) + (b - a) == Qt()

Existence of an Inverse

Q являются коммутативными моноидами в отношении operator + и нейтрального элемента Q(). Если Quantifier CodomainT Тип имеет обратный элемент, например, signed numbers do, тип CodomainT a коммутативная или abelian группа. В этом случае signed Quantifier который также total имеет инверс и Закон гласит:

InverseElement<Qt,== > : Qt a; (0 - a) + a == 0

Это означает, что каждый<TotalQuantifier>над абелевой группой является абелевской группой.

Quantifiers снова a Quantifiers и TotalQuantifier TotalQuantifiers также TotalQuantifier. .

<TotalQuantifiers>напоминает понятие векторного пространства частично. Концепция может быть завершена в векторном пространстве, если будет добавлено скалярное умножение.


PrevUpHomeNext

Статья Quantifiers: Maps of Numbers раздела Chapter 1. Boost.Icl Semantics может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Semantics ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:10:43/0.005856990814209/0