From 021a8074e37f7f17a49e646cff8cd5913142fa6a Mon Sep 17 00:00:00 2001 From: loutr <loutr@crans.org> Date: Mon, 10 Oct 2022 08:28:00 +0200 Subject: [PATCH] =?UTF-8?q?Resolve=20"specification"=20=E2=9C=A8=EF=B8=8F?= =?UTF-8?q?=20Closes=20#6=20=F0=9F=90=94=EF=B8=8F=F0=9F=91=8D=EF=B8=8F=20A?= =?UTF-8?q?pproved-by:=20aalbert=20<augustin.albert@bleu-azure.fr>=20Appro?= =?UTF-8?q?ved-by:=20belazy=20<aarthuur01@gmail.com>=20Approved-by:=20v-la?= =?UTF-8?q?feychine=20<vincent.lafeychine@proton.me>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🦀ï¸ðŸ°ðŸ¦€ï¸ðŸ°ðŸ¦€ï¸ðŸ° * docs: add specifications PDF * docs: finish first version of the specifications * docs: finish early description of specifications * docs: add document template for specifiations * feat(git): add LFS settings and TeX-specific .gitignore --- .gitattributes | 4 + docs/.gitignore | 42 +++++++++ docs/specs.pdf | Bin 0 -> 48305 bytes docs/specs.tex | 222 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 268 insertions(+) create mode 100644 .gitattributes create mode 100644 docs/.gitignore create mode 100644 docs/specs.pdf create mode 100644 docs/specs.tex diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..65803513 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000..55fd3083 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,42 @@ +# Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Build tool directories for auxiliary files +# latexrun +latex.out/ + +# beamer +*.nav +*.pre +*.snm +*.vrb diff --git a/docs/specs.pdf b/docs/specs.pdf new file mode 100644 index 0000000000000000000000000000000000000000..080a909b6ffcad4337fce84987ce7943f1b1961d GIT binary patch literal 48305 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⋘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 literal 0 HcmV?d00001 diff --git a/docs/specs.tex b/docs/specs.tex new file mode 100644 index 00000000..2e7f9f4b --- /dev/null +++ b/docs/specs.tex @@ -0,0 +1,222 @@ +\documentclass[twocolumn]{article} +\usepackage[british]{babel} +\usepackage{textcase}% provides \MakeTextUppercase (does not impact math mode) +\usepackage{amssymb, amsmath, amsthm, mathrsfs} +\usepackage{fancyhdr} +\usepackage{listings} +\usepackage{bussproofs} % proof tree +\usepackage{xcolor} % may not be loaded here, is already loaded by Beamer +\RequirePackage[a4paper, left=2cm, right=2cm, bottom=3cm, headsep=100pt]{geometry} +\RequirePackage[small]{titlesec} % Taille des sections réduite +\RequirePackage[pdfborderstyle={/S/U/W 0}]{hyperref} % Le paramètre retire les bordures autour des hyperliens + +\author{ + Arthur \textsc{Adjedj}\\ + Vincent \textsc{Lafeychine} \and + Augustin \textsc{Albert} \\ + Lucas \textsc{Tabary-Maujean} +} + +\title{\textbf{Proost: specifications}\\ + \large A small proof assistant written in Rust + \\[1\baselineskip]\normalsize ENS Paris-Saclay +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\definecolor{gray}{rgb}{0.5,0.5,0.5} +\definecolor{paleblue}{rgb}{0.7,0.7,1} +\definecolor{darkgray}{rgb}{0.1,0.1,0.1} +\definecolor{dark}{rgb}{0,0,0} +\definecolor{forestgreen}{rgb}{0,0.3,0} +\definecolor{darkred}{rgb}{0.5,0,0} + +\lstdefinestyle{default}{ + frame=tb, + basicstyle=\ttfamily, + numbers=left, + numbersep=5pt, + leftmargin=1.5em, + numberstyle=\footnotesize\ttfamily\color{paleblue}, + morestring=[d]{"}, + morestring=[d]{'}, + stringstyle={\color{red!50!brown}}, + keywordstyle={\bfseries\itshape\color{dark}}, + commentstyle=\color{gray}, + texcl, % Back to TeX styling within *inline* comments + escapechar=`, % escape character for block comments + %escapebegin=\lst@commentstyle, + breaklines=true, + breakatwhitespace=true +} +\lstdefinestyle{proost}{ + style=default, + numberstyle=\scriptsize\ttfamily\color{paleblue}, + comment=[l]{#}, + alsoletter={.,:,=}, + keywords={fun, if}, + keywordstyle=\color{forestgreen}, + keywords={P, T, U}, + keywordstyle=\color{darkred}, + keywords=[3]{define, check, type, :=, .}, + keywordstyle=[3]\color{darkred}, +} +\lstnewenvironment{proost}[1][]{\lstset{style=proost, #1}}{} + +\lstset{style=proost} +\lstMakeShortInline[columns=flexible]¤ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% headings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagestyle{fancy} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0pt} + +\fancyhead{} +\fancyfoot[L]{\small{\reflectbox{\copyright} \the\year{}}} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% bussproofs settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% documentation at https://mirror.ibcp.fr/pub/CTAN/macros/latex/contrib/bussproofs/BussGuide2.pdf +\EnableBpAbbreviations +% Overriding default label style +\def\RL#1{\RightLabel{\footnotesize\bfseries{#1}}} +\def\LL#1{\LeftLabel{\footnotesize\bfseries{#1}}} + +% boxed proofs, used to align multiple proofs on a single line +\newenvironment{bprooftree} + {\leavevmode\hbox\bgroup} + {\DisplayProof\egroup} + +\newcommand{\textr}[1]{{\footnotesize\textbf{\MakeTextUppercase{#1}}}} +% Fixes alignment issues but not without some consistency issues +\def\RL#1{\RightLabel{\makebox[0pt][l]{\textr{#1}}}} +\def\LL#1{\LeftLabel{\makebox[0pt][r]{\textr{#1}}}} +% consistent label (with width) +\def\cRL#1{\RightLabel{\textr{#1}}} +\def\cLL#1{\LeftLabel{\textr{#1}}} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Divers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\setlength{\columnsep}{20pt} % 10 pt par défaut +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{document} +\thispagestyle{fancy} +\maketitle + +\emph{ + This project is under development, and its specifications themselves are + subject to changes, should time be an issue or a general consensus be reached + to change the purposes of the tool. An example of that is the syntax of + the language, which is still largely unstable. +} + +\section{General purpose and functions} +This project aims at providing a small tool for typechecking expressions written in +the language of the Calculus of Construction (CoC). This tool shall be +terminal-based and provide both compiler- and toplevel-like capacities and +options. + +\subsection{Toplevel} +The \texttt{proost} command, when provided with no argument, is expected to behave like +a toplevel, akin to \texttt{ocaml} or \texttt{coqtop}. There, user is greeted with a +prompt and may enter commands of different kinds, for instance: +\begin{itemize} + \item ¤define a := t¤ defines an alias ¤a¤ that can be used in any following + command; + \item ¤check u : t¤ verifies ¤a¤ has type ¤t¤; + \item ¤type u¤ provides the type of ¤u¤. +\end{itemize} + +Where terms are the ones permitted by the kernel expressivity. +More shorthands may be provided later for user convenience. + +\subsection{Checker} +When provided with existing file paths, ¤proost¤ intends to typecheck them in +order, that is, reading them as successive inputs in the toplevel. Further +features for this \emph{might} include a more extended notion of ``modules'', where files +may refer to one another and provide scopes. + +The file extension is \texttt{.mdln}, which is short for \emph{madelaine}. +Madelaine also denotes the language manipulated by users in these files. + +\section{Project structure} +Each category of the project is assigned some or all members of the group, +meaning the designated members will \emph{mainly} make progress in the associated categories +and review the corresponding advancements. Any member may regardless contribute to any part +of the development of the tool. + +Some specific categories and items will be added a star (\(*\)) or two (\(**\)) to +indicate whether they are respectively late requirements (for the last release +due in December) +or extra requirements that will be considered only if there is enough time. + + +\subsection{Kernel \hfill\scriptsize all members} +The kernel manipulates \(\lambda\)-terms in the Calculus of Construction and is +expected to store and manage them with a relative level of efficiency. +The type theory used to build the terms will be successively extended with: +\begin{itemize} + \item abstractions, \(\Pi\)-types, predicative universes with \(\mathsf{Prop}\); + \item \(*\) \(\Sigma\)-types, equality types, natural numbers; + \item \(**\) extraction; + \item \(**\) lists, records, accessibility predicate. +\end{itemize} + +\subsubsection{Optimisation \hfill\scriptsize VL LTM} +Extra care must be put into designing an efficient memory management model for +the kernel, along with satisfactory typing and reduction algorithms. + + +\subsection{Unification \hfill\scriptsize ArA LTM} +Early versions of the tool may require the user to explicit every type at play. +Successive versions may gradually include unification tools (meta-variables) +of better quality to assist the user and alleviate some of their typing-annotation +burden. + + +\subsection{Parsing \hfill\scriptsize AuA VL} +The parsing approach is straightforward and relies on external libraries. The +parser is expected to keep adapting to changes made in the term definitions and +unification capability. + + +\subsection{Language design \hfill\scriptsize all members} +The \texttt{proost} tool is a simple proof assistant and does not provide any +tactics. As new features arrive from extensions of the kernel type theory, the +\emph{madelaine} language must provide convenient shorthands and notations. See +the following examples: + +Without any unification and only elementary type theory: +\begin{proost} +# Construction of natural numbers +define Nat := \/ A: U -> + \/ _: (\/ _: A -> A) -> \/ _: A -> A + +define z := /\ A: U -> + /\ f: (\/ _: A -> A) -> /\ x: A -> x +check z: Nat + +define succ := /\ n: Nat -> /\ A: U -> + /\ f: (\/ _: A -> A) -> /\ x: A -> + f (n f x) +check succ: \/ _: Nat -> Nat +\end{proost} + +Further changes, with equality types, natural numbers and adequate axioms may +look like: +\begin{proost} +# with unification +define comm := \/ x -> \/ y -> x + y = y + x + +# Existential types +define t := E n, n * n - n + 4 = 0 +\end{proost} + + +\subsection{\(*\) LSP \hfill\scriptsize VL} +The tool may provide an implementation of the Language Server Protocol in +order to provide linting and feedback during an editing session. + +% TODO elaborate, maybe +\end{document} -- GitLab