All Downloads are FREE. Search and download functionalities are using the official Maven repository.

z3-z3-4.13.0.src.opt.totalizer.h Maven / Gradle / Ivy

The newest version!
/*++
Copyright (c) 2022 Microsoft Corporation

Module Name:

    totalizer.h

Abstract:
   
    Incremental totalizer for at least constraints

Author:

    Nikolaj Bjorner (nbjorner) 2022-06-27

--*/

#pragma once
#include "ast/ast.h"

namespace opt {
    
    class totalizer {
        struct node {
            node* m_left = nullptr;
            node* m_right = nullptr;
            expr_ref_vector m_literals;
            node(expr_ref_vector& l): m_literals(l) {}
            ~node() {
                dealloc(m_left);
                dealloc(m_right);
            }
            unsigned size() const { return m_literals.size(); }
            
        };

        ast_manager&            m;
        expr_ref_vector         m_literals;
        node*                   m_root = nullptr;
        expr_ref_vector         m_clauses;
        vector> m_defs;

        void ensure_bound(node* n, unsigned k);

    public:
        totalizer(expr_ref_vector const& literals);
        ~totalizer();
        expr* at_least(unsigned k);
        expr_ref_vector& clauses() { return m_clauses; }
        vector>& defs() { return m_defs; }
    };   
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy