Zulip Chat Archive

Stream: lean4

Topic: binding scopes to notations?


Jason Gross (Mar 11 2021 at 20:08):

Is there a way to bind notations to scopes? Said another way, is there a way to use the same notation for two different things, and then disambiguate between them post-hoc?

Leonardo de Moura (Mar 11 2021 at 20:21):

In Lean, we have "scoped" and "local" attributes. You can use them for notation, instances, unification hints, simp lemmas, etc.
It is not documented yet, but here is an example.
https://github.com/leanprover/lean4/blob/f000aa0155f9ec168a017931631409e0125eecc6/tests/lean/run/scopedParsers2.lean

Leonardo de Moura (Mar 11 2021 at 20:26):

namespace Foo

  def f (x y : Bool) := x || y

  scoped infix:65 "++" => f

  #check true ++ false -- Ok

end Foo

#check true ++ false -- Error

section
  open Foo
  #check true ++ false -- Ok
end

-- The following doesn't work yet because we parse the command before we (elaborate it and) open the namespace
#check (open Foo in true ++ false)

Jason Gross (Mar 11 2021 at 20:36):

Neat, thanks! Are you planning to fix the open Foo in ... example? I think it would be quite useful

Leonardo de Moura (Mar 11 2021 at 20:38):

Jason Gross said:

Neat, thanks! Are you planning to fix the open Foo in ... example? I think it would be quite useful

Yes, we are planning to do it. This one and local notations are on our to-do list, just not a high priority right now :)


Last updated: Dec 20 2023 at 11:08 UTC