HAL  v4.5.0-83-g30c8f0afc
The Hardware Analyzer - a comprehensive reverse engineering and manipulation framework for gate-level netlists.
z3_utils.h
Go to the documentation of this file.
1 // MIT License
2 //
3 // Copyright (c) 2019 Ruhr University Bochum, Chair for Embedded Security. All Rights reserved.
4 // Copyright (c) 2019 Marc Fyrbiak, Sebastian Wallat, Max Hoffmann ("ORIGINAL AUTHORS"). All rights reserved.
5 // Copyright (c) 2021 Max Planck Institute for Security and Privacy. All Rights reserved.
6 // Copyright (c) 2021 Jörn Langheinrich, Julian Speith, Nils Albartus, René Walendy, Simon Klix ("ORIGINAL AUTHORS"). All Rights reserved.
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to deal
10 // in the Software without restriction, including without limitation the rights
11 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 // copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
14 //
15 // The above copyright notice and this permission notice shall be included in all
16 // copies or substantial portions of the Software.
17 //
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 // SOFTWARE.
25 
26 #pragma once
27 
30 #include "z3++.h"
31 
32 #include <map>
33 #include <set>
34 
35 namespace hal
36 {
40  namespace z3_utils
41  {
51  z3::expr from_bf(const BooleanFunction& bf, z3::context& ctx, const std::map<std::string, z3::expr>& var2expr = {});
52 
60  Result<z3::expr> value_from_binary_string(z3::context& ctx, const std::string& bit_string);
61 
68  Result<BooleanFunction> to_bf(const z3::expr& e);
69 
76  std::string to_smt2(const z3::expr& e);
77 
84  std::string to_cpp(const z3::expr& e);
85 
93  std::string to_verilog(const z3::expr& e, const std::map<std::string, bool>& control_mapping = {});
94 
101  std::set<std::string> get_variable_names(const z3::expr& e);
102 
109  std::set<u32> extract_net_ids(const z3::expr& e);
110 
117  std::set<u32> extract_net_ids(const std::set<std::string>& variable_names);
118 
126  z3::expr get_expr_in_ctx(const z3::expr& e, z3::context& ctx);
127 
128  } // namespace z3_utils
129 } // namespace hal
std::set< std::string > get_variable_names(const z3::expr &e)
Extracts all variable names from a z3 expression.
Definition: z3_utils.cpp:481
std::set< u32 > extract_net_ids(const z3::expr &e)
Extracts all net IDs from the variables of a z3 expression.
Definition: z3_utils.cpp:519
std::string to_smt2(const z3::expr &e)
Definition: z3_utils.cpp:449
z3::expr from_bf(const BooleanFunction &bf, z3::context &ctx, const std::map< std::string, z3::expr > &var2expr={})
Definition: z3_utils.cpp:15
std::string to_verilog(const z3::expr &e, const std::map< std::string, bool > &control_mapping={})
Translates a z3 expression into a verilog network representation.
Definition: z3_utils.cpp:471
std::string to_cpp(const z3::expr &e)
Definition: z3_utils.cpp:463
z3::expr get_expr_in_ctx(const z3::expr &e, z3::context &ctx)
Translates the expr to another context.
Definition: z3_utils.cpp:542
Result< z3::expr > value_from_binary_string(z3::context &ctx, const std::string &bit_string)
Definition: z3_utils.cpp:145
Result< BooleanFunction > to_bf(const z3::expr &e)
Definition: z3_utils.cpp:443
Definition: defines.h:45