pub trait SufficientDecreaseCondition {
// Required method
fn c1(&self) -> Floating;
// Provided method
fn sufficient_decrease(
&self,
f_k: &Floating,
f_kp1: &Floating,
grad_k: &DVector<Floating>,
t: &Floating,
direction_k: &DVector<Floating>,
) -> bool { ... }
}