## Stream: new members

### Topic: How does eq.refl work?

#### Golol (May 11 2020 at 10:20):

I'm trying to understand how the following proof really works:

theorem my_theorem : ∀ (f : α → α) (a : α), (λ x, f x) a = f a :=
assume (f : α → α) (a : α),
eq.refl ((λ x, f x) a)


eq.refl basically returns a proof of the proposition

(λ x, f x) a = (λ x, f x) a


I suppose then the theorem gets proven by applying beta-reduction? Are the terms ((λ x, f x) a) and (f a) already considered equivalent anyways, and lean just looks for an equivalent way to write them so you get (λ x, f x) a = f a?
Doing this also works when two beta reductions are necessary, and even "in reverse"

theorem my_other_theorem : ∀ (f : α → α) (a : α), (λ x, f x) ((λ x, f x) a) = f (f a) :=
assume (f : α → α) (a : α),
eq.refl ( (λ x, f x) ((λ x, f x) a) )

theorem my_third_theorem : ∀ (f : α → α) (a : α), (λ x, f x) ((λ x, f x) a) = f (f a) :=
assume (f : α → α) (a : α),
eq.refl ( f (f a) )


This makes it feel like eq.refl is more of a tactic, but Id like to know what's really going on.

#### Kevin Buzzard (May 11 2020 at 10:30):

https://leanprover.github.io/reference/expressions.html#computation

#### Kevin Buzzard (May 11 2020 at 10:31):

Lean has a concept of definitional equality, and its formal definition is in the link. beta reduction is part of the story.

#### Kevin Buzzard (May 11 2020 at 10:32):

example (α : Type) : ∀ (f : α → α) (a : α), (λ x, f x) a = f a := λ f a, rfl


#### Kevin Buzzard (May 11 2020 at 10:33):

I once mentioned the fact that refl was a powerful tactic to Floris van Doorn, and he said he'd never thought of it that way. I think that any tactic that can prove 2 + 2 = 4 has something going for it.

#### Chris Hughes (May 11 2020 at 10:34):

If terms are definitionally equal then they can be used interchangeably in any proof. eq.refl isn't the only thing that uses definitional equality, for example this proof works because the type of h is defeq to the goal.

example (x : ℕ) (h : (λ y : ℕ, 0 < y) x) : 0 < x := h


#### Kevin Buzzard (May 11 2020 at 10:57):

Definitional equality is a highly non-mathematical concept. For example, in Lean, if n is a natural number then n+0=n is definitionally true, and 0+n=n is not. In Coq it might be the other way around.

#### Kevin Buzzard (May 11 2020 at 10:58):

In the natural number game I encourage mathematicians to use add_zero and zero_add to prove these two theorems, and do not really ever indicate the fact that one, but not the other, can be proved with rfl. For me, this is a coincidence.

#### Kevin Buzzard (May 11 2020 at 11:00):

(by the way, if you write #check rfl and then right click on it and go to definition, you'll see that it's just an abbreviation for eq.refl)

#### Golol (May 11 2020 at 11:44):

Okay, thank you!

Last updated: May 14 2021 at 07:19 UTC