add cubic procedure
add double procedure
add compose procedure