Zulip Chat Archive

Stream: new members

Topic: Does `↑` ever do anything


Markus Schmaus (Apr 21 2024 at 08:08):

I learnt about in Functional Programming in Lean: Coercion, it says:

Additionally, coercions can be manually inserted using an up arrow:

def perhapsPerhapsPerhapsNat : Option (Option (Option Nat)) :=
  (392 : Nat)

In some cases, this can be used to ensure that Lean finds the right instances. It can also make the programmer's intentions more clear.

I never knew what this means concretely and I don't think I have come across any case in which writing makes a difference, particularly here are two cases in which I thought it would make a difference, but it doesn't:

def oneS : Subtype fun x : Nat => x = 1 := 1, rfl
def twoS : Subtype fun x : Nat => x = 2 := 2, rfl
#check oneS + twoS -- fails, doesn't coerce to Nat

def one : Nat := 1
def two : Nat := 2
#check one + two -- wroks, no coercion is apparent

Does anybody know a case in which writing changes the meaning of the code? Or is this just meant for the delaborator, which can use this symbol to inform the user that a conversion occurs at this location?

Ruben Van de Velde (Apr 21 2024 at 08:29):

Perhaps (↑(a + b) : \R) vs ((a + b) : \R)


Last updated: May 02 2025 at 03:31 UTC