ProvSQL C/C++ API
Adding support for provenance and uncertainty management to PostgreSQL databases
Loading...
Searching...
No Matches
semiring::Semiring< V > Class Template Referenceabstract

Abstract base class for (m-)semirings. More...

#include "Semiring.h"

Public Types

typedef V value_type
 The carrier type of this semiring.

Public Member Functions

virtual value_type zero () const =0
 Return the additive identity \(\mathbb{0}\).
virtual value_type one () const =0
 Return the multiplicative identity \(\mathbb{1}\).
virtual value_type plus (const std::vector< value_type > &v) const =0
 Apply the additive operation to a list of values.
virtual value_type times (const std::vector< value_type > &v) const =0
 Apply the multiplicative operation to a list of values.
virtual value_type monus (value_type x, value_type y) const =0
 Apply the monus (m-semiring difference) operation.
virtual value_type delta (value_type x) const =0
 Apply the \(\delta\) operator.
virtual value_type cmp (value_type s1, ComparisonOperator op, value_type s2) const
 Evaluate a comparison gate.
virtual value_type semimod (value_type x, value_type s) const
 Apply a semimodule scalar multiplication.
virtual value_type agg (AggregationOperator op, const std::vector< value_type > &s)
 Evaluate an aggregation gate.
virtual value_type value (const std::string &s) const
 Interpret a literal string as a semiring value.
virtual ~Semiring ()=default
virtual bool absorptive () const
 Return true if this semiring is absorptive ( \(\mathbb{1} \oplus a = \mathbb{1}\) for all \(a\)).
virtual bool compatibleWithBooleanRewrite () const
 Return true if a semiring homomorphism BoolFunc(X) →+* S exists, so the safe-query (Boolean-rewrite) optimisation produces circuits that are semantically faithful when evaluated under this semiring.

Detailed Description

template<typename V>
class semiring::Semiring< V >

Abstract base class for (m-)semirings.

Template Parameters
VThe carrier type (e.g. bool, unsigned, std::string).

Required operations

All pure-virtual methods must be implemented by concrete subclasses.

Optional operations

cmp(), semimod(), agg(), and value() have default implementations that throw SemiringException. Override them in subclasses that support these circuit gate types.

Absorptive semirings

A semiring is absorptive (i.e., \(\mathbb{1} \oplus a = \mathbb{1}\) for all \(a\)) iff absorptive() returns true. Absorptivity implies idempotency ( \(a \oplus a = a\)), which lets the circuit evaluator and the HAVING-semantics machinery deduplicate operands and short-circuit over the multiplicative identity.

Definition at line 92 of file Semiring.h.

Member Typedef Documentation

◆ value_type

template<typename V>
typedef V semiring::Semiring< V >::value_type

The carrier type of this semiring.

Definition at line 96 of file Semiring.h.

Constructor & Destructor Documentation

◆ ~Semiring()

template<typename V>
virtual semiring::Semiring< V >::~Semiring ( )
virtualdefault

Member Function Documentation

◆ absorptive()

template<typename V>
virtual bool semiring::Semiring< V >::absorptive ( ) const
inlinevirtual

Return true if this semiring is absorptive ( \(\mathbb{1} \oplus a = \mathbb{1}\) for all \(a\)).

When true, the circuit evaluator and HAVING-semantics machinery may exploit the resulting idempotency ( \(a \oplus a = a\), implied by absorptivity) to deduplicate children of plus gates and to short-circuit over the multiplicative identity.

Returns
false by default; override to return true.

Reimplemented in semiring::Boolean, semiring::BoolExpr, semiring::IntervalUnion, semiring::Lukasiewicz, semiring::MinMax, and semiring::Viterbi.

Definition at line 206 of file Semiring.h.

◆ agg()

template<typename V>
virtual value_type semiring::Semiring< V >::agg ( AggregationOperator op,
const std::vector< value_type > & s )
inlinevirtual

Evaluate an aggregation gate.

Parameters
opThe aggregation function (COUNT, SUM, MIN, …).
sList of child semiring values to aggregate.
Returns
The aggregated value.
Exceptions
SemiringExceptionif not overridden.

Reimplemented in semiring::Formula.

Definition at line 176 of file Semiring.h.

◆ cmp()

template<typename V>
virtual value_type semiring::Semiring< V >::cmp ( value_type s1,
ComparisonOperator op,
value_type s2 ) const
inlinevirtual

Evaluate a comparison gate.

