derivation algorithm