feat(tactic): refine tactic API

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(library/tactic): add 'idtac' tactic and 'then' tactical

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
chore(util): use && when appropriate

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
chore(util/list_fn): fix typo

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(util/list): add map_filter template

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(util/interrupt): reset interrupt flag before throwing exception

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(library/tactic): reorganize tactic API, add assumption_tactic

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(library/state): rename Lean state object to io_state

The idea is to make it clear that io_state is distinguish it from proof_state, and from leanlua_state.

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
fix(kernel/expr_eq): the cached type should ignored when comparing expressions

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
feat(library/tactic): add pretty printer for goal and proof_state objects, add solve method for tactics, add trivial example

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
refactor(library/tactic): remove justification_builder

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>