/* Copyright (c) 2014 Microsoft Corporation. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Author: Leonardo de Moura */ #include "library/bin_app.h" namespace lean { bool is_bin_app(expr const & t, expr const & f, expr & lhs, expr & rhs) { if (is_app(t) && is_app(app_fn(t)) && app_fn(app_fn(t)) == f) { lhs = app_arg(app_fn(t)); rhs = app_arg(t); return true; } else { return false; } } expr mk_bin_rop(expr const & op, expr const & unit, unsigned num_args, expr const * args) { if (num_args == 0) { return unit; } else { expr r = args[num_args - 1]; unsigned i = num_args - 1; while (i > 0) { --i; r = mk_app(op, args[i], r); } return r; } } expr mk_bin_rop(expr const & op, expr const & unit, std::initializer_list const & l) { return mk_bin_rop(op, unit, l.size(), l.begin()); } expr mk_bin_lop(expr const & op, expr const & unit, unsigned num_args, expr const * args) { if (num_args == 0) { return unit; } else { expr r = args[0]; for (unsigned i = 1; i < num_args; i++) { r = mk_app(op, r, args[i]); } return r; } } expr mk_bin_lop(expr const & op, expr const & unit, std::initializer_list const & l) { return mk_bin_lop(op, unit, l.size(), l.begin()); } }