SSoelvsten / adiar

An I/O-efficient implementation of (Binary) Decision Diagrams
https://ssoelvsten.github.io/adiar/
MIT License
24 stars 13 forks source link

Polynomial Boolean Ring #437

Open SSoelvsten opened 1 year ago

SSoelvsten commented 1 year ago

Introduction

The PolyBoRi library [Brickenstein09] implements Polynomials over the Boolean Ring with ZDDs. To the best of my knowledge, this approach in PolyBoRi is the best approach we have, but it often runs out of memory.

Hence, I believe Adiar may be able to contribute to the area of cryptography by us providing a new class: bp (boolean polynomial). This is a new decision_diagram class that directly resuses many zdd policies. The semantics for bp are: each path in the DAG describe the variables that are multiplied together in a single term. Two different paths correspond to two terms of the polynomial being added together.

Example

Consider the polynomial ac + bc + c which then corresponds to three different paths ac, bc, and c in a ZDD as shown below (Fig. 2 in [Brickenstein09])

       (a)
        | \
       (b) |
        \\ |
         (c)
         / \
       [0] [1]

Operations

The following are sampled from [Brickenstein09], the source code (especially, see the file /libpolybori/include/polybori/BoolePolynomial.h) and my own thoughts.

References

SSoelvsten commented 1 year ago

What might be of interest is to look into the Davio Expansion ( see also #442 ). This might have some interesting properties for this domain too.