Zulip Chat Archive

Stream: mathlib4

Topic: bugs and issues in the Data.List.Infix port


Henrik Böving (Jan 05 2023 at 18:47):

There are two bugs in meta utilities in the Data.List.Infix port.

The first is that the alias:

alias instDecidableOr  Or.decidable

in Mathlib.Init.Logic seems to produce Or.decidable as a noncomputable instance even though the instDecidableOr is very much computable. This makes the following instance:

instance decidableSuffix [DecidableEq α] :  l₁ l₂ : List α, Decidable (l₁ <:+ l₂)
  | [], l₂ => isTrue l₂, append_nil _
  | a :: l₁, [] => isFalse <| mt (Sublist.length_le  isSuffix.sublist) (by simp)
  | l₁, b :: l₂ =>
    @decidable_of_decidable_of_iff _ _ (@Or.decidable _ _ _ (l₁.decidableSuffix l₂)) suffix_cons_iff.symm
termination_by decidableSuffix l₁ l₂ => (l₁, l₂)

Or the following simpler example instance:

instance foo {a b : Prop }[Decidable a] [Decidable b] : Decidable (a  b) :=
  Or.decidable

Demanded to be marked as noncomputable, just using the instDecidableOr does work out though.

Furthermore the file contains the alias:

theorem eq_nil_of_infix_nil (h : l <:+: []) : l = [] :=
  eq_nil_of_sublist_nil h.sublist
#align list.eq_nil_of_infix_nil List.eq_nil_of_infix_nil

@[simp]
theorem infix_nil_iff : l <:+: []  l = [] :=
  fun h => eq_nil_of_sublist_nil h.sublist, fun h => h  infix_rfl
#align list.infix_nil_iff List.infix_nil_iff

alias infix_nil_iff  eq_nil_of_infix_nil _

Which produces:

(kernel) constant has already been declared 'List.eq_nil_of_infix_nil'

Which is understandable I guess? I'm not quite sure why the two things are aliased anyways? Shall I just delete this alias or am I understanding the purpose of it wrong? For some reason this does not seem to error in Lean 3.

And apart from that the question with shall I use List.get instead of List.nthLe like the linter tells me? Or do we want to keep those theorems on nthLe around for now?

Floris van Doorn (Jan 05 2023 at 19:08):

In Lean 3, alias silently did nothing if the declaration already existed: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/alias.20silently.20succeeds.20when.20name.20already.20exists

Henrik Böving (Jan 05 2023 at 19:09):

Based on marios answer it sounds like I should basically delete the alias then right?

Floris van Doorn (Jan 05 2023 at 19:12):

Yes, you can delete the alias.

Floris van Doorn (Apr 28 2023 at 16:49):

The issue that alias doesn't generate computable definitions hasn't been solved yet, so in !4#1455 I used def instead of alias for Or.decidable and similar instances.


Last updated: Dec 20 2023 at 11:08 UTC