Zulip Chat Archive
Stream: new members
Topic: decidable vector
Bjørn Kjos-Hanssen (May 20 2023 at 16:58):
How do I get Lean to recognize a quantifier like   ∀ g : vector (fin 2) 3 as decidable?
As a mwe, I think this code worked last year, but now I get failed to synthesize class instance for decidable.
def is_witness {n:ℕ} (b:ℕ) (x : vector (fin b) n) (q:ℕ) (h : vector (fin q) n.succ): Prop :=
  ∀ g : vector (fin q) n.succ,
    g.1.nth 0 = h.1.nth 0 →
    g.1.nth n = h.1.nth n →
    ∀ y : vector (fin b) n, (
      ∀ k : fin n, ∃ l : fin n,
        [h.nth l.1, h.nth l.1.succ] =
        [g.nth k.1, g.nth k.1.succ] ∧ x.nth l = y.nth k
    ) →
    g=h ∧ x=y
instance {n:ℕ} (b:ℕ) (x : vector (fin b) n) (q:ℕ) (h : vector (fin q) n.succ):
decidable (is_witness b x q h) :=
decidable_of_iff (
  ∀ g : vector (fin q) n.succ,
    g.1.nth 0 = h.1.nth 0 →
    g.1.nth n = h.1.nth n →
    ∀ y : vector (fin b) n, (
      ∀ k : fin n, ∃ l : fin n,
        [h.nth l.1, h.nth l.1.succ] =
        [g.nth k.1, g.nth k.1.succ] ∧ x.nth l = y.nth k
    ) →
    g=h ∧ x=y
) (by rw is_witness)
Mario Carneiro (May 20 2023 at 16:58):
there should be an instance of fintype (vector A n) when fintype A
Bjørn Kjos-Hanssen (May 20 2023 at 17:03):
Thanks @Mario Carneiro  this does fix the problem (but it has a sorry):
instance {b n : ℕ} : fintype (vector (fin b) n) := sorry
Mario Carneiro (May 20 2023 at 17:04):
you are probably just missing an import if by apply_instance doesn't prove it
Mario Carneiro (May 20 2023 at 17:05):
import data.fintype.vector maybe
Bjørn Kjos-Hanssen (May 20 2023 at 17:10):
Thanks, that did it! So I guess to get anything to be decidable one tries to import data.fintype.anything.
Last updated: May 02 2025 at 03:31 UTC