fact: Fixpoint cautious_insert T (j:T->T->ineq) (t:T)(u:order T) {struct u} : order T := match u with ostop r => match (j t r) with i_lt => gnode (ostop t) (ostop r) | i_eq => ostop r | i_gt => gnode (ostop r) (ostop t) end | onode a v w => match (j t (leftmost w)) with i_lt => bnode (cautious_insert j t v) w | _ => bnode v (cautious_insert j t w) end end.