Zulip Chat Archive

Stream: lean4

Topic: subscript uparrow


Jason Gross (Mar 05 2021 at 22:37):

What does the purple subscript uparrow mean? (Apparently it's \textdied in Lean input mode...)
image.png

Bryan Gin-ge Chen (Mar 05 2021 at 22:41):

It's a cross: :cross:️. Those indicate names which are inaccessible by the user. See e.g. https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Come.20on/near/226307180

Jason Gross (Mar 05 2021 at 22:46):

Thanks. The name isn't inaccessible to the user, though, it just doesn't exist in the context where Lean is performing unification, I think...

Sebastian Ullrich (Mar 05 2021 at 22:56):

The binding of the motive Gamma was inserted implicitly and is therefore inaccessible. Not sure about the unification error itself, it's too late for that here...

Brandon Brown (May 05 2021 at 01:13):

I'm having a similar issue with the cross, trying to prove the following (MWE):

inductive int where
| zero : int
| succ : int  int
| pred : int  int

protected def int.norm (a : int) : int :=
match a with
| int.zero => int.zero
| int.succ (int.pred a) => int.norm a
| int.pred (int.succ a) => int.norm a
| int.succ a => int.succ (int.norm a)
| int.pred a => int.pred (int.norm a)

#reduce int.zero |> int.succ |> int.pred |> int.succ |> int.pred |> int.norm
def intn := {x : int // x = (int.norm x)}

example (a : int): int.norm (int.succ a) = int.norm (int.norm (int.succ a)) := by
  induction a
  rfl

/- Tactic State:
case succ
a✝ : int
v_0✝ : int.norm (int.succ a✝) = int.norm (int.norm (int.succ a✝))
⊢ int.norm (int.succ (int.succ a✝)) = int.norm (int.norm (int.succ (int.succ a✝)))
-/

How I am supposed to prove this without having the variables accessible?

Brandon Brown (May 05 2021 at 01:27):

(deleted)

Sebastian Ullrich (May 05 2021 at 06:33):

See https://raw.githubusercontent.com/IPDSnelting/tba-2021/master/slides/lecture4.pdf#page=26, last slide and preceding slides. You can name them using either induction-with or case (recent nightly).

Sebastian Ullrich (May 05 2021 at 06:34):

The alternative we did not mention in the course is

set_option tactic.hygienic false

as well as the unhygienic tactic combinator


Last updated: Dec 20 2023 at 11:08 UTC