ProvSQL C/C++ API
Adding support for provenance and uncertainty management to PostgreSQL databases
Loading...
Searching...
No Matches
Formula.h File Reference

Symbolic representation of provenance as a human-readable formula. More...

#include <numeric>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>
#include "Semiring.h"
Include dependency graph for Formula.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  semiring::Formula
 Symbolic provenance representation over std::string. More...

Namespaces

namespace  semiring

Functions

template<typename Range, typename Value = typename Range::value_type>
static std::string join (Range const &elements, const char *const delimiter)
 Concatenate elements of a range with a delimiter.
static std::string strip_wrap_if_op (const std::string &s, const std::string &op)
 If s is wrapped in a single matched outer paren pair AND its top-level operator (depth 1, inside that pair) is op, return the inner content; otherwise return s unchanged.

Detailed Description

Symbolic representation of provenance as a human-readable formula.

The Formula pseudo-semiring (std::string, \(\oplus\), \(\otimes\), "𝟘", "𝟙") produces a symbolic representation of provenance using Unicode semiring symbols. It is primarily used for debugging and testing.

Each gate evaluates to a string:

  • zero() → "𝟘"
  • one() → "𝟙"
  • plus() → "(a ⊕ b ⊕ 
)" or just "a" for singletons
  • times() → "(a ⊗ b ⊗ 
)" or just "a" for singletons
  • monus() → "(a ⊖ b)"
  • delta() → "ÎŽ(a)" or "ÎŽa" if a starts with (
  • cmp() → "[s1 op s2]"
  • semimod()→ "x*s"
  • agg() → operator-specific notation (e.g., "min(a,b)")
  • value() → the literal string itself

Definition in file Formula.h.

Function Documentation

◆ join()

template<typename Range, typename Value = typename Range::value_type>
std::string join ( Range const & elements,
const char *const delimiter )
static

Concatenate elements of a range with a delimiter.

Used internally by Formula::plus(), Formula::times(), and Formula::agg() to build operator-separated strings.

Template Parameters
RangeAny range type with a value_type typedef.
ValueElement type (defaults to Range::value_type).
Parameters
elementsThe range to join.
delimiterString to insert between adjacent elements.
Returns
All elements concatenated with delimiter between them.

Definition at line 46 of file Formula.h.

Here is the caller graph for this function:

◆ strip_wrap_if_op()

std::string strip_wrap_if_op ( const std::string & s,
const std::string & op )
static

If s is wrapped in a single matched outer paren pair AND its top-level operator (depth 1, inside that pair) is op, return the inner content; otherwise return s unchanged.

Used by Formula::plus() and Formula::times() to flatten same-op nested gates by associativity: a child "(a ⊕ b)" feeding into a parent plus is unwrapped to "a ⊕ b" so the join produces "a ⊕ b ⊕ c" instead of "(a ⊕ b) ⊕ c". A different top-level op (e.g., a times child) keeps its parens.

Definition at line 72 of file Formula.h.

Here is the caller graph for this function: