Zulip Chat Archive
Stream: general
Topic: simp canonize
Simon Hudon (Jan 22 2019 at 17:28):
I'm trying to get rid of some simp loops and I just realized that there is a part of it I don't understand and it seems to be getting into a loop. Here is the trace that Lean prints for it:
[simplify.canonize] category_theory.types ==> category_theory.types [simplify.canonize] category_theory.types ==> category_theory.types [simplify.canonize] _inst_2 ==> _inst_2 [simplify.canonize] category_theory.types ==> category_theory.types [simplify.canonize] category_theory.types ==> category_theory.types [simplify.canonize] _inst_2 ==> _inst_2
How do I prevent it from looping? I tried simp [-category_theory.types]
and it doesn't work.
Johan Commelin (Jan 22 2019 at 17:36):
But category_theory.types
isn't even marked as [simp]
. How come the simplifier is using it?
Simon Hudon (Jan 22 2019 at 18:36):
I am puzzled too. My tentative answer is that it comes from the canonize
phase of simp
which I did not know of. It seems like a phase where class instances are reduced but I can't say more. @Sebastian Ullrich, would you care to enlighten us?
Simon Hudon (Jan 22 2019 at 20:49):
Update: using set_option trace.debug.dsimplify true
and using dsimp
instead of simp
, I managed to find the offender which was unrelated to canonize
Mario Carneiro (Jan 22 2019 at 22:01):
MWE
Simon Hudon (Jan 22 2019 at 23:21):
import category_theory.category import category_theory.types universes u class comonad (w : Type u → Type u) extends functor w := (extract : Π {α}, w α → α) (extend : Π {α β}, (w α → β) → w α → w β) def Cokleisli (m) [comonad.{u} m] := Type u open category_theory comonad instance {m} [comonad.{u} m] : category.{u} (Cokleisli m) := sorry def copipe {w α β γ} [comonad w] (f : w α → β) (g : w β → γ) : (w α → γ) := g ∘ extend f infix ` =>= `:55 := copipe instance Cokleisli.category {m} [comonad m] : category (Cokleisli.{u} m) := { hom := λ α β, m α → β, id := λ α, extract, comp := λ X Y Z f g, f =>= g, id_comp' := sorry, comp_id' := sorry, assoc' := sorry } @[simp] lemma Cokleisli.comp_def {m : Type* → Type*} [comonad m] (α β γ : Cokleisli m) (xs : α ⟶ β) (ys : β ⟶ γ) : xs ≫ ys = xs =>= ys := sorry variables {α β : Type u} example {m} [comonad m] (f : α ⟶ m α) (g : m α ⟶ α) : f ≫ g = 𝟙 _ := by { simp, } -- deep recursion was detected at 'expression replacer' (potential -- solution: increase stack space in your system)
Simon Hudon (Jan 22 2019 at 23:22):
If you comment out Cokleisli.comp_def
, the error disappears
Last updated: Dec 20 2023 at 11:08 UTC