Zulip Chat Archive
Stream: general
Topic: polynomial elaboration
Kenny Lau (Jan 29 2019 at 00:02):
So why is polynomial elaboration slow and what can we do about it?
Kenny Lau (Jan 29 2019 at 00:09):
import data.equiv.algebra linear_algebra.multivariate_polynomial universes u v w variables {σ : Type u} {τ : Type v} {α : Type w} [comm_ring α] variables [decidable_eq σ] [decidable_eq τ] [decidable_eq α] namespace mv_polynomial def equiv_of_equiv (e : σ ≃ τ) : mv_polynomial σ α ≃ mv_polynomial τ α := { to_fun := eval₂ C (X ∘ e), inv_fun := eval₂ C (X ∘ e.symm), left_inv := λ f, induction_on f (λ r, by rw [eval₂_C, eval₂_C]) (λ p q hp hq, by rw [eval₂_add, eval₂_add, hp, hq]) (λ p s hp, by simp only [eval₂_mul, eval₂_X, hp, (∘), equiv.inverse_apply_apply]), right_inv := λ f, induction_on f (λ r, by rw [eval₂_C, eval₂_C]) (λ p q hp hq, by rw [eval₂_add, eval₂_add, hp, hq]) (λ p s hp, by simp only [eval₂_mul, eval₂_X, hp, (∘), equiv.apply_inverse_apply]) } set_option profiler true def ring_equiv_of_equiv (e : σ ≃ τ) : mv_polynomial σ α ≃r mv_polynomial τ α := { hom := eval₂.is_ring_hom _ _, .. equiv_of_equiv e } set_option profiler false end mv_polynomial
Kenny Lau (Jan 29 2019 at 00:09):
elaboration of ring_equiv_of_equiv took 6.48s
Kenny Lau (Jan 29 2019 at 00:13):
ha, this is really quick
def ring_equiv_of_equiv (e : σ ≃ τ) : mv_polynomial σ α ≃r mv_polynomial τ α := ring_equiv.mk (equiv_of_equiv e) $ by apply eval₂.is_ring_hom
Kenny Lau (Jan 29 2019 at 00:15):
this is also quick:
def ring_equiv_of_equiv (e : σ ≃ τ) : mv_polynomial σ α ≃r mv_polynomial τ α := { hom := by apply eval₂.is_ring_hom, .. equiv_of_equiv e }
Kenny Lau (Jan 29 2019 at 01:05):
I would appreciate it if someone could point me as to how I could debug it. the set_option trace.
options are not very helpful.
Kenny Lau (Jan 29 2019 at 08:28):
It would also be quite helpful if the "class instance max depth reached" message could tell us which typeclass they were looking for
Last updated: Dec 20 2023 at 11:08 UTC