fact: Fixpoint root_loop_alt (x : bigD) (n : nat) : bigD * bigD := match n with | O => (x, BigD_0) | S n => let (r, s) := root_loop_alt x n in match BigD_compare (BigD_plus s BigD_1) r with | Gt => (BigD_shiftl r 2, BigD_shiftl s 1) | _ => (BigD_shiftl (BigD_plus r (BigD_opp (BigD_plus s BigD_1))) 2, BigD_shiftl (BigD_plus s BigD_2) 1) end end.
imports: MathClasses.interfaces.abstract_algebra MathClasses.interfaces.integers MathClasses.interfaces.additional_operations MathClasses.implementations.dyadics MathClasses.implementations.fast_integers BigZ