types of reasoning in artificial intelligence