
/*++
Copyright (c) 2015 Microsoft Corporation

--*/

/*--
 Module Name:
 
     hnf.h
 
 Abstract:
 
     Horn normal form conversion.

 Author:
 
 
 Notes:
 
     Very similar to NNF.
 
--*/
 
#pragma once
 
#include "ast/ast.h"
#include "util/params.h"
#include "ast/normal_forms/defined_names.h"
#include "ast/converters/proof_converter.h"
 
class hnf {
    class imp;
    imp *  m_imp;
 public:
    hnf(ast_manager & m);
    ~hnf();
     
    void operator()(expr * n,                          // [IN] expression that should be put into Horn NF
                    proof* p,                          // [IN] proof of n
                    expr_ref_vector & rs,              // [OUT] resultant (conjunction) of expressions
                    proof_ref_vector& ps               // [OUT] proofs of rs
                    );

    void set_name(symbol const& name);    
    void reset();
    func_decl_ref_vector const& get_fresh_predicates();
};
 