Parameters
s1Left operand.
opComparison operator.
s2Right operand.
Returns
Result of the comparison in this semiring.
Exceptions
SemiringExceptionif not overridden.

Reimplemented in semiring::Formula.

Definition at line 152 of file Semiring.h.

◆ compatibleWithBooleanRewrite()

template<typename V>
virtual bool semiring::Semiring< V >::compatibleWithBooleanRewrite ( ) const
inlinevirtual

Return true if a semiring homomorphism BoolFunc(X) →+* S exists, so the safe-query (Boolean-rewrite) optimisation produces circuits that are semantically faithful when evaluated under this semiring.

The compiled-semiring dispatcher consults this predicate before evaluating a circuit whose root gate carries PROVSQL_ROOT_TAG_BOOLEAN_REWRITE. Returning false on a tagged circuit raises CircuitException.

Defaults to false: a new semiring whose author has not yet verified the homomorphism is fail-closed by construction. Subclasses with a verified homomorphism (currently Boolean, BoolExpr, Formula, and IntervalUnion) override to return true. The justification (Lean-proof reference) belongs in a comment next to each override; see the src/semiring/ headers.

Reimplemented in semiring::Boolean, semiring::BoolExpr, semiring::Counting, semiring::Formula, semiring::How, semiring::IntervalUnion, semiring::Lukasiewicz, semiring::MinMax, semiring::Tropical, semiring::Viterbi, semiring::Which, and semiring::Why.

Definition at line 228 of file Semiring.h.

◆ delta()

template<typename V>
virtual value_type semiring::Semiring< V >::delta ( value_type x) const
pure virtual

◆ monus()

template<typename V>
virtual value_type semiring::Semiring< V >::monus ( value_type x,
value_type y ) const
pure virtual

Apply the monus (m-semiring difference) operation.

Parameters
xMinuend.
ySubtrahend.
Returns
\(x \ominus y\).

Implemented in semiring::Boolean, semiring::BoolExpr, semiring::Counting, semiring::Formula, semiring::How, semiring::IntervalUnion, semiring::Lukasiewicz, semiring::MinMax, semiring::Tropical, semiring::Viterbi, semiring::Which, and semiring::Why.

◆ one()

template<typename V>
virtual value_type semiring::Semiring< V >::one ( ) const
pure virtual

◆ plus()

template<typename V>
virtual value_type semiring::Semiring< V >::plus ( const std::vector< value_type > & v) const
pure virtual

Apply the additive operation to a list of values.

Parameters
vOrdered list of operands (empty list should return zero()).
Returns
\(v_0 \oplus v_1 \oplus \cdots\).

Implemented in semiring::Boolean, semiring::BoolExpr, semiring::Counting, semiring::Formula, semiring::How, semiring::IntervalUnion, semiring::Lukasiewicz, semiring::MinMax, semiring::Tropical, semiring::Viterbi, semiring::Which, and semiring::Why.

◆ semimod()

template<typename V>
virtual value_type semiring::Semiring< V >::semimod ( value_type x,
value_type s ) const
inlinevirtual

Apply a semimodule scalar multiplication.

Parameters
xProvenance value.
sScalar value.
Returns
\(x * s\) in the semimodule.
Exceptions
SemiringExceptionif not overridden.

Reimplemented in semiring::Formula.

Definition at line 164 of file Semiring.h.

◆ times()

template<typename V>
virtual value_type semiring::Semiring< V >::times ( const std::vector< value_type > & v) const
pure virtual

Apply the multiplicative operation to a list of values.

Parameters
vOrdered list of operands (empty list should return one()).
Returns
\(v_0 \otimes v_1 \otimes \cdots\).

Implemented in semiring::Boolean, semiring::BoolExpr, semiring::Counting, semiring::Formula, semiring::How, semiring::IntervalUnion, semiring::Lukasiewicz, semiring::MinMax, semiring::Tropical, semiring::Viterbi, semiring::Which, and semiring::Why.

◆ value()

template<typename V>
virtual value_type semiring::Semiring< V >::value ( const std::string & s) const
inlinevirtual

Interpret a literal string as a semiring value.

Used for gate_value gates whose payload is a string.

Parameters
sLiteral string.
Returns
The corresponding semiring value.
Exceptions
SemiringExceptionif not overridden.

Reimplemented in semiring::Formula.

Definition at line 189 of file Semiring.h.

◆ zero()

template<typename V>
virtual value_type semiring::Semiring< V >::zero ( ) const
pure virtual

The documentation for this class was generated from the following file:
  • /home/pierre/git/software/provsql/src/semiring/Semiring.h