Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
% (find-LATEX "2021lean-nng.tex") % (defun c () (interactive) (find-LATEXsh "lualatex -record 2021lean-nng.tex" :end)) % (defun C () (interactive) (find-LATEXSH "lualatex 2021lean-nng.tex" "Success!!!")) % (defun D () (interactive) (find-pdf-page "~/LATEX/2021lean-nng.pdf")) % (defun d () (interactive) (find-pdftools-page "~/LATEX/2021lean-nng.pdf")) % (defun e () (interactive) (find-LATEX "2021lean-nng.tex")) % (defun l () (interactive) (find-LATEX "2021lean.lua")) % (defun u () (interactive) (find-latex-upload-links "2021lean-nng")) % (defun v () (interactive) (find-2a '(e) '(d))) % (defun cv () (interactive) (C) (ee-kill-this-buffer) (v) (g)) % (defun d0 () (interactive) (find-ebuffer "2021lean-nng.pdf")) % (code-eec-LATEX "2021lean-nng") % (find-pdf-page "~/LATEX/2021lean-nng.pdf") % (find-sh0 "cp -v ~/LATEX/2021lean-nng.pdf /tmp/") % (find-sh0 "cp -v ~/LATEX/2021lean-nng.pdf /tmp/pen/") % file:///home/edrx/LATEX/2021lean-nng.pdf % file:///tmp/2021lean-nng.pdf % file:///tmp/pen/2021lean-nng.pdf % http://anggtwu.net/LATEX/2021lean-nng.pdf % (find-LATEX "2019.mk") % (find-lualatex-links "2021lean-nng") % «.re» (to "re") % «.use_proofsty_lean» (to "use_proofsty_lean") % «.defftch» (to "defftch") % «.tree» (to "tree") \documentclass[oneside,12pt]{article} \usepackage[colorlinks,citecolor=DarkRed,urlcolor=DarkRed]{hyperref} % (find-es "tex" "hyperref") \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{pict2e} \usepackage[x11names,svgnames]{xcolor} % (find-es "tex" "xcolor") %\usepackage{colorweb} % (find-es "tex" "colorweb") %\usepackage{tikz} \usepackage{stmaryrd} % % (find-dn6 "preamble6.lua" "preamble0") \usepackage{proof} % For derivation trees ("%:" lines) %\input diagxy % For 2D diagrams ("%D" lines) %\xyoption{curve} % For the ".curve=" feature in 2D diagrams % \usepackage{edrx21} % (find-LATEX "edrx21.sty") \input edrxaccents.tex % (find-LATEX "edrxaccents.tex") \input edrx21chars.tex % (find-LATEX "edrx21chars.tex") \input edrxheadfoot.tex % (find-LATEX "edrxheadfoot.tex") \input edrxgac2.tex % (find-LATEX "edrxgac2.tex") %\input 2017planar-has-defs.tex % (find-LATEX "2017planar-has-defs.tex") % %\usepackage[backend=biber, % style=alphabetic]{biblatex} % (find-es "tex" "biber") %\addbibresource{catsem-slides.bib} % (find-LATEX "catsem-slides.bib") % \usepackage{kluwer-fitch} % (find-LATEX "fitch.sty") % % (find-es "tex" "geometry") \usepackage[%a6paper, landscape, top=1.5cm, bottom=.25cm, left=1cm, right=1cm, includefoot ]{geometry} \begin{document} \catcode`\^^J=10 \directlua{dofile "dednat6load.lua"} % (find-LATEX "dednat6load.lua") \def\incgr#1#2{\myvcenter{\includegraphics[#1]{#2}}} \def\scale#1#2{\scalebox{#1}{$#2$}} % %L dofile "edrxtikz.lua" -- (find-LATEX "edrxtikz.lua") % %L dofile "edrxpict.lua" -- (find-LATEX "edrxpict.lua") % \pu %L -- «re» (to ".re") %L -- (find-es "luatex" "re") %L re = require "re" %L %L -- «use_proofsty_lean» (to ".use_proofsty_lean") %L -- (find-LATEX "2021lean.lua" "use_proofsty_lean") %L dofile "2021lean.lua" %L use_proofsty_lean() %L %L dofile "2021fitch.lua" \pu % «defftch» (to ".defftch") % (find-LATEX "edrx21.sty" "defub") \directlua{dofile "2021fitch.lua"} % (find-LATEX "2021fitch.lua") \def\defftch#1#2{\expandafter\def\csname ftch-#1\endcsname{#2}} \def\ifftchundefined#1{\expandafter\ifx\csname ftch-#1\endcsname\relax} \def\ftch#1{\ifftchundefined{#1} \errmessage{UNDEFINED FTCH: #1} \else \csname ftch-#1\endcsname \fi } % «tree» (to ".tree") % (find-es "dednat" "lean-nng") % Tutorial world: %: %: %: x,y,z:mynat %: ------------------ %: refl:[x*y+z=x*y+z] %: %: ^tutorial-1/4 %: %: ---------------------- -------------- %: refl:[2*(x+7)=2*(x+7)] h:[y=x+7] refl:[2*y=2*y] h:[y=x+7] %: ---------------------------------- -------------------------- %: (rw.h):[2*y=2*(x+7)] (rw←h):[2*y=2*(x+7)] %: %: ^tutorial-2/4a ^tutorial-2/4b %: %: -------------------- -------------------------------- %: refl:[succ.b=succ.b] h:[succ.a=b] refl:[succ(succ.a)=succ(succ.a)] h:[succ.a=b] %: ------------------------------------ ------------------------------------------------ %: (rw.h):[succ(succ.a)=succ.b] (rw←h):[succ(succ.a)=succ.b] %: %: ^tutorial-3/4a ^tutorial-3/4b %: %: -------------------- %: refl:[succ.a=succ.a] add_zero:[a+0=a] add_succ:[a+succ.d=succ(a+d)] %: -------------------------------------- ----------------------------- %: (rw.add_zero):[succ(a+0)=succ.a] add_succ:[a+succ.0=succ(a+0)] %: ----------------------------------------------------------------------- %: (rw.add_succ):[a+succ.0=succ.a] %: %: ^tutorial-4/4 %: %: %: \pu Level 1/4: $$\ded{tutorial-1/4}$$ Level 2/4: $$\ded{tutorial-2/4a}$$ $$\ded{tutorial-2/4b}$$ Level 3/4: $$\ded{tutorial-3/4a}$$ $$\ded{tutorial-3/4b}$$ Level 4/4: $$\ded{tutorial-4/4}$$ \bsk \bsk \bsk \bsk Note: this is a {\sl very improvised} translation of the first exercises of the Natural Numbers Game to Natural Deduction. I started learning Lean in the beginning of oct/2021 and started to typeset these tress in 2021oct13, so this is very new and full of guesses --- mainly of the kind ``with the right abbreviations I can write this term in this way''. \msk Some links: {\footnotesize \url{https://www.ma.imperial.ac.uk/~buzzard/xena/natural_number_game/} \url{http://math.andrej.com/2021/06/24/the-dawn-of-formalized-mathematics/} \url{http://math.andrej.com/asset/data/the-dawn-of-formalized-mathematics.pdf} \url{http://www.youtube.com/watch?v=fty9QL4aSRc} Vladislav Zavialov - Haskell to Core \url{https://leanprover-community.github.io/mathlib_docs/tactic/explode.html\#tactic.explode} % (favp 35) % http://angg.twu.net/LATEX/2020favorite-conventions.pdf#page=35 \url{http://angg.twu.net/LATEX/2020favorite-conventions.pdf#page=35} $⟦·⟧$ % http://angg.twu.net/LATEX/2021lean-nng.pdf \url{http://angg.twu.net/LATEX/2021lean-nng.pdf} this PDF \url{http://angg.twu.net/math-b.html} my home page \url{http://angg.twu.net/dednat6.html} } \newpage Addition world: %: --------------------- %: add_zero:[a+0=a] refl:[succ(d)=succ.d] (hd:[0+d=d])^1 add_succ:[a+succ.d=succ(a+d)] %: ---------- ---------------- ------------------------------------- ----------------------------- %: refl:[0=0] add_zero:[0+0=0] (rw.hd):[succ(0+d)=succ.d] add_succ:[0+succ.d=succ(0+d)] %: ----------------------------- --------------------------------------------------------------------- %: (rw.add_zero):[0+0=0] (rw.add_succ):[0+succ.d=succ.d] %: -------------------------------------------------------------------1 %: (induction.n.with.d.hd):[0+n=n] %: %: ^addition-1/6a %: %: --------------------- %: refl:[succ(d)=succ.d] (hd:[0+d=d])^1 %: ---------- ------------------------------------- %: refl:[0=0] (rw.hd):[succ(0+d)=succ.d] %: --------------------- ------------------------------- %: (rw.add_zero):[0+0=0] (rw.add_succ):[0+succ.d=succ.d] %: -------------------------------------------------------1 %: (induction.n.with.d.hd):[0+n=n] %: %: ^addition-1/6b %: %: --------------------- %: refl:[succ(d)=succ.d] (hd:[0+d=d])^1 %: ---------- ------------------------------------- %: refl:[0=0] (rw.hd):[succ(0+d)=succ.d] %: ----------------------- ----------------------------------- %: (rw.add_zero.0):[0+0=0] (rw.add_succ.0.d):[0+succ.d=succ.d] %: -----------------------------------------------------------1 %: (induction.n.with.d.hd):[0+n=n] %: %: ^addition-1/6c %: %: %: %: (hd:[(a+b)+d=a+(b+d)])^1 %: ------------------------------------- %: (rw.hd):[succ((a+b)+d)=succ(a+(b+d))] %: -------------- ----------------------------------------- %: refl:[a+b=a+b] (rw.add_succ):[succ((a+b)+d)=a+succ(b+d)] %: --------------------------- ------------------------------------------ %: (rw.add_zero):[a+b=a+(b+0)] (rw.add_succ):[succ((a+b)+d)=a+(b+succ.d)] %: ------------------------------- ------------------------------------------- %: (rw.add_zero):[(a+b)+0=a+(b+0)] (rw.add_succ):[(a+b)+(succ.d)=a+(b+succ.d)] %: -------------------------------------------------------------------------------1 %: (induction.c.with.d.hd):[(a+b)+c=a+(b+c)] %: %: ^addition-2/6 %: %: (hc:[(succ a)+c=succ(a+c)])^1 %: -------------------- ------------------------------------------ %: refl:[succ.a=succ.a] (rw.hc):[succ((succ.a)+c)=succ(succ(a+c))] %: ---------------------------------- ---------------------------------------------------- %: (rw.add_zero.a):[succ.a=succ(a+0)] (rw.add_succ.a.c):[succ((succ.a)+c)=succ(a+succ.c)] %: -------------------------------------------- ----------------------------------------------------- %: (rw.add_zero(succ.a)):[(succ.a)+0=succ(a+0)] (rw.add_succ.(succ.a).c):[(succ.a)+(succ.c)=succ(a+succ.c)] %: -------------------------------------------------------------------------------------1 %: (induction.b.with.c.hc):[(succ.a)+b=succ(a+b)] %: %: ^addition-3/6 %: %: %: %: (hc:[a+c=c+a)])^1 %: ---------- ----------------------------- %: refl:[a=a] (rw.hc):[succ(a+c)=succ(c+a)] %: ----------------------- ---------------------------------------- %: (rw.zero_add.a):[a=0+a] (rw.succ_add.c.a):[succ(a+c)=(succ.c)+a] %: ------------------------- ----------------------------------------- %: (rw.add_zero.a):[a+0=0+a] (rw.add_succ.a.c):[a+(succ.c)=(succ.c)+a] %: --------------------------------------------------------------------------1 %: (induction.b.with.c.hc):[a+b=b+a] %: %: ^addition-4/6 %: \pu Level 1/6: $$\scale{0.85}{\ded{addition-1/6a}}$$ $$\scale{0.85}{\ded{addition-1/6b}}$$ $$\scale{0.85}{\ded{addition-1/6c}}$$ Level 2/6: $$\scale{0.85}{\ded{addition-2/6}}$$ Level 3/6: $$\scale{0.85}{\ded{addition-3/6}}$$ Level 4/6: $$\scale{0.85}{\ded{addition-3/6}}$$ Level 5/6: (I didn't draw the tree) \msk Level 6/6: (I didn't draw the tree) \newpage Function world: % (find-LATEX "2021fitch.lua") % (find-LATEX "2021lean.lua") \def\tac#1#2{(#1)(#2)} \def\tac#1#2{#1 \; \ColorRed{⇒} \; #2} \def\tac#1#2{$#1 \; \ColorRed{⇒} \; #2$} %L FitchGrid.__index.texmiddle = function (fg, str) %L return lean_stranslate(str) %L end %L FitchGrid.__index.texright = function (fg, str) %L return lean_stranslate(str) %L end %L FitchGrid.__index.texright = function (fg, str) %L return "Hi" %L end Level 1/9: \msk %F / P,Q:Type %F | p:P %F | h:(P→Q) %F | ---- %F \ α:Q \tac{exact.h.p}{α:=h.p} %L %L defftch "function-1/9" $\pu \ftch{function-1/9} $ \bsk Level 2/9: \msk %F / / n:mynat %F | | ---- %F | \ β:mynat \tac{exact.2*n+3}{β:=2*n+3} %F \ α:(mynat→mynat) \tac{intro.n}{α:=λn:mynat..β} %L %L defftch "function-2/9" $\pu \ftch{function-2/9} $ Level 3/9: \msk %F / P,Q,R,S,T,U:Type %F | p:P %F | h:P→Q %F | i:Q→R %F | j:Q→T %F | k:S→T %F | l:T→U %F | ----- %F | q:Q \tac{have.q:=h(p)}{} %F | t:T \tac{have.t:=j(q)}{} %F \ u:U \tac{exact.l.t}{u:=l.t} %L defftch "function-3/9" $$\pu \ftch{function-3/9} $$ \newpage %\printbibliography \GenericWarning{Success:}{Success!!!} % Used by `M-x cv' \end{document} % __ __ _ % | \/ | __ _| | _____ % | |\/| |/ _` | |/ / _ \ % | | | | (_| | < __/ % |_| |_|\__,_|_|\_\___| % % <make> * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) # (find-LATEXfile "2019planar-has-1.mk") make -f 2019.mk STEM=2021lean-nng veryclean make -f 2019.mk STEM=2021lean-nng pdf % Local Variables: % coding: utf-8-unix % ee-tla: "lea" % End: