CoqWG 2022 02 - coq/coq GitHub Wiki
Coq Hackathon and Working Group, Winter 2022
- When: 15-17th February 2022
- Where: Online
- What: A meeting for people interested in hacking the Coq system, at all expertise levels
Participation and registration
To register, please add your name and any other relevant information [such as days you are attending] in the "Participants" section below.
The Hackathon will take place online, using Coq's Zulip Join our Zulip!
We will use BigBlueButton for the video conferencing system; we have two rooms, a core room, where breakout sessions will happen, and a dedicated room for the Bug Squashing party, find the links below:
- General BBB Room: https://bbb.inria.fr/gal-afg-2va-fun
To change the language of the interface click on setting on the right top corner!
We will record some of the sessions and upload them to the Coq Youtube channel https://www.youtube.com/channel/UCbJo6gYYr0OF18x01M4THdQ
For now, these are the raw recordings:
- https://bbb-lb.inria.fr/playback/presentation/2.3/0bbb8ff86f0526b679bc8e48279355b6225e6ea5-1644916446902
- https://bbb-lb.inria.fr/playback/presentation/2.3/0bbb8ff86f0526b679bc8e48279355b6225e6ea5-1644940946029
- https://bbb-lb.inria.fr/playback/presentation/2.3/0bbb8ff86f0526b679bc8e48279355b6225e6ea5-1645001380410
Please, fill the activity log below with what you did each day, thanks!
Schedule
We will be flexible organizing the breakout sessions along the day, depending on who is interested for each topic.
Each day will have a "core" slot where talks and panels will happen, the preliminary scheduling proposal is:
- 06:00-09:00 (PST time)
- 09:00-12:00 (EST time)
- 14:00-17:00 (GMT/UK time)
- 15:00-18:00 (CET/Paris time)
- 23:00-02:00 (JST/Japan time)
Additionally, open and self-organized hacking sessions will happen before and after the "core" slot. People can indicate on their registration form when they will be available.
Note: All times are CET/Paris time (UTC+1) unless mentioned otherwise.
Tuesday 15th
-
Morning (starting around 10:00 CET/Paris time):
- formation / scheduling of working groups
- OCaml / Coq bootcamp
-
15:30-16:30: Introduction to the Bug Squashing Party + Development setup and tools (Ali and Emilio)
-
16:30-17:00: Hacking time / break
-
17:00-18:00: Coq Internals Seminar (Emilio)
-
Evening (Paris time):
- open hacking session
Wednesday 16th
-
Morning (starting around 10:00 CET/Paris time):
- Bug Squashing Party (Ali)
- Hacking Sessions
-
15:00-16:00: Debugging and bugfix creation demo (Gaëtan Gilbert)
-
16:00-16:45: Dune session (Emilio)
-
16:45-17:00: Break
-
17:00-18:00: Diversity session (Emilio)
-
Evening (Paris time):
- Bug Squashing Party (Ali)
- Hacking Sessions
Thursday 17th
-
10:00 - 11:00: Contributing to /developing a Coq package using nix
-
Morning (starting around 10:00 CET/Paris time):
- Bug Squashing Party
- Hacking Sessions
-
15:00-18:00: Standard library event (Arthur Charguéraud's talk "Obstacles to the Construction of a Standard Library for Coq", followed with discussions)
-
Evening (Paris time):
- Bug Squashing Party
- Hacking Sessions
Activity Log
Here we will register what was done every day.
Activities
Please propose or request activities here; we will do a preliminary program on Jan 26th , using the Coq Call (so you are invited to join the call and help with the program)
Proposed
-
Developing Coq Session (Ali and Emilio)
- Developments setup and tools => Editor support and build
- Internals Seminar / how coqc works? => How Coqc works => How to build better documentation, maybe do a hacking session to write some
-
Diversity Session
-
Bug Squashing Party (Ali Caglayan)
- Debugging and bugfix creation demo (Gaëtan Gilbert)
-
Hackathon sessions (Everyone)
- Dune hacking session
- JsCoq hacking session (EJGA)
- SerAPI hacking session (EJGA)
- Interfaces for .vo files session (Gregory, Paolo, EJGA) Follow up of the discussion at CoqPL https://popl22.sigplan.org/details/CoqPL-2022-papers/6/A-Case-for-Lightweight-Interfaces-in-Coq see also the CEP at https://github.com/coq/ceps/pull/62
- Gathering / DB of Coq objects (Yves, EJGA) There are several pieces of code that scan the list of objects defined in .v files, for example coq-dpdgraph, coq-serapi, Alectryon, coqdoc, bug-minimizer/finder etc... We hope to discuss about a common implementation. (Moved to https://github.com/coq/coq/wiki/jsCoq--and-CoqDB-Working-Day )
- Organization of Credentials for the Coq Online platforms (Theo, Emilio) Idea here is to discuss how we administer the several online platforms
- The arrow meets the colon: introduction and motives for ssreflect syntax (Emilio)
- bigop tutorial and cheatsheet (Emilio) https://math-comp.github.io/htmldoc/mathcomp.ssreflect.bigop.html
- Add reverse coercions and local canonicals (Cyril)
Body
as synonym forProof
- Tools for extracting data/deps from Coq object files based on 10333, ...
- MiniF2F to Coq https://github.com/openai/miniF2F/issues/66
-
Standard library session, panel to gather ideas / requirements towards a more unified stdlib, in particular to identify Coq issues
Requested
- Nix Tutorial
- Plugin porting help (If you need help porting plugins, don't hesitate to ask!)
- looking for collaborators for generating induction schemes for inductive types with nested lists, etc. (Qinshi Wang) (HH: the parametricity plugin could probably help)
- Categorical logic and type theory (Brayan Escobar)
- Organization of the Summer 2022 users and developer meeting (someone from Sophia should pick this up)
Participants
- Ali Caglayan (organizer)
- Emilio J. Gallego Arias (Inria) (organizer)
- Ana de Almeida Borges
- Koundinya Vajjha
- Rathnakar Madhukar Yerraguntla (Mycroft92 on Zulip)
- Cyril Cohen
- Tomás Díaz
- Pierre Roux (won't be able to attend on Tuesday morning)
- Kenji Maillard
- Erik Martin-Dorel (won't be available in part of Tue.morning−Wed.afternoon−Thu.afternoon)
- Karl Palmskog
- Can help out with: using Dune for Coq plugins, coqdoc dev, coq_makefile hacking...
- Evariste G from Zulip (IRL H. T.)
- Simon Parry (enthusiastic noob, can't make Tuesday morning)
- Rodrigo Raya (EPFL)
- Enrico Tassi (Inria)
- Alex Gryzlov (IMDEA)
- Qinshi Wang (Princeton University)
- Pierre Courtieu (willing to update his knowledge of the internals of coq)
- Gaëtan Gilbert (Inria)
- Julin S (interested to know about how coq works)
- Mukesh Tiwari (University of Cambridge, interested in knowing the internals of Coq)
- Yu Zhang (Yale)
- Stefan Malewski (University of Chile)
- Pierre Jouvelot (Mines Paris, PSL University)
- Justin Fargnoli (University of Rochester)
- Maxime Dénès (Inria)
- Yannick Zakowski (Inria, particularly interested in the Dune session and getting Vellvm to build using dune. May be missing Tuesday morning)
- Calvin Beck (UPenn, interested in Dune session)
- Brayan Escobar (Noob in coq, bachelor in math, interested in logic e.g. Categorical logic and type theory- Bart Jacobs)
- Talia Ringer (Illinois, want to push on miniF2F)
- Arpan Agrawal (CMI, currently working on a masters thesis on the type theories behind different proof assistants, excited to learn more Coq theory!)
- Vincent Iampietro (Université de Montpellier, will be attending the Dune session)
- Jean-Christophe Léchenet (postdoc at Inria)
- Yves Daaboul (Université Saint-Joseph de Beyrouth)
- Max Fan (undergrad at Illinois, new-ish to Coq -- interested in Coq DB)
- Jason Gross (MIT, MIRI)
- Gregory Malecha (BedRock Systems)
- 2pm - 10pm (intermittent)
- 1pm is possible with notice
- Stéphane Desarzens (graduate student at University of Bern)
- Paolo Giarrusso (Bedrock Systems)
- Rodolphe Lepigre (Bedrock Systems)
- Janno (Bedrock Systems)
- TJ Barclay (Graduate student, University of Kansas)
- Théo Zimmermann (Inria)
- Kazuhiko Sakaguchi (University of Tsukuba, will be busy on my own stuff but wish to watch some sessions)
- Lasse Blaauwbroek (IHES, will only be present intermittently)
- Michael Sammler (MPI-SWS)
- Natasha Klaus (https://formal.land, Coq proof engineer, interested in all news about COQ)
- Assia Mahboubi (Inria, Thursday afternoon only)
Activity log
Description of activities / sessions
Bug Squashing Party
Program
Gaëtan will give a demonstration on Wednesday at 15:00CET.
- Debugging and bugfix creation demo (Gaëtan Gilbert)
- introduction to using OCamldebug on coq
- demonstration with screenshare of using ocamldebug to solve bugs (how many we do depends on how long it takes):
- We will work on two phases:
- Bug classification and triage
- Hacking to fix the bugs (particular developers can help people with particular components)
- How is Coq tested? Test-suite, using the CI.
- Using the bug minimizer: coqbot and coq-tools
- Creating / Reviewing Pull requests
See also Debian BSP
Participants
Diversity session
- 10/15 minutes presentation (Emilio)
- More presentations? (add your own)
- Open discussion topics: (some ideas below, doesn't have to be like that)
- Hanneli's idea on general Coq mentoring (see https://twitter.com/hannelita/status/1489301148536348673 )
- How we get people more interested in diversity session and presenting their view?
- How to attract more people to Coq.
- Closing and list of concrete actions !
jsCoq session
(There was not enough time for it; moving to a separate event https://github.com/coq/coq/wiki/jsCoq--and-CoqDB-Working-Day )
- integrate the waCoq backend in the main branch
- integrate coq-layout-engine
- finish dune build rules
- From Evariste G:
- "Hack" on the possibility of spawning multiple workers (adjusting the views to a completely different use of the UI)
- redesign of some UI elements
- better docs
- add some features from interesting plugins to jscoq (i.e. hover over and see docs)
- brainstorm other ideas if there is time.
Participants
- Emilio J. Gallego Arias
- Evariste G
Dune session
Dune is a state-of-the-art incremental build system, supporting OCaml and Coq. Dune itself is a very interesting piece of software, and can be used to build Coq projects in a compositional way. In this hacking session, I'd be happy to introduce the Dune rules for Coq projects, a list of TODOs and wishlist, and guide people willing to contribute to Coq's dune support.
A preliminary program is (feel free to add your topic):
- introduction to Coq and Dune, overview of features, feedback from users
- elaboration of TODO list based on feedback from users; some ideas:
-
coqdep on whole theories (Ali)
-
moving from make to dune for a project (Ali)
-
CoqIDE and editor support for dune files (what to do about _CoqProject?)
-
dune init
support for coq projects and plugins. -
extraction improvements
-
depending on external files
-
dune coqtop foo.v
/dune coqc foo.v
-
dune rpc for Coq / CoqIDE
-
caching (but it should work already) Recall a rule is a pure function
{ deps } ---[action]---> { targets }
cache just memorizes these computations, thus when it the cache has a hit for a rule that has been stored already, it won't run again.
-
- tutorial on
coq_rules.ml
(the core of Dune + Coq support) - question and answers important document the discussion
- hacking
Possible follow-ups:
- (BedRock) status on new targets, like vos/vok (and maybe coqchk/coqdoc)
- (BedRock) customizing the timing scripts (say, to enable using
perf
with custom options) - (BedRock, Rodolphe) jump-to-definition and IDE support
Recommended reading:
"Build Systems à la carte" https://www.cambridge.org/core/journals/journal-of-functional-programming/article/build-systems-a-la-carte-theory-and-practice/097CE52C750E69BD16B78C318754C7A4
Participants
- Emilio J. Gallego Arias
- Ali Caglayan
- Karl Palmskog
- Yannick Zakowski
- Calvin Beck
- Paolo Giarrusso
- Rodolphe Lepigre
SerAPI session
- What are SerAPI future plans?
Using nix for a Coq package
-
Cyril will do a demo of how to setup nix for a package, first on a package which is already configured (like mathcomp) then on a package which does not exist yet.
-
People are invited to try to do it at the same time. For this the prerequisite is to come with nix installed. I can come at 9:30 to try and help with the nix installation.
Participants
- Cyril Cohen
Standard Library Discussion
-
Thursday 3pm: Talk by Arthur Charguéraud talk "Obstacles to the Construction of a Standard Library for Coq".
-
Think at standard contents organized thematically
- As an experiment, gather contributors of contents about Boolean reasoning and about lists and see if they can converge in a common library (possibly providing several variants of the same notion, possibly providing several synonymous naming schemes, so as to support all possible needs and usages)
-
Typical basic contents missing
- n-ary operators (bigops)
- basic category theory, basic monadic reasoning
- basic groupoid properties of equality
-
Adopt "standard" notations for:
- pairs and dependent pairs
existT
:(t;..;u)
(Prelude) and(t;..;u:>T)
,{{t,..,u}}
,[t&..&u]
(deptacs),"exI(t,u)
(NuPrlInCoq)- nested
sigT
: introduce a notationsigma binders, T
? (works very well in MetaCoq) projT1
andprojT2
:t.1
andt.2
? (alternative: T.\pi1, T.\pi2 in MetaCoq)fst
andsnd
:t.(fst)
andt.(snd)
,t.1
andt.2
(std++)proj1_sig
:`t
(std++)exist
:t↾p
(std++)- notation for projecting p-component out of n?
- introduce another notation than
*
and+
forprod
(ugly to add a%type
to disambiguate frommul
andadd
)? In MetaCoq we use \times, and \sum for sigmas (existT). Also reuse the n-ary variants of mathcomp:[x t1, t2 & t3]
,[&& t1, t2 & t3]
...?
- arithmetic
- successors:
.+1
,.+2
, ... (MathComp, reused in HoTT)
- successors:
- equality
- add an equality scope (as in HoTT)?
eq_rect
/transport
:rew p in t'
andrew [P] p in t'
(Prelude),p#t
(HoTT, UniMath)eq_trans
:p@q
(HoTT, UniMath),p•q
(HoTT),eq_sym
:p^
(HoTT),!p
(UniMath)eq_refl
:1
(HoTT)f_equal
?- dependent pairs of equality: "(=t;..;u)" (Prelude)
- extensional equality:
f =1 g
(MathComp)
- lists, sequences, vectors
n-vector
, orn-tuple
(MathComp) for vectors?- several notations in std++
- set-theoretic operators
- several notations in std++, tlc
- booleans
orb
:t(+)u
(MathComp), `t
- monadic reasoning
- several notations in ext-lib
- general
- provide
if t is pat then u else v
by default? - composition: provide a notation by default:
f o g
,f ∘ g
(std++, UniMath),f ⚬ g
(the former would block variableo
though)? ...
- provide
- pairs and dependent pairs
-
Activating standard coercions by default? (Note that at some time, the decision was that it was making the pedagogy of Coq more complicated and Coq prelude removed its coercions)
-
Use Unicode more widely in basic contents?
-
Formalizing naming schemes, supporting synonyms?
-
Provide more basic tactics?
-
Standardizing the Prelude: What goes in or out?
- Aim for compatibility
- Probably needs to shrink
- Plugins need to be more independent from stdlib