Zulip Chat Archive
Stream: lean4
Topic: Synthesization order
Peter Nelson (Nov 25 2023 at 00:53):
What is wrong with this?
import Mathlib.Tactic
class P1 (n : ℕ) : Prop where
  (p : 37 < n)
class P2 (m n : ℕ) : Prop where
  (p : 37 < n)
  (q : n < m)
instance foo (m n : ℕ) [h : P2 m n] : P1 n :=
  ⟨h.p⟩
/-
cannot find synthesization order for instance foo with type
  ∀ (m n : ℕ) [h : P2 m n], P1 n
all remaining arguments have metavariables:
  P2 ?m n
  -/
foo works fine as a theorem, but can't be an instance apparently. What is the reason typeclass search can't find something like that?
Kyle Miller (Nov 25 2023 at 01:57):
I think it would work if m were an out_param on P2. The problem is that you need to figure out a value of m from n somehow in the foo instance, and P2 does not determine m from n.
Last updated: May 02 2025 at 03:31 UTC