Zulip Chat Archive

Stream: mathlib4

Topic: Factorial notation parse error


Floris van Doorn (May 08 2023 at 14:18):

In some cases the Nat.factorial notation parses incorrectly.

import Mathlib.Data.Nat.Factorial.Basic

open Nat

example (n : ) (hn : 0 < n) : n  n ! := by -- fine
  have : n  n ! := -- fine
    dvd_factorial hn le_rfl
  have : n  n ! -- parsed incorrectly
  · exact dvd_factorial hn le_rfl
  exact dvd_factorial hn le_rfl

Floris van Doorn (May 08 2023 at 14:21):

My guess is that the · is parsed as the anonymous variable, because we're still resolving the overloaded notation ! (either not or Nat.factorial)

Mario Carneiro (May 08 2023 at 18:31):

Removing the whitespace works, since it prevents it from being treated as an application of n to ! ·. Of course the lexer issues with n! still apply, but you can write (n)! instead

Kyle Miller (May 08 2023 at 19:47):

There's also using an explicit semicolon (have : n ∣ n !;) or using parentheses around other parts of the expression (like have : n ∣ (n !)).

Mario Carneiro (May 08 2023 at 19:50):

or even (have : n ∣ n !)

Kyle Miller (May 08 2023 at 19:50):

(Javascript also has optional semicolons, and the risk of unexpected parses like this pushed me towards always using semicolons there.)

Kyle Miller (May 08 2023 at 19:51):

It's too bad that · for focusing is also a valid notation in expressions; if focusing used a unique symbol this could be less of an issue.

Ruben Van de Velde (May 08 2023 at 19:51):

Does it work if you use . (period) instead of ·?

Mario Carneiro (May 08 2023 at 19:52):

nope, . works as an ascii replacement for · in both cases

Reid Barton (May 09 2023 at 05:50):

This also wouldn't be an issue if indentation-based syntax worked like in Haskell (as discussed elsewhere)

Johan Commelin (Jun 19 2023 at 17:00):

Sorry for necrobumping this... I think @Kyle Miller had a parser "hack" that made factorial notation work nicely. Maybe we actually want to have that in mathlib

Kyle Miller (Jun 19 2023 at 17:02):

https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/New.20.60propose.60.20tactic/near/351149815
(it's in a propose thread since Johan came across n! not being n ! when creating a propose demo)


Last updated: Dec 20 2023 at 11:08 UTC