Zulip Chat Archive

Stream: Lean for teaching

Topic: by { ... } vs. begin ... end

Jasmin Blanchette (Jun 19 2020 at 17:16):

I'm using Lean to teach interactive theorem proving. Lean is a vehicle, not an end, so I'm working had to keep the fragment minimal.

We cover by ..., begin ... end, and { ... } (for multiple subgoals). I'm thinking we could kill begin ... end by using by { ... } instead. Would there be any practical disadvantages to that, beyond the fact that this might be a bit unidiomatic Lean? I can't see any difference in VS Code, but maybe I'm missing something?

Mario Carneiro (Jun 19 2020 at 17:49):

Under the hood there is an extra unnecessary call to solve1, but other than that I can't think of any way to distinguish the two

Mario Carneiro (Jun 19 2020 at 17:50):

and it's less characters so :thumbs_up:

Johan Commelin (Jun 20 2020 at 05:28):

When I give talks, the audience usually knows latex already, so sometimes I tell them that they need to translate as follows

lemma foobar (X : _) : blabla :=

-- \begin{lemma} \label{foobar}
-- Let $X$ be a ...
-- Then blabla


-- \begin{proof}
-- blabla
-- \end{proof}

I think the begin ... end is actually somewhat comforting for people with a LaTeX background. But of course this is a vague feeling on my side, and a very minor issue anyways.

Alex J. Best (Jun 20 2020 at 05:32):

Yeah I'd rather go the other way personally and kill {...} in favour of begin ... end but I guess it depends on the audience!

Jasmin Blanchette (Jun 20 2020 at 08:17):

Well I need to teach { ... } anyway for focusing on one of multiple subgoals, so there would be a slight economy in killing begin ... end as opposed to avoiding by { ... } (which has been my policy so far).

Mario Carneiro (Jun 20 2020 at 08:21):

You can use begin end in place of { } for focusing on subgoals btw

Mario Carneiro (Jun 20 2020 at 08:23):

Obviously we need to start writing proofs like this:

  begin cases x with y,
        cases y,
        refl end
  begin cases x with y,
        cases y,
        begin cases x with y,
              cases y,
              refl end end

Kevin Buzzard (Jun 20 2020 at 08:32):

Trust me, you don't need { } to solve a subgoal :-) In NNG I just tell them "tactics work on the top goal" :-) . In experiments with mathematicians, I found that even getting them to remember to put commas at the end of tactics was an achievement. Every time sometime failed at this I'd add another "don't forget the comma" comment in NNG and we ended up with me saying it about ten times. Perhaps your users are more sophisticated though :-)

Kevin Buzzard (Jun 20 2020 at 08:33):

The style Mario suggested is also suggested in TPIL and when I mentioned it here before, the community's reaction was rather disdainful

Mario Carneiro (Jun 20 2020 at 08:34):

I have a lot of disdain for indentation styles where the indent depends on the length of words

Mario Carneiro (Jun 20 2020 at 08:35):


do tac1,

drives me nuts because it screws up all the tab stops

Jasmin Blanchette (Jun 20 2020 at 08:56):

We use structured induction a lot and case works well in tandem with { ... }. Computer scientists have no problems with braces I think.

Jasmin Blanchette (Jun 20 2020 at 08:58):

As for the "community's reaction", well, I'm not trying to teach idiomatic Lean anyway. I'm sure the community's reaction would be negative if I told them I don't teach rfl, I use fix as an alias for assume (for data), etc. But they're not my audience. If by { ... } works as well as begin ... end, I think I'll embrace it.

Kevin Buzzard (Jun 20 2020 at 09:14):

An alternative fix for Mario's objection is to only use 5 letter tactics

Last updated: Dec 20 2023 at 11:08 UTC