     }
 
     double lb;
-    compute_lb_from_expr(&lb, lexpr, fp->input_inf, fp->input_sup, fp->input_lexpr, fp->input_uexpr);
+
+    if((fp->input_lexpr != nullptr) && (fp->input_uexpr != nullptr))
+    {
+        replace_input_poly_cons_in_lexpr(lexpr_ptr, fp->input_inf, fp->input_sup, fp->input_lexpr, fp->input_uexpr);
+    }
+
+    compute_lb_from_expr(&lb, lexpr_ptr, fp->input_inf, fp->input_sup, fp->input_lexpr, fp->input_uexpr);
 
     return lb;
 }



__device__ __host__
void compute_lb_from_expr(double* lb, expr_t* expr, double* input_inf, double* input_sup, expr_t** input_lexpr, expr_t** input_uexpr)
{
    if((input_lexpr != nullptr) && (input_uexpr != nullptr))
    {
        expr_t** expr_ptr = &expr;
        replace_input_poly_cons_in_lexpr(expr_ptr, input_inf, input_sup, input_lexpr, input_uexpr);
    }

    double res_inf = expr->inf_cst;



    for(size_t i = 0; i < num_out_neurons; i++)
    {
        if((fp->input_lexpr != nullptr) && (fp->input_uexpr != nullptr))
        {
            replace_input_poly_cons_in_lexpr(&(lexpr[i]), fp->input_inf, fp->input_sup, fp->input_lexpr, fp->input_uexpr);
            replace_input_poly_cons_in_uexpr(&(uexpr[i]), fp->input_inf, fp->input_sup, fp->input_lexpr, fp->input_uexpr);
        }

        compute_lb_from_expr(&(out_neurons[i]->lb), &(lexpr[i]), fp->input_inf, fp->input_sup, fp->input_lexpr, fp->input_uexpr);
        compute_ub_from_expr(&(out_neurons[i]->ub), &(uexpr[i]), fp->input_inf, fp->input_sup, fp->input_lexpr, fp->input_uexpr);
    }

    if(fp->out != nullptr)
