lean4-htt/library/tools/super
Leonardo de Moura 68629b2e5f feat(library/init/category/transformers): disable instance has_monad_lift_t ==> has_coe
It produces non-termination because it triggers sub-problems of the
form (has_monad_lift_t t ?M), and this kind of sub-problem is bad
for the transitive closure rule:

instance has_monad_lift_t_trans (m n o) [has_monad_lift n o] [has_monad_lift_t m n] : has_monad_lift_t m o

The trick above only behaves well for synthesis subproblems that do not
contain sub-variables.

Note that the sub-problem (has_monad_lift_t t ?M) is created by a
similar rule used at has_coe_t.

instance {a : Type u₁} {b : Type u₂} {c : Type u₃} [has_coe a b] [has_coe_t b c] : has_coe_t a c
AND
instance {m n} [has_monad_lift_t m n] {α} : has_coe (m α) (n α) :=

We workaround the issue by disabling

  instance {m n} [has_monad_lift_t m n] {α} : has_coe (m α) (n α)

and adding instances of it. Example:

  meta instance (α : Type) : has_coe (tactic α) (solver α) := ...
  meta instance (α : Type) : has_coe (tactic α) (prover α) := ...
  meta instance (α : Type) : has_coe (tactic α) (smt_tactic α) := ...
2017-01-01 09:15:25 -08:00
..
cdcl.lean feat(frontends/lean/elaborator): add extra coercion resolution rule for monads 2016-12-31 13:50:15 -08:00
cdcl_solver.lean feat(library/init/category/transformers): disable instance has_monad_lift_t ==> has_coe 2017-01-01 09:15:25 -08:00
clause.lean chore(library/tools/super): replace ↣ with ^. 2016-12-16 19:14:05 -08:00
clause_ops.lean feat(library/init/category/transformers): disable instance has_monad_lift_t ==> has_coe 2017-01-01 09:15:25 -08:00
clausifier.lean feat(frontends/lean/elaborator): add extra coercion resolution rule for monads 2016-12-31 13:50:15 -08:00
datatypes.lean feat(frontends/lean/elaborator): add extra coercion resolution rule for monads 2016-12-31 13:50:15 -08:00
default.lean chore(tools/super): add copyright 2016-12-16 19:06:50 -08:00
defs.lean chore(library/tools/super): replace ↣ with ^. 2016-12-16 19:14:05 -08:00
equality.lean chore(library/tools/super): replace ↣ with ^. 2016-12-16 19:14:05 -08:00
factoring.lean feat(frontends/lean/elaborator): add extra coercion resolution rule for monads 2016-12-31 13:50:15 -08:00
inhabited.lean chore(library/tools/super): replace ↣ with ^. 2016-12-16 19:14:05 -08:00
lpo.lean chore(tools/super): add copyright 2016-12-16 19:06:50 -08:00
misc_preprocessing.lean feat(frontends/lean/elaborator): add extra coercion resolution rule for monads 2016-12-31 13:50:15 -08:00
prover.lean feat(frontends/lean/elaborator): add extra coercion resolution rule for monads 2016-12-31 13:50:15 -08:00
prover_state.lean feat(library/init/category/transformers): disable instance has_monad_lift_t ==> has_coe 2017-01-01 09:15:25 -08:00
resolution.lean feat(frontends/lean/elaborator): add extra coercion resolution rule for monads 2016-12-31 13:50:15 -08:00
selection.lean chore(library/tools/super): replace ↣ with ^. 2016-12-16 19:14:05 -08:00
simp.lean chore(library/tools/super): replace ↣ with ^. 2016-12-16 19:14:05 -08:00
splitting.lean feat(frontends/lean/elaborator): add extra coercion resolution rule for monads 2016-12-31 13:50:15 -08:00
subsumption.lean feat(frontends/lean/elaborator): add extra coercion resolution rule for monads 2016-12-31 13:50:15 -08:00
superposition.lean feat(frontends/lean/elaborator): add extra coercion resolution rule for monads 2016-12-31 13:50:15 -08:00
trim.lean chore(tools/super): add copyright 2016-12-16 19:06:50 -08:00
utils.lean chore(library/tools/super): replace ↣ with ^. 2016-12-16 19:14:05 -08:00